@@ -102,6 +102,18 @@ async def test_jobs_tree_internal(self):
102102 result = await resp .json ()
103103 assert result ["data" ]["jobs" ] == [
104104 {
105+ "created" : ANY ,
106+ "name" : "test_jobs_tree_alt" ,
107+ "reference" : None ,
108+ "uuid" : ANY ,
109+ "progress" : 0 ,
110+ "stage" : "init" ,
111+ "done" : False ,
112+ "child_jobs" : [],
113+ "errors" : [],
114+ },
115+ {
116+ "created" : ANY ,
105117 "name" : "test_jobs_tree_outer" ,
106118 "reference" : None ,
107119 "uuid" : ANY ,
@@ -111,6 +123,7 @@ async def test_jobs_tree_internal(self):
111123 "errors" : [],
112124 "child_jobs" : [
113125 {
126+ "created" : ANY ,
114127 "name" : "test_jobs_tree_inner" ,
115128 "reference" : None ,
116129 "uuid" : ANY ,
@@ -122,16 +135,6 @@ async def test_jobs_tree_internal(self):
122135 },
123136 ],
124137 },
125- {
126- "name" : "test_jobs_tree_alt" ,
127- "reference" : None ,
128- "uuid" : ANY ,
129- "progress" : 0 ,
130- "stage" : "init" ,
131- "done" : False ,
132- "child_jobs" : [],
133- "errors" : [],
134- },
135138 ]
136139
137140 test .event .set ()
@@ -141,6 +144,7 @@ async def test_jobs_tree_internal(self):
141144 result = await resp .json ()
142145 assert result ["data" ]["jobs" ] == [
143146 {
147+ "created" : ANY ,
144148 "name" : "test_jobs_tree_alt" ,
145149 "reference" : None ,
146150 "uuid" : ANY ,
@@ -182,6 +186,7 @@ async def test_job_manual_cleanup(self) -> None:
182186 assert resp .status == 200
183187 result = await resp .json ()
184188 assert result ["data" ] == {
189+ "created" : ANY ,
185190 "name" : "test_job_manual_cleanup" ,
186191 "reference" : None ,
187192 "uuid" : test .job_id ,
@@ -229,3 +234,86 @@ async def test_job_not_found(api_client: TestClient, method: str, url: str):
229234 assert resp .status == 404
230235 body = await resp .json ()
231236 assert body ["message" ] == "Job does not exist"
237+
238+
239+ async def test_jobs_sorted (api_client : TestClient , coresys : CoreSys ):
240+ """Test jobs are sorted by datetime in results."""
241+
242+ class TestClass :
243+ """Test class."""
244+
245+ def __init__ (self , coresys : CoreSys ):
246+ """Initialize the test class."""
247+ self .coresys = coresys
248+
249+ @Job (name = "test_jobs_sorted_1" , cleanup = False )
250+ async def test_jobs_sorted_1 (self ):
251+ """Sorted test method 1."""
252+ await self .test_jobs_sorted_inner_1 ()
253+ await self .test_jobs_sorted_inner_2 ()
254+
255+ @Job (name = "test_jobs_sorted_inner_1" , cleanup = False )
256+ async def test_jobs_sorted_inner_1 (self ):
257+ """Sorted test inner method 1."""
258+
259+ @Job (name = "test_jobs_sorted_inner_2" , cleanup = False )
260+ async def test_jobs_sorted_inner_2 (self ):
261+ """Sorted test inner method 2."""
262+
263+ @Job (name = "test_jobs_sorted_2" , cleanup = False )
264+ async def test_jobs_sorted_2 (self ):
265+ """Sorted test method 2."""
266+
267+ test = TestClass (coresys )
268+ await test .test_jobs_sorted_1 ()
269+ await test .test_jobs_sorted_2 ()
270+
271+ resp = await api_client .get ("/jobs/info" )
272+ result = await resp .json ()
273+ assert result ["data" ]["jobs" ] == [
274+ {
275+ "created" : ANY ,
276+ "name" : "test_jobs_sorted_2" ,
277+ "reference" : None ,
278+ "uuid" : ANY ,
279+ "progress" : 0 ,
280+ "stage" : None ,
281+ "done" : True ,
282+ "errors" : [],
283+ "child_jobs" : [],
284+ },
285+ {
286+ "created" : ANY ,
287+ "name" : "test_jobs_sorted_1" ,
288+ "reference" : None ,
289+ "uuid" : ANY ,
290+ "progress" : 0 ,
291+ "stage" : None ,
292+ "done" : True ,
293+ "errors" : [],
294+ "child_jobs" : [
295+ {
296+ "created" : ANY ,
297+ "name" : "test_jobs_sorted_inner_1" ,
298+ "reference" : None ,
299+ "uuid" : ANY ,
300+ "progress" : 0 ,
301+ "stage" : None ,
302+ "done" : True ,
303+ "errors" : [],
304+ "child_jobs" : [],
305+ },
306+ {
307+ "created" : ANY ,
308+ "name" : "test_jobs_sorted_inner_2" ,
309+ "reference" : None ,
310+ "uuid" : ANY ,
311+ "progress" : 0 ,
312+ "stage" : None ,
313+ "done" : True ,
314+ "errors" : [],
315+ "child_jobs" : [],
316+ },
317+ ],
318+ },
319+ ]
0 commit comments