diff --git a/arkindex/documents/tests/test_allowed_metadata.py b/arkindex/documents/tests/test_allowed_metadata.py index 9f5c88fea7d3acaaf0428e8e206a73ab8bda4d68..faae9da70e65f3583effde0af0313a6a3da2c1ad 100644 --- a/arkindex/documents/tests/test_allowed_metadata.py +++ b/arkindex/documents/tests/test_allowed_metadata.py @@ -197,8 +197,12 @@ class TestAllowedMetaData(FixtureAPITestCase): def test_update(self): self.client.force_login(self.superuser) - response = self.client.put(reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), {'type': 'url', 'name': 'newName'}) - self.assertEqual(response.status_code, status.HTTP_200_OK) + with self.assertNumQueries(6): + response = self.client.put( + reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), + {'type': 'url', 'name': 'newName'}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertDictEqual(response.json(), { 'id': str(self.test_meta.id), 'type': 'url', @@ -206,26 +210,40 @@ class TestAllowedMetaData(FixtureAPITestCase): }) def test_update_requires_login(self): - response = self.client.put(reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), {'type': 'url', 'name': 'newName'}) - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + with self.assertNumQueries(0): + response = self.client.put( + reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), + {'type': 'url', 'name': 'newName'}, + ) + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_update_requires_verified(self): self.user.verified_email = False self.user.save() self.client.force_login(self.user) - response = self.client.put(reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), {'type': 'url', 'name': 'newName'}) - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + with self.assertNumQueries(2): + response = self.client.put( + reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), + {'type': 'url', 'name': 'newName'}, + ) + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_update_private_corpus(self): self.client.force_login(self.user) - response = self.client.put(reverse('api:allowed-metadata-edit', kwargs={'corpus': self.private_corpus.id, 'pk': self.test_meta.id}), {'type': 'url', 'name': 'newName'}) - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + with self.assertNumQueries(6): + response = self.client.put( + reverse('api:allowed-metadata-edit', kwargs={'corpus': self.private_corpus.id, 'pk': self.test_meta.id}), + {'type': 'url', 'name': 'newName'}, + ) + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_update_invalid_type(self): self.client.force_login(self.user) with self.assertNumQueries(7): response = self.client.put( - reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), {'type': 'invalidType', 'name': 'newName'}) + reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), + {'type': 'invalidType', 'name': 'newName'}, + ) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertDictEqual(response.json(), { 'type': ['Value is not of type MetaType'] @@ -235,7 +253,9 @@ class TestAllowedMetaData(FixtureAPITestCase): self.client.force_login(self.user) with self.assertNumQueries(7): response = self.client.put( - reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), {'name': 'newName'}) + reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), + {'name': 'newName'}, + ) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertDictEqual(response.json(), { 'type': ['This field is required.'] @@ -245,16 +265,34 @@ class TestAllowedMetaData(FixtureAPITestCase): self.client.force_login(self.user) with self.assertNumQueries(8): response = self.client.put( - reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), {'type': self.allowed_meta[1].type.value, 'name': self.allowed_meta[1].name}) + reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), + {'type': self.allowed_meta[1].type.value, 'name': self.allowed_meta[1].name}, + ) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertDictEqual(response.json(), { 'detail': ['An AllowedMetaData with this type and name already exists in this corpus.'] }) + def test_update_requires_corpus_admin(self): + self.client.force_login(self.user) + for role in [Role.Guest, Role.Contributor]: + with self.subTest(role=role): + self.corpus.memberships.filter(user=self.user).update(level=role.value) + with self.assertNumQueries(5): + response = self.client.put( + reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), + {'type': self.allowed_meta[2].type.value, 'name': self.allowed_meta[2].name}, + ) + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + def test_partial_update(self): self.client.force_login(self.user) - response = self.client.patch(reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), {'name': 'newName'}) - self.assertEqual(response.status_code, status.HTTP_200_OK) + with self.assertNumQueries(9): + response = self.client.patch( + reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), + {'name': 'newName'}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertDictEqual(response.json(), { 'id': str(self.test_meta.id), 'type': self.test_meta.type.value, @@ -262,26 +300,38 @@ class TestAllowedMetaData(FixtureAPITestCase): }) def test_partial_update_requires_login(self): - response = self.client.patch(reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), {'name': 'newName'}) - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + with self.assertNumQueries(0): + response = self.client.patch( + reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), + {'name': 'newName'}, + ) + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_partial_update_requires_verified(self): self.user.verified_email = False self.user.save() self.client.force_login(self.user) - response = self.client.patch(reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), {'type': 'reference'}) - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + with self.assertNumQueries(2): + response = self.client.patch( + reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), + {'type': 'reference'}) + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_partial_update_private_corpus(self): self.client.force_login(self.user) - response = self.client.patch(reverse('api:allowed-metadata-edit', kwargs={'corpus': self.private_corpus.id, 'pk': self.test_meta.id}), {'type': 'reference'}) - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + with self.assertNumQueries(6): + response = self.client.patch( + reverse('api:allowed-metadata-edit', kwargs={'corpus': self.private_corpus.id, 'pk': self.test_meta.id}), + {'type': 'reference'}) + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_partial_update_invalid_type(self): self.client.force_login(self.user) with self.assertNumQueries(7): response = self.client.patch( - reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), {'type': 'invalidType'}) + reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), + {'type': 'invalidType'}, + ) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertDictEqual(response.json(), { 'type': ['Value is not of type MetaType'] @@ -291,49 +341,71 @@ class TestAllowedMetaData(FixtureAPITestCase): self.client.force_login(self.user) with self.assertNumQueries(8): response = self.client.patch( - reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), {'type': self.allowed_meta[2].type.value}) + reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), + {'type': self.allowed_meta[2].type.value}, + ) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) self.assertDictEqual(response.json(), { 'detail': ['An AllowedMetaData with this type and name already exists in this corpus.'] }) + def test_partial_update_requires_corpus_admin(self): + self.client.force_login(self.user) + for role in [Role.Guest, Role.Contributor]: + with self.subTest(role=role): + self.corpus.memberships.filter(user=self.user).update(level=role.value) + with self.assertNumQueries(5): + response = self.client.patch( + reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id}), + {'type': self.allowed_meta[2].type.value}, + ) + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + def test_destroy(self): self.client.force_login(self.user) - response = self.client.delete(reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id})) - self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) - response = self.client.get( - reverse('api:corpus-allowed-metadata', kwargs={'pk': self.corpus.id}), - data={'page_size': 3} - ) - data = response.json() - self.assertEqual(data['count'], 5) - response = self.client.get(reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id})) - self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + with self.assertNumQueries(8): + response = self.client.delete(reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id})) + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + + with self.assertRaises(AllowedMetaData.DoesNotExist): + self.test_meta.refresh_from_db() + + def test_destroy_not_found(self): + self.client.force_login(self.user) + with self.assertNumQueries(7): + response = self.client.delete(reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'})) + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + + def test_destroy_corpus_not_found(self): + self.client.force_login(self.user) + with self.assertNumQueries(3): + response = self.client.delete(reverse('api:allowed-metadata-edit', kwargs={'corpus': 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', 'pk': self.test_meta.id})) + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) def test_destroy_requires_login(self): - response = self.client.delete(reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id})) - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + with self.assertNumQueries(0): + response = self.client.delete(reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id})) + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_destroy_requires_verified(self): self.user.verified_email = False self.user.save() self.client.force_login(self.user) - response = self.client.delete(reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id})) - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + with self.assertNumQueries(2): + response = self.client.delete(reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id})) + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_destroy_private_corpus(self): self.client.force_login(self.user) - response = self.client.delete(reverse('api:allowed-metadata-edit', kwargs={'corpus': self.private_corpus.id, 'pk': self.test_meta.id})) - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) - - def test_destroy_guest_forbidden(self): - self.client.force_login(self.user) - self.corpus.memberships.filter(user=self.user).update(level=Role.Guest.value) - response = self.client.delete(reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id})) - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + with self.assertNumQueries(6): + response = self.client.delete(reverse('api:allowed-metadata-edit', kwargs={'corpus': self.private_corpus.id, 'pk': self.test_meta.id})) + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) - def test_destroy_contributor_forbidden(self): + def test_destroy_requires_corpus_admin(self): self.client.force_login(self.user) - self.corpus.memberships.filter(user=self.user).update(level=Role.Contributor.value) - response = self.client.delete(reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id})) - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + for role in [Role.Guest, Role.Contributor]: + with self.subTest(role=role): + self.corpus.memberships.filter(user=self.user).update(level=role.value) + with self.assertNumQueries(5): + response = self.client.delete(reverse('api:allowed-metadata-edit', kwargs={'corpus': self.corpus.id, 'pk': self.test_meta.id})) + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)