summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2018-05-29 11:19:14 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2018-05-29 11:19:14 +0200
commitd3bf3f911488ddd5a9fd5617fb28e0f26a7f4e1a (patch)
tree87d0f32604e7b960870a72713094dabfd3e3553e
parent1384bedf3b57a7a78f2412958d54fb93779b80eb (diff)
downloadIshtar-d3bf3f911488ddd5a9fd5617fb28e0f26a7f4e1a.tar.bz2
Ishtar-d3bf3f911488ddd5a9fd5617fb28e0f26a7f4e1a.zip
Fix operation_code display when old_code is hidden (refs #4104)
-rw-r--r--archaeological_operations/forms.py24
-rw-r--r--archaeological_operations/tests.py25
-rw-r--r--ishtar_common/tests.py24
3 files changed, 52 insertions, 21 deletions
diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py
index e28fb2421..2309a4f4a 100644
--- a/archaeological_operations/forms.py
+++ b/archaeological_operations/forms.py
@@ -905,14 +905,6 @@ class OperationFormGeneral(CustomForm, ManageOldType):
if 'record_quality' in self.fields:
self.fields['record_quality'].choices = \
[('', '--')] + list(models.QUALITY)
- if 'operation_code' in self.fields:
- fields = OrderedDict()
- ope_code = self.fields.pop('operation_code')
- for key, value in self.fields.items():
- if key == 'old_code':
- fields['operation_code'] = ope_code
- fields[key] = value
- self.fields = fields
def clean(self):
cleaned_data = self.cleaned_data
@@ -955,7 +947,6 @@ class OperationFormGeneral(CustomForm, ManageOldType):
if ops.count():
max_val = models.Operation.objects.filter(year=year).aggregate(
Max('operation_code'))["operation_code__max"]
- msg = ''
if year and max_val:
msg = _(
u"Operation code already exists for year: %(year)d - use a "
@@ -980,14 +971,19 @@ class OperationFormModifGeneral(OperationFormGeneral):
def __init__(self, *args, **kwargs):
super(OperationFormModifGeneral, self).__init__(*args, **kwargs)
- asso_file = self.fields.pop('associated_file')
if not get_current_profile().files:
- return
+ self.fields.pop('associated_file')
+
fields = OrderedDict()
- for key, value in self.fields.items():
- if key == 'in_charge':
- fields['associated_file'] = asso_file
+ for idx, field in enumerate(self.fields.items()):
+ key, value = field
+ if 'associated_file' in self.fields and (
+ key == 'in_charge' or idx > 6):
+ fields['associated_file'] = self.fields.pop('associated_file')
fields[key] = value
+ if 'operation_code' in self.fields and (
+ key == 'year' or idx > 5):
+ fields['operation_code'] = self.fields.pop('operation_code')
self.fields = fields
diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py
index 657a3aa4c..e95010d36 100644
--- a/archaeological_operations/tests.py
+++ b/archaeological_operations/tests.py
@@ -1809,6 +1809,20 @@ class OperationWizardModifTest(WizardTest, OperationInitTest, TestCase):
},
ignored=base_ignored_steps
),
+ FormData(
+ "Set an operation to an exiting operation code for this year",
+ form_datas={
+ 'selec': {},
+ 'general': {
+ 'operation_type': 2,
+ 'operation_code': 42,
+ 'year': 2017},
+ 'townsgeneral': [],
+ 'parcelsgeneral': [],
+ },
+ ignored=base_ignored_steps,
+ error_expected='general'
+ ),
]
def pre_wizard(self):
@@ -1819,6 +1833,12 @@ class OperationWizardModifTest(WizardTest, OperationInitTest, TestCase):
init_parcel = self.create_parcel()[0]
operation.parcels.add(init_parcel)
+ self.create_operation()
+ operation2 = self.operations[1]
+ operation2.year = 2017
+ operation2.operation_code = 42
+ operation2.save()
+
from archaeological_context_records.models import ContextRecord
cr_data = {'label': "Context record", "operation": operation,
'parcel': init_parcel,
@@ -1831,14 +1851,17 @@ class OperationWizardModifTest(WizardTest, OperationInitTest, TestCase):
self.form_datas[0].set('general', 'operation_type', self.ope_type.pk)
self.form_datas[1].set('general', 'operation_type', self.ope_type.pk)
self.form_datas[2].set('general', 'operation_type', self.ope_type.pk)
+ self.form_datas[3].set('general', 'operation_type', self.ope_type.pk)
data = self.form_datas[0].form_datas
data2 = self.form_datas[1].form_datas
data3 = self.form_datas[2].form_datas
+ data4 = self.form_datas[3].form_datas
data['selec']['pk'] = operation.pk
data2['selec']['pk'] = operation.pk
data3['selec']['pk'] = operation.pk
+ data4['selec']['pk'] = operation.pk
town = self.create_towns(
datas={'numero_insee': '67890', 'name': 'Twin Peaks'})[-1]
@@ -1846,6 +1869,7 @@ class OperationWizardModifTest(WizardTest, OperationInitTest, TestCase):
data['townsgeneral'] = towns
data2['townsgeneral'] = towns
data3['townsgeneral'] = towns
+ data4['townsgeneral'] = towns
parcel_data = {
'town': town.pk, 'year': 2017, 'section': 'S',
@@ -1853,6 +1877,7 @@ class OperationWizardModifTest(WizardTest, OperationInitTest, TestCase):
data['parcelsgeneral'].append(parcel_data)
data2['parcelsgeneral'].append(parcel_data)
data3['parcelsgeneral'].append(parcel_data)
+ data4['parcelsgeneral'].append(parcel_data)
parcel_data_2 = {
'town': init_parcel.town.pk, 'year': init_parcel.year or '',
diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py
index 208c8d224..7bce12a4d 100644
--- a/ishtar_common/tests.py
+++ b/ishtar_common/tests.py
@@ -175,8 +175,8 @@ class WizardTestFormData(object):
"""
Test set to simulate wizard steps
"""
- def __init__(self, name, form_datas={}, ignored=[], pre_tests=[],
- extra_tests=[]):
+ def __init__(self, name, form_datas=None, ignored=None, pre_tests=None,
+ extra_tests=None, error_expected=None):
"""
:param name: explicit name of the test
:param form_datas: dict with data for each step - dict key are wizard
@@ -186,12 +186,14 @@ class WizardTestFormData(object):
:param extra_tests: list of extra tests. These tests must be functions
accepting two parameters: the current test object and the final step
response
+ :param error_expected: step where an error is expected
"""
self.name = name
- self.form_datas = form_datas
- self.ignored = ignored[:]
- self.pre_tests = pre_tests
- self.extra_tests = extra_tests
+ self.form_datas = form_datas or {}
+ self.ignored = ignored[:] if ignored else []
+ self.pre_tests = pre_tests or []
+ self.extra_tests = extra_tests or []
+ self.error_expected = error_expected
def set(self, form_name, field_name, value):
"""
@@ -229,6 +231,8 @@ class WizardTestFormData(object):
if suffix in form_name:
continue
self.form_datas[form_name + suffix] = self.form_datas.pop(form_name)
+ if self.error_expected and suffix not in self.error_expected:
+ self.error_expected += suffix
for pre in self.pre_tests:
pre(test_object)
@@ -348,7 +352,13 @@ class WizardTest(object):
response = self.wizard_post(
self.client, url, current_step, data,
not next_form_is_checked)
- self.check_response(response, current_step)
+
+ if current_step == test_form_data.error_expected:
+ with self.assertRaises(ValidationError):
+ self.check_response(response, current_step)
+ else:
+ self.check_response(response, current_step)
+
if next_form_is_checked:
next_form = self.steps[idx + 1][0]
self.assertRedirects(