summaryrefslogtreecommitdiff
path: root/archaeological_context_records
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_context_records')
-rw-r--r--archaeological_context_records/forms.py4
-rw-r--r--archaeological_context_records/locale/django.pot6
-rw-r--r--archaeological_context_records/models.py14
-rw-r--r--archaeological_context_records/tests.py141
-rw-r--r--archaeological_context_records/tests/MCC-context-records-example.csv2
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é