Skip to content

Commit a50b190

Browse files
committed
Add UI tests
1 parent f7a4850 commit a50b190

3 files changed

Lines changed: 130 additions & 6 deletions

File tree

packages/clerk-js/src/core/resources/Organization.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import type {
2121
OrganizationMembershipRequestJSON,
2222
OrganizationMembershipRequestResource,
2323
OrganizationResource,
24-
RoleJSON,
2524
SetOrganizationLogoParams,
2625
UpdateMembershipParams,
2726
UpdateOrganizationParams,
@@ -96,11 +95,7 @@ export class Organization extends BaseResource implements OrganizationResource {
9695
forceUpdateClient: true,
9796
},
9897
).then(res => {
99-
const {
100-
data: roles,
101-
total_count,
102-
has_role_set_migration,
103-
} = res?.response as unknown as ClerkPaginatedResponse<RoleJSON> & { has_role_set_migration?: boolean };
98+
const { data: roles, total_count, has_role_set_migration } = res?.response as unknown as GetRolesResponse;
10499

105100
return {
106101
data: roles.map(role => new Role(role)),

packages/ui/src/components/OrganizationProfile/__tests__/InviteMembersPage.test.tsx

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,57 @@ describe('InviteMembersPage', () => {
2121
clearFetchCache();
2222
});
2323

24+
it('disables the role select when role set migration is in progress', async () => {
25+
const { wrapper, fixtures } = await createFixtures(f => {
26+
f.withOrganizations();
27+
f.withUser({
28+
email_addresses: ['test@clerk.com'],
29+
organization_memberships: [{ name: 'Org1', role: 'admin' }],
30+
});
31+
});
32+
33+
fixtures.clerk.organization?.getInvitations.mockRejectedValue(null);
34+
fixtures.clerk.organization?.getRoles.mockResolvedValue({
35+
total_count: 2,
36+
has_role_set_migration: true,
37+
data: [
38+
{
39+
pathRoot: '',
40+
reload: vi.fn(),
41+
id: 'member',
42+
key: 'member',
43+
name: 'member',
44+
description: '',
45+
permissions: [],
46+
createdAt: new Date(),
47+
updatedAt: new Date(),
48+
},
49+
{
50+
pathRoot: '',
51+
reload: vi.fn(),
52+
id: 'admin',
53+
key: 'admin',
54+
name: 'Admin',
55+
description: '',
56+
permissions: [],
57+
createdAt: new Date(),
58+
updatedAt: new Date(),
59+
},
60+
],
61+
});
62+
63+
const { getByRole } = render(
64+
<Action.Root>
65+
<InviteMembersScreen />
66+
</Action.Root>,
67+
{ wrapper },
68+
);
69+
70+
await waitFor(() => {
71+
expect(getByRole('button', { name: /select role/i })).toBeDisabled();
72+
});
73+
});
74+
2475
it('renders the component', async () => {
2576
const { wrapper, fixtures } = await createFixtures(f => {
2677
f.withOrganizations();

packages/ui/src/components/OrganizationProfile/__tests__/OrganizationMembers.test.tsx

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,84 @@ describe('OrganizationMembers', () => {
561561
await waitFor(() => expect(getByRole('button', { name: 'Managed Admin' })).toBeDisabled());
562562
});
563563

564+
it('disables the role select when role set migration is in progress', async () => {
565+
const membersList: OrganizationMembershipResource[] = [
566+
createFakeMember({
567+
id: '1',
568+
orgId: '1',
569+
role: 'admin',
570+
identifier: 'test_user1',
571+
firstName: 'First1',
572+
lastName: 'Last1',
573+
createdAt: new Date('2022-01-01'),
574+
}),
575+
createFakeMember({
576+
id: '2',
577+
orgId: '1',
578+
role: 'member',
579+
identifier: 'test_user2',
580+
firstName: 'First2',
581+
lastName: 'Last2',
582+
createdAt: new Date('2022-01-01'),
583+
}),
584+
];
585+
const { wrapper, fixtures } = await createFixtures(f => {
586+
f.withOrganizations();
587+
f.withUser({
588+
email_addresses: ['test@clerk.com'],
589+
organization_memberships: [{ name: 'Org1', id: '1' }],
590+
});
591+
});
592+
593+
fixtures.clerk.organization?.getInvitations.mockRejectedValue(null);
594+
595+
fixtures.clerk.organization?.getMemberships.mockReturnValue(
596+
Promise.resolve({
597+
data: membersList,
598+
total_count: 2,
599+
}),
600+
);
601+
602+
fixtures.clerk.organization?.getRoles.mockResolvedValue({
603+
total_count: 2,
604+
has_role_set_migration: true,
605+
data: [
606+
{
607+
pathRoot: '',
608+
reload: vi.fn(),
609+
id: 'member',
610+
key: 'member',
611+
name: 'Member',
612+
description: '',
613+
permissions: [],
614+
createdAt: new Date(),
615+
updatedAt: new Date(),
616+
},
617+
{
618+
pathRoot: '',
619+
reload: vi.fn(),
620+
id: 'admin',
621+
key: 'admin',
622+
name: 'Admin',
623+
description: '',
624+
permissions: [],
625+
createdAt: new Date(),
626+
updatedAt: new Date(),
627+
},
628+
],
629+
});
630+
631+
const { container, queryAllByRole } = render(<OrganizationMembers />, { wrapper });
632+
633+
await waitForLoadingCompleted(container);
634+
635+
const adminButtons = queryAllByRole('button', { name: 'Admin' });
636+
const memberButtons = queryAllByRole('button', { name: 'Member' });
637+
638+
adminButtons.forEach(button => expect(button).toBeDisabled());
639+
memberButtons.forEach(button => expect(button).toBeDisabled());
640+
});
641+
564642
describe('InviteMembersScreen', () => {
565643
it('shows the invite screen when user clicks on Invite button', async () => {
566644
const { wrapper, fixtures } = await createFixtures(f => {

0 commit comments

Comments
 (0)