oca-technical/odoo-bringout-oca-management-system-mgmtsystem_evaluation/mgmtsystem_evaluation/tests/test_evaluation.py
2025-08-29 15:43:03 +02:00

226 lines
8.4 KiB
Python

# Copyright 2023 CreuBlanca
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from freezegun import freeze_time
from odoo.tests.common import Form, TransactionCase
class TestEvaluation(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.result_failed = cls.env["mgmtsystem.evaluation.result"].create(
{"name": "Failed", "passed": False}
)
cls.result_passed = cls.env["mgmtsystem.evaluation.result"].create(
{
"name": "Passed",
"passed": True,
}
)
cls.template = cls.env["mgmtsystem.evaluation.template"].create(
{
"model_id": cls.env.ref("base.model_res_partner").id,
"name": "Template",
"feedback": "Feedback",
"note": "Note",
"result_ids": [(6, 0, (cls.result_failed | cls.result_passed).ids)],
}
)
cls.partner = cls.env["res.partner"].create({"name": "Demo partner"})
cls.partner_manager = cls.env["res.partner"].create(
{"name": "Demo manager partner"}
)
cls.partner_manager_2 = cls.env["res.partner"].create(
{"name": "Demo manager 2 partner"}
)
cls.user = cls.env["res.users"].create(
{
"partner_id": cls.partner.id,
"login": "test_user_login",
"password": "test_user_login",
}
)
cls.manager = cls.env["res.users"].create(
{
"partner_id": cls.partner_manager.id,
"login": "test_nanager_login",
"password": "test_nanager_login",
}
)
cls.manager_2 = cls.env["res.users"].create(
{
"partner_id": cls.partner_manager_2.id,
"login": "test_nanager_login_2",
"password": "test_nanager_login_2",
}
)
cls.group = cls.env["res.groups"].create(
{
"name": "Group",
}
)
cls.activity_1 = cls.env["mail.activity.type"].create({"name": "Activity 1"})
cls.activity_2 = cls.env["mail.activity.type"].create({"name": "Activity 2"})
def test_onchange(self):
with Form(self.env["mgmtsystem.evaluation"]) as f:
self.assertFalse(f.feedback)
f.template_id = self.template
self.assertEqual(f.feedback, self.template.feedback)
f.resource = self.partner
def test_user(self):
self.assertEqual(0, self.partner.mgmtsystem_evaluation_count)
with Form(self.env["mgmtsystem.evaluation"]) as f:
f.template_id = self.template
f.resource = self.partner
evaluation = f.save()
evaluation.manager_ids = self.manager
self.assertFalse(evaluation.user_id)
self.assertFalse(
self.env["mgmtsystem.evaluation"]
.with_user(self.user.id)
.search([("id", "=", evaluation.id)])
)
evaluation.draft2progress()
self.assertEqual(evaluation.user_id, self.user)
self.assertEqual(
evaluation,
self.env["mgmtsystem.evaluation"]
.with_user(self.user.id)
.search([("id", "=", evaluation.id)]),
)
self.assertTrue(evaluation.with_user(self.manager).is_manager)
self.assertFalse(evaluation.with_user(self.manager).is_user)
self.assertFalse(
self.env["mgmtsystem.evaluation"]
.with_user(self.manager_2.id)
.search([("id", "=", evaluation.id)]),
)
self.assertFalse(evaluation.with_user(self.user).is_manager)
self.assertTrue(evaluation.with_user(self.user).is_user)
self.assertEqual(1, self.partner.mgmtsystem_evaluation_count)
def test_manager(self):
self.assertEqual(0, self.partner.mgmtsystem_evaluation_count)
self.group.users = self.manager_2
self.template.group_id = self.group
with Form(self.env["mgmtsystem.evaluation"]) as f:
f.template_id = self.template
f.resource = self.partner
evaluation = f.save()
evaluation.manager_ids = self.manager
self.assertFalse(evaluation.user_id)
self.assertFalse(
self.env["mgmtsystem.evaluation"]
.with_user(self.user.id)
.search([("id", "=", evaluation.id)])
)
evaluation.draft2progress()
self.assertEqual(evaluation.user_id, self.user)
self.assertEqual(
evaluation,
self.env["mgmtsystem.evaluation"]
.with_user(self.user.id)
.search([("id", "=", evaluation.id)]),
)
self.assertTrue(evaluation.with_user(self.manager).is_manager)
self.assertFalse(evaluation.with_user(self.manager).is_user)
self.assertTrue(evaluation.with_user(self.manager_2).is_manager)
self.assertFalse(evaluation.with_user(self.manager_2).is_user)
self.assertFalse(evaluation.with_user(self.user).is_manager)
self.assertTrue(evaluation.with_user(self.user).is_user)
self.assertEqual(1, self.partner.mgmtsystem_evaluation_count)
def test_no_repetition(self):
with Form(self.env["mgmtsystem.evaluation"]) as f:
f.template_id = self.template
f.resource = self.partner
evaluation = f.save()
evaluation.draft2progress()
evaluation.result_id = self.result_failed
evaluation.progress2done()
self.assertFalse(evaluation.next_evaluation_date)
def test_repetition(self):
self.template.write(
{
"recurrence_type": "monthly",
"recurrence_period": 1,
}
)
with Form(self.env["mgmtsystem.evaluation"]) as f:
f.template_id = self.template
f.resource = self.partner
evaluation = f.save()
evaluation.draft2progress()
evaluation.result_id = self.result_failed
evaluation.progress2done()
self.assertTrue(evaluation.next_evaluation_date)
self.env["mgmtsystem.evaluation"]._cron_new_evaluation()
self.assertFalse(
self.env["mgmtsystem.evaluation"].search(
[
("template_id", "=", self.template.id),
("id", "not in", evaluation.ids),
]
)
)
with freeze_time(evaluation.next_evaluation_date):
self.env["mgmtsystem.evaluation"]._cron_new_evaluation()
self.assertTrue(
self.env["mgmtsystem.evaluation"].search(
[
("template_id", "=", self.template.id),
("id", "not in", evaluation.ids),
]
)
)
def test_cancel_back_to_draft(self):
with Form(self.env["mgmtsystem.evaluation"]) as f:
f.template_id = self.template
f.resource = self.partner
evaluation = f.save()
evaluation.draft2progress()
self.assertEqual("progress", evaluation.state)
evaluation.cancel()
self.assertEqual("cancel", evaluation.state)
evaluation.back_to_draft()
self.assertEqual("draft", evaluation.state)
def test_activities(self):
self.template.write(
{
"user_activity_type_id": self.activity_1.id,
"manager_activity_type_id": self.activity_2.id,
}
)
with Form(self.env["mgmtsystem.evaluation"]) as f:
f.template_id = self.template
f.resource = self.partner
evaluation = f.save()
evaluation.manager_ids = self.manager | self.manager_2
self.assertFalse(evaluation.activity_ids)
evaluation.draft2progress()
self.assertEqual(3, len(evaluation.activity_ids))
self.assertTrue(
evaluation.activity_ids.filtered(
lambda r: r.user_id == self.user
and r.activity_type_id == self.activity_1
)
)
self.assertTrue(
evaluation.activity_ids.filtered(
lambda r: r.user_id == self.manager
and r.activity_type_id == self.activity_2
)
)
self.assertTrue(
evaluation.activity_ids.filtered(
lambda r: r.user_id == self.manager_2
and r.activity_type_id == self.activity_2
)
)