2222from press .utils .test import foreground_enqueue_doc
2323
2424
25+ def fn_appender (before_insert : Callable , prepare_agent_responses : Callable ):
26+ def new_before_insert (self ):
27+ before_insert (self )
28+ prepare_agent_responses (self )
29+
30+ return new_before_insert
31+
32+
33+ before_insert : Callable = lambda self : None
34+
35+
2536def fake_agent_job_req (
2637 job_name : str ,
2738 status : Literal ["Success" , "Pending" , "Running" , "Failure" ],
28- output : str = "" ,
29- steps : list [dict ] = None ,
39+ data : dict ,
40+ steps : list [dict ],
3041) -> Callable :
42+ data = data or {}
3143 steps = steps or []
3244
3345 def prepare_agent_responses (self ):
@@ -38,8 +50,10 @@ def prepare_agent_responses(self):
3850 steps: list of {"name": "Step name", "status": "status"} dictionaries
3951 """
4052 nonlocal status
53+ nonlocal job_name
54+ if self .job_type != job_name : # only fake the job we want to fake
55+ return
4156 job_id = int (make_autoname (".#" ))
42-
4357 if steps :
4458 needed_steps = frappe .get_all (
4559 "Agent Job Type Step" , {"parent" : job_name }, pluck = "step_name"
@@ -79,9 +93,7 @@ def prepare_agent_responses(self):
7993 f"https://{ self .server } :443/agent/jobs/{ str (job_id )} " ,
8094 # TODO: populate steps with data from agent job type #
8195 json = {
82- "data" : {
83- "output" : output ,
84- },
96+ "data" : data ,
8597 # TODO: uncomment lines as needed and make new parameters #
8698 "duration" : "00:00:13.496281" ,
8799 "end" : "2023-08-20 18:24:41.506067" ,
@@ -113,14 +125,16 @@ def prepare_agent_responses(self):
113125 status = 200 ,
114126 )
115127
116- return prepare_agent_responses
128+ global before_insert
129+ before_insert = fn_appender (before_insert , prepare_agent_responses )
130+ return before_insert
117131
118132
119133@contextmanager
120134def fake_agent_job (
121135 job_name : str ,
122- status : Literal ["Success" , "Pending" , "Running" , "Failure" ],
123- output : str = "" ,
136+ status : Literal ["Success" , "Pending" , "Running" , "Failure" ] = "Success" ,
137+ data : dict = None ,
124138 steps : list [dict ] = None ,
125139):
126140 """Fakes agent job request and response. Also polls the job.
@@ -130,7 +144,7 @@ def fake_agent_job(
130144 with responses .mock , patch .object (
131145 AgentJob ,
132146 "before_insert" ,
133- fake_agent_job_req (job_name , status , output , steps ),
147+ fake_agent_job_req (job_name , status , data , steps ),
134148 create = True ,
135149 ), patch (
136150 "press.press.doctype.agent_job.agent_job.frappe.enqueue_doc" ,
@@ -144,6 +158,8 @@ def fake_agent_job(
144158 {}
145159 ) # due to bug in FF related to only_if_creator docperm
146160 yield
161+ global before_insert
162+ before_insert = lambda self : None # noqa
147163
148164
149165@patch .object (AgentJob , "enqueue_http_request" , new = Mock ())
0 commit comments