Skip to content

Commit e9385fb

Browse files
authored
chore: Add tests for publisher members (#5115)
1 parent 48df839 commit e9385fb

2 files changed

Lines changed: 146 additions & 0 deletions

File tree

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import { render, screen } from "@testing-library/react";
2+
import "@testing-library/jest-dom";
3+
import userEvent from "@testing-library/user-event";
4+
5+
import InvitesTable from "../InvitesTable";
6+
7+
import { Invite } from "../../../types/shared";
8+
9+
const mockInvites: Invite[] = [
10+
{
11+
status: "Expired",
12+
email: "john.doe@canonical.com",
13+
roles: ["admin"],
14+
"expiration-date": "2025-02-15T14:52:17Z",
15+
},
16+
];
17+
18+
function renderComponent() {
19+
render(
20+
<InvitesTable
21+
invites={mockInvites}
22+
refetchInvites={jest.fn()}
23+
setShowErrorNotification={jest.fn()}
24+
setShowSuccessNotification={jest.fn()}
25+
setNotificationText={jest.fn()}
26+
/>,
27+
);
28+
}
29+
30+
describe("InvitesTable", () => {
31+
test("renders table columns", () => {
32+
renderComponent();
33+
34+
expect(
35+
screen.getByRole("columnheader", { name: "Status" }),
36+
).toBeInTheDocument();
37+
38+
expect(
39+
screen.getByRole("columnheader", { name: "Email" }),
40+
).toBeInTheDocument();
41+
42+
expect(
43+
screen.getByRole("columnheader", { name: "Expires" }),
44+
).toBeInTheDocument();
45+
46+
expect(
47+
screen.getByRole("columnheader", { name: "Roles" }),
48+
).toBeInTheDocument();
49+
});
50+
51+
test("displays members in table", () => {
52+
renderComponent();
53+
expect(screen.getByText("john.doe@canonical.com")).toBeInTheDocument();
54+
});
55+
56+
test("opens action modal", async () => {
57+
const user = userEvent.setup();
58+
renderComponent();
59+
60+
await user.click(screen.getByRole("button", { name: "Reopen" }));
61+
expect(
62+
screen.getByRole("heading", { name: "Reopen invite" }),
63+
).toBeInTheDocument();
64+
});
65+
});
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import { render, screen } from "@testing-library/react";
2+
import "@testing-library/jest-dom";
3+
4+
import MembersTable from "../MembersTable";
5+
6+
import type { Member } from "../../../types/shared";
7+
8+
const mockMembers: Member[] = [
9+
{
10+
displayname: "John Doe",
11+
email: "john.doe@canonical.com",
12+
id: "id-1",
13+
roles: ["admin"],
14+
username: "johndoe",
15+
current_user: true,
16+
},
17+
{
18+
displayname: "Jane Doe",
19+
email: "jane.doe@canonical.com",
20+
id: "id-2",
21+
roles: ["admin"],
22+
username: "janedoe",
23+
current_user: false,
24+
},
25+
];
26+
27+
function renderComponent(members?: Member[]) {
28+
render(
29+
<MembersTable
30+
filteredMembers={members || mockMembers}
31+
changedMembers={members || mockMembers}
32+
setChangedMembers={jest.fn()}
33+
/>,
34+
);
35+
}
36+
37+
describe("MembersTable", () => {
38+
test("renders table columns", () => {
39+
renderComponent();
40+
41+
expect(
42+
screen.getByRole("columnheader", { name: "Users" }),
43+
).toBeInTheDocument();
44+
45+
expect(
46+
screen.getByRole("columnheader", { name: "Email" }),
47+
).toBeInTheDocument();
48+
49+
expect(
50+
screen.getByRole("columnheader", { name: /Admin/ }),
51+
).toBeInTheDocument();
52+
53+
expect(
54+
screen.getByRole("columnheader", { name: /Reviewer/ }),
55+
).toBeInTheDocument();
56+
57+
expect(
58+
screen.getByRole("columnheader", { name: /Viewer/ }),
59+
).toBeInTheDocument();
60+
61+
expect(
62+
screen.getByRole("columnheader", { name: /Publisher/ }),
63+
).toBeInTheDocument();
64+
});
65+
66+
test("displays members in table", () => {
67+
renderComponent();
68+
expect(screen.getByText(mockMembers[0].displayname)).toBeInTheDocument();
69+
expect(screen.getByText(mockMembers[0].email)).toBeInTheDocument();
70+
expect(screen.getByText(mockMembers[1].displayname)).toBeInTheDocument();
71+
expect(screen.getByText(mockMembers[1].email)).toBeInTheDocument();
72+
});
73+
74+
test("checks the roles", () => {
75+
renderComponent([mockMembers[0]]);
76+
expect(screen.getByLabelText("Admin")).toBeChecked();
77+
expect(screen.getByLabelText("Reviewer")).not.toBeChecked();
78+
expect(screen.getByLabelText("Viewer")).not.toBeChecked();
79+
expect(screen.getByLabelText("Publisher")).not.toBeChecked();
80+
});
81+
});

0 commit comments

Comments
 (0)