def test_viewers_see_only_their_own_assignments_and_owner_s(self): # Checks if can see all permissions self.client.login(username='******', password='******') permission_list_response = self.client.get( self.collection_permissions_list_url, format='json') self.assertEqual(permission_list_response.status_code, status.HTTP_200_OK) admin_perms = self.collection.get_perms(self.admin) anotheruser_perms = self.collection.get_perms(self.anotheruser) results = permission_list_response.data # `anotheruser` can only see the owner's permissions `self.admin` and # `anotheruser`'s permissions. Should not see `someuser`s ones. expected_perms = [] for admin_perm in admin_perms: if admin_perm in Collection.get_assignable_permissions(): expected_perms.append((self.admin.username, admin_perm)) for anotheruser_perm in anotheruser_perms: if anotheruser_perm in Collection.get_assignable_permissions(): expected_perms.append( (self.anotheruser.username, anotheruser_perm)) expected_perms = sorted(expected_perms, key=lambda element: (element[0], element[1])) obj_perms = [] for assignment in results: object_permission = self.url_to_obj(assignment.get('url')) obj_perms.append((object_permission.user.username, object_permission.permission.codename)) obj_perms = sorted(obj_perms, key=lambda element: (element[0], element[1])) self.assertEqual(expected_perms, obj_perms)
def test_editors_see_only_self_anon_and_owner_assignments(self): self.client.login(username='******', password='******') permission_list_response = self.client.get( self.collection_permissions_list_url, format='json') self.assertEqual(permission_list_response.status_code, status.HTTP_200_OK) admin_perms = self.collection.get_perms(self.admin) someuser_perms = self.collection.get_perms(self.someuser) anotheruser_perms = self.collection.get_perms(self.anotheruser) results = permission_list_response.data expected_perms = [] for admin_perm in admin_perms: if admin_perm in Collection.get_assignable_permissions(): expected_perms.append((self.admin.username, admin_perm)) for someuser_perm in someuser_perms: if someuser_perm in Collection.get_assignable_permissions(): expected_perms.append((self.someuser.username, someuser_perm)) # Permissions assigned to self.anotheruser must not appear expected_perms = sorted(expected_perms, key=lambda element: (element[0], element[1])) obj_perms = [] for assignment in results: object_permission = self.url_to_obj(assignment.get('url')) obj_perms.append((object_permission.user.username, object_permission.permission.codename)) obj_perms = sorted(obj_perms, key=lambda element: (element[0], element[1])) self.assertEqual(expected_perms, obj_perms)
def test_anonymous_get_only_owner_s_assignments(self): self.client.logout() self.collection.assign_perm(get_anonymous_user(), PERM_VIEW_COLLECTION) permission_list_response = self.client.get( self.collection_permissions_list_url, format='json') self.assertEqual(permission_list_response.status_code, status.HTTP_200_OK) admin_perms = self.collection.get_perms(self.admin) results = permission_list_response.data # As an editor of the collection. `someuser` should see all. expected_perms = [] for admin_perm in admin_perms: if admin_perm in Collection.get_assignable_permissions(): expected_perms.append((self.admin.username, admin_perm)) expected_perms = sorted(expected_perms, key=lambda element: (element[0], element[1])) obj_perms = [] for assignment in results: object_permission = self.url_to_obj(assignment.get('url')) obj_perms.append((object_permission.user.username, object_permission.permission.codename)) obj_perms = sorted(obj_perms, key=lambda element: (element[0], element[1])) self.assertEqual(expected_perms, obj_perms)
def test_bulk_assign_permissions(self): # TODO Improve this test permission_list_response = self.client.get(self.collection_permissions_list_url, format='json') self.assertEqual(permission_list_response.status_code, status.HTTP_200_OK) total = len(permission_list_response.data) # Add number of permissions added with 'view_collection' total += len(Collection.get_implied_perms(PERM_VIEW_COLLECTION)) + 1 # Add number of permissions added with 'change_collection' total += len(Collection.get_implied_perms(PERM_CHANGE_COLLECTION)) + 1 response = self._logged_user_gives_permissions([ ('someuser', PERM_VIEW_COLLECTION), ('someuser', PERM_VIEW_COLLECTION), # Add a duplicate which should not count ('anotheruser', PERM_CHANGE_COLLECTION) ]) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(len(response.data), total)