Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
rkorytkowski committed Dec 6, 2024
1 parent 752fe75 commit c7c0de9
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 56 deletions.
12 changes: 7 additions & 5 deletions core/code_systems/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -320,12 +320,14 @@ def create(self, validated_data):

def update(self, instance, validated_data):
concepts = validated_data.pop('concepts', [])
source = SourceCreateOrUpdateSerializer().prepare_object(validated_data, instance)
new_version = validated_data.get('version')

if instance.version == source.version:
self._errors.update({'version': f'Version {source.version} already exists for CodeSystem'
f' {source.mnemonic}.'})
return source
if instance.version == new_version:
self._errors.update({'version': f'Version {new_version} already exists for CodeSystem'
f' {instance.mnemonic}.'})
return instance

source = SourceCreateOrUpdateSerializer().prepare_object(validated_data, instance)

# Preserve version specific values
source_version = source.version
Expand Down
15 changes: 8 additions & 7 deletions core/code_systems/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -437,7 +437,7 @@ def test_put_code_system_with_all_new_concepts(self):
}]
}
}],
'version': '1.0',
'version': '2.0',
'name': 'test',
'id': self.user_source.mnemonic,
'status': 'draft',
Expand All @@ -459,7 +459,7 @@ def test_put_code_system_with_all_new_concepts(self):

self.assertEqual(response.status_code, 200)
self.assertEqual(response.data['id'], self.user_source.mnemonic)
self.assertEqual(response.data['version'], '1.0')
self.assertEqual(response.data['version'], '2.0')
self.assertEqual(response.data['status'], 'draft')

# check if HEAD persisted
Expand All @@ -476,7 +476,7 @@ def test_put_code_system_with_all_new_concepts(self):
self.assertEqual(concept.display_name, 'Test')
self.assertEqual(len(concept.names.all()), 1)
# check if version persisted
sources = Source.objects.filter(mnemonic=self.user_source.mnemonic, version='1.0', user=self.user)
sources = Source.objects.filter(mnemonic=self.user_source.mnemonic, version='2.0', user=self.user)
self.assertEqual(len(sources), 1)
source = sources.first()
self.assertEqual(source.canonical_url, 'http://localhost/url')
Expand Down Expand Up @@ -508,7 +508,7 @@ def test_put_code_system_with_existing_concepts(self):
}]
}
}],
'version': '1.0',
'version': '2.0',
'name': 'test',
'id': self.user_source.mnemonic,
'status': 'draft',
Expand Down Expand Up @@ -548,7 +548,7 @@ def test_put_code_system_with_existing_concepts(self):
}]
}
}],
'version': '2.0',
'version': '3.0',
'name': 'test',
'id': self.user_source.mnemonic,
'status': 'draft',
Expand Down Expand Up @@ -579,8 +579,9 @@ def test_put_code_system_with_existing_concepts(self):
)

self.assertEqual(response.status_code, 200)

self.assertEqual(response.data['id'], self.user_source.mnemonic)
self.assertEqual(response.data['version'], '2.0')
self.assertEqual(response.data['version'], '3.0')

# check if HEAD persisted
sources = Source.objects.filter(mnemonic=self.user_source.mnemonic, version='HEAD', user=self.user)
Expand All @@ -600,7 +601,7 @@ def test_put_code_system_with_existing_concepts(self):
self.assertEqual(concepts[1].display_name, 'Test2')
self.assertEqual(len(concepts[1].names.all()), 1)
# check if version persisted
sources = Source.objects.filter(mnemonic=self.user_source.mnemonic, version='2.0', user=self.user)
sources = Source.objects.filter(mnemonic=self.user_source.mnemonic, version='3.0', user=self.user)
self.assertEqual(len(sources), 1)
source = sources.first()
self.assertEqual(source.canonical_url, 'http://localhost/url')
Expand Down
12 changes: 7 additions & 5 deletions core/concept_maps/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -209,12 +209,14 @@ def is_mapping_same(first, second):

