diff options
| -rw-r--r-- | ishtar_common/model_merging.py | 6 | ||||
| -rw-r--r-- | ishtar_common/tests.py | 27 | 
2 files changed, 33 insertions, 0 deletions
| diff --git a/ishtar_common/model_merging.py b/ishtar_common/model_merging.py index 0e1d34c58..409161375 100644 --- a/ishtar_common/model_merging.py +++ b/ishtar_common/model_merging.py @@ -22,6 +22,9 @@ def get_models():      return models +EXCLUDED_FIELDS = ["imports"] + +  @transaction.atomic  def merge_model_objects(      primary_object, alias_objects=None, keep_old=False, exclude_fields=None @@ -42,6 +45,8 @@ def merge_model_objects(      if not exclude_fields:          exclude_fields = [] +    exclude_fields += EXCLUDED_FIELDS +      MERGE_FIELDS = ("merge_candidate", "merge_exclusion")      MERGE_STRING_FIELDS = [] @@ -141,6 +146,7 @@ def merge_model_objects(              if (                  alias_varname in related_many_object_names                  or alias_varname in MERGE_FIELDS +                or alias_varname in exclude_fields              ):                  continue diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py index 90e8d3991..f9c928d5e 100644 --- a/ishtar_common/tests.py +++ b/ishtar_common/tests.py @@ -65,6 +65,7 @@ from django.urls import reverse  from ishtar_common import models, models_common, forms_common  from ishtar_common import views  from ishtar_common.apps import admin_site +from ishtar_common.models_imports import Import, ImporterType  from ishtar_common.serializers import (      type_serialization,      SERIALIZATION_VERSION, @@ -2022,8 +2023,34 @@ class MergeTest(TestCase):              name="George", history_modifier=self.user, attached_to=self.company_1          ) +    def set_up_person_merge(self): +        # create arbitrary imports +        imp_model = models.ImporterModel.objects.create( +            klass="ishtar_common.models.Parcel", name="Parcel" +        ) +        importer_type = models.ImporterType.objects.create(associated_models=imp_model) +        imprt1 = models.Import.objects.create( +            name="Test", +            user=models.IshtarUser.objects.all()[0], +            importer_type=importer_type, +        ) +        imprt2 = models.Import.objects.create( +            name="Test 2", +            user=models.IshtarUser.objects.all()[0], +            importer_type=importer_type, +        ) +        self.person_1.imports.add(imprt1) +        self.person_2.imports.add(imprt2) +        return imprt1, imprt2 +      def test_person_merge(self): +        imprt1, __ = self.set_up_person_merge() +          self.person_1.merge(self.person_2) + +        # do not merge associated imports +        self.assertEqual(self.person_1.imports.count(), 1) +        self.assertEqual(self.person_1.imports.all()[0].pk, imprt1.pk)          # preserve existing fields          self.assertEqual(self.person_1.name, "Boule")          # fill missing fields | 
