1# -*- coding: utf-8 -*-
2# Part of Odoo. See LICENSE file for full copyright and licensing details.
3
4from unittest.mock import patch
5
6from odoo import fields
7from odoo.tests.common import TransactionCase
8
9
10class TestIrCron(TransactionCase):
11
12    def setUp(self):
13        super(TestIrCron, self).setUp()
14
15        self.cron = self.env['ir.cron'].create({
16            'name': 'TestCron',
17            'model_id': self.env.ref('base.model_res_partner').id,
18            'state': 'code',
19            'code': 'model.search([("name", "=", "TestCronRecord")]).write({"name": "You have been CRONWNED"})',
20            'interval_number': 1,
21            'interval_type': 'days',
22            'numbercall': -1,
23            'doall': False,
24        })
25        self.test_partner = self.env['res.partner'].create({
26            'name': 'TestCronRecord'
27        })
28        self.test_partner2 = self.env['res.partner'].create({
29            'name': 'NotTestCronRecord'
30        })
31
32    def test_cron_direct_trigger(self):
33        self.assertFalse(self.cron.lastcall)
34        self.assertEqual(self.test_partner.name, 'TestCronRecord')
35        self.assertEqual(self.test_partner2.name, 'NotTestCronRecord')
36
37        def patched_now(*args, **kwargs):
38            return '2020-10-22 08:00:00'
39
40        with patch('odoo.fields.Datetime.now', patched_now):
41            self.cron.method_direct_trigger()
42
43        self.assertEqual(fields.Datetime.to_string(self.cron.lastcall), '2020-10-22 08:00:00')
44        self.assertEqual(self.test_partner.name, 'You have been CRONWNED')
45        self.assertEqual(self.test_partner2.name, 'NotTestCronRecord')
46