diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/survey/tests/test_survey_ui_session.py | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/survey/tests/test_survey_ui_session.py')
| -rw-r--r-- | addons/survey/tests/test_survey_ui_session.py | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/addons/survey/tests/test_survey_ui_session.py b/addons/survey/tests/test_survey_ui_session.py new file mode 100644 index 00000000..53dd81ea --- /dev/null +++ b/addons/survey/tests/test_survey_ui_session.py @@ -0,0 +1,210 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from dateutil.relativedelta import relativedelta + +from odoo import fields +from odoo.tests.common import tagged, HttpCase + + +@tagged('post_install', '-at_install') +class TestUiSession(HttpCase): + def test_admin_survey_session(self): + """ This method tests a full 'survey session' flow. + Break down of different steps: + - Create the test data + - A scored survey + - A nickname question + - "Simple" type questions (text, date, datetime) + - A regular simple choice + - A scored simple choice + - A scored AND timed multiple choice + - Create a new survey session + - Register 3 attendees to it + - Open the session manager to check that our attendees are accounted for + - Create some answers to our survey questions. + - Then run the 'big' manage session tour (see JS doc for details) + - And finally check that our session and attendees inputs are correctly closed. """ + + # ======================= + # CREATE SURVEY TEST DATA + # ======================= + + test_start_time = fields.Datetime.now() + + survey_session = self.env['survey.survey'].create({ + 'title': 'User Session Survey', + 'access_token': 'b137640d-14d4-4748-9ef6-344caaaaafe', + 'state': 'open', + 'access_mode': 'public', + 'users_can_go_back': False, + 'questions_layout': 'page_per_question', + 'scoring_type': 'scoring_without_answers' + }) + + nickname_question = self.env['survey.question'].create({ + 'survey_id': survey_session.id, + 'title': 'Nickname', + 'save_as_nickname': True, + 'sequence': 1, + 'question_type': 'char_box', + }) + text_question = self.env['survey.question'].create({ + 'survey_id': survey_session.id, + 'title': 'Text Question', + 'sequence': 2, + 'question_type': 'char_box', + }) + date_question = self.env['survey.question'].create({ + 'survey_id': survey_session.id, + 'title': 'Date Question', + 'sequence': 3, + 'question_type': 'date', + }) + datetime_question = self.env['survey.question'].create({ + 'survey_id': survey_session.id, + 'title': 'Datetime Question', + 'sequence': 4, + 'question_type': 'datetime', + }) + simple_choice_answer_1 = self.env['survey.question.answer'].create({ + 'value': 'First' + }) + simple_choice_answer_2 = self.env['survey.question.answer'].create({ + 'value': 'Second' + }) + simple_choice_answer_3 = self.env['survey.question.answer'].create({ + 'value': 'Third' + }) + simple_choice_question = self.env['survey.question'].create({ + 'survey_id': survey_session.id, + 'title': 'Regular Simple Choice', + 'sequence': 5, + 'question_type': 'simple_choice', + 'suggested_answer_ids': [ + (4, simple_choice_answer_1.id), + (4, simple_choice_answer_2.id), + (4, simple_choice_answer_3.id)], + }) + scored_choice_answer_1 = self.env['survey.question.answer'].create({ + 'value': 'Correct', + 'is_correct': True, + 'answer_score': 30 + }) + scored_choice_answer_2 = self.env['survey.question.answer'].create({ + 'value': 'Incorrect 1' + }) + scored_choice_answer_3 = self.env['survey.question.answer'].create({ + 'value': 'Incorrect 2' + }) + scored_choice_answer_4 = self.env['survey.question.answer'].create({ + 'value': 'Incorrect 3' + }) + scored_choice_question = self.env['survey.question'].create({ + 'survey_id': survey_session.id, + 'title': 'Scored Simple Choice', + 'sequence': 6, + 'question_type': 'simple_choice', + 'suggested_answer_ids': [ + (4, scored_choice_answer_1.id), + (4, scored_choice_answer_2.id), + (4, scored_choice_answer_3.id), + (4, scored_choice_answer_4.id)], + }) + timed_scored_choice_answer_1 = self.env['survey.question.answer'].create({ + 'value': 'Correct', + 'is_correct': True, + 'answer_score': 30 + }) + timed_scored_choice_answer_2 = self.env['survey.question.answer'].create({ + 'value': 'Also correct but less points', + 'is_correct': True, + 'answer_score': 10 + }) + timed_scored_choice_answer_3 = self.env['survey.question.answer'].create({ + 'value': 'Incorrect', + 'answer_score': -40 + }) + timed_scored_choice_question = self.env['survey.question'].create({ + 'survey_id': survey_session.id, + 'title': 'Timed Scored Multiple Choice', + 'sequence': 6, + 'question_type': 'multiple_choice', + 'is_time_limited': True, + 'time_limit': 1, + 'suggested_answer_ids': [ + (4, timed_scored_choice_answer_1.id), + (4, timed_scored_choice_answer_2.id), + (4, timed_scored_choice_answer_3.id)], + }) + + # ======================= + # PART 1 : CREATE SESSION + # ======================= + + self.start_tour('/web', 'test_survey_session_create_tour', login='admin') + + # tricky part: we only take into account answers created after the session_start_time + # the create_date of the answers we just saved is set to the beginning of the test. + # but the session_start_time is set after that. + # So we cheat on the session start date to be able to count answers properly. + survey_session.write({'session_start_time': test_start_time - relativedelta(minutes=10)}) + + attendee_1 = survey_session._create_answer() + attendee_2 = survey_session._create_answer() + attendee_3 = survey_session._create_answer() + all_attendees = [attendee_1, attendee_2, attendee_3] + + self.assertEqual('ready', survey_session.session_state) + self.assertTrue(all(attendee.is_session_answer for attendee in all_attendees), + "Created answers should be within the session.") + self.assertTrue(all(attendee.state == 'new' for attendee in all_attendees), + "Created answers should be in the 'new' state.") + + # ========================================= + # PART 2 : OPEN SESSION AND CHECK ATTENDEES + # ========================================= + + self.start_tour('/web', 'test_survey_session_start_tour', login='admin') + + self.assertEqual('in_progress', survey_session.session_state) + self.assertTrue(bool(survey_session.session_start_time)) + + # ======================================== + # PART 3 : CREATE ANSWERS & MANAGE SESSION + # ======================================== + + # create a few answers beforehand to avoid having to back and forth too + # many times between the tours and the python test + + attendee_1.save_lines(nickname_question, 'xxxTheBestxxx') + attendee_2.save_lines(nickname_question, 'azerty') + attendee_3.save_lines(nickname_question, 'nicktalope') + self.assertEqual('xxxTheBestxxx', attendee_1.nickname) + self.assertEqual('azerty', attendee_2.nickname) + self.assertEqual('nicktalope', attendee_3.nickname) + + attendee_1.save_lines(text_question, 'Attendee 1 is the best') + attendee_2.save_lines(text_question, 'Attendee 2 rulez') + attendee_3.save_lines(text_question, 'Attendee 3 will crush you') + attendee_1.save_lines(date_question, '2010-10-10') + attendee_2.save_lines(date_question, '2011-11-11') + attendee_2.save_lines(datetime_question, '2010-10-10 10:00:00') + attendee_3.save_lines(datetime_question, '2011-11-11 15:55:55') + attendee_1.save_lines(simple_choice_question, simple_choice_answer_1.id) + attendee_2.save_lines(simple_choice_question, simple_choice_answer_1.id) + attendee_3.save_lines(simple_choice_question, simple_choice_answer_2.id) + attendee_1.save_lines(scored_choice_question, scored_choice_answer_1.id) + attendee_2.save_lines(scored_choice_question, scored_choice_answer_2.id) + attendee_3.save_lines(scored_choice_question, scored_choice_answer_3.id) + attendee_1.save_lines(timed_scored_choice_question, + [timed_scored_choice_answer_1.id, timed_scored_choice_answer_3.id]) + attendee_2.save_lines(timed_scored_choice_question, + [timed_scored_choice_answer_1.id, timed_scored_choice_answer_2.id]) + attendee_3.save_lines(timed_scored_choice_question, + [timed_scored_choice_answer_2.id]) + + self.start_tour('/web', 'test_survey_session_manage_tour', login='admin') + + self.assertFalse(bool(survey_session.session_state)) + self.assertTrue(all(answer.state == 'done' for answer in all_attendees)) |
