summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2017-06-30 16:38:15 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2017-06-30 16:38:15 +0200
commit98dfb2e3b06d04248a39b18019a46c2bb63efb8c (patch)
tree7406d366ef6baa7b421f98f9bb1aed3bc1b17a29
parent3a4a2cf0ef72f044f0ca1c42fb2714b362252753 (diff)
downloadIshtar-98dfb2e3b06d04248a39b18019a46c2bb63efb8c.tar.bz2
Ishtar-98dfb2e3b06d04248a39b18019a46c2bb63efb8c.zip
Sources wizard: fix author deletion (refs #3634)
-rw-r--r--archaeological_operations/tests.py50
-rw-r--r--archaeological_operations/views.py8
-rw-r--r--ishtar_common/forms_common.py1
-rw-r--r--ishtar_common/templates/blocks/form_snippet.html5
-rw-r--r--ishtar_common/tests.py19
5 files changed, 73 insertions, 10 deletions
diff --git a/archaeological_operations/tests.py b/archaeological_operations/tests.py
index 924727065..b2f38801a 100644
--- a/archaeological_operations/tests.py
+++ b/archaeological_operations/tests.py
@@ -32,7 +32,7 @@ from archaeological_operations import views
from ishtar_common.models import OrganizationType, Organization, ItemKey, \
ImporterType, IshtarUser, TargetKey, ImporterModel, IshtarSiteProfile, \
- Town, ImporterColumn, Person
+ Town, ImporterColumn, Person, Author, SourceType, AuthorType
from archaeological_context_records.models import Unit
from ishtar_common import forms_common
@@ -1357,3 +1357,51 @@ class OperationAdminActWizardCreationTest(WizardTest, OperationInitTest,
def post_wizard(self):
self.assertEqual(models.AdministrativeAct.objects.count(),
self.number + 1)
+
+
+class OperationSourceWizardModificationTest(WizardTest, OperationInitTest,
+ TestCase):
+ fixtures = OperationWizardCreationTest.fixtures
+ url_name = 'operation_source_modification'
+ wizard_name = 'operation_source_wizard'
+ steps = views.operation_source_modification_steps
+ form_datas = [
+ FormData(
+ "Test remove all authors",
+ form_datas={
+ 'selec-operation_source_modification': {},
+ 'source-operation_source_modification': {
+ 'title': "New title",
+ 'source_type': None,
+ 'index': 42
+ },
+ 'authors-operation_source_modification': []
+ },
+ )
+ ]
+
+ def pre_wizard(self):
+ ope = self.get_default_operation()
+ self.source = models.OperationSource.objects.create(
+ title="Old title", source_type=SourceType.objects.all()[0],
+ operation=ope
+ )
+ author = Author.objects.create(
+ author_type=AuthorType.objects.all()[0],
+ person=Person.objects.all()[0]
+ )
+
+ self.source.authors.add(author)
+
+ data = self.form_datas[0].form_datas
+ data['selec-operation_source_modification']['pk'] = self.source.pk
+
+ data['source-operation_source_modification']['hidden_operation_id'] = \
+ self.source.pk
+ data['source-operation_source_modification'][
+ 'source_type'] = SourceType.objects.all()[1].pk
+ super(OperationSourceWizardModificationTest, self).pre_wizard()
+
+ def post_wizard(self):
+ source = models.OperationSource.objects.get(pk=self.source.pk)
+ self.assertEqual(source.authors.count(), 0) \ No newline at end of file
diff --git a/archaeological_operations/views.py b/archaeological_operations/views.py
index 24271bb8f..6a1340e70 100644
--- a/archaeological_operations/views.py
+++ b/archaeological_operations/views.py
@@ -321,11 +321,15 @@ operation_source_creation_wizard = OperationSourceWizard.as_view([
label=_(u"Operation: source creation"),
url_name='operation_source_creation',)
-operation_source_modification_wizard = OperationSourceWizard.as_view([
+operation_source_modification_steps = [
('selec-operation_source_modification', OperationSourceFormSelection),
('source-operation_source_modification', OperationSourceForm),
('authors-operation_source_modification', AuthorFormset),
- ('final-operation_source_modification', FinalForm)],
+ ('final-operation_source_modification', FinalForm)
+]
+
+operation_source_modification_wizard = OperationSourceWizard.as_view(
+ operation_source_modification_steps,
label=_(u"Operation: source modification"),
url_name='operation_source_modification',)
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py
index b317f77e3..61e9f1a88 100644
--- a/ishtar_common/forms_common.py
+++ b/ishtar_common/forms_common.py
@@ -884,6 +884,7 @@ class AuthorFormSelection(forms.Form):
base_model = 'author'
associated_models = {'author': models.Author}
author = forms.IntegerField(
+ required=False,
widget=widgets.JQueryAutoComplete(
"/" + settings.URL_PATH + 'autocomplete-author',
associated_model=models.Author, new=True),
diff --git a/ishtar_common/templates/blocks/form_snippet.html b/ishtar_common/templates/blocks/form_snippet.html
index 2f841e078..5ee88e25f 100644
--- a/ishtar_common/templates/blocks/form_snippet.html
+++ b/ishtar_common/templates/blocks/form_snippet.html
@@ -10,4 +10,7 @@
</tr>
<tr class="help_text" id="{{field.auto_id}}_help">
<td colspan="3"><div>{{field.help_text}}</div></td>
- {%endif%}</tr>{% else %}{{field}}{% endif %}{% endfor %}
+ {%endif%}</tr>{% else %}{{field}}{% if field.errors %}
+ <tr class='errors'>
+ <td colspan='3'>{{field.name}} - {{ field.errors }}</td>
+ </tr>{% endif %}{{field|safe}}{% endif %}{% endfor %}
diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py
index a91a0ba58..174918dd4 100644
--- a/ishtar_common/tests.py
+++ b/ishtar_common/tests.py
@@ -222,9 +222,11 @@ class WizardTest(object):
self.wizard_name):
[current_step],
}
+
+ # reconstruct a POST request
if current_step in form_data:
d = form_data[current_step]
- if type(d) in (list, tuple): # formset
+ if type(d) in (list, tuple): # is a formset
for d_idx, item in enumerate(d):
for k in item:
data['{}-{}-{}'.format(
@@ -239,16 +241,21 @@ class WizardTest(object):
response = self.client.post(url, data,
follow=not next_form_is_checked)
except ValidationError as e:
- # on ManagementForm data is missing or has been tampered
- # error verify the wizard_name or step name
- raise ValidationError(u"Errors: {} on {}.".format(
- u" - ".join(e.messages), current_step))
+ msg = u"Errors: {} on {}. On \"ManagementForm data is " \
+ u"missing or...\" error verify the wizard_name or " \
+ u"step name".format(u" - ".join(e.messages),
+ current_step)
+ raise ValidationError(msg)
self.check_response(response, current_step)
if next_form_is_checked:
next_form = self.steps[idx + 1][0]
self.assertRedirects(
response,
- '/{}/{}'.format(self.url_name, next_form))
+ '/{}/{}'.format(self.url_name, next_form),
+ msg_prefix="Redirection to {} has failed - "
+ "Error on previous form ({})?".format(
+ next_form, current_step)
+ )
if idx == len(self.steps) - 1:
# last form
self.assertRedirects(