@@ -2530,3 +2530,71 @@ def fail_for_users_b_and_e(user, user_type, groupreassign=None):
25302530 }
25312531
25322532 user_utils .await_mas_application_availability .assert_has_calls ([call ("manage" ), call ("iot" )])
2533+
2534+
2535+ def _setup_post_9_1_user_utils (user_utils , user_id , mas_workspace_application_ids ):
2536+ """Helper: wire up mocks for a post-9.1 create_initial_user_for_saas call."""
2537+ resource_id = f"_{ user_id } _resource_id"
2538+ user_utils .get_or_create_user = MagicMock (return_value = (resource_id , {}))
2539+ user_utils .link_user_to_local_idp = MagicMock ()
2540+ user_utils .get_mas_applications_in_workspace = MagicMock (return_value = list (map (lambda x : {"id" : x }, mas_workspace_application_ids )))
2541+ user_utils .await_mas_application_availability = MagicMock ()
2542+ user_utils .set_user_application_permission = MagicMock ()
2543+ user_utils .check_user_sync = MagicMock ()
2544+ manage_api_key = "manage_api_key" # pragma: allowlist secret
2545+ user_utils .create_or_get_manage_api_key_for_user = MagicMock (return_value = manage_api_key )
2546+ user_utils .add_user_to_manage_group = MagicMock ()
2547+ user_utils .set_user_group_reassignment_auth = MagicMock ()
2548+ return resource_id , manage_api_key
2549+
2550+
2551+ def test_create_initial_user_for_saas_post_9_1_manage_primary (user_utils ):
2552+ """Post-9.1 PRIMARY user: reassignment fires when workspace contains 'manage'."""
2553+ if Version (user_utils .mas_version ) < Version ("9.1" ):
2554+ pytest .skip ("post-9.1 only" )
2555+
2556+ user_id = "primaryuser"
2557+ resource_id , manage_api_key = _setup_post_9_1_user_utils (user_utils , user_id , ["manage" , "iot" ])
2558+ groupreassign = [{"groupname" : "USERMANAGEMENT" }]
2559+
2560+ user_utils .create_initial_user_for_saas (
2561+ {"email" : f"{ user_id } @acme.com" , "given_name" : "Primary" , "family_name" : "User" , "id" : user_id },
2562+ "PRIMARY" ,
2563+ groupreassign ,
2564+ )
2565+
2566+ user_utils .set_user_group_reassignment_auth .assert_called_once_with (user_id , resource_id , groupreassign , manage_api_key )
2567+
2568+
2569+ def test_create_initial_user_for_saas_post_9_1_facilities_primary (user_utils ):
2570+ """Post-9.1 PRIMARY user: reassignment fires when workspace contains 'facilities' (no 'manage')."""
2571+ if Version (user_utils .mas_version ) < Version ("9.1" ):
2572+ pytest .skip ("post-9.1 only" )
2573+
2574+ user_id = "primaryuser"
2575+ resource_id , manage_api_key = _setup_post_9_1_user_utils (user_utils , user_id , ["facilities" , "iot" ])
2576+ groupreassign = [{"groupname" : "USERMANAGEMENT" }]
2577+
2578+ user_utils .create_initial_user_for_saas (
2579+ {"email" : f"{ user_id } @acme.com" , "given_name" : "Primary" , "family_name" : "User" , "id" : user_id },
2580+ "PRIMARY" ,
2581+ groupreassign ,
2582+ )
2583+
2584+ user_utils .set_user_group_reassignment_auth .assert_called_once_with (user_id , resource_id , groupreassign , manage_api_key )
2585+
2586+
2587+ def test_create_initial_user_for_saas_post_9_1_facilities_secondary (user_utils ):
2588+ """Post-9.1 SECONDARY user: reassignment is NOT called even when workspace contains 'facilities'."""
2589+ if Version (user_utils .mas_version ) < Version ("9.1" ):
2590+ pytest .skip ("post-9.1 only" )
2591+
2592+ user_id = "secondaryuser"
2593+ _setup_post_9_1_user_utils (user_utils , user_id , ["facilities" , "iot" ])
2594+
2595+ user_utils .create_initial_user_for_saas (
2596+ {"email" : f"{ user_id } @acme.com" , "given_name" : "Secondary" , "family_name" : "User" , "id" : user_id },
2597+ "SECONDARY" ,
2598+ )
2599+
2600+ user_utils .set_user_group_reassignment_auth .assert_not_called ()
0 commit comments