Skip to content

Commit d4a5eb3

Browse files
committed
Merge PR #743 into 18.0
Signed-off-by StefanRijnhart
2 parents 8c18e25 + 6243869 commit d4a5eb3

File tree

3 files changed

+33
-2
lines changed

3 files changed

+33
-2
lines changed

queue_job/README.rst

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -428,8 +428,9 @@ allow-list.
428428

429429
The default allow-list is ("tz", "lang", "allowed_company_ids",
430430
"force_company", "active_test"). It can be customized in
431-
``Base._job_prepare_context_before_enqueue_keys``. **Bypass jobs on
432-
running Odoo**
431+
``Base._job_prepare_context_before_enqueue_keys``.
432+
433+
**Bypass jobs on running Odoo**
433434

434435
When you are developing (ie: connector modules) you might want to bypass
435436
the queue job and run your code immediately.

queue_job/tests/common.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@ def _add_job(self, *args, **kwargs):
255255
if not job.identity_key or all(
256256
j.identity_key != job.identity_key for j in self.enqueued_jobs
257257
):
258+
self._prepare_context(job)
258259
self.enqueued_jobs.append(job)
259260

260261
patcher = mock.patch.object(job, "store")
@@ -273,6 +274,13 @@ def _add_job(self, *args, **kwargs):
273274
)
274275
return job
275276

277+
def _prepare_context(self, job):
278+
# pylint: disable=context-overridden
279+
job_model = job.job_model.with_context({})
280+
field_records = job_model._fields["records"]
281+
# Filter the context to simulate store/load of the job
282+
job.recordset = field_records.convert_to_write(job.recordset, job_model)
283+
276284
def __enter__(self):
277285
return self
278286

test_queue_job/tests/test_delay_mocks.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,28 @@ def test_trap_jobs_perform(self):
270270
self.assertEqual(logs[2].message, "test_trap_jobs_perform graph 3")
271271
self.assertEqual(logs[3].message, "test_trap_jobs_perform graph 1")
272272

273+
def test_trap_jobs_prepare_context(self):
274+
"""Context is transferred to the job according to an allow-list.
275+
276+
Default allow-list is:
277+
("tz", "lang", "allowed_company_ids", "force_company", "active_test")
278+
It can be customized in ``Base._job_prepare_context_before_enqueue_keys``.
279+
"""
280+
# pylint: disable=context-overridden
281+
with trap_jobs() as trap:
282+
model1 = self.env["test.queue.job"].with_context({"config_key": 42})
283+
model2 = self.env["test.queue.job"].with_context(
284+
{"config_key": 42, "lang": "it_IT"}
285+
)
286+
model1.with_delay().testing_method("0", "K", return_context=1)
287+
model2.with_delay().testing_method("0", "K", return_context=1)
288+
289+
[job1, job2] = trap.enqueued_jobs
290+
trap.perform_enqueued_jobs()
291+
292+
self.assertEqual(job1.result, {"job_uuid": mock.ANY})
293+
self.assertEqual(job2.result, {"job_uuid": mock.ANY, "lang": "it_IT"})
294+
273295
def test_mock_with_delay(self):
274296
with mock_with_delay() as (delayable_cls, delayable):
275297
self.env["test.queue.job"].button_that_uses_with_delay()

0 commit comments

Comments
 (0)