66from django .test import TestCase , override_settings
77
88from enterprise .filters .accounts import AccountSettingsReadOnlyFieldsStep
9- from enterprise .models import EnterpriseCustomerUser
9+ from enterprise .models import EnterpriseCustomerIdentityProvider , EnterpriseCustomerUser
1010
1111
1212class TestAccountSettingsReadOnlyFieldsStep (TestCase ):
@@ -33,8 +33,9 @@ def test_returns_unchanged_readonly_fields_when_no_enterprise_user(self, mock_ob
3333 mock_objects .select_related .return_value .get .side_effect = EnterpriseCustomerUser .DoesNotExist
3434 step = self ._make_step ()
3535 fields = set ()
36- result = step .run_filter (readonly_fields = fields , user = self ._mock_user ())
37- self .assertEqual (result , {"readonly_fields" : fields })
36+ user = self ._mock_user ()
37+ result = step .run_filter (readonly_fields = fields , user = user )
38+ self .assertEqual (result , {"readonly_fields" : fields , "user" : user })
3839
3940 @patch ('enterprise.filters.accounts.UserSocialAuth' )
4041 @patch ('enterprise.filters.accounts.EnterpriseCustomerIdentityProvider.objects' )
@@ -100,3 +101,59 @@ def test_name_not_added_without_social_auth_record(
100101
101102 self .assertNotIn ("name" , result ["readonly_fields" ])
102103 self .assertIn ("email" , result ["readonly_fields" ])
104+
105+ @patch ('enterprise.filters.accounts.EnterpriseCustomerIdentityProvider.objects' )
106+ @patch ('enterprise.filters.accounts.EnterpriseCustomerUser.objects' )
107+ def test_returns_unchanged_readonly_fields_when_no_idp_record (
108+ self , mock_ecu_objects , mock_idp_objects
109+ ):
110+ """
111+ When the enterprise customer has no linked identity provider,
112+ readonly_fields is returned unchanged.
113+ """
114+ user = self ._mock_user ()
115+ mock_ecu_objects .select_related .return_value .get .return_value = MagicMock ()
116+ mock_idp_objects .get .side_effect = EnterpriseCustomerIdentityProvider .DoesNotExist
117+ step = self ._make_step ()
118+ fields = {'existing_field' }
119+ result = step .run_filter (readonly_fields = fields , user = user )
120+ self .assertEqual (result ["readonly_fields" ], fields )
121+
122+ @patch ('enterprise.filters.accounts.EnterpriseCustomerIdentityProvider.objects' )
123+ @patch ('enterprise.filters.accounts.EnterpriseCustomerUser.objects' )
124+ def test_returns_unchanged_readonly_fields_when_third_party_auth_unavailable (
125+ self , mock_ecu_objects , mock_idp_objects
126+ ):
127+ """
128+ When third_party_auth is not installed (None), readonly_fields is returned unchanged.
129+ """
130+ user = self ._mock_user ()
131+ mock_ecu_objects .select_related .return_value .get .return_value = MagicMock ()
132+ mock_idp_objects .get .return_value = MagicMock (provider_id = 'saml-test' )
133+ step = self ._make_step ()
134+ fields = {'existing_field' }
135+ with patch ('enterprise.filters.accounts.third_party_auth' , None ):
136+ result = step .run_filter (readonly_fields = fields , user = user )
137+ self .assertEqual (result ["readonly_fields" ], fields )
138+
139+ @patch ('enterprise.filters.accounts.EnterpriseCustomerIdentityProvider.objects' )
140+ @patch ('enterprise.filters.accounts.EnterpriseCustomerUser.objects' )
141+ def test_returns_unchanged_readonly_fields_when_sync_not_enabled (
142+ self , mock_ecu_objects , mock_idp_objects
143+ ):
144+ """
145+ When the identity provider exists but sync_learner_profile_data is False,
146+ readonly_fields is returned unchanged.
147+ """
148+ user = self ._mock_user ()
149+ mock_ecu_objects .select_related .return_value .get .return_value = MagicMock ()
150+ mock_idp_objects .get .return_value = MagicMock (provider_id = 'saml-test' )
151+ mock_identity_provider = MagicMock ()
152+ mock_identity_provider .sync_learner_profile_data = False
153+ mock_tpa = MagicMock ()
154+ mock_tpa .provider .Registry .get .return_value = mock_identity_provider
155+ step = self ._make_step ()
156+ fields = {'existing_field' }
157+ with patch ('enterprise.filters.accounts.third_party_auth' , mock_tpa ):
158+ result = step .run_filter (readonly_fields = fields , user = user )
159+ self .assertEqual (result ["readonly_fields" ], fields )
0 commit comments