diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-07 18:48:54 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-09-07 18:48:54 +0200 |
commit | 1bc05fe8c33817b7eb16f8fdc49407f23daa9af9 (patch) | |
tree | fb6373f59ae98764019d7ec7ff964d6c60dacd83 /ishtar_common/tests.py | |
parent | 2308e167713697748a087d415bf9cc2ca29e6e6f (diff) | |
download | Ishtar-1bc05fe8c33817b7eb16f8fdc49407f23daa9af9.tar.bz2 Ishtar-1bc05fe8c33817b7eb16f8fdc49407f23daa9af9.zip |
Serialization: manage documenst (with filters) - refactoring
Diffstat (limited to 'ishtar_common/tests.py')
-rw-r--r-- | ishtar_common/tests.py | 208 |
1 files changed, 206 insertions, 2 deletions
diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py index 5fbc8b875..96737c765 100644 --- a/ishtar_common/tests.py +++ b/ishtar_common/tests.py @@ -51,10 +51,12 @@ from ishtar_common import models from ishtar_common import views from ishtar_common.apps import admin_site from ishtar_common.serializers import type_serialization, \ - SERIALIZATION_VERSION, serialization_info, \ + SERIALIZATION_VERSION, \ restore_serialized, conf_serialization, CONF_MODEL_LIST, \ importer_serialization, IMPORT_MODEL_LIST, geo_serialization, \ - GEO_MODEL_LIST, directory_serialization, DIRECTORY_MODEL_LIST + GEO_MODEL_LIST, directory_serialization, DIRECTORY_MODEL_LIST, \ + document_serialization +from ishtar_common.serializers_utils import serialization_info from ishtar_common.utils import post_save_geo, update_data, move_dict_data, \ rename_and_simplify_media_name, try_fix_file @@ -599,6 +601,19 @@ class CacheTest(TestCase): class GenericSerializationTest: + def create_document_default(self): + image_path = os.path.join(settings.ROOT_PATH, "..", "ishtar_common", + "tests", "test.png") + self.documents = [] + for idx in range(12): + self.documents.append(models.Document.objects.create( + title="Test{}".format(idx), + associated_file=SimpleUploadedFile( + 'test.txt', b'no real content'), + image=SimpleUploadedFile( + name='test.png', content=open(image_path, 'rb').read(), + content_type='image/png'))) + def generic_serialization_test(self, serialize, no_test=False, kwargs=None): if not kwargs: kwargs = {} @@ -748,6 +763,188 @@ class SerializationTest(GenericSerializationTest, TestCase): self.create_directory_default() self.generic_serialization_test(directory_serialization) + def create_document_default(self): + super(SerializationTest, self).create_document_default() + from archaeological_operations.models import Operation, \ + ArchaeologicalSite, OperationType + from archaeological_context_records.models import ContextRecord + from archaeological_finds.models import Find, BaseFind + from archaeological_warehouse.models import Warehouse, Container, \ + ContainerLocalisation, WarehouseDivision, WarehouseDivisionLink, \ + WarehouseType, ContainerType + + operation_type = OperationType.objects.all()[0] + dct = {'year': 2010, 'operation_type_id': operation_type.pk, + "code_patriarche": "66666"} + operation1 = Operation.objects.create(**dct) + operation1.documents.add(self.documents[0]) + dct["code_patriarche"] = "66667" + operation2 = Operation.objects.create(**dct) + operation2.documents.add(self.documents[1]) + + site1 = ArchaeologicalSite.objects.create(reference="3333", name="test") + operation1.archaeological_sites.add(site1) + site1.documents.add(self.documents[2]) + site2 = ArchaeologicalSite.objects.create(reference="444", name="test2") + operation2.archaeological_sites.add(site2) + site2.documents.add(self.documents[3]) + + dct = {'label': "Context record1", "operation": operation1} + cr1 = ContextRecord.objects.create(**dct) + cr1.documents.add(self.documents[4]) + dct = {'label': "Context record2", "operation": operation2} + cr2 = ContextRecord.objects.create(**dct) + cr2.documents.add(self.documents[5]) + + dct = {'label': "Base find", "context_record": cr1} + base_find1 = BaseFind.objects.create(**dct) + dct = {'label': "Base find2", "context_record": cr2} + base_find2 = BaseFind.objects.create(**dct) + + dct = {'label': "Find1"} + find1 = Find.objects.create(**dct) + find1.documents.add(self.documents[6]) + find1.base_finds.add(base_find1) + dct = {'label': "Find2"} + find2 = Find.objects.create(**dct) + find2.documents.add(self.documents[7]) + find2.base_finds.add(base_find2) + + w1 = Warehouse.objects.create( + name="Test1", + external_id="test", + warehouse_type=WarehouseType.objects.all()[0], + ) + w1.documents.add(self.documents[8]) + w2 = Warehouse.objects.create( + name="Test2", + external_id="test2", + warehouse_type=WarehouseType.objects.all()[0], + ) + w2.documents.add(self.documents[9]) + self.warehouses = [w1, w2] + c1 = Container.objects.create( + location=w1, + responsible=w1, + container_type=ContainerType.objects.all()[0], + reference="Réf1", + index=1, + external_id="ref1-1" + ) + c1.documents.add(self.documents[10]) + c2 = Container.objects.create( + location=w2, + responsible=w2, + container_type=ContainerType.objects.all()[0], + reference="Réf2", + index=2, + external_id="ref2-2" + ) + c2.documents.add(self.documents[11]) + find1.container = c1 + find1.container_ref = c1 + find1.save() + find2.container = c2 + find2.container_ref = c2 + find2.save() + wd1 = WarehouseDivision.objects.create( + label="Étagère", txt_idx="etagere" + ) + wd2 = WarehouseDivision.objects.create( + label="Allée", txt_idx="allee" + ) + wl1 = WarehouseDivisionLink.objects.create( + warehouse=w1, + division=wd1 + ) + wl2 = WarehouseDivisionLink.objects.create( + warehouse=w2, + division=wd2 + ) + ContainerLocalisation.objects.create( + container=c1, + division=wl1, + reference="A1" + ) + ContainerLocalisation.objects.create( + container=c2, + division=wl2, + reference="A2" + ) + + def test_base_document_serialization(self): + self.create_document_default() + self.generic_serialization_test(document_serialization) + + def test_document_serialization(self): + self.create_document_default() + res = self.generic_serialization_test( + document_serialization) + docs = json.loads( + res[('documents', 'ishtar_common__Document')] + ) + self.assertEqual(len(docs), 12) + + from archaeological_operations.models import Operation, \ + ArchaeologicalSite + result_queryset = Operation.objects.filter( + code_patriarche="66666") + res = self.generic_serialization_test( + document_serialization, no_test=True, + kwargs={"operation_queryset": result_queryset} + ) + docs = json.loads( + res[('documents', 'ishtar_common__Document')] + ) + self.assertEqual(len(docs), 6) + + result_queryset = ArchaeologicalSite.objects.filter( + id=ArchaeologicalSite.objects.all()[0].id) + res = self.generic_serialization_test( + document_serialization, no_test=True, + kwargs={"site_queryset": result_queryset} + ) + docs = json.loads( + res[('documents', 'ishtar_common__Document')] + ) + self.assertEqual(len(docs), 6) + + from archaeological_context_records.models import ContextRecord + result_queryset = ContextRecord.objects.filter( + id=ContextRecord.objects.all()[0].id) + res = self.generic_serialization_test( + document_serialization, no_test=True, + kwargs={"cr_queryset": result_queryset} + ) + docs = json.loads( + res[('documents', 'ishtar_common__Document')] + ) + self.assertEqual(len(docs), 6) + + from archaeological_finds.models import Find + result_queryset = Find.objects.filter( + id=Find.objects.all()[0].id) + res = self.generic_serialization_test( + document_serialization, no_test=True, + kwargs={"find_queryset": result_queryset} + ) + docs = json.loads( + res[('documents', 'ishtar_common__Document')] + ) + self.assertEqual(len(docs), 6) + + from archaeological_warehouse.models import Warehouse + result_queryset = Warehouse.objects.filter( + id=Warehouse.objects.all()[0].id) + res = self.generic_serialization_test( + document_serialization, no_test=True, + kwargs={"warehouse_queryset": result_queryset} + ) + docs = json.loads( + res[('documents', 'ishtar_common__Document')] + ) + self.assertEqual(len(docs), 6) + def test_serialization_zip(self): zip_filename = type_serialization(archive=True) # only check the validity of the zip, the type content is tested above @@ -845,6 +1042,13 @@ class SerializationTest(GenericSerializationTest, TestCase): self.generic_restore_test(zip_filename, current_number, DIRECTORY_MODEL_LIST) + def test_document_restore(self): + self.create_document_default() + current_number, zip_filename = self.generic_restore_test_genzip( + [models.Document], document_serialization) + self.generic_restore_test(zip_filename, current_number, + [models.Document]) + class AccessControlTest(TestCase): def test_administrator(self): |