Skip to content

Commit 94ce69f

Browse files
authored
Merge pull request #11683 from Vlad0n20/feature/ENG-9822
[ENG-9822] - add required_metadata_template to API
2 parents c9153b8 + 1034d79 commit 94ce69f

File tree

5 files changed

+121
-0
lines changed

5 files changed

+121
-0
lines changed

api/providers/serializers.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@ class Meta:
7777
related_view_kwargs={'provider_id': '<_id>'},
7878
)
7979

80+
required_metadata_template = RelationshipField(
81+
related_view='cedar-metadata-templates:cedar-metadata-template-detail',
82+
related_view_kwargs={'template_id': '<required_metadata_template._id>'},
83+
read_only=True,
84+
)
85+
8086
schemas = TypedRelationshipField(
8187
related_view='providers:registration-providers:registration-schema-list',
8288
related_view_kwargs={'provider_id': '<_id>'},

api_tests/providers/collections/views/test_collection_provider_detail.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from api.base.settings.defaults import API_BASE
44
from api_tests.providers.mixins import ProviderExistsMixin
5+
from osf.models import CedarMetadataTemplate
56
from osf_tests.factories import (
67
CollectionProviderFactory,
78
BrandFactory,
@@ -55,3 +56,40 @@ def test_registration_provider_with_special_fields(self, app, provider_with_bran
5556
data = res.json['data']
5657

5758
assert data['relationships']['brand']['data']['id'] == str(brand.id)
59+
60+
61+
@pytest.mark.django_db
62+
class TestCollectionProviderRequiredMetadataTemplate:
63+
64+
@pytest.fixture()
65+
def provider(self):
66+
return CollectionProviderFactory()
67+
68+
@pytest.fixture()
69+
def provider_url(self, provider):
70+
return f'/{API_BASE}providers/collections/{provider._id}/?version=2.20'
71+
72+
@pytest.fixture()
73+
def cedar_template(self):
74+
return CedarMetadataTemplate.objects.create(
75+
schema_name='Test Schema',
76+
cedar_id='https://repo.metadatacenter.org/templates/test',
77+
template_version=1,
78+
template={},
79+
active=True,
80+
)
81+
82+
def test_required_metadata_template_is_null_by_default(self, app, provider, provider_url):
83+
res = app.get(provider_url)
84+
assert res.status_code == 200
85+
assert res.json['data']['relationships']['required_metadata_template']['data'] is None
86+
87+
def test_required_metadata_template_when_set(self, app, provider, provider_url, cedar_template):
88+
from osf.models import AbstractProvider
89+
AbstractProvider.objects.filter(pk=provider.pk).update(required_metadata_template=cedar_template)
90+
91+
res = app.get(provider_url)
92+
assert res.status_code == 200
93+
rel = res.json['data']['relationships']['required_metadata_template']
94+
assert rel['data']['id'] == cedar_template._id
95+
assert rel['data']['type'] == 'cedar-metadata-templates'

api_tests/providers/preprints/views/test_preprint_provider_detail.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from api.base.settings.defaults import API_BASE
44
from api.base.settings import REST_FRAMEWORK
55
from api_tests.providers.mixins import ProviderExistsMixin
6+
from osf.models import CedarMetadataTemplate
67
from osf_tests.factories import (
78
PreprintProviderFactory,
89
ProviderAssetFileFactory,
@@ -216,3 +217,40 @@ def test_asset_attribute_correct(self, app, provider_one, provider_two, provider
216217

217218
res = app.get(provider_two_url)
218219
assert res.json['data']['attributes']['assets'][provider_asset_two.name] == provider_asset_two.file.url
220+
221+
222+
@pytest.mark.django_db
223+
class TestPreprintProviderRequiredMetadataTemplate:
224+
225+
@pytest.fixture()
226+
def provider(self):
227+
return PreprintProviderFactory()
228+
229+
@pytest.fixture()
230+
def provider_url(self, provider):
231+
return f'/{API_BASE}providers/preprints/{provider._id}/?version=2.20'
232+
233+
@pytest.fixture()
234+
def cedar_template(self):
235+
return CedarMetadataTemplate.objects.create(
236+
schema_name='Test Schema',
237+
cedar_id='https://repo.metadatacenter.org/templates/test',
238+
template_version=1,
239+
template={},
240+
active=True,
241+
)
242+
243+
def test_required_metadata_template_is_null_by_default(self, app, provider, provider_url):
244+
res = app.get(provider_url)
245+
assert res.status_code == 200
246+
assert res.json['data']['relationships']['required_metadata_template']['data'] is None
247+
248+
def test_required_metadata_template_when_set(self, app, provider, provider_url, cedar_template):
249+
from osf.models import AbstractProvider
250+
AbstractProvider.objects.filter(pk=provider.pk).update(required_metadata_template=cedar_template)
251+
252+
res = app.get(provider_url)
253+
assert res.status_code == 200
254+
rel = res.json['data']['relationships']['required_metadata_template']
255+
assert rel['data']['id'] == cedar_template._id
256+
assert rel['data']['type'] == 'cedar-metadata-templates'

api_tests/providers/registrations/views/test_registration_provider_detail.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from api.base.settings.defaults import API_BASE
44
from api_tests.providers.mixins import ProviderDetailViewTestBaseMixin
5+
from osf.models import CedarMetadataTemplate
56
from osf_tests.factories import (
67
BrandFactory,
78
RegistrationProviderFactory,
@@ -58,3 +59,40 @@ def test_registration_provider_with_special_fields(self, app, provider_with_bran
5859

5960
assert data['relationships']['brand']['data']['id'] == str(brand.id)
6061
assert data['attributes']['branded_discovery_page'] == provider_with_brand.branded_discovery_page
62+
63+
64+
@pytest.mark.django_db
65+
class TestRegistrationProviderRequiredMetadataTemplate:
66+
67+
@pytest.fixture()
68+
def provider(self):
69+
return RegistrationProviderFactory()
70+
71+
@pytest.fixture()
72+
def provider_url(self, provider):
73+
return f'/{API_BASE}providers/registrations/{provider._id}/?version=2.20'
74+
75+
@pytest.fixture()
76+
def cedar_template(self):
77+
return CedarMetadataTemplate.objects.create(
78+
schema_name='Test Schema',
79+
cedar_id='https://repo.metadatacenter.org/templates/test',
80+
template_version=1,
81+
template={},
82+
active=True,
83+
)
84+
85+
def test_required_metadata_template_is_null_by_default(self, app, provider, provider_url):
86+
res = app.get(provider_url)
87+
assert res.status_code == 200
88+
assert res.json['data']['relationships']['required_metadata_template']['data'] is None
89+
90+
def test_required_metadata_template_when_set(self, app, provider, provider_url, cedar_template):
91+
from osf.models import AbstractProvider
92+
AbstractProvider.objects.filter(pk=provider.pk).update(required_metadata_template=cedar_template)
93+
94+
res = app.get(provider_url)
95+
assert res.status_code == 200
96+
rel = res.json['data']['relationships']['required_metadata_template']
97+
assert rel['data']['id'] == cedar_template._id
98+
assert rel['data']['type'] == 'cedar-metadata-templates'

osf_tests/metadata/test_serialized_metadata.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@ def setUp(self):
210210
mock.patch('osf.models.base.Guid.objects.get_or_create', new=osfguid_sequence.get_or_create),
211211
mock.patch('django.utils.timezone.now', new=forever_now),
212212
mock.patch('osf.models.mixins.timezone.now', new=forever_now),
213+
mock.patch('osf.models.nodelog.timezone.now', new=forever_now),
213214
mock.patch('osf.models.metaschema.RegistrationSchema.absolute_api_v2_url', new='http://fake.example/schema/for/test'),
214215
mock.patch('osf.models.node.Node.get_verified_links', return_value=[
215216
{'target_url': 'https://foo.bar', 'resource_type': 'Other'}

0 commit comments

Comments
 (0)