1+ from types import SimpleNamespace
2+
13from ckanext .validate import jobs
24from ckanext .validate .model .validation_jobs import JobStatus
35
@@ -27,23 +29,23 @@ def fake_get_action(name):
2729 monkeypatch .setattr (
2830 jobs .ValidationJob ,
2931 "create" ,
30- lambda resource_id , status : state_calls . append (( "create" , resource_id , status ) ),
32+ lambda resource_id , status : SimpleNamespace ( id = 123 ),
3133 )
3234 monkeypatch .setattr (
3335 jobs .ValidationJob ,
34- "update " ,
35- lambda resource_id , status : state_calls .append (("update " , resource_id , status )),
36+ "update_by_id " ,
37+ lambda job_id , status : state_calls .append (("update_by_id " , job_id , status )),
3638 )
3739
38- jobs .run_resource_validation_job ("res-1" )
40+ jobs .run_resource_validation_job ("res-1" , job_id = 123 )
3941
4042 assert captured == {
4143 "context" : {"ignore_auth" : True , "user" : "site-user" },
4244 "data_dict" : {"id" : "res-1" },
4345 }
4446 assert state_calls == [
45- ("create " , "res-1" , JobStatus .RUNNING ),
46- ("update " , "res-1" , JobStatus .FINISHED ),
47+ ("update_by_id " , 123 , JobStatus .RUNNING ),
48+ ("update_by_id " , 123 , JobStatus .FINISHED ),
4749 ]
4850
4951
@@ -67,17 +69,51 @@ def fake_get_action(name):
6769 monkeypatch .setattr (
6870 jobs .ValidationJob ,
6971 "create" ,
70- lambda resource_id , status : state_calls . append (( "create" , resource_id , status ) ),
72+ lambda resource_id , status : SimpleNamespace ( id = 456 ),
7173 )
7274 monkeypatch .setattr (
7375 jobs .ValidationJob ,
74- "update " ,
75- lambda resource_id , status : state_calls .append (("update " , resource_id , status )),
76+ "update_by_id " ,
77+ lambda job_id , status : state_calls .append (("update_by_id " , job_id , status )),
7678 )
7779
78- jobs .run_resource_validation_job ("res-2" )
80+ jobs .run_resource_validation_job ("res-2" , job_id = 456 )
81+
82+ assert state_calls == [
83+ ("update_by_id" , 456 , JobStatus .RUNNING ),
84+ ("update_by_id" , 456 , JobStatus .ERROR ),
85+ ]
86+
87+
88+ def test_run_resource_validation_job_returns_early_when_job_record_does_not_exist (monkeypatch ):
89+ resource_validate_called = []
90+ state_calls = []
91+
92+ def fake_get_site_user (context , data_dict ):
93+ return {"name" : "site-user" }
94+
95+ def fake_resource_validate (context , data_dict ):
96+ resource_validate_called .append (True )
97+ return {"id" : "res-3" }
98+
99+ def fake_get_action (name ):
100+ if name == "get_site_user" :
101+ return fake_get_site_user
102+ if name == "resource_validate" :
103+ return fake_resource_validate
104+ raise AssertionError (f"Unexpected action requested: { name } " )
105+
106+ def fake_update_by_id (job_id , status ):
107+ state_calls .append (("update_by_id" , job_id , status ))
108+ if status == JobStatus .RUNNING :
109+ raise ValueError ("No existing job found for job_id" )
110+
111+ monkeypatch .setattr (jobs .toolkit , "get_action" , fake_get_action )
112+ monkeypatch .setattr (jobs .ValidationJob , "update_by_id" , fake_update_by_id )
113+
114+ jobs .run_resource_validation_job ("res-3" , job_id = 321 )
79115
116+ assert resource_validate_called == []
80117 assert state_calls == [
81- ("create" , "res-2" , JobStatus .RUNNING ),
82- ("create" , "res-2" , JobStatus .ERROR ),
118+ ("update_by_id" , 321 , JobStatus .RUNNING ),
83119 ]
0 commit comments