11# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
2+ from unittest .mock import patch
23
34from odoo .tests .common import TransactionCase
5+ from odoo .tools import mute_logger
46
57from ..controllers .main import RunJobController
8+ from ..exception import JobError
69from ..job import Job
710
811
912class TestRunJobController (TransactionCase ):
13+ def setUp (self ):
14+ super ().setUp ()
15+
16+ def _clean_queue_job ():
17+ self .env ["queue.job" ].search ([]).unlink ()
18+
19+ self .addCleanup (_clean_queue_job )
20+
1021 def test_get_failure_values (self ):
1122 method = self .env ["res.users" ].mapped
1223 job = Job (method )
@@ -21,3 +32,31 @@ def test_runjob_success(self):
2132 RunJobController ._runjob (self .env , job )
2233 self .assertEqual (job .state , "done" )
2334 self .assertEqual (job .db_record ().state , "done" )
35+
36+ def test_runjob_on_fail (self ):
37+ function = self .env .ref ("queue_job.job_function_queue_job__test_job" )
38+ function .on_fail_method = "_test_on_fail"
39+ job = self .env ["queue.job" ].with_delay ()._test_job (failure_rate = 1 )
40+ with (
41+ self .assertRaises (JobError ),
42+ patch (
43+ "odoo.addons.queue_job.models.queue_job.QueueJob._test_on_fail"
44+ ) as mocked_hook ,
45+ patch ("odoo.addons.queue_job.job.Job.in_temporary_env" ) as mocked_temp_env ,
46+ mute_logger ("odoo.addons.queue_job.controllers.main" ),
47+ ):
48+ mocked_temp_env .return_value .__enter__ .return_value = self .env
49+ RunJobController ._runjob (self .env , job )
50+ self .assertEqual (job .state , "failed" )
51+ self .assertEqual (mocked_hook .call_count , 1 )
52+
53+ def test_runjob_on_fail_not_configured (self ):
54+ job = self .env ["queue.job" ].with_delay ()._test_job (failure_rate = 1 )
55+ with (
56+ self .assertRaises (JobError ),
57+ patch ("odoo.addons.queue_job.job.Job.in_temporary_env" ) as mocked_temp_env ,
58+ mute_logger ("odoo.addons.queue_job.controllers.main" ),
59+ ):
60+ mocked_temp_env .return_value .__enter__ .return_value = self .env
61+ RunJobController ._runjob (self .env , job )
62+ self .assertEqual (job .state , "failed" )
0 commit comments