Skip to content

Commit

Permalink
fix: hide add/edit user in Templates team and for archived members (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
jessicamcinchak authored Sep 17, 2024
1 parent f28786f commit 9135fb8
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,13 @@ import { MembersTable } from "./components/MembersTable";
import { TeamMember } from "./types";

export const TeamMembers = () => {
const teamMembers = useStore((state) => state.teamMembers);
const [teamMembers, teamSlug] = useStore((state) => [
state.teamMembers,
state.teamSlug,
]);

// All users are automatically added to Templates team via a db trigger, we never want to manually add/edit them
const isNotTemplatesTeam = teamSlug !== "templates";

const teamMembersByRole = groupBy(teamMembers, "role") as Record<
Role,
Expand All @@ -42,7 +48,7 @@ export const TeamMembers = () => {
<Typography variant="body1">
Editors have access to edit your services.
</Typography>
<MembersTable members={activeMembers} showAddMemberButton />
<MembersTable members={activeMembers} showAddMemberButton={isNotTemplatesTeam} showEditMemberButton={isNotTemplatesTeam} />
</SettingsSection>
<SettingsSection>
<Typography variant="h2" component="h3" gutterBottom>
Expand All @@ -51,7 +57,7 @@ export const TeamMembers = () => {
<Typography variant="body1">
Admins have editor access across all teams.
</Typography>
<MembersTable members={platformAdmins} />
<MembersTable members={platformAdmins} showEditMemberButton={isNotTemplatesTeam} />
</SettingsSection>
{archivedMembers.length > 0 && (
<SettingsSection>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ const EditUserButton = styled(Button)(({ theme }) => ({
export const MembersTable = ({
members,
showAddMemberButton,
showEditMemberButton,
}: MembersTableProps) => {
const [showAddModal, setShowAddModal] = useState<boolean>(false);
const [showUpdateModal, setShowUpdateModal] = useState<boolean>(false);
Expand Down Expand Up @@ -126,19 +127,21 @@ export const MembersTable = ({
/>
</TableCell>
<TableCell>{member.email}</TableCell>
<Permission.IsPlatformAdmin>
<TableCell>
<EditUserButton
onClick={() => {
setShowUpdateModal(true);
setInitialValues(member);
}}
data-testId={`edit-button-${i}`}
>
Edit
</EditUserButton>
</TableCell>
</Permission.IsPlatformAdmin>
{showEditMemberButton && (
<Permission.IsPlatformAdmin>
<TableCell>
<EditUserButton
onClick={() => {
setShowUpdateModal(true);
setInitialValues(member);
}}
data-testId={`edit-button-${i}`}
>
Edit
</EditUserButton>
</TableCell>
</Permission.IsPlatformAdmin>
)}
</StyledTableRow>
))}
{showAddMemberButton && (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ let initialState: FullStore;

describe("when a user presses 'add a new editor'", () => {
beforeEach(async () => {
useStore.setState({ teamMembers: mockTeamMembersData });
useStore.setState({ teamMembers: mockTeamMembersData, teamSlug: "planx" });
const { user } = await setupTeamMembersScreen();

const teamEditorsTable = screen.getByTestId("team-editors");
Expand All @@ -46,7 +46,7 @@ describe("when a user presses 'add a new editor'", () => {
describe("when a user fills in the 'add a new editor' form correctly", () => {
afterAll(() => useStore.setState(initialState));
beforeEach(async () => {
useStore.setState({ teamMembers: mockTeamMembersData });
useStore.setState({ teamMembers: mockTeamMembersData, teamSlug: "planx" });
const { user } = await setupTeamMembersScreen();
await userTriesToAddNewEditor(user);
});
Expand Down Expand Up @@ -92,3 +92,16 @@ describe("when the addNewEditor modal is rendered", () => {
expect(results).toHaveNoViolations();
});
});

describe("'add a new editor' button is hidden from Templates team", () => {
beforeEach(async() => {
useStore.setState({ teamMembers: mockTeamMembersData, teamSlug: "templates" });
});

it("hides the button on the Templates team", async () => {
const { user: _user } = await setupTeamMembersScreen();
const teamEditorsTable = screen.getByTestId("team-editors");
const addEditorButton = within(teamEditorsTable).queryByText("Add a new editor");
expect(addEditorButton).not.toBeInTheDocument();
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ describe("when a user presses 'edit button'", () => {
useStore.setState({
teamMembers: mockTeamMembersData,
user: mockPlatformAdminUser,
teamSlug: "planx",
});

const { user } = await setupTeamMembersScreen();
Expand Down Expand Up @@ -56,7 +57,7 @@ describe("when a user presses 'edit button'", () => {

describe("when a user deletes an input value", () => {
beforeEach(async () => {
useStore.setState({ teamMembers: mockTeamMembersData });
useStore.setState({ teamMembers: mockTeamMembersData, teamSlug: "planx" });
});
it("displays an error message when clicking away", async () => {
const { user } = await setupTeamMembersScreen();
Expand Down Expand Up @@ -92,7 +93,7 @@ describe("when a user deletes an input value", () => {

describe("when a user updates a field correctly", () => {
beforeEach(async () => {
useStore.setState({ teamMembers: mockTeamMembersData });
useStore.setState({ teamMembers: mockTeamMembersData, teamSlug: "planx" });
const { user } = await setupTeamMembersScreen();

const teamEditorsTable = screen.getByTestId("team-editors");
Expand Down Expand Up @@ -124,7 +125,7 @@ describe("when a user updates a field correctly", () => {

describe("when a user correctly updates an Editor", () => {
beforeEach(async () => {
useStore.setState({ teamMembers: mockTeamMembersData });
useStore.setState({ teamMembers: mockTeamMembersData, teamSlug: "planx" });
const { user } = await setupTeamMembersScreen();

const teamEditorsTable = screen.getByTestId("team-editors");
Expand Down Expand Up @@ -164,11 +165,25 @@ describe("when a user correctly updates an Editor", () => {
});
});

describe("'edit' button is hidden from Templates team", () => {
beforeEach(async() => {
useStore.setState({ teamMembers: mockTeamMembersData, user: mockPlatformAdminUser, teamSlug: "templates" });
});

it("hides the button on the Templates team", async () => {
const { user: _user } = await setupTeamMembersScreen();
const teamEditorsTable = screen.getByTestId("team-editors");
const editButton = within(teamEditorsTable).queryByTestId("edit-button-0");
expect(editButton).not.toBeInTheDocument();
});
});

describe("when a user is not a platform admin", () => {
beforeEach(async () => {
useStore.setState({
teamMembers: mockTeamMembersData,
user: mockPlainUser,
team: "planx",
});

await setupTeamMembersScreen();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ export type TeamMember = Omit<User, "teams" | "isPlatformAdmin"> & {
export interface MembersTableProps {
members: TeamMember[];
showAddMemberButton?: boolean;
showEditMemberButton?: boolean;
}
export interface AddNewEditorModalProps {
showModal: boolean;
Expand Down

0 comments on commit 9135fb8

Please sign in to comment.