@@ -282,27 +282,32 @@ func TestTasks(t *testing.T) {
282282ctx = testutil .Context (t ,testutil .WaitLong )
283283user = coderdtest .CreateFirstUser (t ,client )
284284template = createAITemplate (t ,client ,user )
285- // Create a workspace (task) with a specific prompt.
286285wantPrompt = "review my code"
287- workspace = coderdtest .CreateWorkspace (t ,client ,template .ID ,func (req * codersdk.CreateWorkspaceRequest ) {
288- req .RichParameterValues = []codersdk.WorkspaceBuildParameter {
289- {Name :codersdk .AITaskPromptParameterName ,Value :wantPrompt },
290- }
291- })
286+ exp = codersdk .NewExperimentalClient (client )
292287)
293288
294- coderdtest .AwaitWorkspaceBuildJobCompleted (t ,client ,workspace .LatestBuild .ID )
295- ws := coderdtest .MustWorkspace (t ,client ,workspace .ID )
289+ task ,err := exp .CreateTask (ctx ,"me" , codersdk.CreateTaskRequest {
290+ TemplateVersionID :template .ActiveVersionID ,
291+ Input :wantPrompt ,
292+ })
293+ require .NoError (t ,err )
294+ require .True (t ,task .WorkspaceID .Valid )
295+
296+ // Get the workspace and wait for it to be ready.
297+ ws ,err := client .Workspace (ctx ,task .WorkspaceID .UUID )
298+ require .NoError (t ,err )
299+ coderdtest .AwaitWorkspaceBuildJobCompleted (t ,client ,ws .LatestBuild .ID )
300+ ws = coderdtest .MustWorkspace (t ,client ,task .WorkspaceID .UUID )
296301// Assert invariant: the workspace has exactly one resource with one agent with one app.
297302require .Len (t ,ws .LatestBuild .Resources ,1 )
298303require .Len (t ,ws .LatestBuild .Resources [0 ].Agents ,1 )
299304agentID := ws .LatestBuild .Resources [0 ].Agents [0 ].ID
300305taskAppID := ws .LatestBuild .Resources [0 ].Agents [0 ].Apps [0 ].ID
301306
302307// Insert an app status for the workspace
303- _ ,err : =db .InsertWorkspaceAppStatus (dbauthz .AsSystemRestricted (ctx ), database.InsertWorkspaceAppStatusParams {
308+ _ ,err = db .InsertWorkspaceAppStatus (dbauthz .AsSystemRestricted (ctx ), database.InsertWorkspaceAppStatusParams {
304309ID :uuid .New (),
305- WorkspaceID :workspace . ID ,
310+ WorkspaceID :task . WorkspaceID . UUID ,
306311CreatedAt :dbtime .Now (),
307312AgentID :agentID ,
308313AppID :taskAppID ,
@@ -312,31 +317,33 @@ func TestTasks(t *testing.T) {
312317require .NoError (t ,err )
313318
314319// Fetch the task by ID via experimental API and verify fields.
315- exp := codersdk .NewExperimentalClient (client )
316- task ,err := exp .TaskByID (ctx ,workspace .ID )
320+ updated ,err := exp .TaskByID (ctx ,task .ID )
317321require .NoError (t ,err )
318322
319- assert .Equal (t ,workspace .ID ,task .ID ,"task ID should match workspace ID" )
320- assert .Equal (t ,workspace .Name ,task .Name ,"task name should map from workspace name" )
321- assert .Equal (t ,wantPrompt ,task .InitialPrompt ,"task prompt should match the AI Prompt parameter" )
322- assert .Equal (t ,workspace .ID ,task .WorkspaceID .UUID ,"workspace id should match" )
323- assert .NotEmpty (t ,task .WorkspaceStatus ,"task status should not be empty" )
323+ assert .Equal (t ,task .ID ,updated .ID ,"task ID should match" )
324+ assert .Equal (t ,task .Name ,updated .Name ,"task name should match" )
325+ assert .Equal (t ,wantPrompt ,updated .InitialPrompt ,"task prompt should match the AI Prompt parameter" )
326+ assert .Equal (t ,task .WorkspaceID .UUID ,updated .WorkspaceID .UUID ,"workspace id should match" )
327+ assert .Equal (t ,ws .LatestBuild .BuildNumber ,updated .WorkspaceBuildNumber ,"workspace build number should match" )
328+ assert .Equal (t ,agentID ,updated .WorkspaceAgentID .UUID ,"workspace agent id should match" )
329+ assert .Equal (t ,taskAppID ,updated .WorkspaceAppID .UUID ,"workspace app id should match" )
330+ assert .NotEmpty (t ,updated .WorkspaceStatus ,"task status should not be empty" )
324331
325332// Stop the workspace
326- coderdtest .MustTransitionWorkspace (t ,client ,workspace . ID ,codersdk .WorkspaceTransitionStart ,codersdk .WorkspaceTransitionStop )
333+ coderdtest .MustTransitionWorkspace (t ,client ,task . WorkspaceID . UUID ,codersdk .WorkspaceTransitionStart ,codersdk .WorkspaceTransitionStop )
327334
328335// Verify that the previous status still remains
329- updated ,err : =exp .TaskByID (ctx ,workspace .ID )
336+ updated ,err = exp .TaskByID (ctx ,task .ID )
330337require .NoError (t ,err )
331338assert .NotNil (t ,updated .CurrentState ,"current state should not be nil" )
332339assert .Equal (t ,"all done" ,updated .CurrentState .Message )
333340assert .Equal (t ,codersdk .TaskStateComplete ,updated .CurrentState .State )
334341
335342// Start the workspace again
336- coderdtest .MustTransitionWorkspace (t ,client ,workspace . ID ,codersdk .WorkspaceTransitionStop ,codersdk .WorkspaceTransitionStart )
343+ coderdtest .MustTransitionWorkspace (t ,client ,task . WorkspaceID . UUID ,codersdk .WorkspaceTransitionStop ,codersdk .WorkspaceTransitionStart )
337344
338345// Verify that the status from the previous build is no longer present
339- updated ,err = exp .TaskByID (ctx ,workspace .ID )
346+ updated ,err = exp .TaskByID (ctx ,task .ID )
340347require .NoError (t ,err )
341348assert .Nil (t ,updated .CurrentState ,"current state should be nil" )
342349})