@@ -165,6 +165,67 @@ def _test_superuser_access_shared_object(
165165 expected_status_codes = expected_status_codes ,
166166 )
167167
168+ def _test_sensitive_fields_visibility_on_shared_and_org_objects (
169+ self ,
170+ sensitive_fields ,
171+ shared_obj ,
172+ org_obj ,
173+ detailview_name ,
174+ listview_name ,
175+ organization ,
176+ org_admin = None ,
177+ super_user = None ,
178+ ):
179+ def assert_sensitive_fields_visibility (obj , user , should_be_visible = False ):
180+ token = self ._obtain_auth_token (user .username , "tester" )
181+ auth = {"HTTP_AUTHORIZATION" : f"Bearer { token } " }
182+ # List view
183+ listview_path = reverse (listview_name )
184+ response = self .client .get (listview_path , ** auth )
185+ self .assertEqual (response .status_code , 200 )
186+ results = (
187+ response .data
188+ if "results" not in response .data
189+ else response .data ["results" ]
190+ )
191+ for item in results :
192+ if str (item ["id" ]) == str (obj .pk ):
193+ break
194+ for field in sensitive_fields :
195+ self .assertEqual (
196+ field in item ,
197+ should_be_visible ,
198+ )
199+ # Detail view
200+ detailview_path = reverse (detailview_name , args = [obj .pk ])
201+ response = self .client .get (detailview_path , ** auth )
202+ self .assertEqual (response .status_code , 200 )
203+ for field in sensitive_fields :
204+ if should_be_visible :
205+ self .assertIn (field , response .data )
206+ else :
207+ self .assertNotIn (field , response .data )
208+
209+ org_admin = org_admin or self ._create_administrator (
210+ organizations = [organization ]
211+ )
212+ super_user = super_user or self ._get_admin ()
213+
214+ with self .subTest ("Org admin should not see sensitive fields in shared object" ):
215+ assert_sensitive_fields_visibility (
216+ shared_obj , org_admin , should_be_visible = False
217+ )
218+
219+ with self .subTest ("Org admin should see sensitive fields in org object" ):
220+ assert_sensitive_fields_visibility (
221+ org_obj , org_admin , should_be_visible = True
222+ )
223+
224+ with self .subTest ("Superuser should see sensitive fields in shared object" ):
225+ assert_sensitive_fields_visibility (
226+ shared_obj , super_user , should_be_visible = True
227+ )
228+
168229
169230class APITestCase (TestMultitenantApiMixin , AuthenticationMixin , TestCase ):
170231 pass
0 commit comments