diff options
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 |
commit | d3bf3f911488ddd5a9fd5617fb28e0f26a7f4e1a (patch) | |
tree | 87d0f32604e7b960870a72713094dabfd3e3553e | |
parent | 1384bedf3b57a7a78f2412958d54fb93779b80eb (diff) | |
download | Ishtar-d3bf3f911488ddd5a9fd5617fb28e0f26a7f4e1a.tar.bz2 Ishtar-d3bf3f911488ddd5a9fd5617fb28e0f26a7f4e1a.zip |
Fix operation_code display when old_code is hidden (refs #4104)
-rw-r--r-- | archaeological_operations/forms.py | 24 | ||||
-rw-r--r-- | archaeological_operations/tests.py | 25 | ||||
-rw-r--r-- | ishtar_common/tests.py | 24 |
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( |