Skip to content

Commit

Permalink
test(core): Test setting active organization by slug
Browse files Browse the repository at this point in the history
  • Loading branch information
wobsoriano committed Jul 25, 2024
1 parent 64c43cc commit 1228b43
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 2 deletions.
40 changes: 40 additions & 0 deletions packages/clerk-js/src/core/__tests__/clerk.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,46 @@ describe('Clerk singleton', () => {
await sut.setActive({ session: mockSession as any as ActiveSessionResource });
});

it('sets active organization by slug', async () => {
const mockSession2 = {
id: '1',
status: 'active',
user: {
organizationMemberships: [
{
id: 'orgmem_id',
organization: {
id: 'org_id',
slug: 'some-org-slug',
},
},
],
},
touch: jest.fn(),
getToken: jest.fn(),
};
mockClientFetch.mockReturnValue(Promise.resolve({ activeSessions: [mockSession2] }));
const sut = new Clerk(productionPublishableKey);
await sut.load();

mockSession2.touch.mockImplementationOnce(() => {
sut.session = mockSession2 as any;
return Promise.resolve();
});
mockSession2.getToken.mockImplementation(() => {
return 'mocked-token';
});

await sut.setActive({ organization: 'some-org-slug' });

await waitFor(() => {
expect(mockSession2.touch).toHaveBeenCalled();
expect(mockSession2.getToken).toHaveBeenCalled();
expect((mockSession2 as any as ActiveSessionResource)?.lastActiveOrganizationId).toEqual('org_id');
expect(sut.session).toMatchObject(mockSession2);
});
});

it('calls __unstable__onAfterSetActive after beforeEmit and session.touch', async () => {
const beforeEmitMock = jest.fn();
mockSession.touch.mockReturnValueOnce(Promise.resolve());
Expand Down
6 changes: 4 additions & 2 deletions packages/clerk-js/src/core/clerk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -708,16 +708,18 @@ export class Clerk implements ClerkInterface {
// However, if the `organization` parameter is not given (i.e. `undefined`), we want
// to keep the organization id that the session had.
const shouldSwitchOrganization = organization !== undefined;
console.log('hello');
if (newSession && shouldSwitchOrganization) {
console.log('world', organization);
const organizationIdOrSlug = typeof organization === 'string' ? organization : organization?.id;

if (isOrganizationId(organizationIdOrSlug!)) {
newSession.lastActiveOrganizationId = organizationIdOrSlug || null;
} else {
const matchingOrganization = newSession?.user?.organizationMemberships.find(
const matchingOrganization = newSession.user.organizationMemberships.find(
mem => mem.organization.slug === organizationIdOrSlug,
);
newSession.lastActiveOrganizationId = matchingOrganization?.organization?.id || null;
newSession.lastActiveOrganizationId = matchingOrganization?.organization.id || null;
}
}

Expand Down

0 comments on commit 1228b43

Please sign in to comment.