wip add tests on record creation
Some checks failed
pre-commit / pre-commit (pull_request) Failing after 1m33s

This commit is contained in:
2025-08-21 16:01:23 +02:00
parent 23fbbddbb2
commit 860ab5da81
4 changed files with 281 additions and 22 deletions

View File

@@ -8,7 +8,7 @@ from odoo.tools.misc import format_date
_logger = logging.getLogger(__name__)
type_mapping = {
type_mapping = { #field types on the left, question types on the right. TODO : what about booleans ?
"char": ["char_box", "numerical_box", "date", "datetime", "simple_choice", "multiple_choice"],
"text": ["char_box", "date", "simple_choice"],
"html": ["text_box", "numerical_box", "datetime", "simple_choice"],

View File

@@ -0,0 +1 @@
from . import test_survey_record_creation

View File

@@ -0,0 +1,258 @@
from datetime import date
from odoo.addons.survey.tests.common import SurveyCase
class TestSurveyRecordCreation(SurveyCase):
def setUp(self):
super(TestSurveyRecordCreation, self).setUp()
self.survey = self.env["survey.survey"].create({
"title": "Test Survey",
})
def test_record_is_created(self):
# Easy test to become familiar with the subject
self.question_name = self._add_question(
page=None,
name="Name",
qtype="char_box",
survey_id=self.survey.id,
sequence=1
)
res_partner_model = self.env["ir.model"]._get("res.partner")
self.survey_record_creation = self.env["survey.record.creation"].create(
{
"name": "Contact",
"survey_id": self.survey.id,
"model_id": res_partner_model.id,
}
)
name_field = self.env["ir.model.fields"].search([("model", "=", "res.partner"), ("name", "=", "name")])
self.env["survey.record.creation.field.values"].create(
{
"survey_record_creation_id": self.survey_record_creation.id,
"survey_id": self.survey.id,
"model_id": res_partner_model.id,
"field_id": name_field.id,
"value_origin": "question",
"question_id": self.question_name.id
}
)
self.answer = self._add_answer(survey=self.survey, partner=False, email="jean@test.fr")
self._add_answer_line(question=self.question_name, answer=self.answer, answer_value="Jean")
self.answer._mark_done()
partner = self.env["res.partner"].search(
[("name", "=", "Jean")]
)
self.assertTrue(partner.name == "Jean")
def test_all_types_of_fields(self):
# TODO : types to be tested (and booleans ?) Is it useful ??
# text
# html
# datetime
# many2one
# many2many
# selection
self.model_id = self.env["ir.model"]._get("res.partner")
self.survey_record_creation = self.env["survey.record.creation"].create(
{
"name": "Contact",
"survey_id": self.survey.id,
"model_id": self.model_id.id,
}
)
self.answer = self._add_answer(survey=self.survey, partner=False, email="jean@test.fr")
### CHAR field "name" ###
self.question_name = self._add_question(
page=None,
name="Name",
qtype="char_box",
survey_id=self.survey.id,
sequence=1
)
self._add_answer_line(question=self.question_name, answer=self.answer, answer_value="Jean")
name_field = self.env["ir.model.fields"].search([("model", "=", "res.partner"), ("name", "=", "name")])
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.model_id.id,
"field_id": name_field.id,
"value_origin": "question",
"question_id": self.question_name.id
}
)
### INTEGER field "color" ###
self.question_color = self._add_question(
page=None,
name="Color",
qtype="numerical_box",
survey_id=self.survey.id,
sequence=1
)
self._add_answer_line(question=self.question_color, answer=self.answer, answer_value=2)
color_field = self.env["ir.model.fields"].search([("model", "=", "res.partner"), ("name", "=", "color")])
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.model_id.id,
"field_id": color_field.id,
"value_origin": "question",
"question_id": self.question_color.id
}
)
self.answer._mark_done()
partner = self.env["res.partner"].search(
[("name", "=", "Jean"), ("color", "=", 2)]
)
self.assertTrue(partner.name == "Jean")
### FLOAT field "partner_latitude" ###
self.question_partner_latitude = self._add_question(
page=None,
name="Partner latitude",
qtype="numerical_box",
survey_id=self.survey.id,
sequence=1
)
self._add_answer_line(question=self.question_partner_latitude, answer=self.answer, answer_value=44.73333)
partner_latitude_field = self.env["ir.model.fields"].search(
[("model", "=", "res.partner"), ("name", "=", "partner_latitude")])
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.model_id.id,
"field_id": partner_latitude_field.id,
"value_origin": "question",
"question_id": self.question_partner_latitude.id
}
)
### DATE field "date" ###
self.question_date = self._add_question(
page=None,
name="Date",
qtype="date",
survey_id=self.survey.id,
sequence=1
)
self._add_answer_line(question=self.question_date, answer=self.answer, answer_value=date.today())
date_field = self.env["ir.model.fields"].search(
[("model", "=", "res.partner"), ("name", "=", "date")])
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.model_id.id,
"field_id": date_field.id,
"value_origin": "question",
"question_id": self.question_date.id
}
)
self.answer._mark_done()
partner = self.env["res.partner"].search(
[("name", "=", "Jean"), ("color", "=", 2), ("partner_latitude", "=", 44.73333), ("date", "=", date.today())]
)
self.assertTrue(partner.name == "Jean")
def test_records_are_created(self):
# we test that several records can be created at the end of the same survey
# concurrently, we test the value_origin "other_record" and "fixed"
self.question_name = self._add_question(
page=None,
name="Name",
qtype="char_box",
survey_id=self.survey.id,
sequence=1
)
res_partner_model = self.env["ir.model"]._get("res.partner")
self.contact_survey_record_creation = self.env["survey.record.creation"].create(
{
"name": "Contact",
"survey_id": self.survey.id,
"model_id": res_partner_model.id,
}
)
name_field = self.env["ir.model.fields"].search([("model", "=", "res.partner"), ("name", "=", "name")])
self.env["survey.record.creation.field.values"].create(
{
"survey_record_creation_id": self.contact_survey_record_creation.id,
"survey_id": self.survey.id,
"model_id": res_partner_model.id,
"field_id": name_field.id,
"value_origin": "question",
"question_id": self.question_name.id
}
)
res_partner_bank_model = self.env["ir.model"]._get("res.partner.bank")
self.bank_survey_record_creation = self.env["survey.record.creation"].create(
{
"name": "Bank",
"survey_id": self.survey.id,
"model_id": res_partner_bank_model.id,
}
)
# Below we test "value_origin": "other_record"
partner_field = self.env["ir.model.fields"].search(
[("model", "=", "res.partner.bank"), ("name", "=", "partner_id")])
self.env["survey.record.creation.field.values"].create(
{
"survey_record_creation_id": self.bank_survey_record_creation.id,
"survey_id": self.survey.id,
"model_id": res_partner_bank_model.id,
"field_id": partner_field.id,
"value_origin": "other_record",
"other_created_record_id": self.contact_survey_record_creation.id
}
)
# Below we test "value_origin": "fixed"
acc_number_field = self.env["ir.model.fields"].search(
[("model", "=", "res.partner.bank"), ("name", "=", "acc_number")])
self.env["survey.record.creation.field.values"].create(
{
"survey_record_creation_id": self.bank_survey_record_creation.id,
"survey_id": self.survey.id,
"model_id": res_partner_bank_model.id,
"field_id": acc_number_field.id,
"value_origin": "fixed",
"fixed_value_char": "FR76 1444 5004 0004 0000 0000 000"
}
)
self.answer = self._add_answer(survey=self.survey, partner=False, email="jean@test.fr")
self._add_answer_line(question=self.question_name, answer=self.answer, answer_value="Jean")
self.answer._mark_done()
partner = self.env["res.partner"].search(
[("name", "=", "Jean")]
)
self.assertTrue(partner.name == "Jean")
bank_account = self.env["res.partner.bank"].search(
[("partner_id", "=", partner.id)]
)
self.assertTrue(bank_account.acc_number == "FR76 1444 5004 0004 0000 0000 000")
def test_records_of_same_model_are_created(self):
# Here we want to test
...