wip add tests on record creation
Some checks failed
pre-commit / pre-commit (pull_request) Failing after 1m37s
Some checks failed
pre-commit / pre-commit (pull_request) Failing after 1m37s
This commit is contained in:
@@ -8,7 +8,7 @@ from odoo.tools.misc import format_date
|
|||||||
_logger = logging.getLogger(__name__)
|
_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"],
|
"char": ["char_box", "numerical_box", "date", "datetime", "simple_choice", "multiple_choice"],
|
||||||
"text": ["char_box", "date", "simple_choice"],
|
"text": ["char_box", "date", "simple_choice"],
|
||||||
"html": ["text_box", "numerical_box", "datetime", "simple_choice"],
|
"html": ["text_box", "numerical_box", "datetime", "simple_choice"],
|
||||||
|
|||||||
1
survey_record_generation/tests/__init__.py
Normal file
1
survey_record_generation/tests/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from . import test_survey_record_creation
|
||||||
449
survey_record_generation/tests/test_survey_record_creation.py
Normal file
449
survey_record_generation/tests/test_survey_record_creation.py
Normal file
@@ -0,0 +1,449 @@
|
|||||||
|
from datetime import date
|
||||||
|
|
||||||
|
from odoo.addons.survey.tests.common import SurveyCase
|
||||||
|
|
||||||
|
|
||||||
|
class TestSurveyRecordCreation(SurveyCase):
|
||||||
|
def setUp(self):
|
||||||
|
super().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
|
||||||
|
# many2many
|
||||||
|
|
||||||
|
self.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": self.res_partner_model.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.res_partner_model.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.res_partner_model.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.res_partner_model.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.res_partner_model.id,
|
||||||
|
"field_id": date_field.id,
|
||||||
|
"value_origin": "question",
|
||||||
|
"question_id": self.question_date.id,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
### SELECTION field "type" ###
|
||||||
|
self.question_type = self._add_question(
|
||||||
|
page=None,
|
||||||
|
name="Type",
|
||||||
|
qtype="simple_choice",
|
||||||
|
labels=[
|
||||||
|
{"value": "contact"},
|
||||||
|
{"value": "other"},
|
||||||
|
],
|
||||||
|
survey_id=self.survey.id,
|
||||||
|
sequence=1,
|
||||||
|
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._add_answer_line(
|
||||||
|
question=self.question_type, answer=self.answer,
|
||||||
|
answer_value=self.question_type.suggested_answer_ids[0].id
|
||||||
|
)
|
||||||
|
|
||||||
|
type_field = self.env["ir.model.fields"].search(
|
||||||
|
[("model", "=", "res.partner"), ("name", "=", "type")]
|
||||||
|
)
|
||||||
|
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": type_field.id,
|
||||||
|
"value_origin": "question",
|
||||||
|
"question_id": self.question_type.id,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
# ### MANY2ONE field "title" ###
|
||||||
|
mister_title = self.env["res.partner.title"].create({"name": "Mister"})
|
||||||
|
madam_title = self.env["res.partner.title"].create({"name": "Madam"})
|
||||||
|
self.question_title = self._add_question(
|
||||||
|
page=None,
|
||||||
|
name="Title",
|
||||||
|
qtype="simple_choice",
|
||||||
|
labels=[
|
||||||
|
{"value": mister_title.display_name},
|
||||||
|
{"value": madam_title.display_name},
|
||||||
|
],
|
||||||
|
survey_id=self.survey.id,
|
||||||
|
sequence=1,
|
||||||
|
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._add_answer_line(
|
||||||
|
question=self.question_title, answer=self.answer,
|
||||||
|
answer_value=self.question_title.suggested_answer_ids[0].id
|
||||||
|
)
|
||||||
|
|
||||||
|
title_field = self.env["ir.model.fields"].search(
|
||||||
|
[("model", "=", "res.partner"), ("name", "=", "title")]
|
||||||
|
)
|
||||||
|
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": title_field.id,
|
||||||
|
"value_origin": "question",
|
||||||
|
"question_id": self.question_title.id,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
self.answer._mark_done()
|
||||||
|
partner = self.env["res.partner"].search(
|
||||||
|
[
|
||||||
|
("name", "=", "Jean"),
|
||||||
|
("color", "=", 2),
|
||||||
|
("partner_latitude", "=", 44.73333),
|
||||||
|
("date", "=", date.today()),
|
||||||
|
("type", "=", "contact"),
|
||||||
|
("title", "=", mister_title.id),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
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):
|
||||||
|
# We test that 2 contacts are created
|
||||||
|
self.first_question_name = self._add_question(
|
||||||
|
page=None,
|
||||||
|
name="Name of first person",
|
||||||
|
qtype="char_box",
|
||||||
|
survey_id=self.survey.id,
|
||||||
|
sequence=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.second_question_name = self._add_question(
|
||||||
|
page=None,
|
||||||
|
name="Name of second person",
|
||||||
|
qtype="char_box",
|
||||||
|
survey_id=self.survey.id,
|
||||||
|
sequence=1,
|
||||||
|
)
|
||||||
|
|
||||||
|
res_partner_model = self.env["ir.model"]._get("res.partner")
|
||||||
|
name_field = self.env["ir.model.fields"].search(
|
||||||
|
[("model", "=", "res.partner"), ("name", "=", "name")]
|
||||||
|
)
|
||||||
|
self.first_contact_survey_record_creation = self.env[
|
||||||
|
"survey.record.creation"
|
||||||
|
].create(
|
||||||
|
{
|
||||||
|
"name": "First contact",
|
||||||
|
"survey_id": self.survey.id,
|
||||||
|
"model_id": res_partner_model.id,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
self.env["survey.record.creation.field.values"].create(
|
||||||
|
{
|
||||||
|
"survey_record_creation_id": self.first_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.first_question_name.id,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
self.second_contact_survey_record_creation = self.env[
|
||||||
|
"survey.record.creation"
|
||||||
|
].create(
|
||||||
|
{
|
||||||
|
"name": "Second contact",
|
||||||
|
"survey_id": self.survey.id,
|
||||||
|
"model_id": res_partner_model.id,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
self.env["survey.record.creation.field.values"].create(
|
||||||
|
{
|
||||||
|
"survey_record_creation_id": self.second_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.second_question_name.id,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
self.first_answer = self._add_answer(
|
||||||
|
survey=self.survey, partner=False, email="jean@test.fr"
|
||||||
|
)
|
||||||
|
self._add_answer_line(
|
||||||
|
question=self.first_question_name,
|
||||||
|
answer=self.first_answer,
|
||||||
|
answer_value="Jean",
|
||||||
|
)
|
||||||
|
self._add_answer_line(
|
||||||
|
question=self.second_question_name,
|
||||||
|
answer=self.first_answer,
|
||||||
|
answer_value="Jeanne",
|
||||||
|
)
|
||||||
|
self.first_answer._mark_done()
|
||||||
|
|
||||||
|
partner = self.env["res.partner"].search([("name", "=", "Jean")])
|
||||||
|
self.assertTrue(partner.name == "Jean")
|
||||||
|
partner = self.env["res.partner"].search([("name", "=", "Jeanne")])
|
||||||
|
self.assertTrue(partner.name == "Jeanne")
|
||||||
|
|
||||||
|
def test_specific_case_multiple_contacts_in_same_survey_missing_mandatory_field(
|
||||||
|
self,
|
||||||
|
):
|
||||||
|
# In this test we want to test the possibility to have one record created by a survey
|
||||||
|
# even if many survey_record_creation of the same module exist
|
||||||
|
# (records with mandatory fields missing should be ignored)
|
||||||
|
# EDIT: I don't think it is a default behavior we want to have. Could be another module.
|
||||||
|
...
|
||||||
Reference in New Issue
Block a user