def update(self, instance, validated_data):
mappings = validated_data.pop('mappings', [])
source = SourceCreateOrUpdateSerializer().prepare_object(validated_data, instance)
new_version = validated_data.get('version')

if instance.version == source.version:
self._errors.update({'version': f'Version {source.version} already exists for ConceptMa'
f'p {source.mnemonic}.'})
return source
if instance.version == new_version:
self._errors.update({'version': f'Version {new_version} already exists for CodeSystem'
f' {instance.mnemonic}.'})
return instance

source = SourceCreateOrUpdateSerializer().prepare_object(validated_data, instance)

# Preserve version specific values
source_version = source.version
Expand Down
37 changes: 3 additions & 34 deletions core/concept_maps/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -508,40 +508,9 @@ def test_put_concept_map_overwriting_version(self):
format='json'
)

# check if HEAD persisted
sources = Source.objects.filter(mnemonic='test2', version='HEAD', user=self.user)
self.assertEqual(len(sources), 1)
source = sources.first()
self.assertEqual(source.canonical_url, 'http://localhost/url')
self.assertEqual(source.retired, False)
self.assertEqual(source.name, 'test2')
mappings = source.get_mappings_queryset().filter(retired=False).order_by('id')
self.assertEqual(len(mappings), 2)
mapping = mappings[0]
self.assertEqual(mapping.is_head, True)
self.assertEqual(mapping.from_concept_code, 'concept_B_1')
self.assertEqual(mapping.to_concept_code, 'concept_1')
mapping = mappings[1]
self.assertEqual(mapping.is_head, True)
self.assertEqual(mapping.from_concept_code, 'concept_B_2')
self.assertEqual(mapping.to_concept_code, 'concept_1')
# check if version persisted
sources = Source.objects.filter(mnemonic='test2', version='1.0', user=self.user)
self.assertEqual(len(sources), 1)
source = sources.first()
self.assertEqual(source.canonical_url, 'http://localhost/url')
self.assertEqual(source.retired, False)
self.assertEqual(source.name, 'test2')
mappings = source.get_mappings_queryset().filter(retired=False).order_by('id')
self.assertEqual(len(mappings), 2)
mapping = mappings[0]
self.assertEqual(mapping.is_head, False)
self.assertEqual(mapping.from_concept_code, 'concept_B_1')
self.assertEqual(mapping.to_concept_code, 'concept_1')
mapping = mappings[1]
self.assertEqual(mapping.is_head, False)
self.assertEqual(mapping.from_concept_code, 'concept_B_2')
self.assertEqual(mapping.to_concept_code, 'concept_1')
# check if bad request
self.assertEqual(response.status_code, 400)
self.assertEqual(response.data, {'version': 'Version 1.0 already exists for CodeSystem test2.'})

@patch('core.sources.models.index_source_concepts', Mock(__name__='index_source_concepts'))
@patch('core.sources.models.index_source_mappings', Mock(__name__='index_source_mappings'))
Expand Down
11 changes: 6 additions & 5 deletions core/value_sets/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -200,13 +200,14 @@ def create(self, validated_data):
def update(self, instance, validated_data):
# Find HEAD first
head_collection = instance.head
new_version = validated_data.get('version')

collection = CollectionCreateOrUpdateSerializer().prepare_object(validated_data, instance)
if instance.version == new_version:
self._errors.update({'version': f'Version {new_version} already exists for CodeSystem'
f' {instance.mnemonic}.'})
return instance

if instance.version == collection.version:
self._errors.update({'version': f'Version {collection.version} already exists for ValueSet'
f' {collection.mnemonic}.'})
return collection
collection = CollectionCreateOrUpdateSerializer().prepare_object(validated_data, instance)

# Preserve version specific values
collection_version = collection.version
Expand Down

0 comments on commit c7c0de9

Please sign in to comment.