summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2017-02-24 17:15:39 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2017-02-24 17:15:39 +0100
commit0a280ab1b2a3623780b74528d67debddd891fc6c (patch)
tree656c573a9fe6bcba550d0d87d1290779b8fb93f8 /ishtar_common
parentd3145603feb093f4b6f7c3b0a64cfff547a683fa (diff)
downloadIshtar-0a280ab1b2a3623780b74528d67debddd891fc6c.tar.bz2
Ishtar-0a280ab1b2a3623780b74528d67debddd891fc6c.zip
Wizard tests improvements. Test inappropriate parcel deletion.
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/tests.py49
1 files changed, 30 insertions, 19 deletions
diff --git a/ishtar_common/tests.py b/ishtar_common/tests.py
index 42bb1860e..44d7f8275 100644
--- a/ishtar_common/tests.py
+++ b/ishtar_common/tests.py
@@ -102,20 +102,30 @@ class WizardTestFormData(object):
"""
Test set to simulate wizard steps
"""
- def __init__(self, name, form_datas, ignored=[], extra_tests=[]):
+ def __init__(self, name, form_datas, ignored=[], pre_tests=[],
+ extra_tests=[]):
"""
:param name: explicit name of the test
:param form_datas: dict with data for each step - dict key are wizard
step name
:param ignored: steps to be ignored in wizard processing
+ :param pre_tests: list of function to be executed before the wizard
:param extra_tests: list of extra tests. Theses tests must be functions
accepting two parameters: the current test object and the final step
response
"""
self.form_datas = form_datas
self.ignored = ignored[:]
+ self.pre_tests = pre_tests
self.extra_tests = extra_tests
+ def inits(self, test_object):
+ """
+ Initialisations before the wizard.
+ """
+ for pre in self.pre_tests:
+ pre(test_object)
+
def tests(self, test_object, final_step_response):
"""
Specific tests for theses datas. Raise Exception if not OK.
@@ -185,6 +195,7 @@ class WizardTest(object):
url = reverse(self.url_name)
self.pre_wizard()
for test_form_data in self.form_datas:
+ test_form_data.inits(self)
form_data = test_form_data.form_datas
ignored = test_form_data.ignored
for idx, step in enumerate(self.steps):
@@ -207,27 +218,27 @@ class WizardTest(object):
for k in d:
data['{}-{}'.format(current_step, k)] = d[k]
- next_idx, next_form = idx + 1, None
- while len(self.steps) > next_idx:
- if self.steps[idx + 1][0] not in ignored:
- next_form = self.steps[idx + 1][0]
- break
- next_idx += 1
- if next_form:
- try:
- response = self.client.post(url, data)
- 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))
- self.check_response(response, current_step)
+ next_form_is_checked = len(self.steps) > idx + 1 and \
+ self.steps[idx + 1][0] not in ignored
+ try:
+ 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))
+ 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))
- else:
- response = self.client.post(url, data, follow=True)
- self.check_response(response, current_step)
+ if idx == len(self.steps) - 1:
+ # last form
+ self.assertRedirects(
+ response,
+ '/{}/done'.format(self.url_name))
test_form_data.tests(self, response)
self.post_wizard()