@@ -22,14 +22,15 @@ import (
2222 "github.com/coder/coder/v2/coderd/database/dbauthz"
2323 "github.com/coder/coder/v2/coderd/database/dbfake"
2424 "github.com/coder/coder/v2/coderd/database/dbgen"
25+ "github.com/coder/coder/v2/coderd/database/dbtime"
2526 "github.com/coder/coder/v2/coderd/util/slice"
2627 "github.com/coder/coder/v2/codersdk"
2728 "github.com/coder/coder/v2/pty/ptytest"
2829 "github.com/coder/coder/v2/testutil"
2930)
3031
3132// makeAITask creates an AI-task workspace.
32- func makeAITask (t * testing.T , db database.Store , orgID , adminID , ownerID uuid.UUID , transition database.WorkspaceTransition , prompt string ) ( workspace database.WorkspaceTable ) {
33+ func makeAITask (t * testing.T , db database.Store , orgID , adminID , ownerID uuid.UUID , transition database.WorkspaceTransition , prompt string ) database.Task {
3334 t .Helper ()
3435
3536 tv := dbfake .TemplateVersion (t , db ).
@@ -91,14 +92,32 @@ func makeAITask(t *testing.T, db database.Store, orgID, adminID, ownerID uuid.UU
9192 )
9293 require .NoError (t , err )
9394
94- return build .Workspace
95+ // Create a task record in the tasks table for the new data model.
96+ task := dbgen .Task (t , db , database.TaskTable {
97+ OrganizationID : orgID ,
98+ OwnerID : ownerID ,
99+ Name : build .Workspace .Name ,
100+ WorkspaceID : uuid.NullUUID {UUID : build .Workspace .ID , Valid : true },
101+ TemplateVersionID : tv .TemplateVersion .ID ,
102+ TemplateParameters : []byte ("{}" ),
103+ Prompt : prompt ,
104+ CreatedAt : dbtime .Now (),
105+ })
106+
107+ // Link the task to the workspace app.
108+ dbgen .TaskWorkspaceApp (t , db , database.TaskWorkspaceApp {
109+ TaskID : task .ID ,
110+ WorkspaceBuildNumber : build .Build .BuildNumber ,
111+ WorkspaceAgentID : uuid.NullUUID {UUID : agentID , Valid : true },
112+ WorkspaceAppID : uuid.NullUUID {UUID : app .ID , Valid : true },
113+ })
114+
115+ return task
95116}
96117
97118func TestExpTaskList (t * testing.T ) {
98119 t .Parallel ()
99120
100- t .Skip ("TODO(mafredri): Remove, fixed down-stack!" )
101-
102121 t .Run ("NoTasks_Table" , func (t * testing.T ) {
103122 t .Parallel ()
104123
@@ -130,7 +149,7 @@ func TestExpTaskList(t *testing.T) {
130149 memberClient , memberUser := coderdtest .CreateAnotherUser (t , client , owner .OrganizationID )
131150
132151 wantPrompt := "build me a web app"
133- ws := makeAITask (t , db , owner .OrganizationID , owner .UserID , memberUser .ID , database .WorkspaceTransitionStart , wantPrompt )
152+ task := makeAITask (t , db , owner .OrganizationID , owner .UserID , memberUser .ID , database .WorkspaceTransitionStart , wantPrompt )
134153
135154 inv , root := clitest .New (t , "exp" , "task" , "list" , "--column" , "id,name,status,initial prompt" )
136155 clitest .SetupConfig (t , memberClient , root )
@@ -142,7 +161,7 @@ func TestExpTaskList(t *testing.T) {
142161 require .NoError (t , err )
143162
144163 // Validate the table includes the task and status.
145- pty .ExpectMatch (ws .Name )
164+ pty .ExpectMatch (task .Name )
146165 pty .ExpectMatch ("running" )
147166 pty .ExpectMatch (wantPrompt )
148167 })
@@ -157,11 +176,11 @@ func TestExpTaskList(t *testing.T) {
157176 memberClient , memberUser := coderdtest .CreateAnotherUser (t , client , owner .OrganizationID )
158177
159178 // Create two AI tasks: one running, one stopped.
160- running := makeAITask (t , db , owner .OrganizationID , owner .UserID , memberUser .ID , database .WorkspaceTransitionStart , "keep me running" )
161- stopped := makeAITask (t , db , owner .OrganizationID , owner .UserID , memberUser .ID , database .WorkspaceTransitionStop , "stop me please" )
179+ runningTask := makeAITask (t , db , owner .OrganizationID , owner .UserID , memberUser .ID , database .WorkspaceTransitionStart , "keep me running" )
180+ stoppedTask := makeAITask (t , db , owner .OrganizationID , owner .UserID , memberUser .ID , database .WorkspaceTransitionStop , "stop me please" )
162181
163182 // Use JSON output to reliably validate filtering.
164- inv , root := clitest .New (t , "exp" , "task" , "list" , "--status=stopped " , "--output=json" )
183+ inv , root := clitest .New (t , "exp" , "task" , "list" , "--status=paused " , "--output=json" )
165184 clitest .SetupConfig (t , memberClient , root )
166185
167186 ctx := testutil .Context (t , testutil .WaitShort )
@@ -177,8 +196,8 @@ func TestExpTaskList(t *testing.T) {
177196
178197 // Only the stopped task is returned.
179198 require .Len (t , tasks , 1 , "expected one task after filtering" )
180- require .Equal (t , stopped .ID , tasks [0 ].ID )
181- require .NotEqual (t , running .ID , tasks [0 ].ID )
199+ require .Equal (t , stoppedTask .ID , tasks [0 ].ID )
200+ require .NotEqual (t , runningTask .ID , tasks [0 ].ID )
182201 })
183202
184203 t .Run ("UserFlag_Me_Table" , func (t * testing.T ) {
@@ -190,7 +209,7 @@ func TestExpTaskList(t *testing.T) {
190209 _ , memberUser := coderdtest .CreateAnotherUser (t , client , owner .OrganizationID )
191210
192211 _ = makeAITask (t , db , owner .OrganizationID , owner .UserID , memberUser .ID , database .WorkspaceTransitionStart , "other-task" )
193- ws := makeAITask (t , db , owner .OrganizationID , owner .UserID , owner .UserID , database .WorkspaceTransitionStart , "me-task" )
212+ task := makeAITask (t , db , owner .OrganizationID , owner .UserID , owner .UserID , database .WorkspaceTransitionStart , "me-task" )
194213
195214 inv , root := clitest .New (t , "exp" , "task" , "list" , "--user" , "me" )
196215 //nolint:gocritic // Owner client is intended here smoke test the member task not showing up.
@@ -202,7 +221,7 @@ func TestExpTaskList(t *testing.T) {
202221 err := inv .WithContext (ctx ).Run ()
203222 require .NoError (t , err )
204223
205- pty .ExpectMatch (ws .Name )
224+ pty .ExpectMatch (task .Name )
206225 })
207226
208227 t .Run ("Quiet" , func (t * testing.T ) {
0 commit comments