Skip to content

Commit 7f3fae4

Browse files
committed
Collection Reference cascade without code or any filter (against full repo) is not allowed for now
1 parent 11f3c32 commit 7f3fae4

2 files changed

Lines changed: 43 additions & 1 deletion

File tree

core/collections/models.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -748,7 +748,7 @@ def generate_references(self):
748748
return references
749749

750750
def should_generate_multiple_references(self):
751-
return self.include and self.cascade and self.transform
751+
return self.include and self.cascade and self.transform and self.code
752752

753753
@staticmethod
754754
def transform_to_latest_version(queryset, klass):
@@ -931,6 +931,10 @@ def clean(self):
931931
if not self.is_valid_filter():
932932
raise ValidationError({'filter': ['Invalid filter schema.']})
933933

934+
if not self.is_valid_cascade():
935+
raise ValidationError(
936+
{'cascade': ['Invalid cascade schema. Either "code" or "filter" must be provided']})
937+
934938
self.original_expression = str(self.expression)
935939
if not self.is_static_transform and not self.is_extensional_transform:
936940
self.transform = None
@@ -957,6 +961,13 @@ def filter_to_querystring(self):
957961
return '&'.join(queries)
958962
return None
959963

964+
def is_valid_cascade(self):
965+
if not self.cascade:
966+
return True
967+
if self.cascade and not (self.code or self.filter):
968+
return False
969+
return True
970+
960971
def is_valid_filter(self):
961972
if not self.filter:
962973
return True

core/integration_tests/tests_collections.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -962,6 +962,37 @@ def test_put_expression_with_cascade_to_concepts(self):
962962
])
963963
)
964964

965+
random_concept = ConceptFactory()
966+
967+
response = self.client.put(
968+
self.collection.uri + 'references/?transformReferences=extensional',
969+
{
970+
'data': {'expression': random_concept.parent.uri},
971+
'cascade': {
972+
'method': 'sourcetoconcepts',
973+
'cascade levels': '*',
974+
'map types': 'Q AND A,CONCEPT SET',
975+
'return map types': '*'
976+
}
977+
},
978+
HTTP_AUTHORIZATION='Token ' + self.token,
979+
format='json'
980+
)
981+
982+
self.assertEqual(response.status_code, 200)
983+
self.assertEqual(
984+
response.data,
985+
[{
986+
'added': False,
987+
'expression': random_concept.parent.uri,
988+
'message': [
989+
'This field cannot be null.',
990+
'Invalid cascade schema. Either "code" or "filter" must be provided'
991+
]
992+
}]
993+
)
994+
995+
965996
def test_put_expression_transform_to_latest_version(self):
966997
concept2 = ConceptFactory()
967998
concept2_latest_version = concept2.get_latest_version()

0 commit comments

Comments
 (0)