diff --git a/arkindex/documents/api/elements.py b/arkindex/documents/api/elements.py index 8bdaaf5c83731a83fc12f8ff8540827dc0aa8cbb..1a820811f24a123e85ae0e7f6a8f64ab0e11e6a7 100644 --- a/arkindex/documents/api/elements.py +++ b/arkindex/documents/api/elements.py @@ -1260,7 +1260,7 @@ class ElementMetadata(ListCreateAPIView): The `reference` type is also indexed in search APIs and allows searching by known identifiers or references, or any arbitrary string. """ - permission_classes = (IsVerified, ) + permission_classes = (IsVerifiedOrReadOnly, ) pagination_class = None serializer_class = MetaDataUpdateSerializer diff --git a/arkindex/documents/tests/test_retrieve_elements.py b/arkindex/documents/tests/test_retrieve_elements.py index 0155c0d90e73a6ed126af93e3a151f6588bb4a13..8c609715ee5b689747e769eb45695938145cb287 100644 --- a/arkindex/documents/tests/test_retrieve_elements.py +++ b/arkindex/documents/tests/test_retrieve_elements.py @@ -145,6 +145,36 @@ class TestRetrieveElements(FixtureAPITestCase): }, ]) + def test_list_element_metadata_public(self): + self.assertTrue(self.corpus.public) + with self.assertNumQueries(2): + response = self.client.get(reverse('api:element-metadata', kwargs={'pk': str(self.page.id)})) + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertListEqual(response.json(), [ + { + 'dates': [], + 'id': str(self.folio_metadata.id), + 'name': 'folio', + 'type': 'text', + 'value': '1r', + 'worker_version': None + }, + { + 'id': str(self.metadata.id), + 'name': str(self.metadata.name), + 'type': self.metadata.type.value, + 'value': self.metadata.value, + 'dates': [], + 'worker_version': None + }, + ]) + + def test_list_element_metadata_private_requires_login(self): + self.page.corpus = self.private_corpus + self.page.save() + response = self.client.get(reverse('api:element-metadata', kwargs={'pk': str(self.page.id)})) + self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) + def test_list_element_metadata_with_entity(self): # Link an entity to metadata, db requests number should remains same entity = Entity.objects.create(