-
Notifications
You must be signed in to change notification settings - Fork 357
Expand file tree
/
Copy pathtest_validate_required_metadata.py
More file actions
120 lines (92 loc) · 3.62 KB
/
test_validate_required_metadata.py
File metadata and controls
120 lines (92 loc) · 3.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import pytest
from faker import Faker
from django.core.exceptions import ValidationError
from osf.models import CedarMetadataRecord, CedarMetadataTemplate
from osf_tests.factories import AuthUserFactory, PreprintFactory, PreprintProviderFactory
fake = Faker()
VALID_JSONSCHEMA = {
'$schema': 'http://json-schema.org/draft-07/schema#',
'type': 'object',
'properties': {
'title': {'type': 'string'},
},
'required': ['title'],
}
@pytest.fixture()
def user():
return AuthUserFactory()
@pytest.fixture()
def provider():
return PreprintProviderFactory()
@pytest.fixture()
def cedar_template():
return CedarMetadataTemplate.objects.create(
schema_name=fake.bs(),
cedar_id=fake.md5(),
template_version=1,
template=VALID_JSONSCHEMA,
active=True,
)
@pytest.fixture()
def preprint(user, provider):
return PreprintFactory(creator=user, provider=provider)
@pytest.mark.django_db
class TestValidateRequiredMetadata:
def test_no_required_template_passes(self, provider, preprint):
assert provider.required_metadata_template is None
provider.validate_required_metadata(preprint)
def test_missing_record_raises(self, provider, cedar_template, preprint):
provider.required_metadata_template = cedar_template
provider.save()
with pytest.raises(ValidationError, match='published CEDAR metadata record'):
provider.validate_required_metadata(preprint)
def test_unpublished_record_raises(self, provider, cedar_template, preprint):
provider.required_metadata_template = cedar_template
provider.save()
CedarMetadataRecord.objects.create(
guid=preprint.guids.first(),
template=cedar_template,
metadata={'title': 'My Preprint'},
is_published=False,
)
with pytest.raises(ValidationError, match='published CEDAR metadata record'):
provider.validate_required_metadata(preprint)
def test_published_valid_record_passes(self, provider, cedar_template, preprint):
provider.required_metadata_template = cedar_template
provider.save()
CedarMetadataRecord.objects.create(
guid=preprint.guids.first(),
template=cedar_template,
metadata={'title': 'My Preprint'},
is_published=True,
)
provider.validate_required_metadata(preprint)
def test_published_invalid_record_raises(self, provider, cedar_template, preprint):
provider.required_metadata_template = cedar_template
provider.save()
CedarMetadataRecord.objects.create(
guid=preprint.guids.first(),
template=cedar_template,
metadata={'title': 123},
is_published=True,
)
with pytest.raises(ValidationError):
provider.validate_required_metadata(preprint)
def test_record_for_wrong_template_raises(self, provider, cedar_template, preprint):
provider.required_metadata_template = cedar_template
provider.save()
other_template = CedarMetadataTemplate.objects.create(
schema_name=fake.bs(),
cedar_id=fake.md5(),
template_version=1,
template=VALID_JSONSCHEMA,
active=True,
)
CedarMetadataRecord.objects.create(
guid=preprint.guids.first(),
template=other_template,
metadata={'title': 'My Preprint'},
is_published=True,
)
with pytest.raises(ValidationError, match='published CEDAR metadata record'):
provider.validate_required_metadata(preprint)