11# Part of OpenSPP. See LICENSE file for full copyright and licensing details.
22
3+ import uuid
4+
35from odoo .tests .common import TransactionCase
46
57
@@ -10,6 +12,9 @@ def setUpClass(cls):
1012 cls .queue_job_model = cls .env ["queue.job" ]
1113 cls .area_import_model = cls .env ["spp.area.import" ]
1214
15+ # Get the EDIT_SENTINEL for protected fields
16+ cls .job_edit_sentinel = cls .queue_job_model .EDIT_SENTINEL
17+
1318 # Create test area import records
1419 cls .area_import_1 = cls .area_import_model .create (
1520 {
@@ -22,56 +27,35 @@ def setUpClass(cls):
2227 }
2328 )
2429
25- def test_01_queue_job_res_fields (self ):
26- """Test that queue.job model has res_id and res_model fields """
27- job = self .queue_job_model .create (
30+ def _create_test_job (self , name , res_model , res_id , state = "done" , method_name = "test_method" ):
31+ """Helper method to create test queue jobs with proper sentinel context """
32+ return self .queue_job_model . with_context ( _job_edit_sentinel = self . job_edit_sentinel ) .create (
2833 {
29- "name" : "Test Job" ,
30- "model_name" : "spp.area.import" ,
31- "method_name" : "test_method" ,
32- "res_model" : "spp.area.import" ,
33- "res_id" : self .area_import_1 .id ,
34+ "uuid" : str (uuid .uuid4 ()),
35+ "name" : name ,
36+ "model_name" : res_model ,
37+ "method_name" : method_name ,
38+ "res_model" : res_model ,
39+ "res_id" : res_id ,
40+ "state" : state ,
3441 }
3542 )
3643
44+ def test_01_queue_job_res_fields (self ):
45+ """Test that queue.job model has res_id and res_model fields"""
46+ job = self ._create_test_job ("Test Job" , "spp.area.import" , self .area_import_1 .id , state = "done" )
47+
3748 self .assertEqual (job .res_model , "spp.area.import" )
3849 self .assertEqual (job .res_id , self .area_import_1 .id )
3950
4051 def test_02_compute_job_ids (self ):
4152 """Test that area import correctly computes related jobs"""
4253 # Create jobs for area_import_1
43- job1 = self .queue_job_model .create (
44- {
45- "name" : "Job 1 for Import 1" ,
46- "model_name" : "spp.area.import" ,
47- "method_name" : "test_method" ,
48- "res_model" : "spp.area.import" ,
49- "res_id" : self .area_import_1 .id ,
50- "state" : "done" ,
51- }
52- )
53- job2 = self .queue_job_model .create (
54- {
55- "name" : "Job 2 for Import 1" ,
56- "model_name" : "spp.area.import" ,
57- "method_name" : "test_method" ,
58- "res_model" : "spp.area.import" ,
59- "res_id" : self .area_import_1 .id ,
60- "state" : "pending" ,
61- }
62- )
54+ job1 = self ._create_test_job ("Job 1 for Import 1" , "spp.area.import" , self .area_import_1 .id , state = "done" )
55+ job2 = self ._create_test_job ("Job 2 for Import 1" , "spp.area.import" , self .area_import_1 .id , state = "pending" )
6356
6457 # Create job for area_import_2
65- job3 = self .queue_job_model .create (
66- {
67- "name" : "Job 1 for Import 2" ,
68- "model_name" : "spp.area.import" ,
69- "method_name" : "test_method" ,
70- "res_model" : "spp.area.import" ,
71- "res_id" : self .area_import_2 .id ,
72- "state" : "done" ,
73- }
74- )
58+ job3 = self ._create_test_job ("Job 1 for Import 2" , "spp.area.import" , self .area_import_2 .id , state = "done" )
7559
7660 # Trigger compute
7761 self .area_import_1 ._compute_job_ids ()
@@ -100,16 +84,7 @@ def test_03_has_ongoing_jobs_no_jobs(self):
10084 def test_04_has_ongoing_jobs_with_pending_job (self ):
10185 """Test has_ongoing_jobs when there is a pending job"""
10286 # Create a pending job
103- self .queue_job_model .create (
104- {
105- "name" : "Pending Job" ,
106- "model_name" : "spp.area.import" ,
107- "method_name" : "test_method" ,
108- "res_model" : "spp.area.import" ,
109- "res_id" : self .area_import_1 .id ,
110- "state" : "pending" ,
111- }
112- )
87+ self ._create_test_job ("Pending Job" , "spp.area.import" , self .area_import_1 .id , state = "pending" )
11388
11489 # Trigger compute on both records
11590 self .area_import_1 ._compute_has_ongoing_jobs ()
@@ -125,16 +100,7 @@ def test_05_has_ongoing_jobs_with_enqueued_job(self):
125100 self .queue_job_model .search ([("res_model" , "=" , "spp.area.import" )]).unlink ()
126101
127102 # Create an enqueued job
128- self .queue_job_model .create (
129- {
130- "name" : "Enqueued Job" ,
131- "model_name" : "spp.area.import" ,
132- "method_name" : "test_method" ,
133- "res_model" : "spp.area.import" ,
134- "res_id" : self .area_import_2 .id ,
135- "state" : "enqueued" ,
136- }
137- )
103+ self ._create_test_job ("Enqueued Job" , "spp.area.import" , self .area_import_2 .id , state = "enqueued" )
138104
139105 # Trigger compute
140106 self .area_import_1 ._compute_has_ongoing_jobs ()
@@ -150,16 +116,7 @@ def test_06_has_ongoing_jobs_with_started_job(self):
150116 self .queue_job_model .search ([("res_model" , "=" , "spp.area.import" )]).unlink ()
151117
152118 # Create a started job
153- self .queue_job_model .create (
154- {
155- "name" : "Started Job" ,
156- "model_name" : "spp.area.import" ,
157- "method_name" : "test_method" ,
158- "res_model" : "spp.area.import" ,
159- "res_id" : self .area_import_1 .id ,
160- "state" : "started" ,
161- }
162- )
119+ self ._create_test_job ("Started Job" , "spp.area.import" , self .area_import_1 .id , state = "started" )
163120
164121 # Trigger compute
165122 self .area_import_1 ._compute_has_ongoing_jobs ()
@@ -175,26 +132,8 @@ def test_07_has_ongoing_jobs_with_done_job(self):
175132 self .queue_job_model .search ([("res_model" , "=" , "spp.area.import" )]).unlink ()
176133
177134 # Create only done/failed jobs
178- self .queue_job_model .create (
179- {
180- "name" : "Done Job" ,
181- "model_name" : "spp.area.import" ,
182- "method_name" : "test_method" ,
183- "res_model" : "spp.area.import" ,
184- "res_id" : self .area_import_1 .id ,
185- "state" : "done" ,
186- }
187- )
188- self .queue_job_model .create (
189- {
190- "name" : "Failed Job" ,
191- "model_name" : "spp.area.import" ,
192- "method_name" : "test_method" ,
193- "res_model" : "spp.area.import" ,
194- "res_id" : self .area_import_2 .id ,
195- "state" : "failed" ,
196- }
197- )
135+ self ._create_test_job ("Done Job" , "spp.area.import" , self .area_import_1 .id , state = "done" )
136+ self ._create_test_job ("Failed Job" , "spp.area.import" , self .area_import_2 .id , state = "failed" )
198137
199138 # Trigger compute
200139 self .area_import_1 ._compute_has_ongoing_jobs ()
@@ -210,26 +149,8 @@ def test_08_has_ongoing_jobs_mixed_states(self):
210149 self .queue_job_model .search ([("res_model" , "=" , "spp.area.import" )]).unlink ()
211150
212151 # Create jobs with different states
213- self .queue_job_model .create (
214- {
215- "name" : "Done Job" ,
216- "model_name" : "spp.area.import" ,
217- "method_name" : "test_method" ,
218- "res_model" : "spp.area.import" ,
219- "res_id" : self .area_import_1 .id ,
220- "state" : "done" ,
221- }
222- )
223- self .queue_job_model .create (
224- {
225- "name" : "Pending Job" ,
226- "model_name" : "spp.area.import" ,
227- "method_name" : "test_method" ,
228- "res_model" : "spp.area.import" ,
229- "res_id" : self .area_import_2 .id ,
230- "state" : "pending" ,
231- }
232- )
152+ self ._create_test_job ("Done Job" , "spp.area.import" , self .area_import_1 .id , state = "done" )
153+ self ._create_test_job ("Pending Job" , "spp.area.import" , self .area_import_2 .id , state = "pending" )
233154
234155 # Trigger compute
235156 self .area_import_1 ._compute_has_ongoing_jobs ()
@@ -242,16 +163,7 @@ def test_08_has_ongoing_jobs_mixed_states(self):
242163 def test_09_job_ids_empty_for_different_model (self ):
243164 """Test that job_ids is empty when jobs belong to different model"""
244165 # Create a job with different res_model
245- self .queue_job_model .create (
246- {
247- "name" : "Job for different model" ,
248- "model_name" : "res.partner" ,
249- "method_name" : "test_method" ,
250- "res_model" : "res.partner" ,
251- "res_id" : 1 ,
252- "state" : "done" ,
253- }
254- )
166+ self ._create_test_job ("Job for different model" , "res.partner" , 1 , state = "done" )
255167
256168 # Trigger compute
257169 self .area_import_1 ._compute_job_ids ()
@@ -265,16 +177,7 @@ def test_10_has_ongoing_jobs_different_model(self):
265177 self .queue_job_model .search ([("res_model" , "=" , "spp.area.import" )]).unlink ()
266178
267179 # Create a pending job for a different model
268- self .queue_job_model .create (
269- {
270- "name" : "Job for different model" ,
271- "model_name" : "res.partner" ,
272- "method_name" : "test_method" ,
273- "res_model" : "res.partner" ,
274- "res_id" : 1 ,
275- "state" : "pending" ,
276- }
277- )
180+ self ._create_test_job ("Job for different model" , "res.partner" , 1 , state = "pending" )
278181
279182 # Trigger compute
280183 self .area_import_1 ._compute_has_ongoing_jobs ()
0 commit comments