summaryrefslogtreecommitdiff
path: root/addons/survey/tests/test_survey_flow.py
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/survey/tests/test_survey_flow.py
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/survey/tests/test_survey_flow.py')
-rw-r--r--addons/survey/tests/test_survey_flow.py121
1 files changed, 121 insertions, 0 deletions
diff --git a/addons/survey/tests/test_survey_flow.py b/addons/survey/tests/test_survey_flow.py
new file mode 100644
index 00000000..d0c2921a
--- /dev/null
+++ b/addons/survey/tests/test_survey_flow.py
@@ -0,0 +1,121 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo.addons.survey.tests import common
+from odoo.tests import tagged
+from odoo.tests.common import HttpCase
+
+
+@tagged('-at_install', 'post_install', 'functional')
+class TestSurveyFlow(common.TestSurveyCommon, HttpCase):
+ def _format_submission_data(self, page, answer_data, additional_post_data):
+ post_data = {}
+ post_data['page_id'] = page.id
+ for question_id, answer_vals in answer_data.items():
+ question = page.question_ids.filtered(lambda q: q.id == question_id)
+ post_data.update(self._prepare_post_data(question, answer_vals['value'], post_data))
+ post_data.update(**additional_post_data)
+ return post_data
+
+ def test_flow_public(self):
+ # Step: survey manager creates the survey
+ # --------------------------------------------------
+ with self.with_user('survey_manager'):
+ survey = self.env['survey.survey'].create({
+ 'title': 'Public Survey for Tarte Al Djotte',
+ 'access_mode': 'public',
+ 'users_login_required': False,
+ 'questions_layout': 'page_per_section',
+ 'state': 'open'
+ })
+
+ # First page is about customer data
+ page_0 = self.env['survey.question'].create({
+ 'is_page': True,
+ 'sequence': 1,
+ 'title': 'Page1: Your Data',
+ 'survey_id': survey.id,
+ })
+ page0_q0 = self._add_question(
+ page_0, 'What is your name', 'text_box',
+ comments_allowed=False,
+ constr_mandatory=True, constr_error_msg='Please enter your name', survey_id=survey.id)
+ page0_q1 = self._add_question(
+ page_0, 'What is your age', 'numerical_box',
+ comments_allowed=False,
+ constr_mandatory=True, constr_error_msg='Please enter your name', survey_id=survey.id)
+
+ # Second page is about tarte al djotte
+ page_1 = self.env['survey.question'].create({
+ 'is_page': True,
+ 'sequence': 4,
+ 'title': 'Page2: Tarte Al Djotte',
+ 'survey_id': survey.id,
+ })
+ page1_q0 = self._add_question(
+ page_1, 'What do you like most in our tarte al djotte', 'multiple_choice',
+ labels=[{'value': 'The gras'},
+ {'value': 'The bette'},
+ {'value': 'The tout'},
+ {'value': 'The regime is fucked up'}], survey_id=survey.id)
+
+ # fetch starting data to check only newly created data during this flow
+ answers = self.env['survey.user_input'].search([('survey_id', '=', survey.id)])
+ answer_lines = self.env['survey.user_input.line'].search([('survey_id', '=', survey.id)])
+ self.assertEqual(answers, self.env['survey.user_input'])
+ self.assertEqual(answer_lines, self.env['survey.user_input.line'])
+
+ # Step: customer takes the survey
+ # --------------------------------------------------
+
+ # Customer opens start page
+ r = self._access_start(survey)
+ self.assertResponse(r, 200, [survey.title])
+
+ # -> this should have generated a new answer with a token
+ answers = self.env['survey.user_input'].search([('survey_id', '=', survey.id)])
+ self.assertEqual(len(answers), 1)
+ answer_token = answers.access_token
+ self.assertTrue(answer_token)
+ self.assertAnswer(answers, 'new', self.env['survey.question'])
+
+ # Customer begins survey with first page
+ r = self._access_page(survey, answer_token)
+ self.assertResponse(r, 200)
+ self.assertAnswer(answers, 'new', self.env['survey.question'])
+ csrf_token = self._find_csrf_token(r.text)
+
+ r = self._access_begin(survey, answer_token)
+ self.assertResponse(r, 200)
+
+ # Customer submit first page answers
+ answer_data = {
+ page0_q0.id: {'value': ['Alfred Poilvache']},
+ page0_q1.id: {'value': ['44.0']},
+ }
+ post_data = self._format_submission_data(page_0, answer_data, {'csrf_token': csrf_token, 'token': answer_token, 'button_submit': 'next'})
+ r = self._access_submit(survey, answer_token, post_data)
+ self.assertResponse(r, 200)
+ answers.invalidate_cache() # TDE note: necessary as lots of sudo in controllers messing with cache
+
+ # -> this should have generated answer lines
+ self.assertAnswer(answers, 'in_progress', page_0)
+ self.assertAnswerLines(page_0, answers, answer_data)
+
+ # Customer is redirected on second page and begins filling it
+ r = self._access_page(survey, answer_token)
+ self.assertResponse(r, 200)
+ csrf_token = self._find_csrf_token(r.text)
+
+ # Customer submit second page answers
+ answer_data = {
+ page1_q0.id: {'value': [page1_q0.suggested_answer_ids.ids[0], page1_q0.suggested_answer_ids.ids[1]]},
+ }
+ post_data = self._format_submission_data(page_1, answer_data, {'csrf_token': csrf_token, 'token': answer_token, 'button_submit': 'next'})
+ r = self._access_submit(survey, answer_token, post_data)
+ self.assertResponse(r, 200)
+ answers.invalidate_cache() # TDE note: necessary as lots of sudo in controllers messing with cache
+
+ # -> this should have generated answer lines and closed the answer
+ self.assertAnswer(answers, 'done', page_1)
+ self.assertAnswerLines(page_1, answers, answer_data)