Skip to content

Commit ad20522

Browse files
committed
Backport enable orgs prompt to core 3
1 parent 8dc70eb commit ad20522

File tree

27 files changed

+1424
-218
lines changed

27 files changed

+1424
-218
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ out
88
**/dist/*
99
**/build/*
1010
packages/*/dist/**
11+
**/.pnpm-store/**
1112

1213
# dependencies
1314
node_modules

packages/clerk-js/src/core/__tests__/clerk.test.ts

Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2406,4 +2406,195 @@ describe('Clerk singleton', () => {
24062406
});
24072407
});
24082408
});
2409+
2410+
describe('__internal_attemptToEnableEnvironmentSetting', () => {
2411+
afterEach(() => {
2412+
mockEnvironmentFetch.mockReset();
2413+
mockClientFetch.mockReset();
2414+
});
2415+
2416+
describe('for organizations', () => {
2417+
it('does not open prompt if organizations is enabled in development', async () => {
2418+
mockEnvironmentFetch.mockReturnValue(
2419+
Promise.resolve({
2420+
userSettings: mockUserSettings,
2421+
displayConfig: mockDisplayConfig,
2422+
isSingleSession: () => false,
2423+
isProduction: () => false,
2424+
isDevelopmentOrStaging: () => true,
2425+
organizationSettings: {
2426+
enabled: true,
2427+
},
2428+
}),
2429+
);
2430+
2431+
const sut = new Clerk(productionPublishableKey);
2432+
2433+
const __internal_openEnableOrganizationsPromptSpy = vi.fn();
2434+
sut.__internal_openEnableOrganizationsPrompt = __internal_openEnableOrganizationsPromptSpy;
2435+
2436+
await sut.load();
2437+
2438+
const result = await sut.__internal_attemptToEnableEnvironmentSetting({
2439+
for: 'organizations',
2440+
caller: 'OrganizationSwitcher',
2441+
});
2442+
2443+
expect(result?.isEnabled).toBe(true);
2444+
expect(__internal_openEnableOrganizationsPromptSpy).not.toHaveBeenCalled();
2445+
});
2446+
2447+
it('does not open prompt if organizations is enabled in production', async () => {
2448+
mockEnvironmentFetch.mockReturnValue(
2449+
Promise.resolve({
2450+
userSettings: mockUserSettings,
2451+
displayConfig: mockDisplayConfig,
2452+
isSingleSession: () => false,
2453+
isProduction: () => true,
2454+
isDevelopmentOrStaging: () => true,
2455+
organizationSettings: {
2456+
enabled: true,
2457+
},
2458+
}),
2459+
);
2460+
2461+
const sut = new Clerk(productionPublishableKey);
2462+
2463+
const __internal_openEnableOrganizationsPromptSpy = vi.fn();
2464+
sut.__internal_openEnableOrganizationsPrompt = __internal_openEnableOrganizationsPromptSpy;
2465+
2466+
await sut.load();
2467+
2468+
const result = await sut.__internal_attemptToEnableEnvironmentSetting({
2469+
for: 'organizations',
2470+
caller: 'OrganizationSwitcher',
2471+
});
2472+
2473+
expect(result?.isEnabled).toBe(true);
2474+
expect(__internal_openEnableOrganizationsPromptSpy).not.toHaveBeenCalled();
2475+
});
2476+
2477+
it('opens prompt if organizations is disabled in development', async () => {
2478+
mockEnvironmentFetch.mockReturnValue(
2479+
Promise.resolve({
2480+
userSettings: mockUserSettings,
2481+
displayConfig: mockDisplayConfig,
2482+
isSingleSession: () => false,
2483+
isProduction: () => false,
2484+
isDevelopmentOrStaging: () => true,
2485+
organizationSettings: {
2486+
enabled: false,
2487+
},
2488+
}),
2489+
);
2490+
2491+
const sut = new Clerk(developmentPublishableKey);
2492+
2493+
const __internal_openEnableOrganizationsPromptSpy = vi.fn();
2494+
sut.__internal_openEnableOrganizationsPrompt = __internal_openEnableOrganizationsPromptSpy;
2495+
2496+
await sut.load();
2497+
2498+
const result = await sut.__internal_attemptToEnableEnvironmentSetting({
2499+
for: 'organizations',
2500+
caller: 'OrganizationSwitcher',
2501+
});
2502+
2503+
expect(result?.isEnabled).toBe(false);
2504+
expect(__internal_openEnableOrganizationsPromptSpy).toHaveBeenCalled();
2505+
});
2506+
2507+
it('does not open prompt if organizations is disabled in production', async () => {
2508+
mockEnvironmentFetch.mockReturnValue(
2509+
Promise.resolve({
2510+
userSettings: mockUserSettings,
2511+
displayConfig: mockDisplayConfig,
2512+
isSingleSession: () => false,
2513+
isProduction: () => false,
2514+
isDevelopmentOrStaging: () => true,
2515+
organizationSettings: {
2516+
enabled: false,
2517+
},
2518+
}),
2519+
);
2520+
2521+
const sut = new Clerk(productionPublishableKey);
2522+
2523+
const __internal_openEnableOrganizationsPromptSpy = vi.fn();
2524+
sut.__internal_openEnableOrganizationsPrompt = __internal_openEnableOrganizationsPromptSpy;
2525+
2526+
await sut.load();
2527+
2528+
const result = await sut.__internal_attemptToEnableEnvironmentSetting({
2529+
for: 'organizations',
2530+
caller: 'OrganizationSwitcher',
2531+
});
2532+
2533+
expect(result?.isEnabled).toBe(false);
2534+
expect(__internal_openEnableOrganizationsPromptSpy).not.toHaveBeenCalled();
2535+
});
2536+
2537+
// Handles case where environment gets enabled via BAPI, but it gets cached and the user is redirected to the choose-organization task
2538+
// The enable org prompt should not appear in the task screen since orgs have already been enabled
2539+
it('does not open prompt if organizations is disabled in development and session has choose-organization task', async () => {
2540+
const mockSession = {
2541+
id: '1',
2542+
remove: vi.fn(),
2543+
status: 'pending',
2544+
user: {},
2545+
touch: vi.fn(() => Promise.resolve()),
2546+
getToken: vi.fn(),
2547+
lastActiveToken: { getRawString: () => 'mocked-token' },
2548+
tasks: [{ key: 'choose-organization' }],
2549+
currentTask: { key: 'choose-organization' },
2550+
reload: vi.fn(() =>
2551+
Promise.resolve({
2552+
id: '1',
2553+
status: 'pending',
2554+
user: {},
2555+
tasks: [{ key: 'choose-organization' }],
2556+
currentTask: {
2557+
key: 'choose-organization',
2558+
},
2559+
}),
2560+
),
2561+
};
2562+
2563+
mockEnvironmentFetch.mockReturnValue(
2564+
Promise.resolve({
2565+
userSettings: mockUserSettings,
2566+
displayConfig: mockDisplayConfig,
2567+
isSingleSession: () => false,
2568+
isProduction: () => false,
2569+
isDevelopmentOrStaging: () => true,
2570+
organizationSettings: {
2571+
enabled: false,
2572+
},
2573+
}),
2574+
);
2575+
2576+
mockClientFetch.mockReturnValue(
2577+
Promise.resolve({
2578+
signedInSessions: [mockSession],
2579+
}),
2580+
);
2581+
2582+
const sut = new Clerk(developmentPublishableKey);
2583+
2584+
const __internal_openEnableOrganizationsPromptSpy = vi.fn();
2585+
sut.__internal_openEnableOrganizationsPrompt = __internal_openEnableOrganizationsPromptSpy;
2586+
2587+
await sut.load();
2588+
2589+
const result = await sut.__internal_attemptToEnableEnvironmentSetting({
2590+
for: 'organizations',
2591+
caller: 'OrganizationSwitcher',
2592+
});
2593+
2594+
// Contains the organization task, so the prompt should not be opened
2595+
expect(result?.isEnabled).toBe(true);
2596+
expect(__internal_openEnableOrganizationsPromptSpy).not.toHaveBeenCalled();
2597+
});
2598+
});
2599+
});
24092600
});

0 commit comments

Comments
 (0)