diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-08-29 16:03:58 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-01 10:32:52 +0200 |
commit | 06027d5d33663c4eed552ecc7c632390b54f4326 (patch) | |
tree | 0be2daf2e502da9d3f520240725c27629349f836 /ishtar_common | |
parent | ca959330516334a3eb4edd8112ebb6d180c978ea (diff) | |
download | Ishtar-06027d5d33663c4eed552ecc7c632390b54f4326.tar.bz2 Ishtar-06027d5d33663c4eed552ecc7c632390b54f4326.zip |
Refactor tests - first work on serialization restore test
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/serializers.py | 4 | ||||
-rw-r--r-- | ishtar_common/tests.py | 83 |
2 files changed, 76 insertions, 11 deletions
diff --git a/ishtar_common/serializers.py b/ishtar_common/serializers.py index fdc3a6da5..f71109374 100644 --- a/ishtar_common/serializers.py +++ b/ishtar_common/serializers.py @@ -32,8 +32,8 @@ def serialization_info(): }, indent=2) -def type_model_serialization(archive=False, return_empty_types=False, - archive_name=None): +def type_serialization(archive=False, return_empty_types=False, + archive_name=None): """ Serialize all types models to JSON Used for import and export scripts diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py index 3289ad8f6..25be97692 100644 --- a/ishtar_common/tests.py +++ b/ishtar_common/tests.py @@ -48,7 +48,8 @@ from django.test.runner import DiscoverRunner from ishtar_common import models from ishtar_common import views from ishtar_common.apps import admin_site -from ishtar_common.serializers import type_model_serialization +from ishtar_common.serializers import type_serialization, \ + SERIALIZATION_VERSION from ishtar_common.utils import post_save_geo, update_data, move_dict_data, \ rename_and_simplify_media_name, try_fix_file @@ -70,6 +71,51 @@ OPERATION_FIXTURES = COMMON_FIXTURES + [ '../archaeological_operations/fixtures/initial_data_relation_type-fr.json', ] +OPERATION_TOWNS_FIXTURES = \ + OPERATION_FIXTURES + \ + [settings.ROOT_PATH + '../ishtar_common/fixtures/test_towns.json'] + +FILE_FIXTURES = OPERATION_FIXTURES + [ + settings.ROOT_PATH + + '../archaeological_files/fixtures/initial_data-fr.json'] + +FILE_TOWNS_FIXTURES = OPERATION_TOWNS_FIXTURES + [ + settings.ROOT_PATH + + '../archaeological_files/fixtures/initial_data-fr.json'] + +CONTEXT_RECORD_FIXTURES = FILE_FIXTURES + [ + settings.ROOT_PATH + + '../archaeological_context_records/fixtures/initial_data-fr.json', + '../archaeological_context_records/fixtures/' + 'initial_data_relation_type_norel-fr.json', + '../archaeological_context_records/fixtures/' + 'initial_data_relation_type-fr.json', + ] + +CONTEXT_RECORD_TOWNS_FIXTURES = FILE_TOWNS_FIXTURES + [ + settings.ROOT_PATH + + '../archaeological_context_records/fixtures/initial_data-fr.json', + '../archaeological_context_records/fixtures/' + 'initial_data_relation_type_norel-fr.json', + '../archaeological_context_records/fixtures/' + 'initial_data_relation_type-fr.json', + ] + +FIND_FIXTURES = CONTEXT_RECORD_FIXTURES + [ + settings.ROOT_PATH + + '../archaeological_finds/fixtures/initial_data-fr.json', + ] + +FIND_TOWNS_FIXTURES = CONTEXT_RECORD_TOWNS_FIXTURES + [ + settings.ROOT_PATH + + '../archaeological_finds/fixtures/initial_data-fr.json', + ] + +WAREHOUSE_FIXTURES = FIND_FIXTURES + [ + settings.ROOT_PATH + + '../archaeological_warehouse/fixtures/initial_data-fr.json', + ] + def create_superuser(): username = 'username4277' @@ -548,13 +594,10 @@ class CacheTest(TestCase): class SerializationTest(TestCase): - fixtures = [settings.ROOT_PATH + - '../fixtures/initial_data-auth-fr.json', - settings.ROOT_PATH + - '../ishtar_common/fixtures/initial_data-fr.json',] + fixtures = COMMON_FIXTURES + WAREHOUSE_FIXTURES def test_type_serialization(self): - json_result = type_model_serialization() + json_result = type_serialization() for k in json_result.keys(): module_name, model_name = k.split("__") module = importlib.import_module(module_name + ".models") @@ -562,11 +605,33 @@ class SerializationTest(TestCase): self.assertEqual(model.objects.count(), len(json.loads(json_result[k]))) - def test_type_serialization_zip(self): - # only check the validity of the zip, the content is tested above - zip_filename = type_model_serialization(archive=True) + def test_serialization_zip(self): + zip_filename = type_serialization(archive=True) + # only check the validity of the zip, the type content is tested above + self.assertTrue(zipfile.is_zipfile(zip_filename)) with zipfile.ZipFile(zip_filename, "r") as zip_file: self.assertIsNone(zip_file.testzip()) + info = json.loads(zip_file.read("info.json").decode("utf-8")) + self.assertEqual(info["serialize-version"], SERIALIZATION_VERSION) + print(info) + + def test_type_restore(self): + zip_filename = type_serialization(archive=True) + initial_count = {} + with zipfile.ZipFile(zip_filename, "r") as zip_file: + for json_filename in zip_file.namelist(): + path = json_filename.split(os.sep) + if len(path) != 2 or path[0] != "types": + continue + filename = path[-1].split(".")[0] + module_name, model_name = filename.split("__") + module = importlib.import_module(module_name + ".models") + model = getattr(module, model_name) + initial_count[json_filename] = model.objects.count() + model.objects.all().delete() + print(initial_count) + + class AccessControlTest(TestCase): |