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é |