@@ -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