diff options
Diffstat (limited to 'archaeological_context_records/tests.py')
-rw-r--r-- | archaeological_context_records/tests.py | 141 |
1 files changed, 97 insertions, 44 deletions
diff --git a/archaeological_context_records/tests.py b/archaeological_context_records/tests.py index 87eb80c57..f1e6581d7 100644 --- a/archaeological_context_records/tests.py +++ b/archaeological_context_records/tests.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (C) 2015 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> +# Copyright (C) 2015-2017 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -20,76 +20,129 @@ import json from django.conf import settings -from django.core.exceptions import ValidationError -from django.core.files.uploadedfile import SimpleUploadedFile +from django.core.exceptions import ValidationError, ImproperlyConfigured from django.core.urlresolvers import reverse from django.test import TestCase from django.test.client import Client -from ishtar_common.models import ImporterType, IshtarSiteProfile +from ishtar_common.models import IshtarSiteProfile, ImporterModel from ishtar_common.tests import create_superuser from archaeological_operations.tests import OperationInitTest, \ - ImportOperationTest + ImportTest, ImportOperationTest from archaeological_operations import models as models_ope from archaeological_context_records import models -from ishtar_common import forms_common -class ImportContextRecordTest(ImportOperationTest): - test_operations = False - test_context_records = True +class ImportContextRecordTest(ImportTest, TestCase): fixtures = ImportOperationTest.fixtures + [ settings.ROOT_PATH + '../archaeological_context_records/fixtures/initial_data-fr.json', ] - def testMCCImportContextRecords(self, test=True): - if test and not self.test_context_records: - return - self.testMCCImportParcels(test=False) - + def test_mcc_import_contextrecords(self): old_nb = models.ContextRecord.objects.count() - MCC = ImporterType.objects.get(name=u"MCC - UE") - mcc_file = open( - settings.ROOT_PATH + - '../archaeological_context_records/tests/' - 'MCC-context-records-example.csv', 'rb') - file_dict = {'imported_file': SimpleUploadedFile(mcc_file.name, - mcc_file.read())} - post_dict = {'importer_type': MCC.pk, 'skip_lines': 1, - "encoding": 'utf-8'} - form = forms_common.NewImportForm(data=post_dict, files=file_dict, - instance=None) - form.is_valid() - if test: - self.assertTrue(form.is_valid()) + mcc, form = self.init_context_record_import() + + self.assertTrue(form.is_valid()) impt = form.save(self.ishtar_user) impt.initialize() - # doing manual connections - hc = models.Unit.objects.get(txt_idx='not_in_context').pk - self.setTargetKey('unit', 'hc', hc) - self.setTargetKey('unit', 'hors-contexte', hc) - layer = models.Unit.objects.get(txt_idx='layer').pk - self.setTargetKey('unit', 'couche', layer) - + self.init_cr_targetkey(impt) impt.importation() - if not test: - return - - # new ues has now been imported + # new context records has now been imported current_nb = models.ContextRecord.objects.count() - self.assertTrue(current_nb == (old_nb + 4)) + self.assertEqual(current_nb, old_nb + 4) self.assertEqual( - models.ContextRecord.objects.filter(unit__pk=hc).count(), 3) + models.ContextRecord.objects.filter( + unit__txt_idx='not_in_context').count(), 3) self.assertEqual( - models.ContextRecord.objects.filter(unit__pk=layer).count(), 1) + models.ContextRecord.objects.filter( + unit__txt_idx='layer').count(), 1) + def test_model_limitation(self): + old_nb = models.ContextRecord.objects.count() + mcc, form = self.init_context_record_import() + mcc.created_models.clear() + + self.assertTrue(form.is_valid()) + impt = form.save(self.ishtar_user) + impt.initialize() + + self.init_cr_targetkey(impt) + impt.importation() + # no model defined in created_models: normal import + current_nb = models.ContextRecord.objects.count() + self.assertEqual(current_nb, old_nb + 4) + + # add an inadequate model to make created_models non empty + for cr in models.ContextRecord.objects.all(): + cr.delete() + mcc, form = self.init_context_record_import() + mcc.created_models.clear() + mcc.created_models.add(ImporterModel.objects.get( + klass='ishtar_common.models.Organization' + )) + impt = form.save(self.ishtar_user) + impt.initialize() + self.init_cr_targetkey(impt) + # Dating is not in models that can be created but force new is + # set for a column that references Dating + with self.assertRaises(ImproperlyConfigured): + impt.importation() + + # retry with only Dating (no context record) + for cr in models.ContextRecord.objects.all(): + cr.delete() + mcc, form = self.init_context_record_import() + mcc.created_models.clear() + dat_model, c = ImporterModel.objects.get_or_create( + klass='archaeological_context_records.models.Dating', + defaults={"name": 'Dating'}) + mcc.created_models.add(dat_model) + impt = form.save(self.ishtar_user) + impt.initialize() + self.init_cr_targetkey(impt) + impt.importation() + + current_nb = models.ContextRecord.objects.count() + self.assertEqual(current_nb, 0) + + # add a context record model + for cr in models.ContextRecord.objects.all(): + cr.delete() + mcc, form = self.init_context_record_import() + mcc.created_models.clear() + mcc.created_models.add(ImporterModel.objects.get( + klass='archaeological_context_records.models.ContextRecord' + )) + mcc.created_models.add(dat_model) + impt = form.save(self.ishtar_user) + impt.initialize() + self.init_cr_targetkey(impt) + impt.importation() + current_nb = models.ContextRecord.objects.count() + self.assertEqual(current_nb, 4) + ''' + + # add a context record model + for cr in models.ContextRecord.objects.all(): + cr.delete() + mcc, form = self.init_context_record_import() + mcc.created_models.clear() + mcc.created_models.add(ImporterModel.objects.get( + klass='archaeological_context_records.models.ContextRecord' + )) + impt = form.save(self.ishtar_user) + impt.initialize() + self.init_cr_targetkey(impt) + impt.importation() + current_nb = models.ContextRecord.objects.count() + self.assertEqual(current_nb, 4) + ''' -class ContextRecordInit(OperationInitTest): - test_operations = False +class ContextRecordInit(OperationInitTest): def create_context_record(self, user=None, data={}, force=False): if not getattr(self, 'context_records', None): self.context_records = [] |