diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-09-08 11:43:36 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2024-09-10 15:40:21 +0200 |
commit | 9c677ef564ecb3f5990c129975978eccd49c2b20 (patch) | |
tree | f5548229426658c16c51723b077fdb08f2b74d4e | |
parent | 1937a837f3df723aaed6466872e8536c49aef108 (diff) | |
download | Ishtar-9c677ef564ecb3f5990c129975978eccd49c2b20.tar.bz2 Ishtar-9c677ef564ecb3f5990c129975978eccd49c2b20.zip |
🐛 merge: do not merge import association
Otherwise, this may result in unwanted deletion when deleting an import
-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 |