Skip to content

Commit 820d983

Browse files
committed
[ADD] test_queue_job: regression test for args/kwargs rebind in in_temporary_env
1 parent 8455b0b commit 820d983

3 files changed

Lines changed: 26 additions & 0 deletions

File tree

test_queue_job/data/queue_job_function_data.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,14 @@
2020
<field name="method">job_with_retry_pattern__no_zero</field>
2121
<field name="retry_pattern" eval="{3: 180}" />
2222
</record>
23+
<record
24+
id="job_function_test_queue_job_job_commit_with_arg_records"
25+
model="queue.job.function"
26+
>
27+
<field name="model_id" ref="test_queue_job.model_test_queue_job" />
28+
<field name="method">job_commit_with_arg_records</field>
29+
<field name="allow_commit" eval="True" />
30+
</record>
2331
<record
2432
id="job_function_test_queue_channel_job_sub_channel"
2533
model="queue.job.function"

test_queue_job/models/test_models.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,15 @@ def job_alter_mutable(self, mutable_arg, mutable_kwarg=None):
114114
mutable_kwarg["b"] = 2
115115
return mutable_arg, mutable_kwarg
116116

117+
def job_commit_with_arg_records(self, record, record_list=None, record_dict=None):
118+
if record.env.cr is not self.env.cr:
119+
raise AssertionError("record argument cursor was not rebound")
120+
if record_list and record_list[0].env.cr is not self.env.cr:
121+
raise AssertionError("record list argument cursor was not rebound")
122+
if record_dict and record_dict["record"].env.cr is not self.env.cr:
123+
raise AssertionError("record dict argument cursor was not rebound")
124+
record.env.cr.commit() # pylint: disable=invalid-commit
125+
117126
def delay_me(self, arg, kwarg=None):
118127
return arg, kwarg
119128

test_queue_job/tests/test_job.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import odoo.tests.common as common
99

1010
from odoo.addons.queue_job import identity_exact
11+
from odoo.addons.queue_job.controllers.main import RunJobController
1112
from odoo.addons.queue_job.delay import DelayableGraph
1213
from odoo.addons.queue_job.exception import (
1314
FailedJobError,
@@ -68,6 +69,14 @@ def test_perform_args(self):
6869
result = test_job.perform()
6970
self.assertEqual(result, (("o", "k"), {"c": "!"}))
7071

72+
def test_allow_commit_rebinds_recordsets_in_args(self):
73+
record = self.env.user.partner_id
74+
job = self.env["test.queue.job"].with_delay().job_commit_with_arg_records(
75+
record, [record], {"record": record}
76+
)
77+
RunJobController._runjob(self.env, job)
78+
self.assertEqual(job.state, DONE)
79+
7180
def test_retryable_error(self):
7281
test_job = Job(self.method, kwargs={"raise_retry": True}, max_retries=3)
7382
self.assertEqual(test_job.retry, 0)

0 commit comments

Comments
 (0)