Skip to content

Commit be845fc

Browse files
committed
test(clerk-js): Display list of invitation in OrganizationSwitcher
1 parent 6e71002 commit be845fc

File tree

3 files changed

+82
-5
lines changed

3 files changed

+82
-5
lines changed

packages/clerk-js/src/ui/components/OrganizationSwitcher/OtherOrganizationActions.tsx

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -165,11 +165,6 @@ export const OrganizationActionList = (props: OrganizationActionListProps) => {
165165
<Flex
166166
direction={'col'}
167167
elementDescriptor={descriptors.organizationSwitcherPopoverInvitationActions}
168-
sx={[
169-
t => ({
170-
backgroundColor: t.colors.$blackAlpha50,
171-
}),
172-
]}
173168
>
174169
<Text
175170
variant={'smallRegular'}
@@ -182,6 +177,7 @@ export const OrganizationActionList = (props: OrganizationActionListProps) => {
182177
alignItems: 'center',
183178
}),
184179
]}
180+
// Handle plurals
185181
localizationKey={localizationKeys(
186182
(userInvitations.count ?? 0) > 1
187183
? 'organizationSwitcher.invitationCountLabel_many'

packages/clerk-js/src/ui/components/OrganizationSwitcher/__tests__/OrganizationSwitcher.test.tsx

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import React from 'react';
55
import { render } from '../../../../testUtils';
66
import { bindCreateFixtures } from '../../../utils/test/createFixtures';
77
import { OrganizationSwitcher } from '../OrganizationSwitcher';
8+
import { createFakeUserOrganizationInvitations } from './utlis';
89

910
const { createFixtures } = bindCreateFixtures('OrganizationSwitcher');
1011

@@ -131,6 +132,50 @@ describe('OrganizationSwitcher', () => {
131132
expect(queryByRole('button', { name: 'Create Organization' })).not.toBeInTheDocument();
132133
});
133134

135+
it('displays a list of user invitations', async () => {
136+
const { wrapper, fixtures } = await createFixtures(f => {
137+
f.withOrganizations();
138+
f.withUser({
139+
email_addresses: ['test@clerk.dev'],
140+
organization_memberships: [{ name: 'Org1', role: 'basic_member' }],
141+
create_organization_enabled: false,
142+
});
143+
});
144+
fixtures.clerk.user?.getOrganizationInvitations.mockReturnValueOnce(
145+
Promise.resolve({
146+
data: [
147+
createFakeUserOrganizationInvitations({
148+
id: '1',
149+
emailAddress: 'one@clerk.com',
150+
publicOrganizationData: {
151+
name: 'OrgOne',
152+
},
153+
}),
154+
createFakeUserOrganizationInvitations({
155+
id: '2',
156+
emailAddress: 'two@clerk.com',
157+
publicOrganizationData: { name: 'OrgTwo' },
158+
}),
159+
],
160+
total_count: 11,
161+
}),
162+
);
163+
const { queryByText, userEvent, getByRole } = render(<OrganizationSwitcher />, {
164+
wrapper,
165+
});
166+
167+
await userEvent.click(getByRole('button'));
168+
169+
expect(fixtures.clerk.user?.getOrganizationInvitations).toHaveBeenCalledWith({
170+
initialPage: 1,
171+
pageSize: 10,
172+
status: 'pending',
173+
});
174+
expect(queryByText('OrgOne')).toBeInTheDocument();
175+
expect(queryByText('OrgTwo')).toBeInTheDocument();
176+
});
177+
178+
it.todo('switches between active organizations when one is clicked');
134179
it("switches between active organizations when one is clicked'", async () => {
135180
const { wrapper, props, fixtures } = await createFixtures(f => {
136181
f.withOrganizations();
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { MembershipRole, OrganizationInvitationStatus, UserOrganizationInvitationResource } from '@clerk/types';
2+
import { jest } from '@jest/globals';
3+
4+
type FakeOrganizationParams = {
5+
id: string;
6+
createdAt?: Date;
7+
emailAddress: string;
8+
role?: MembershipRole;
9+
status?: OrganizationInvitationStatus;
10+
publicOrganizationData?: { hasImage?: boolean; id?: string; imageUrl?: string; name?: string; slug?: string };
11+
};
12+
13+
export const createFakeUserOrganizationInvitations = (
14+
params: FakeOrganizationParams,
15+
): UserOrganizationInvitationResource => {
16+
return {
17+
pathRoot: '',
18+
emailAddress: params.emailAddress,
19+
publicOrganizationData: {
20+
hasImage: false,
21+
id: '',
22+
imageUrl: '',
23+
name: '',
24+
slug: '',
25+
...params.publicOrganizationData,
26+
},
27+
role: params.role || 'basic_member',
28+
status: params.status || 'pending',
29+
id: params.id,
30+
createdAt: params?.createdAt || new Date(),
31+
updatedAt: new Date(),
32+
publicMetadata: {},
33+
accept: jest.fn() as any,
34+
reload: jest.fn() as any,
35+
};
36+
};

0 commit comments

Comments
 (0)