Files

264 lines
16 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import fields
from odoo.addons.survey.tests.common import TestSurveyCommon
from odoo.addons.documents_spreadsheet.tests.common import SpreadsheetTestCommon
from odoo.addons.spreadsheet.utils.formatting import datetime_to_spreadsheet_date_number, date_to_spreadsheet_date_number
class DocumentSpreadsheetSurveyResults(TestSurveyCommon, SpreadsheetTestCommon):
def test_get_simple_survey_results(self):
test_survey = self.env["survey.survey"].create({"title": "Test Survey"})
question_0 = self._add_question(None, "What is your age", "numerical_box", survey_id=test_survey.id, sequence=1)
answer_0 = self._add_answer(test_survey, self.customer)
self._add_answer_line(question_0, answer_0, 25)
tz_name = self.env.user.tz or 'UTC'
spreadsheet_survey_results = test_survey.get_survey_results_for_spreadsheet()[0]
spreadsheet_survey_results_table = spreadsheet_survey_results["survey_table"]
self.assertEqual(len(spreadsheet_survey_results_table), 2)
self.assertEqual(len(spreadsheet_survey_results_table[0]), 2)
self.assertEqual(spreadsheet_survey_results_table[0][0]["value"], "Timestamp")
self.assertEqual(spreadsheet_survey_results_table[0][1]["value"], datetime_to_spreadsheet_date_number(answer_0.create_date, tz_name))
self.assertEqual(spreadsheet_survey_results_table[0][1]["format"], "mm/dd/yyyy hh:mm:ss a")
self.assertEqual(spreadsheet_survey_results_table[1][0]["value"], "What is your age")
self.assertEqual(spreadsheet_survey_results_table[1][1]["value"], 25)
self.assertEqual(spreadsheet_survey_results["user_input_ids"], [answer_0.id])
def test_get_survey_results_multiple_answers(self):
peterParker = self.env["res.partner"].create({"name": "Peter Parker"})
tz_name = self.env.user.tz or 'UTC'
test_survey = self.env["survey.survey"].create({"title": "Test Survey"})
question_0 = self._add_question(None, "How are you?", "char_box", survey_id=test_survey.id, sequence=1)
answer_0 = self._add_answer(test_survey, self.customer)
self._add_answer_line(question_0, answer_0, "Good")
answer_1 = self._add_answer(test_survey, peterParker)
self._add_answer_line(question_0, answer_1, "Mr. Stark I Don't feel so good")
spreadsheet_survey_results = test_survey.get_survey_results_for_spreadsheet()[0]
spreadsheet_survey_results_table = spreadsheet_survey_results["survey_table"]
self.assertEqual(spreadsheet_survey_results_table[0][0]["value"], "Timestamp")
self.assertEqual(spreadsheet_survey_results_table[0][1]["value"], datetime_to_spreadsheet_date_number(answer_0.create_date, tz_name))
self.assertEqual(spreadsheet_survey_results_table[0][2]["value"], datetime_to_spreadsheet_date_number(answer_1.create_date, tz_name))
self.assertEqual(spreadsheet_survey_results_table[1][0]["value"], "How are you?")
self.assertEqual(spreadsheet_survey_results_table[1][1]["value"], "Good")
self.assertEqual(spreadsheet_survey_results_table[1][2]["value"], "Mr. Stark I Don't feel so good")
self.assertEqual(spreadsheet_survey_results["user_input_ids"], [answer_0.id, answer_1.id])
def test_get_survey_results_multiple_questions(self):
test_survey = self.env["survey.survey"].create({"title": "Test Survey"})
question_0 = self._add_question(None, "How are you?", "char_box", survey_id=test_survey.id, sequence=1)
q1 = self._add_question(None, "What is your age", "numerical_box", survey_id=test_survey.id, sequence=2)
tz_name = self.env.user.tz or 'UTC'
answer_0 = self._add_answer(test_survey, self.customer)
self._add_answer_line(question_0, answer_0, "Good")
self._add_answer_line(q1, answer_0, 25)
spreadsheet_survey_results = test_survey.get_survey_results_for_spreadsheet()[0]["survey_table"]
self.assertEqual(spreadsheet_survey_results[0][0]["value"], "Timestamp")
self.assertEqual(spreadsheet_survey_results[0][1]["value"], datetime_to_spreadsheet_date_number(answer_0.create_date, tz_name))
self.assertEqual(spreadsheet_survey_results[1][0]["value"], "How are you?")
self.assertEqual(spreadsheet_survey_results[1][1]["value"], "Good")
self.assertEqual(spreadsheet_survey_results[2][0]["value"], "What is your age")
self.assertEqual(spreadsheet_survey_results[2][1]["value"], 25)
def test_get_survey_results_simple_choice_question_with_comment(self):
test_survey = self.env["survey.survey"].create({"title": "Test Survey"})
q_comments = self._add_question(
None, "What are cats ?", "simple_choice", survey_id=test_survey.id,
comments_allowed=True, comment_count_as_answer=False,
sequence=1, labels=[{"value": "Cute"}, {"value": "Mammals"}, {"value": "Gods"}])
q_comment_as_answer = self._add_question(
None, "What are dogs ?", "simple_choice", survey_id=test_survey.id,
comments_allowed=True, comment_count_as_answer=True,
sequence=1, labels=[{"value": "Smart"}, {"value": "Brave"}])
answer_0 = self._add_answer(test_survey, self.customer)
self._add_answer_line(q_comments, answer_0, q_comments.suggested_answer_ids.ids[0])
self._add_comment(test_survey, q_comments, answer_0, "this is a comment")
self._add_comment(test_survey, q_comment_as_answer, answer_0, "good boys")
spreadsheet_survey_results = test_survey.get_survey_results_for_spreadsheet()[0]["survey_table"]
self.assertEqual(spreadsheet_survey_results[1][0]["value"], "What are cats ?")
self.assertEqual(spreadsheet_survey_results[1][1]["value"], "Cute")
self.assertEqual(spreadsheet_survey_results[2][0]["value"], "Comments - What are cats ?")
self.assertEqual(spreadsheet_survey_results[2][1]["value"], "this is a comment")
self.assertEqual(spreadsheet_survey_results[3][0]["value"], "What are dogs ?")
self.assertEqual(spreadsheet_survey_results[3][1]["value"], "good boys")
def test_get_survey_results_multiple_choice_question(self):
test_survey = self.env["survey.survey"].create({"title": "Test Survey"})
question_0 = self._add_question(
None, "What are cats ?", "multiple_choice", survey_id=test_survey.id,
sequence=1, labels=[{"value": "Cute"}, {"value": "Mammals"}, {"value": "Gods"}])
answer_0 = self._add_answer(test_survey, self.customer)
self._add_answer_line(question_0, answer_0, question_0.suggested_answer_ids.ids[0])
self._add_answer_line(question_0, answer_0, question_0.suggested_answer_ids.ids[1])
spreadsheet_survey_results = test_survey.get_survey_results_for_spreadsheet()[0]["survey_table"]
self.assertEqual(spreadsheet_survey_results[1][0]["value"], "What are cats ?")
self.assertEqual(spreadsheet_survey_results[1][1]["value"], "Cute, Mammals")
def test_get_survey_results_multiple_choice_question_with_comments(self):
test_survey = self.env["survey.survey"].create({"title": "Test Survey"})
q_comments = self._add_question(
None, "What are cats ?", "multiple_choice", survey_id=test_survey.id,
comments_allowed=True, comment_count_as_answer=False,
sequence=1, labels=[{"value": "Cute"}, {"value": "Mammals"}, {"value": "Gods"}])
q_comment_as_answer = self._add_question(
None, "What are dogs ?", "multiple_choice", survey_id=test_survey.id,
comments_allowed=True, comment_count_as_answer=True,
sequence=1, labels=[{"value": "Smart"}, {"value": "Brave"}])
answer_0 = self._add_answer(test_survey, self.customer)
self._add_answer_line(q_comments, answer_0, q_comments.suggested_answer_ids.ids[0])
self._add_comment(test_survey, q_comments, answer_0, "this is a comment")
self._add_answer_line(q_comment_as_answer, answer_0, q_comment_as_answer.suggested_answer_ids.ids[0])
self._add_comment(test_survey, q_comment_as_answer, answer_0, "good boys")
spreadsheet_survey_results = test_survey.get_survey_results_for_spreadsheet()[0]["survey_table"]
self.assertEqual(spreadsheet_survey_results[1][0]["value"], "What are cats ?")
self.assertEqual(spreadsheet_survey_results[1][1]["value"], "Cute")
self.assertEqual(spreadsheet_survey_results[2][0]["value"], "Comments - What are cats ?")
self.assertEqual(spreadsheet_survey_results[2][1]["value"], "this is a comment")
self.assertEqual(spreadsheet_survey_results[3][0]["value"], "What are dogs ?")
self.assertEqual(spreadsheet_survey_results[3][1]["value"], "Smart, good boys")
def test_get_survey_results_matrix_question(self):
test_survey = self.env["survey.survey"].create({"title": "Test Survey"})
question_0 = self._add_question(
None, "When do you harvest those fruits", "matrix", survey_id=test_survey.id, sequence=1,
labels=[{"value": "Spring"}, {"value": "Summer"}],
labels_2=[{"value": "Apples"}, {"value": "Strawberries"}])
answer_0 = self._add_answer(test_survey, self.customer)
[apples_row_id, strawberries_row_id] = question_0.matrix_row_ids.ids
[spring_id, summer_id] = question_0.suggested_answer_ids.ids
self._add_answer_line(question_0, answer_0, spring_id, answer_value_row=apples_row_id)
self._add_answer_line(question_0, answer_0, summer_id, answer_value_row=strawberries_row_id)
spreadsheet_survey_results = test_survey.get_survey_results_for_spreadsheet()[0]["survey_table"]
self.assertEqual(spreadsheet_survey_results[1][0]["value"], "When do you harvest those fruits [Apples]")
self.assertEqual(spreadsheet_survey_results[1][1]["value"], "Spring")
self.assertEqual(spreadsheet_survey_results[2][0]["value"], "When do you harvest those fruits [Strawberries]")
self.assertEqual(spreadsheet_survey_results[2][1]["value"], "Summer")
def test_get_survey_results_matrix_question_with_comments(self):
test_survey = self.env["survey.survey"].create({"title": "Test Survey"})
question_0 = self._add_question(
None, "When do you harvest those fruits", "matrix", survey_id=test_survey.id, sequence=1,
comments_allowed=True, comment_count_as_answer=False,
labels=[{"value": "Spring"}, {"value": "Summer"}],
labels_2=[{"value": "Apples"}, {"value": "Strawberries"}])
answer_0 = self._add_answer(test_survey, self.customer)
[apples_row_id, _] = question_0.matrix_row_ids.ids
[spring_id, _] = question_0.suggested_answer_ids.ids
self._add_answer_line(question_0, answer_0, spring_id, answer_value_row=apples_row_id)
self._add_comment(test_survey, question_0, answer_0, "this is a comment")
spreadsheet_survey_results = test_survey.get_survey_results_for_spreadsheet()[0]["survey_table"]
self.assertEqual(spreadsheet_survey_results[1][0]["value"], "When do you harvest those fruits [Apples]")
self.assertEqual(spreadsheet_survey_results[1][1]["value"], "Spring")
self.assertEqual(spreadsheet_survey_results[2][0]["value"], "When do you harvest those fruits [Strawberries]")
self.assertEqual(spreadsheet_survey_results[2][1]["value"], "")
self.assertEqual(spreadsheet_survey_results[3][0]["value"], "Comments - When do you harvest those fruits")
self.assertEqual(spreadsheet_survey_results[3][1]["value"], "this is a comment")
def test_results_login_required(self):
test_survey = self.env["survey.survey"].create({"title": "Test Survey", "users_login_required": True})
question_0 = self._add_question(None, "What is your age", "numerical_box", survey_id=test_survey.id, sequence=1)
answer_0 = self._add_answer(test_survey, self.customer)
self._add_answer_line(question_0, answer_0, 25)
spreadsheet_survey_results = test_survey.get_survey_results_for_spreadsheet()[0]["survey_table"]
self.assertEqual(spreadsheet_survey_results[1][0]["value"], "User")
self.assertEqual(spreadsheet_survey_results[1][1]["value"], self.customer.name)
def test_results_limited_attempts(self):
test_survey = self.env["survey.survey"].create({
"title": "Test Survey",
"users_login_required": True,
"is_attempts_limited": True,
"attempts_limit": 3
})
question_0 = self._add_question(None, "How many finger do I have ?", "numerical_box", survey_id=test_survey.id, sequence=1)
answer_0 = self._add_answer(test_survey, self.customer)
self._add_answer_line(question_0, answer_0, 4)
spreadsheet_survey_results = test_survey.get_survey_results_for_spreadsheet()[0]["survey_table"]
self.assertEqual(spreadsheet_survey_results[1][0]["value"], "User")
self.assertEqual(spreadsheet_survey_results[1][1]["value"], self.customer.name)
self.assertEqual(spreadsheet_survey_results[2][0]["value"], "Attempts")
self.assertEqual(spreadsheet_survey_results[2][1]["value"], 1)
self.assertEqual(spreadsheet_survey_results[2][1]["format"], '0"/3"')
def test_results_scored_survey(self):
test_survey = self.env["survey.survey"].create({
"title": "Test Survey",
"scoring_type": "scoring_with_answers",
"scoring_success_min": 50,
})
question_0 = self._add_question(
None, 'Question 1', 'simple_choice',
sequence=2,
survey_id=test_survey.id,
labels=[
{'value': 'Wrong answer'},
{'value': 'Correct answer', 'is_correct': True, 'answer_score': 1.0}
])
answer_0 = self._add_answer(test_survey, self.customer)
self._add_answer_line(question_0, answer_0, question_0.suggested_answer_ids.ids[0])
answer_1 = self._add_answer(test_survey, self.customer)
self._add_answer_line(question_0, answer_1, question_0.suggested_answer_ids.ids[1])
spreadsheet_survey_results = test_survey.get_survey_results_for_spreadsheet()[0]["survey_table"]
self.assertEqual(spreadsheet_survey_results[1][0]["value"], "Score (%)")
self.assertEqual(spreadsheet_survey_results[1][1]["value"], 0.00)
self.assertEqual(spreadsheet_survey_results[1][1]["format"], '0.00%')
self.assertEqual(spreadsheet_survey_results[1][2]["value"], 1.00)
self.assertEqual(spreadsheet_survey_results[1][2]["format"], '0.00%')
self.assertEqual(spreadsheet_survey_results[2][0]["value"], "Quiz passed")
self.assertEqual(spreadsheet_survey_results[2][1]["value"], False)
self.assertEqual(spreadsheet_survey_results[2][2]["value"], True)
def test_question_type_change_date_to_datetime_keeps_answer_format(self):
test_survey = self.env["survey.survey"].create({"title": "Test Survey"})
question = self._add_question(None, "When is your birthday?", "date", survey_id=test_survey.id, sequence=1)
tz_name = self.env.user.tz or 'UTC'
answer = self._add_answer(test_survey, self.customer)
answer_date = fields.Date.from_string("2024-01-10")
self._add_answer_line(question, answer, answer_date)
# Change question type and add second answer (datetime)
question.write({"question_type": "datetime"})
new_answer = self._add_answer(test_survey, self.customer)
new_answer_datetime = fields.Datetime.from_string("2024-01-10 14:30:00")
self._add_answer_line(question, new_answer, new_answer_datetime)
spreadsheet_survey_results = test_survey.get_survey_results_for_spreadsheet()[0]["survey_table"]
self.assertEqual(spreadsheet_survey_results[1][1]["value"], date_to_spreadsheet_date_number(answer_date))
self.assertEqual(spreadsheet_survey_results[1][1]["format"], "mm/dd/yyyy")
self.assertEqual(spreadsheet_survey_results[1][2]["value"], datetime_to_spreadsheet_date_number(new_answer_datetime, tz_name))
self.assertEqual(spreadsheet_survey_results[1][2]["format"], "mm/dd/yyyy hh:mm:ss a")
def _add_comment(self, survey, question, user_input, comment_value):
self.env['survey.user_input.line'].create({
'survey_id': survey.id,
'question_id': question.id,
'user_input_id': user_input.id,
'answer_type': 'char_box',
'value_char_box': comment_value
})