def update(self, instance, validated_data): from core.concepts.models import Concept from core.sources.models import Source instance.extras = validated_data.get('extras', instance.extras) instance.external_id = validated_data.get('external_id', instance.external_id) instance.comment = validated_data.get( 'update_comment') or validated_data.get('comment') instance.retired = validated_data.get('retired', instance.retired) from_concept_url = validated_data.get('from_concept_url', None) to_concept_url = validated_data.get('to_concept_url', None) to_source_url = validated_data.get('to_source_url', None) if from_concept_url: instance.from_concept = Concept.from_uri_queryset( from_concept_url).first() if to_concept_url: instance.to_concept = Concept.from_uri_queryset( to_concept_url).first() if to_source_url: instance.to_source = Source.head_from_uri(to_source_url).first() instance.mnemonic = validated_data.get('mnemonic', instance.mnemonic) instance.map_type = validated_data.get('map_type', instance.map_type) instance.to_concept_code = validated_data.get('to_concept_code', instance.to_concept_code) instance.to_concept_name = validated_data.get('to_concept_name', instance.to_concept_name) errors = Mapping.persist_clone(instance, self.context.get('request').user) if errors: self._errors.update(errors) return instance
def test_persist_clone(self): source_head = OrganizationSourceFactory(version=HEAD) source_version0 = OrganizationSourceFactory( version='v0', mnemonic=source_head.mnemonic, organization=source_head.organization) self.assertEqual(source_head.versions.count(), 2) mapping = MappingFactory(parent=source_version0) cloned_mapping = mapping.clone(mapping.created_by) self.assertEqual( Mapping.persist_clone(cloned_mapping), dict( version_created_by= 'Must specify which user is attempting to create a new mapping version.' )) self.assertEqual( Mapping.persist_clone(cloned_mapping, mapping.created_by), {}) persisted_mapping = Mapping.objects.filter( id=cloned_mapping.id, version=cloned_mapping.version).first() self.assertEqual(mapping.versions.count(), 2) self.assertNotEqual(mapping.id, persisted_mapping.id) self.assertEqual(persisted_mapping.from_concept_id, mapping.from_concept_id) self.assertEqual(persisted_mapping.to_concept_id, mapping.to_concept_id) self.assertEqual(persisted_mapping.parent, source_version0) self.assertEqual(persisted_mapping.sources.count(), 2) self.assertEqual(source_head.mappings.first().id, persisted_mapping.id) self.assertEqual( persisted_mapping.uri, '/orgs/{}/sources/{}/{}/mappings/{}/{}/'.format( source_version0.organization.mnemonic, source_version0.mnemonic, source_version0.version, persisted_mapping.mnemonic, persisted_mapping.version)) self.assertEqual(persisted_mapping.version_url, persisted_mapping.uri)