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

94 lines
3.7 KiB
Python

import time
from datetime import datetime, timedelta
from unittest import mock
from odoo import exceptions
from odoo.tests import common
def freeze_time(dt):
mock_time = mock.Mock()
mock_time.return_value = time.mktime(dt.timetuple())
return mock_time
class TestModelAction(common.TransactionCase):
"""Test class for mgmtsystem_action."""
@classmethod
def setUpClass(cls):
super().setUpClass()
# disable tracking test suite wise
cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
cls.record = cls.env["mgmtsystem.action"].create(
{"name": "SampleAction", "type_action": "immediate"}
)
def _assert_date_equal(self, val, expected=None):
expected = expected or datetime.now()
self.assertEqual(tuple(val.timetuple())[:5], tuple(expected.timetuple())[:5])
def test_create_action(self):
"""Test object creation."""
stage = self.env.ref("mgmtsystem_action.stage_open")
self.assertEqual(self.record.name, "SampleAction")
self.assertNotEqual(self.record.reference, "NEW")
self.assertEqual(self.record.type_action, "immediate")
self.assertEqual(self.record.stage_id.name, "Draft")
self.assertEqual(self.record.stage_id.is_starting, True)
self.assertFalse(self.record.date_open)
self.record.stage_id = stage
self._assert_date_equal(self.record.date_open)
def test_case_close(self):
"""Test object close state."""
stage = self.env.ref("mgmtsystem_action.stage_open")
stage_new = self.env.ref("mgmtsystem_action.stage_draft")
self.record.stage_id = stage
stage = self.env.ref("mgmtsystem_action.stage_close")
self.record.stage_id = stage
self._assert_date_equal(self.record.date_closed)
try:
self.record.write({"stage_id": stage_new.id})
except exceptions.ValidationError:
self.assertTrue(True)
stage = self.env.ref("mgmtsystem_action.stage_close")
try:
self.record.write({"stage_id": stage.id})
except exceptions.ValidationError:
self.assertTrue(True)
def test_get_action_url(self):
"""Test if action url start with http."""
url = self.record.get_action_url()
self.assertEqual(url.startswith("http"), True)
self.assertIn("&id={}&model={}".format(self.record.id, self.record._name), url)
def test_process_reminder_queue(self):
"""Check if process_reminder_queue work when days reminder are 10."""
ten_days_date = datetime.now().date() + timedelta(days=10)
self.record.write(
{
"date_deadline": ten_days_date, # 10 days from now
"stage_id": self.env.ref("mgmtsystem_action.stage_open").id,
}
)
with mock.patch("time.time", freeze_time(ten_days_date)):
tmpl_model = self.env["mail.template"]
with mock.patch.object(type(tmpl_model), "send_mail") as mocked:
self.env["mgmtsystem.action"].process_reminder_queue()
mocked.assert_called_with(self.record.id)
def test_stage_groups(self):
"""Check if stage_groups return all stages."""
stage_ids = self.env["mgmtsystem.action.stage"].search([])
stages_found = self.record._stage_groups(stage_ids)
state = len(stage_ids) == len(stages_found[0])
self.assertFalse(state)
def test_send_mail(self):
"""Check if mail send action work."""
tmpl_model = self.env["mail.template"]
with mock.patch.object(type(tmpl_model), "send_mail") as mocked:
self.record.send_mail_for_action()
mocked.assert_called_with(self.record.id, force_send=True)