diff options
Diffstat (limited to 'archaeological_operations/tests.py')
| -rw-r--r-- | archaeological_operations/tests.py | 237 | 
1 files changed, 163 insertions, 74 deletions
| diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py index d4134693f..040c7c3d8 100644 --- a/archaeological_operations/tests.py +++ b/archaeological_operations/tests.py @@ -35,71 +35,44 @@ import models  from archaeological_operations import views  from ishtar_common.models import OrganizationType, Organization, \ -    ImporterType, IshtarUser, TargetKey, IshtarSiteProfile, Town +    ImporterType, IshtarUser, TargetKey, ImporterModel, IshtarSiteProfile, Town +from archaeological_context_records.models import Unit  from ishtar_common import forms_common  from ishtar_common.tests import WizardTest, WizardTestFormData as FormData, \      create_superuser, create_user -class ImportOperationTest(TestCase): -    fixtures = [settings.ROOT_PATH + -                '../fixtures/initial_data-auth-fr.json', -                settings.ROOT_PATH + -                '../ishtar_common/fixtures/initial_data-fr.json', -                settings.ROOT_PATH + -                '../ishtar_common/fixtures/test_towns.json', -                settings.ROOT_PATH + -                '../ishtar_common/fixtures/initial_importtypes-fr.json', -                settings.ROOT_PATH + -                '../archaeological_operations/fixtures/initial_data-fr.json'] -    test_operations = True +class ImportTest(object): +    def setUp(self): +        self.username, self.password, self.user = create_superuser() +        self.ishtar_user = IshtarUser.objects.get(pk=self.user.pk) -    def setTargetKey(self, target, key, value): -        tg = TargetKey.objects.get(target__target=target, key=key) +    def set_target_key(self, target, key, value, imp=None): +        keys = {'target__target': target, 'key': key} +        if imp: +            keys['associated_import'] = imp +        tg = TargetKey.objects.get(**keys)          tg.value = value          tg.is_set = True          tg.save() -    def setUp(self): -        self.username, self.password, self.user = create_superuser() -        self.ishtar_user = IshtarUser.objects.get(pk=self.user.pk) - -    def testMCCImportOperation(self, test=True): -        # MCC opérations -        if self.test_operations is False: -            test = False -        first_ope_nb = models.Operation.objects.count() -        MCC_OPERATION = ImporterType.objects.get(name=u"MCC - Opérations") +    def init_ope_import(self): +        mcc_operation = ImporterType.objects.get(name=u"MCC - Opérations")          mcc_operation_file = open(              settings.ROOT_PATH +              '../archaeological_operations/tests/MCC-operations-example.csv',              'rb')          file_dict = {'imported_file': SimpleUploadedFile(              mcc_operation_file.name, mcc_operation_file.read())} -        post_dict = {'importer_type': MCC_OPERATION.pk, 'skip_lines': 1, +        post_dict = {'importer_type': mcc_operation.pk, 'skip_lines': 1,                       "encoding": 'utf-8'} -        form = forms_common.NewImportForm(data=post_dict, files=file_dict, -                                          instance=None) +        form = forms_common.NewImportForm(data=post_dict, files=file_dict)          form.is_valid() -        if test: -            self.assertTrue(form.is_valid()) -        impt = form.save(self.ishtar_user) -        target_key_nb = TargetKey.objects.count() -        impt.initialize() -        # new key have to be set -        if test: -            self.assertTrue(TargetKey.objects.count() > target_key_nb) - -        # first try to import -        impt.importation() -        current_ope_nb = models.Operation.objects.count() -        # no new operation imported because of a missing connection for -        # operation_type value -        if test: -            self.assertTrue(current_ope_nb == first_ope_nb) +        return mcc_operation, form -        # doing manualy connections +    def init_ope_targetkey(self, imp): +        # doing manually connections          tg = TargetKey.objects.filter(target__target='operation_type'                                        ).order_by('-pk').all()[0]          tg.value = models.OperationType.objects.get( @@ -107,21 +80,109 @@ class ImportOperationTest(TestCase):          tg.is_set = True          tg.save() -        target = TargetKey.objects.get(key='gallo-romain') +        target = TargetKey.objects.get(key='gallo-romain', +                                       associated_import=imp)          gallo = models.Period.objects.get(txt_idx='gallo-roman')          target.value = gallo.pk          target.is_set = True          target.save() -        target = TargetKey.objects.get(key='age-du-fer') +        target = TargetKey.objects.get(key='age-du-fer', +                                       associated_import=imp)          iron = models.Period.objects.get(txt_idx='iron_age')          target.value = iron.pk          target.is_set = True          target.save() +    def init_ope(self): +        importer, form = self.init_ope_import() +        impt = form.save(self.ishtar_user) +        impt.initialize() +        self.init_ope_targetkey(imp=impt) +        impt.importation() + +    def init_parcel_import(self): +        self.init_ope() +        mcc_parcel = ImporterType.objects.get(name=u"MCC - Parcelles") +        mcc_file = open( +            settings.ROOT_PATH + +            '../archaeological_operations/tests/MCC-parcelles-example.csv', +            'rb') +        file_dict = {'imported_file': SimpleUploadedFile(mcc_file.name, +                                                         mcc_file.read())} +        post_dict = {'importer_type': mcc_parcel.pk, 'skip_lines': 1, +                     "encoding": 'utf-8'} +        form = forms_common.NewImportForm(data=post_dict, files=file_dict) +        form.is_valid() +        return mcc_parcel, form + +    def init_parcel(self): +        importer, form = self.init_parcel_import() +        impt = form.save(self.ishtar_user) +        impt.initialize() +        impt.importation() + +    def init_context_record_import(self): +        self.init_parcel() +        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) +        form.is_valid() +        return mcc, form + +    def init_cr_targetkey(self, imp): +        hc = Unit.objects.get(txt_idx='not_in_context').pk +        self.set_target_key('unit', 'hc', hc, imp=imp) +        self.set_target_key('unit', 'hors-contexte', hc, imp=imp) +        layer = Unit.objects.get(txt_idx='layer').pk +        self.set_target_key('unit', 'couche', layer, imp=imp) + +    def init_context_record(self): +        mcc, form = self.init_context_record_import() +        impt = form.save(self.ishtar_user) +        impt.initialize() +        self.init_cr_targetkey(impt) +        impt.importation() + + +class ImportOperationTest(ImportTest, TestCase): +    fixtures = [settings.ROOT_PATH + +                '../fixtures/initial_data-auth-fr.json', +                settings.ROOT_PATH + +                '../ishtar_common/fixtures/initial_data-fr.json', +                settings.ROOT_PATH + +                '../ishtar_common/fixtures/test_towns.json', +                settings.ROOT_PATH + +                '../ishtar_common/fixtures/initial_importtypes-fr.json', +                settings.ROOT_PATH + +                '../archaeological_operations/fixtures/initial_data-fr.json'] + +    def test_mcc_import_operation(self): +        first_ope_nb = models.Operation.objects.count() +        importer, form = self.init_ope_import() +        self.assertTrue(form.is_valid()) +        impt = form.save(self.ishtar_user) +        target_key_nb = TargetKey.objects.count() +        impt.initialize() +        # new key have to be set +        self.assertTrue(TargetKey.objects.count() > target_key_nb) + +        # first try to import +        impt.importation() +        current_ope_nb = models.Operation.objects.count() +        # no new operation imported because of a missing connection for +        # operation_type value +        self.assertTrue(current_ope_nb == first_ope_nb) +        self.init_ope_targetkey(imp=impt) +          impt.importation() -        if not test: -            return          # a new operation has now been imported          current_ope_nb = models.Operation.objects.count()          self.assertTrue(current_ope_nb == (first_ope_nb + 1)) @@ -131,8 +192,9 @@ class ImportOperationTest(TestCase):          self.assertTrue(last_ope.code_patriarche == 4200)          self.assertTrue(last_ope.operation_type.txt_idx == 'prog_excavation')          self.assertEqual(last_ope.periods.count(), 2) -        periods = last_ope.periods.all() -        self.assertTrue(iron in periods and gallo in periods) +        periods = [period.txt_idx for period in last_ope.periods.all()] +        self.assertIn('iron_age', periods) +        self.assertIn('gallo-roman', periods)          # a second importation will be not possible: no two same patriarche          # code @@ -141,33 +203,62 @@ class ImportOperationTest(TestCase):          self.assertTrue(last_ope ==                          models.Operation.objects.order_by('-pk').all()[0]) -    def testMCCImportParcels(self, test=True): -        if self.test_operations is False: -            test = False -        self.testMCCImportOperation(test=False) +    def test_model_limitation(self): +        importer, form = self.init_ope_import() +        importer.created_models.clear() +        impt = form.save(self.ishtar_user) +        impt.initialize() +        self.init_ope_targetkey(imp=impt) + +        # no model defined in created_models: normal import +        init_ope_number = models.Operation.objects.count() +        impt.importation() +        current_ope_nb = models.Operation.objects.count() +        self.assertEqual(current_ope_nb, init_ope_number + 1) + +        last_ope = models.Operation.objects.order_by('-pk').all()[0] +        last_ope.delete() + +        importer, form = self.init_ope_import() +        # add an inadequate model to make created_models non empty +        importer.created_models.clear() +        importer.created_models.add(ImporterModel.objects.get( +            klass='ishtar_common.models.Organization' +        )) +        impt = form.save(self.ishtar_user) +        impt.initialize() +        self.init_ope_targetkey(imp=impt) + +        # no imports +        impt.importation() +        current_ope_nb = models.Operation.objects.count() +        self.assertEqual(current_ope_nb, init_ope_number) + +        importer, form = self.init_ope_import() +        # add operation model to allow creation +        importer.created_models.clear() +        importer.created_models.add(ImporterModel.objects.get( +            klass='archaeological_operations.models.Operation' +        )) +        impt = form.save(self.ishtar_user) +        impt.initialize() +        self.init_ope_targetkey(imp=impt) + +        # import of operations +        impt.importation() +        current_ope_nb = models.Operation.objects.count() +        self.assertEqual(current_ope_nb, init_ope_number + 1) + +    def test_mcc_import_parcels(self):          old_nb = models.Parcel.objects.count() -        MCC_PARCEL = ImporterType.objects.get(name=u"MCC - Parcelles") -        mcc_file = open( -            settings.ROOT_PATH + -            '../archaeological_operations/tests/MCC-parcelles-example.csv', -            'rb') -        file_dict = {'imported_file': SimpleUploadedFile(mcc_file.name, -                                                         mcc_file.read())} -        post_dict = {'importer_type': MCC_PARCEL.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_parcel, form = self.init_parcel_import()          impt = form.save(self.ishtar_user)          impt.initialize()          impt.importation() -        if not test: -            return          # new parcels has now been imported          current_nb = models.Parcel.objects.count() -        self.assertTrue(current_nb == (old_nb + 2)) +        self.assertEqual(current_nb, old_nb + 2) +          # and well imported          last_parcels = models.Parcel.objects.order_by('-pk').all()[0:2]          external_ids = sorted(['4200-59350-YY55', '4200-75101-XXXX']) @@ -195,8 +286,6 @@ class ImportOperationTest(TestCase):          self.assertEqual(parcel_count - 2, models.Parcel.objects.count())      def testParseParcels(self): -        if not self.test_operations: -            return          # the database needs to be initialised before importing          from archaeological_operations.import_from_csv import parse_parcels          # default_town = Town.objects.create(numero_insee="12345", | 
