@@ -173,4 +173,66 @@ defmodule Codebattle.GroupTask.ContextTest do
173173 assert [ ] = all_enqueued ( worker: GroupTaskSolutionRunWorker )
174174 end
175175 end
176+
177+ describe "run_group_task/3 runner payload" do
178+ setup do
179+ user = insert ( :user )
180+ group_task = insert ( :group_task , runner_url: "http://runner.test/api/v1/group_tasks/run" )
181+ tournament = insert ( :group_tournament , group_task: group_task , state: "active" )
182+
183+ { :ok , _token } = Codebattle.GroupTournament.Context . create_or_rotate_token ( tournament , user . id )
184+
185+ solution =
186+ insert ( :group_task_solution ,
187+ user: user ,
188+ group_task: group_task ,
189+ group_tournament: tournament ,
190+ solution: "def solution():\n return 7\n " ,
191+ lang: "python"
192+ )
193+
194+ % { user: user , group_task: group_task , tournament: tournament , solution: solution }
195+ end
196+
197+ test "includes submitted_at as a unix timestamp for each latest solution" ,
198+ % { user: user , group_task: group_task , tournament: tournament , solution: solution } do
199+ assert { :ok , _run } =
200+ Context . run_group_task ( group_task , [ user . id ] , % {
201+ group_tournament_id: tournament . id ,
202+ round: 1
203+ } )
204+
205+ assert [ payload_solution ] = last_runner_solutions ( )
206+
207+ assert payload_solution . player_id == user . id
208+ assert payload_solution . submitted_at == expected_unix ( solution . inserted_at )
209+ assert is_integer ( payload_solution . submitted_at )
210+ end
211+
212+ test "includes submitted_at for hand-picked solutions passed via :solutions" ,
213+ % { user: user , group_task: group_task , tournament: tournament , solution: solution } do
214+ assert { :ok , _run } =
215+ Context . run_group_task ( group_task , [ user . id ] , % {
216+ group_tournament_id: tournament . id ,
217+ round: 1 ,
218+ solutions: [ solution ]
219+ } )
220+
221+ assert [ payload_solution ] = last_runner_solutions ( )
222+
223+ assert payload_solution . player_id == user . id
224+ assert payload_solution . submitted_at == expected_unix ( solution . inserted_at )
225+ end
226+ end
227+
228+ defp last_runner_solutions do
229+ % { opts: opts } = Process . get ( :group_task_runner_last_request )
230+ opts [ :json ] . solutions
231+ end
232+
233+ defp expected_unix ( % NaiveDateTime { } = inserted_at ) do
234+ inserted_at
235+ |> DateTime . from_naive! ( "Etc/UTC" )
236+ |> DateTime . to_unix ( )
237+ end
176238end
0 commit comments