From 1228b43ca7c2e3489abc13c4f54e8bbb850702e3 Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Thu, 25 Jul 2024 16:58:45 -0700 Subject: [PATCH] test(core): Test setting active organization by slug --- .../clerk-js/src/core/__tests__/clerk.test.ts | 40 +++++++++++++++++++ packages/clerk-js/src/core/clerk.ts | 6 ++- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/packages/clerk-js/src/core/__tests__/clerk.test.ts b/packages/clerk-js/src/core/__tests__/clerk.test.ts index 84003db1a58..7a1d06a8bc7 100644 --- a/packages/clerk-js/src/core/__tests__/clerk.test.ts +++ b/packages/clerk-js/src/core/__tests__/clerk.test.ts @@ -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()); diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index 7a406f8502c..721c7101248 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -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; } }