Skip to content

Commit 6e3a7d9

Browse files
committed
[IMP] test_queue_job: add test for error_handler
1 parent 07b971c commit 6e3a7d9

File tree

3 files changed

+29
-0
lines changed

3 files changed

+29
-0
lines changed

test_queue_job/data/queue_job_function_data.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<field name="model_id" ref="test_queue_job.model_test_queue_job" />
44
<field name="method">testing_method</field>
55
<field name="related_action" eval='{"func_name": "testing_related_method"}' />
6+
<field name="error_handler" eval='{"func_name": "testing_error_handler"}' />
67
</record>
78
<record
89
id="job_function_test_queue_job_job_with_retry_pattern"

test_queue_job/models/test_models.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ def testing_related__url(self, **kwargs):
2929
"url": kwargs["url"].format(subject=subject),
3030
}
3131

32+
def testing_error_handler(self, **kwargs):
33+
return None
34+
3235

3336
class ModelTestQueueJob(models.Model):
3437

test_queue_job/tests/test_job.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html)
33

44
import hashlib
5+
import logging
56
from datetime import datetime, timedelta
67
from unittest import mock
8+
from unittest.mock import patch
79

810
import odoo.tests.common as common
911

1012
from odoo.addons.queue_job import identity_exact
13+
from odoo.addons.queue_job.controllers.main import RunJobController
1114
from odoo.addons.queue_job.delay import DelayableGraph
1215
from odoo.addons.queue_job.exception import (
1316
FailedJobError,
@@ -24,9 +27,12 @@
2427
WAIT_DEPENDENCIES,
2528
Job,
2629
)
30+
from odoo.addons.queue_job.tests.common import trap_jobs
2731

2832
from .common import JobCommonCase
2933

34+
_logger = logging.getLogger(__name__)
35+
3036

3137
class TestJobsOnTestingMethod(JobCommonCase):
3238
"""Test Job"""
@@ -341,6 +347,25 @@ def test_job_identity_key_func_exact(self):
341347
job1 = Job.load(self.env, test_job_1.uuid)
342348
self.assertEqual(job1.identity_key, expected_key)
343349

350+
def test_failed_job_perform(self):
351+
with trap_jobs() as trap:
352+
model = self.env["test.queue.job"]
353+
job = model.with_delay(priority=1, max_retries=1).testing_method()
354+
trap.assert_jobs_count(1)
355+
with patch.object(type(job), "perform", side_effect=IOError,), patch(
356+
"odoo.sql_db.Cursor.commit", return_value=None
357+
): # avoid odoo.sql_db: bad query: ROLLBACK TO SAVEPOINT test_0
358+
controller = RunJobController()
359+
try:
360+
controller._try_perform_job(self.env, job)
361+
with patch(
362+
"odoo.addons.test_queue_job.models.test_models.QueueJob"
363+
".testing_error_handler"
364+
) as patched:
365+
patched.assert_called_once()
366+
except Exception:
367+
_logger.info("Job fails")
368+
344369

345370
class TestJobs(JobCommonCase):
346371
"""Test jobs on other methods or with different job configuration"""

0 commit comments

Comments
 (0)