diff options
Diffstat (limited to 'archaeological_context_records')
| -rw-r--r-- | archaeological_context_records/forms.py | 4 | ||||
| -rw-r--r-- | archaeological_context_records/locale/django.pot | 6 | ||||
| -rw-r--r-- | archaeological_context_records/models.py | 14 | ||||
| -rw-r--r-- | archaeological_context_records/tests.py | 141 | ||||
| -rw-r--r-- | archaeological_context_records/tests/MCC-context-records-example.csv | 2 | 
5 files changed, 110 insertions, 57 deletions
diff --git a/archaeological_context_records/forms.py b/archaeological_context_records/forms.py index 0452243e2..953d33417 100644 --- a/archaeological_context_records/forms.py +++ b/archaeological_context_records/forms.py @@ -144,7 +144,7 @@ class RecordFormGeneral(ManageOldType, forms.Form):      width = forms.FloatField(label=_(u"Width (m)"), required=False)      thickness = forms.FloatField(label=_(u"Thickness (m)"), required=False)      depth = forms.FloatField(label=_(u"Depth (m)"), required=False) -    unit = forms.ChoiceField(label=_("Unit"), required=False, choices=[]) +    unit = forms.ChoiceField(label=_("Context record type"), required=False, choices=[])      has_furniture = forms.NullBooleanField(label=_(u"Has furniture?"),                                             required=False)      location = forms.CharField( @@ -352,7 +352,7 @@ class RecordSourceSelect(SourceSelect):      context_record__datings__period = forms.ChoiceField(          label=_(u"Period of the context record"), choices=[])      context_record__unit = forms.ChoiceField( -        label=_(u"Unit type of the context record"), choices=[]) +        label=_(u"Context record type"), choices=[])      def __init__(self, *args, **kwargs):          super(RecordSourceSelect, self).__init__(*args, **kwargs) diff --git a/archaeological_context_records/locale/django.pot b/archaeological_context_records/locale/django.pot index 75e6a2160..e42400f29 100644 --- a/archaeological_context_records/locale/django.pot +++ b/archaeological_context_records/locale/django.pot @@ -3,7 +3,7 @@  # This file is distributed under the same license as the Ishtar package.  # Étienne Loks <etienne.loks at peacefrogs net>, 2010-2015.  # Valérie-Emma Leroux <emma@iggdrasil.net>, 2016. #zanata -# Étienne Loks <etienne.loks@iggdrasil.net>, 2017. #zanata +# Valérie-Emma Leroux <emma@iggdrasil.net>, 2017. #zanata  msgid ""  msgstr "" @@ -253,11 +253,11 @@ msgid "Dating types"  msgstr ""  #: models.py:47 -msgid "Dating quality" +msgid "Dating quality type"  msgstr ""  #: models.py:48 -msgid "Dating qualities" +msgid "Dating quality types"  msgstr ""  #: models.py:62 diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py index 9714673e6..377cea087 100644 --- a/archaeological_context_records/models.py +++ b/archaeological_context_records/models.py @@ -76,12 +76,12 @@ class Dating(models.Model):  class Unit(GeneralType):      order = models.IntegerField(_(u"Order")) -    parent = models.ForeignKey("Unit", verbose_name=_(u"Parent unit"), +    parent = models.ForeignKey("Unit", verbose_name=_(u"Parent context record type"),                                 blank=True, null=True)      class Meta: -        verbose_name = _(u"Unit Type") -        verbose_name_plural = _(u"Unit Types") +        verbose_name = _(u"Context record Type") +        verbose_name_plural = _(u"Context record Types")          ordering = ('order', 'label')      def __unicode__(self): @@ -193,7 +193,7 @@ class ContextRecord(BaseHistorizedItem, ImageModel, OwnPerms,      datings = models.ManyToManyField(Dating)      datings_comment = models.TextField(_(u"Comment on datings"), blank=True,                                         null=True) -    unit = models.ForeignKey(Unit, verbose_name=_(u"Unit"), related_name='+', +    unit = models.ForeignKey(Unit, verbose_name=_(u"Context record type"), related_name='+',                               blank=True, null=True)      has_furniture = models.NullBooleanField(_(u"Has furniture?"), blank=True,                                              null=True) @@ -410,13 +410,13 @@ class RecordRelations(GeneralRecordRelations, models.Model):      ]      COL_LABELS = {          "left_record__label": _(u"ID (left)"), -        "left_record__unit": _(u"Unit (left)"), +        "left_record__unit": _(u"Context record type (left)"),          "left_record__parcel": _(u"Parcel (left)"),          "left_record__description": _(u"Description (left)"),          "left_record__datings__period": _(u"Periods (left)"),          "relation_type": _(u"Relation type"),          "right_record__label": _(u"ID (right)"), -        "right_record__unit": _(u"Unit (right)"), +        "right_record__unit": _(u"Context record type (right)"),          "right_record__parcel": _(u"Parcel (right)"),          "right_record__description": _(u"Description (right)"),          "right_record__datings__period": _(u"Periods (right)") @@ -454,7 +454,7 @@ class RecordRelationView(models.Model):      COL_LABELS = {          "relation_type": _(u"Relation type"),          "right_record__label": _(u"ID"), -        "right_record__unit": _(u"Unit"), +        "right_record__unit": _(u"Context record type"),          "right_record__parcel": _(u"Parcel"),          "right_record__description": _(u"Description"),          "right_record__datings__period": _(u"Periods") 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 = [] diff --git a/archaeological_context_records/tests/MCC-context-records-example.csv b/archaeological_context_records/tests/MCC-context-records-example.csv index d246623cd..9a6ad5f09 100644 --- a/archaeological_context_records/tests/MCC-context-records-example.csv +++ b/archaeological_context_records/tests/MCC-context-records-example.csv @@ -1,5 +1,5 @@  code OA,numero INSEE commune,identifiant parcelle,identifiant UE,type,description,interpretation,date ouverture,date fermeture,identifiant document georeferencement,commentaire,nature,chronologie  4200,75101,XXXX,HC,Hors contexte,UE globale pour cette parcelle,Non-applicable,,,,UE virtuelle,,  4200,75101,XXXX,H.-C.,HC,UE globale pour cette parcelle,NA,,,,UE virtuelle,, -4200,59350,YY55,XXXXXX,HC,UE globale pour cette parcelle,,,,,UE virtuelle,, +4200,59350,YY55,XXXXXX,HC,UE globale pour cette parcelle,,,,,UE virtuelle,,paleolithic  4200,59350,YY55,US17,couche,couche de cendre,comblement,,,,présence de charbons,,indéterminé  | 
