mirror of
https://github.com/bringout/oca-technical.git
synced 2026-04-18 09:32:07 +02:00
94 lines
3.7 KiB
Python
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)
|