summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar_common/model_merging.py6
-rw-r--r--ishtar_common/tests.py27
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