[IMP] survey_record_generation: first refacto of record creation
Some checks failed
pre-commit / pre-commit (pull_request) Failing after 1m33s

This commit is contained in:
2025-10-16 12:37:34 +02:00
parent 7d638c4e92
commit fd25c2b970
5 changed files with 440 additions and 146 deletions

View File

@@ -1,9 +1,9 @@
from datetime import date
from odoo.addons.survey.tests.common import SurveyCase
from psycopg2 import IntegrityError
from odoo.addons.survey.tests.common import SurveyCase
class TestSurveyRecordCreation(SurveyCase):
def setUp(self):
@@ -36,7 +36,9 @@ class TestSurveyRecordCreation(SurveyCase):
[("model", "=", "res.partner"), ("name", "=", "name")]
)
# And linked the res_partner field "name" to the answer of question_name
self.name_survey_record_creation_field_values = self.env["survey.record.creation.field.values"].create(
self.name_survey_record_creation_field_values = self.env[
"survey.record.creation.field.values"
].create(
{
"survey_record_creation_id": self.survey_record_creation.id,
"survey_id": self.survey.id,
@@ -80,7 +82,8 @@ class TestSurveyRecordCreation(SurveyCase):
question=self.question_name, answer=self.answer, answer_value="Jean"
)
### "numerical_box" type of question, tested with FLOAT field "partner_latitude" ###
### "numerical_box" type of question,
# tested with FLOAT field "partner_latitude" ###
self.question_partner_latitude = self._add_question(
page=None,
name="Partner latitude",
@@ -144,11 +147,15 @@ class TestSurveyRecordCreation(SurveyCase):
],
survey_id=self.survey.id,
sequence=1,
answer_values_type="value"
answer_values_type="value",
)
self.question_type.suggested_answer_ids[0].value_char = self.question_type.suggested_answer_ids[0].value
self.question_type.suggested_answer_ids[1].value_char = self.question_type.suggested_answer_ids[1].value
self.question_type.suggested_answer_ids[
0
].value_char = self.question_type.suggested_answer_ids[0].value
self.question_type.suggested_answer_ids[
1
].value_char = self.question_type.suggested_answer_ids[1].value
type_field = self.env["ir.model.fields"].search(
[("model", "=", "res.partner"), ("name", "=", "type")]
@@ -165,8 +172,9 @@ class TestSurveyRecordCreation(SurveyCase):
)
self._add_answer_line(
question=self.question_type, answer=self.answer,
answer_value=self.question_type.suggested_answer_ids[0].id
question=self.question_type,
answer=self.answer,
answer_value=self.question_type.suggested_answer_ids[0].id,
)
### "simple_choice" type of question, tested with MANY2ONE field "title" ###
@@ -184,11 +192,15 @@ class TestSurveyRecordCreation(SurveyCase):
],
survey_id=self.survey.id,
sequence=1,
answer_values_type="record"
answer_values_type="record",
)
self.question_title.suggested_answer_ids[0].record_id = f"res.partner.title,{mister_title.id}"
self.question_title.suggested_answer_ids[1].record_id = f"res.partner.title,{madam_title.id}"
self.question_title.suggested_answer_ids[
0
].record_id = f"res.partner.title,{mister_title.id}"
self.question_title.suggested_answer_ids[
1
].record_id = f"res.partner.title,{madam_title.id}"
title_field = self.env["ir.model.fields"].search(
[("model", "=", "res.partner"), ("name", "=", "title")]
@@ -205,13 +217,17 @@ class TestSurveyRecordCreation(SurveyCase):
)
self._add_answer_line(
question=self.question_title, answer=self.answer,
answer_value=self.question_title.suggested_answer_ids[0].id
question=self.question_title,
answer=self.answer,
answer_value=self.question_title.suggested_answer_ids[0].id,
)
### "multiple_choice" type of question, tested with MANY2MANY field "category" ###
### "multiple_choice" type of question,
# tested with MANY2MANY field "category" ###
adult_category = self.env["res.partner.category"].create({"name": "Adult"})
teenager_category = self.env["res.partner.category"].create({"name": "Teenager"})
teenager_category = self.env["res.partner.category"].create(
{"name": "Teenager"}
)
child_category = self.env["res.partner.category"].create({"name": "Child"})
self.question_category = self._add_question(
page=None,
@@ -224,12 +240,18 @@ class TestSurveyRecordCreation(SurveyCase):
],
survey_id=self.survey.id,
sequence=1,
answer_values_type="record"
answer_values_type="record",
)
self.question_category.suggested_answer_ids[0].record_id = f"res.partner.category,{adult_category.id}"
self.question_category.suggested_answer_ids[1].record_id = f"res.partner.category,{teenager_category.id}"
self.question_category.suggested_answer_ids[2].record_id = f"res.partner.category,{child_category.id}"
self.question_category.suggested_answer_ids[
0
].record_id = f"res.partner.category,{adult_category.id}"
self.question_category.suggested_answer_ids[
1
].record_id = f"res.partner.category,{teenager_category.id}"
self.question_category.suggested_answer_ids[
2
].record_id = f"res.partner.category,{child_category.id}"
category_field = self.env["ir.model.fields"].search(
[("model", "=", "res.partner"), ("name", "=", "category_id")]
@@ -246,12 +268,14 @@ class TestSurveyRecordCreation(SurveyCase):
)
self._add_answer_line(
question=self.question_category, answer=self.answer,
answer_value=self.question_category.suggested_answer_ids[0].id
question=self.question_category,
answer=self.answer,
answer_value=self.question_category.suggested_answer_ids[0].id,
)
self._add_answer_line(
question=self.question_category, answer=self.answer,
answer_value=self.question_category.suggested_answer_ids[1].id
question=self.question_category,
answer=self.answer,
answer_value=self.question_category.suggested_answer_ids[1].id,
)
self.answer._mark_done()
@@ -280,7 +304,7 @@ class TestSurveyRecordCreation(SurveyCase):
"model_id": res_partner_bank_model.id,
}
)
# Below we test "value_origin": "other_record"
# Below we test "value_origin": "other_record" with a required field
partner_field = self.env["ir.model.fields"].search(
[("model", "=", "res.partner.bank"), ("name", "=", "partner_id")]
)
@@ -308,6 +332,20 @@ class TestSurveyRecordCreation(SurveyCase):
"fixed_value_char": "FR76 1444 5004 0004 0000 0000 000",
}
)
# Below we test "value_origin": "other_record" with a NOT required field
bank_ids_field = self.env["ir.model.fields"].search(
[("model", "=", "res.partner"), ("name", "=", "bank_ids")]
)
self.env["survey.record.creation.field.values"].create(
{
"survey_record_creation_id": self.survey_record_creation.id,
"survey_id": self.survey.id,
"model_id": self.res_partner_model.id,
"field_id": bank_ids_field.id,
"value_origin": "other_record",
"other_created_record_id": self.bank_survey_record_creation.id,
}
)
self.answer = self._add_answer(
survey=self.survey, partner=False, email="jean@test.fr"
@@ -325,7 +363,8 @@ class TestSurveyRecordCreation(SurveyCase):
self.assertTrue(bank_account.acc_number == "FR76 1444 5004 0004 0000 0000 000")
def test_records_of_same_model_are_created(self):
# When we have 2 survey.record.creation on res.partner, we check that 2 contacts are created
# When we have 2 survey.record.creation on res.partner,
# we check that 2 contacts are created
self.second_question_name = self._add_question(
page=None,
name="Name of second person",
@@ -334,9 +373,7 @@ class TestSurveyRecordCreation(SurveyCase):
sequence=1,
)
self.second_contact_survey_record_creation = self.env[
"survey.record.creation"
].create(
self.second_contact_creation = self.env["survey.record.creation"].create(
{
"name": "Second contact",
"survey_id": self.survey.id,
@@ -345,7 +382,7 @@ class TestSurveyRecordCreation(SurveyCase):
)
self.env["survey.record.creation.field.values"].create(
{
"survey_record_creation_id": self.second_contact_survey_record_creation.id,
"survey_record_creation_id": self.second_contact_creation.id,
"survey_id": self.survey.id,
"model_id": self.res_partner_model.id,
"field_id": self.name_field.id,
@@ -402,11 +439,14 @@ class TestSurveyRecordCreation(SurveyCase):
survey=self.survey, partner=False, email="jean@test.fr"
)
self._add_answer_line(
question=self.question_email, answer=self.answer, answer_value="jean@test.fr"
question=self.question_email,
answer=self.answer,
answer_value="jean@test.fr",
)
with self.assertRaises(IntegrityError):
# TODO : propose a better user experience than IntegrityError when a mandatory field is missing
# TODO : propose a better user experience than IntegrityError when
# a mandatory field is missing
self.answer._mark_done()
def test_survey_submitted_twice_by_same_user(self):
@@ -479,10 +519,14 @@ class TestSurveyRecordCreation(SurveyCase):
],
survey_id=self.survey.id,
sequence=1,
answer_values_type="record"
answer_values_type="record",
)
self.question_title.suggested_answer_ids[0].record_id = f"res.partner.title,{mister_title.id}"
self.question_title.suggested_answer_ids[1].record_id = f"res.partner.title,{madam_title.id}"
self.question_title.suggested_answer_ids[
0
].record_id = f"res.partner.title,{mister_title.id}"
self.question_title.suggested_answer_ids[
1
].record_id = f"res.partner.title,{madam_title.id}"
self.question_street = self._add_question(
page=None,
@@ -539,10 +583,18 @@ class TestSurveyRecordCreation(SurveyCase):
question=self.question_name, answer=self.answer, answer_value="Jean"
)
self._add_answer_line(
question=self.question_email, answer=self.answer, answer_value=False, skipped=True, answer_type=False
question=self.question_email,
answer=self.answer,
answer_value=False,
skipped=True,
answer_type=False,
)
self._add_answer_line(
question=self.question_title, answer=self.answer, answer_value=False, skipped=True, answer_type=False
question=self.question_title,
answer=self.answer,
answer_value=False,
skipped=True,
answer_type=False,
)
self.answer._mark_done()
@@ -563,11 +615,15 @@ class TestSurveyRecordCreation(SurveyCase):
],
survey_id=self.survey.id,
sequence=1,
answer_values_type="value"
answer_values_type="value",
)
self.question_employee.suggested_answer_ids[0].value_char = self.question_employee.suggested_answer_ids[0].value
self.question_employee.suggested_answer_ids[1].value_char = self.question_employee.suggested_answer_ids[1].value
self.question_employee.suggested_answer_ids[
0
].value_char = self.question_employee.suggested_answer_ids[0].value
self.question_employee.suggested_answer_ids[
1
].value_char = self.question_employee.suggested_answer_ids[1].value
employee_field = self.env["ir.model.fields"].search(
[("model", "=", "res.partner"), ("name", "=", "employee")]
@@ -587,12 +643,12 @@ class TestSurveyRecordCreation(SurveyCase):
survey=self.survey, partner=False, email="jean@test.fr"
)
self._add_answer_line(
question=self.question_name, answer=self.answer,
answer_value="Jean"
question=self.question_name, answer=self.answer, answer_value="Jean"
)
self._add_answer_line(
question=self.question_employee, answer=self.answer,
answer_value=self.question_employee.suggested_answer_ids[0].id
question=self.question_employee,
answer=self.answer,
answer_value=self.question_employee.suggested_answer_ids[0].id,
)
self.answer._mark_done()