summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2019-09-10 12:37:00 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2019-09-10 12:37:00 +0200
commitf28a84102fcea5dffd8618c9253687d57acda035 (patch)
tree84b81092df907dd751a1b54aef8b7e6adb70b804
parent37234e1423fb4ce64ceafe7bec90960b8da86793 (diff)
downloadIshtar-f28a84102fcea5dffd8618c9253687d57acda035.tar.bz2
Ishtar-f28a84102fcea5dffd8618c9253687d57acda035.zip
Serialization: fix version management
-rw-r--r--archaeological_operations/tests.py29
-rw-r--r--ishtar_common/serializers.py14
2 files changed, 39 insertions, 4 deletions
diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py
index 9779ad424..51dd1c346 100644
--- a/archaeological_operations/tests.py
+++ b/archaeological_operations/tests.py
@@ -56,6 +56,7 @@ from ishtar_common.tests import WizardTest, WizardTestFormData as FormData, \
create_superuser, create_user, TestCase, OPERATION_FIXTURES, \
AutocompleteTestBase, AcItem, OPERATION_TOWNS_FIXTURES, FILE_FIXTURES, \
COMMON_FIXTURES, GenericSerializationTest, WAREHOUSE_FIXTURES
+from ishtar_common.serializers import restore_serialized
class FileInit(object):
@@ -821,6 +822,34 @@ class SerializationTest(GenericSerializationTest, TestCase):
self.generic_restore_test(zip_filename, current_number,
serializers.OPERATION_MODEL_LIST)
+ def test_historization_on_restore(self):
+ current_number, zip_filename = self.generic_restore_test_genzip(
+ serializers.OPERATION_MODEL_LIST,
+ serializers.operation_serialization)
+
+ operation = models.Operation.objects.get(code_patriarche="66666")
+ version_nb = operation.history.count()
+
+ restore_serialized(zip_filename, delete_existing=False)
+ operation = models.Operation.objects.get(code_patriarche="66666")
+ self.assertEqual(operation.history_creator, self.user)
+ self.assertEqual(operation.history_modifier, self.user)
+ # no new version
+ self.assertEqual(operation.history.count(), version_nb)
+
+ __, __, new_user = create_user()
+ restore_serialized(zip_filename, delete_existing=False, user=new_user)
+ operation = models.Operation.objects.get(code_patriarche="66666")
+ self.assertEqual(operation.history_creator, self.user)
+ self.assertEqual(operation.history_modifier, new_user)
+ self.assertEqual(operation.history.count(), version_nb + 1)
+
+ restore_serialized(zip_filename, delete_existing=True, user=new_user)
+ operation = models.Operation.objects.get(code_patriarche="66666")
+ self.assertEqual(operation.history_creator, new_user)
+ self.assertEqual(operation.history_modifier, new_user)
+ self.assertEqual(operation.history.count(), 1)
+
class ParcelTest(ImportTest, TestCase):
fixtures = OPERATION_TOWNS_FIXTURES
diff --git a/ishtar_common/serializers.py b/ishtar_common/serializers.py
index 6ff0ae9bb..aaf7baa08 100644
--- a/ishtar_common/serializers.py
+++ b/ishtar_common/serializers.py
@@ -330,7 +330,7 @@ def restore_serialized(archive_name, user=None, delete_existing=False):
idx = -1
for idx, obj in enumerate(deserialize("json", data)):
extra_attrs = {}
- if historized and not user:
+ if historized:
keys = obj.object.natural_key()
old_obj = None
try:
@@ -351,11 +351,17 @@ def restore_serialized(archive_name, user=None, delete_existing=False):
obj = model.objects.get(id=obj.object.id)
if user:
obj.history_modifier = user
- else:
+ if extra_attrs and \
+ "history_creator_id" in extra_attrs:
+ obj.history_creator_id = extra_attrs[
+ "history_creator_id"]
+ else:
+ obj.history_creator = user
+ elif extra_attrs:
+ for k in extra_attrs:
+ setattr(obj, k, extra_attrs[k])
obj.skip_history_when_saving = True
obj._no_move = True
- for k in extra_attrs:
- setattr(obj, k, extra_attrs[k])
obj.save()
if idx >= 0:
result.append((model.__name__, idx + 1))