From 96576db329652397a78e2ab0157b21f4927ea768 Mon Sep 17 00:00:00 2001 From: Emrah B Date: Thu, 16 Mar 2017 16:21:47 +0300 Subject: [PATCH] #503 add exclusion of self to mapping query in openmrs validation --- django-nonrel/ocl/mappings/custom_validators.py | 6 ++++-- django-nonrel/ocl/mappings/tests.py | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/django-nonrel/ocl/mappings/custom_validators.py b/django-nonrel/ocl/mappings/custom_validators.py index d69230e..6014fac 100644 --- a/django-nonrel/ocl/mappings/custom_validators.py +++ b/django-nonrel/ocl/mappings/custom_validators.py @@ -14,8 +14,10 @@ def validate(self): def pair_must_be_unique(self): from mappings.models import Mapping - intersection = Mapping.objects.filter(parent=self.mapping.parent_source, from_concept=self.mapping.from_concept, - to_concept=self.mapping.to_concept, is_active=True, retired=False).count() + intersection = Mapping.objects\ + .filter(parent=self.mapping.parent_source, from_concept=self.mapping.from_concept, to_concept=self.mapping.to_concept, is_active=True, retired=False)\ + .exclude(id=self.mapping.id)\ + .count() if intersection: raise ValidationError(OPENMRS_SINGLE_MAPPING_BETWEEN_TWO_CONCEPTS) diff --git a/django-nonrel/ocl/mappings/tests.py b/django-nonrel/ocl/mappings/tests.py index 9d0c641..3a06e88 100644 --- a/django-nonrel/ocl/mappings/tests.py +++ b/django-nonrel/ocl/mappings/tests.py @@ -1087,3 +1087,20 @@ def test_update_different_from_and_to_pairs_to_same_from_and_to_pairs_should_thr self.assertTrue( OPENMRS_SINGLE_MAPPING_BETWEEN_TWO_CONCEPTS in errors["__all__"]) + + def test_edit_mapping_after_creation(self): + user = create_user() + + source1 = create_source(user, validation_schema=CUSTOM_VALIDATION_SCHEMA_OPENMRS) + source2 = create_source(user, validation_schema=CUSTOM_VALIDATION_SCHEMA_OPENMRS) + + (concept1, _) = create_concept(user, source1) + (concept2, _) = create_concept(user, source2) + + mapping = create_mapping(user, source1, concept1, concept2, "Same As") + + mapping.map_type = "Different" + + errors = Mapping.persist_changes(mapping, user) + + self.assertEqual(len(errors), 0)