22
33from unittest .mock import Mock
44
5- from jobs import JobEventsHandler
5+ from datetime import datetime
6+ from github import GithubJob
7+ from jobs import Job , JobEventsHandler
8+
9+ GITHUB_TIME_FORMAT = "%Y-%m-%dT%H:%M:%SZ"
610
711
812@pytest .fixture
913def new_job_event ():
10- return {"workflow_job" : {"id" : "workflow_id" }, "action" : "queued" }
14+ return {
15+ "workflow_job" : {
16+ "id" : "workflow_id" ,
17+ "started_at" : "2024-04-29T12:43:16Z" ,
18+ "completed_at" : None ,
19+ "node_id" : "CR_kwDOHC6jj88AAAAFqGXrPQ" ,
20+ },
21+ "action" : "queued" ,
22+ }
1123
1224
1325@pytest .fixture
1426def in_progress_job_event ():
15- return {"workflow_job" : {"id" : "workflow_id" }, "action" : "in_progress" }
27+ return {
28+ "workflow_job" : {
29+ "id" : "workflow_id" ,
30+ "started_at" : "2024-04-29T12:43:32Z" ,
31+ "completed_at" : None ,
32+ "node_id" : "CR_kwDOHC6jj88AAAAFqGXrPQ" ,
33+ },
34+ "action" : "in_progress" ,
35+ }
1636
1737
1838@pytest .fixture
1939def completed_job_event ():
20- return {"workflow_job" : {"id" : "workflow_id" }, "action" : "completed" }
21-
22-
23- def test_new_job (new_job_event ):
40+ return {
41+ "workflow_job" : {
42+ "id" : "workflow_id" ,
43+ "started_at" : "2024-04-29T12:43:32Z" ,
44+ "completed_at" : "2024-04-29T12:45:09Z" ,
45+ "node_id" : "CR_kwDOHC6jj88AAAAFqGXrPQ" ,
46+ },
47+ "action" : "completed" ,
48+ }
49+
50+
51+ def test_new_job_event (new_job_event ):
2452 handler = JobEventsHandler ()
2553
2654 handler .process_event (new_job_event )
2755
2856 assert handler .queued .get ("workflow_id" )
2957
3058
31- def test_in_progress_job (in_progress_job_event ):
59+ def test_in_progress_job_event (in_progress_job_event ):
3260 handler = JobEventsHandler ()
3361 job = Mock ()
3462 handler .queued ["workflow_id" ] = job
@@ -39,18 +67,55 @@ def test_in_progress_job(in_progress_job_event):
3967 assert handler .in_progress .get ("workflow_id" ) == job
4068
4169
42- def test_unprocessed_in_progress_job (in_progress_job_event ):
70+ def test_unprocessed_in_progress_job_event (in_progress_job_event ):
4371 handler = JobEventsHandler ()
4472 handler .process_event (in_progress_job_event )
4573
4674 assert handler .in_progress .get ("workflow_id" )
4775
4876
49- def test_completed_job (completed_job_event ):
77+ def test_completed_job_event (completed_job_event ):
5078 handler = JobEventsHandler ()
5179 handler .in_progress ["workflow_id" ] = Mock ()
5280
5381 handler .process_event (completed_job_event )
5482
55- assert not handler .queued .get ("workflow_id" )
56- assert not handler .in_progress .get ("workflow_id" )
83+ assert handler .queued .get ("workflow_id" ) is None
84+ assert handler .in_progress .get ("workflow_id" ) is None
85+
86+
87+ def test_new_job (new_job_event ):
88+ job = Job (GithubJob (new_job_event ))
89+
90+ assert job .status == "queued"
91+ assert job .queued_at == datetime .strptime (
92+ "2024-04-29T12:43:16Z" , GITHUB_TIME_FORMAT
93+ )
94+ assert job .in_progress_at is None
95+
96+
97+ def test_update_in_progress_job (new_job_event , in_progress_job_event ):
98+ job = Job (GithubJob (new_job_event ))
99+ job .update (GithubJob (in_progress_job_event ))
100+
101+ assert job .status == "in_progress"
102+ assert job .queued_at == datetime .strptime (
103+ "2024-04-29T12:43:16Z" , GITHUB_TIME_FORMAT
104+ )
105+ assert job .in_progress_at == datetime .strptime (
106+ "2024-04-29T12:43:32Z" , GITHUB_TIME_FORMAT
107+ )
108+ assert job .completed_at is None
109+
110+
111+ def test_update_completed_job (in_progress_job_event , completed_job_event ):
112+ job = Job (GithubJob (in_progress_job_event ))
113+ job .update (GithubJob (completed_job_event ))
114+
115+ assert job .status == "completed"
116+ assert job .in_progress_at == datetime .strptime (
117+ "2024-04-29T12:43:32Z" , GITHUB_TIME_FORMAT
118+ )
119+ assert job .completed_at == datetime .strptime (
120+ "2024-04-29T12:45:09Z" , GITHUB_TIME_FORMAT
121+ )
0 commit comments