Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit3c5414d

Browse files
committed
fix: update dbgen and dbfake task creation and toolsdk test fixtures
Depends on#20506Fixescoder/internal#1103
1 parentd8b1ca7 commit3c5414d

File tree

7 files changed

+87
-64
lines changed

7 files changed

+87
-64
lines changed

‎coderd/aitasks.go‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,7 @@ func (api *API) tasksCreate(rw http.ResponseWriter, r *http.Request) {
241241
// Create task record in the database before creating the workspace so that
242242
// we can request that the workspace be linked to it after creation.
243243
dbTaskTable,err=tx.InsertTask(ctx, database.InsertTaskParams{
244+
ID:uuid.New(),
244245
OrganizationID:templateVersion.OrganizationID,
245246
OwnerID:owner.ID,
246247
Name:taskName,

‎coderd/database/dbfake/dbfake.go‎

Lines changed: 48 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ type WorkspaceResponse struct {
4141
Build database.WorkspaceBuild
4242
AgentTokenstring
4343
TemplateVersionResponse
44+
Task database.Task
4445
}
4546

4647
// WorkspaceBuildBuilder generates workspace builds and associated
@@ -57,6 +58,7 @@ type WorkspaceBuildBuilder struct {
5758
agentTokenstring
5859
jobStatus database.ProvisionerJobStatus
5960
taskAppID uuid.UUID
61+
taskSeed database.TaskTable
6062
}
6163

6264
// WorkspaceBuild generates a workspace build for the provided workspace.
@@ -115,25 +117,28 @@ func (b WorkspaceBuildBuilder) WithAgent(mutations ...func([]*sdkproto.Agent) []
115117
returnb
116118
}
117119

118-
func (bWorkspaceBuildBuilder)WithTask(seed*sdkproto.App)WorkspaceBuildBuilder {
119-
ifseed==nil {
120-
seed=&sdkproto.App{}
120+
func (bWorkspaceBuildBuilder)WithTask(taskSeed database.TaskTable,appSeed*sdkproto.App)WorkspaceBuildBuilder {
121+
b.taskSeed=taskSeed
122+
b.taskSeed.Prompt=takeFirst(b.taskSeed.Prompt,"list me")
123+
124+
ifappSeed==nil {
125+
appSeed=&sdkproto.App{}
121126
}
122127

123128
varerrerror
124129
//nolint: revive // returns modified struct
125-
b.taskAppID,err=uuid.Parse(takeFirst(seed.Id,uuid.NewString()))
130+
b.taskAppID,err=uuid.Parse(takeFirst(appSeed.Id,uuid.NewString()))
126131
require.NoError(b.t,err)
127132

128133
returnb.Params(database.WorkspaceBuildParameter{
129134
Name:codersdk.AITaskPromptParameterName,
130-
Value:"list me",
135+
Value:b.taskSeed.Prompt,
131136
}).WithAgent(func(a []*sdkproto.Agent) []*sdkproto.Agent {
132137
a[0].Apps= []*sdkproto.App{
133138
{
134139
Id:b.taskAppID.String(),
135-
Slug:takeFirst(seed.Slug,"task-app"),
136-
Url:takeFirst(seed.Url,""),
140+
Slug:takeFirst(appSeed.Slug,"task-app"),
141+
Url:takeFirst(appSeed.Url,""),
137142
},
138143
}
139144
returna
@@ -212,6 +217,37 @@ func (b WorkspaceBuildBuilder) Do() WorkspaceResponse {
212217
b.seed.WorkspaceID=b.ws.ID
213218
b.seed.InitiatorID=takeFirst(b.seed.InitiatorID,b.ws.OwnerID)
214219

220+
// If a task was requested, ensure it exists and is associated with this
221+
// workspace.
222+
ifb.taskAppID!=uuid.Nil {
223+
b.logger.Debug(context.Background(),"creating or updating task","task_id",b.taskSeed.ID)
224+
b.taskSeed.OrganizationID=takeFirst(b.taskSeed.OrganizationID,b.ws.OrganizationID)
225+
b.taskSeed.OwnerID=takeFirst(b.taskSeed.OwnerID,b.ws.OwnerID)
226+
b.taskSeed.Name=takeFirst(b.taskSeed.Name,b.ws.Name)
227+
b.taskSeed.WorkspaceID= uuid.NullUUID{UUID:takeFirst(b.taskSeed.WorkspaceID.UUID,b.ws.ID),Valid:true}
228+
b.taskSeed.TemplateVersionID=takeFirst(b.taskSeed.TemplateVersionID,b.seed.TemplateVersionID)
229+
230+
// Try to fetch existing task and update its workspace ID.
231+
iftask,err:=b.db.GetTaskByID(ownerCtx,b.taskSeed.ID);err==nil {
232+
if!task.WorkspaceID.Valid {
233+
b.logger.Info(context.Background(),"updating task workspace id","task_id",b.taskSeed.ID,"workspace_id",b.ws.ID)
234+
_,err=b.db.UpdateTaskWorkspaceID(ownerCtx, database.UpdateTaskWorkspaceIDParams{
235+
ID:b.taskSeed.ID,
236+
WorkspaceID: uuid.NullUUID{UUID:b.ws.ID,Valid:true},
237+
})
238+
require.NoError(b.t,err,"update task workspace id")
239+
}elseiftask.WorkspaceID.UUID!=b.ws.ID {
240+
require.Fail(b.t,"task already has a workspace id, mismatch",task.WorkspaceID.UUID,b.ws.ID)
241+
}
242+
}elseiferrors.Is(err,sql.ErrNoRows) {
243+
task:=dbgen.Task(b.t,b.db,b.taskSeed)
244+
b.taskSeed.ID=task.ID
245+
b.logger.Info(context.Background(),"created new task","task_id",b.taskSeed.ID)
246+
}else {
247+
require.NoError(b.t,err,"get task by id")
248+
}
249+
}
250+
215251
// Create a provisioner job for the build!
216252
payload,err:=json.Marshal(provisionerdserver.WorkspaceProvisionJob{
217253
WorkspaceBuildID:b.seed.ID,
@@ -324,6 +360,11 @@ func (b WorkspaceBuildBuilder) Do() WorkspaceResponse {
324360
b.logger.Debug(context.Background(),"linked task to workspace build",
325361
slog.F("task_id",task.ID),
326362
slog.F("build_number",resp.Build.BuildNumber))
363+
364+
// Update task after linking.
365+
task,err=b.db.GetTaskByID(ownerCtx,task.ID)
366+
require.NoError(b.t,err,"get task by id")
367+
resp.Task=task
327368
}
328369

329370
fori:=rangeb.params {

‎coderd/database/dbgen/dbgen.go‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1576,6 +1576,7 @@ func Task(t testing.TB, db database.Store, orig database.TaskTable) database.Tas
15761576
}
15771577

15781578
task,err:=db.InsertTask(genCtx, database.InsertTaskParams{
1579+
ID:takeFirst(orig.ID,uuid.New()),
15791580
OrganizationID:orig.OrganizationID,
15801581
OwnerID:orig.OwnerID,
15811582
Name:takeFirst(orig.Name,taskname.GenerateFallback()),

‎coderd/database/querier_test.go‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7248,7 +7248,9 @@ func TestTaskNameUniqueness(t *testing.T) {
72487248

72497249
ctx:=testutil.Context(t,testutil.WaitShort)
72507250

7251+
taskID:=uuid.New()
72517252
task,err:=db.InsertTask(ctx, database.InsertTaskParams{
7253+
ID:taskID,
72527254
OrganizationID:org.ID,
72537255
OwnerID:tt.ownerID,
72547256
Name:tt.taskName,
@@ -7263,6 +7265,7 @@ func TestTaskNameUniqueness(t *testing.T) {
72637265
require.NoError(t,err)
72647266
require.NotEqual(t,uuid.Nil,task.ID)
72657267
require.NotEqual(t,task1.ID,task.ID)
7268+
require.Equal(t,taskID,task.ID)
72667269
}
72677270
})
72687271
}

‎coderd/database/queries.sql.go‎

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/database/queries/tasks.sql‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
INSERT INTO tasks
33
(id, organization_id, owner_id, name, workspace_id, template_version_id, template_parameters, prompt, created_at)
44
VALUES
5-
(gen_random_uuid(),$1, $2, $3, $4, $5, $6, $7, $8)
5+
($1, $2, $3, $4, $5, $6, $7, $8, $9)
66
RETURNING*;
77

88
-- name: UpdateTaskWorkspaceID :one

‎codersdk/toolsdk/toolsdk_test.go‎

Lines changed: 30 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -895,37 +895,27 @@ func TestTools(t *testing.T) {
895895
},
896896
}).Do()
897897

898-
ws1Table:=dbgen.Workspace(t,store, database.WorkspaceTable{
898+
build1:=dbfake.WorkspaceBuild(t,store, database.WorkspaceTable{
899899
Name:"delete-task-workspace-1",
900900
OrganizationID:owner.OrganizationID,
901901
OwnerID:member.ID,
902902
TemplateID:aiTV.Template.ID,
903-
})
904-
task1:=dbgen.Task(t,store, database.TaskTable{
905-
OrganizationID:owner.OrganizationID,
906-
OwnerID:member.ID,
907-
Name:ws1Table.Name,
908-
WorkspaceID: uuid.NullUUID{UUID:ws1Table.ID,Valid:true},
909-
TemplateVersionID:aiTV.TemplateVersion.ID,
910-
Prompt:"delete task 1",
911-
})
912-
_=dbfake.WorkspaceBuild(t,store,ws1Table).WithTask(nil).Do()
903+
}).WithTask(database.TaskTable{
904+
Name:"delete-task-1",
905+
Prompt:"delete task 1",
906+
},nil).Do()
907+
task1:=build1.Task
913908

914-
ws2Table:=dbgen.Workspace(t,store, database.WorkspaceTable{
909+
build2:=dbfake.WorkspaceBuild(t,store, database.WorkspaceTable{
915910
Name:"delete-task-workspace-2",
916911
OrganizationID:owner.OrganizationID,
917912
OwnerID:member.ID,
918913
TemplateID:aiTV.Template.ID,
919-
})
920-
task2:=dbgen.Task(t,store, database.TaskTable{
921-
OrganizationID:owner.OrganizationID,
922-
OwnerID:member.ID,
923-
Name:ws2Table.Name,
924-
WorkspaceID: uuid.NullUUID{UUID:ws2Table.ID,Valid:true},
925-
TemplateVersionID:aiTV.TemplateVersion.ID,
926-
Prompt:"delete task 2",
927-
})
928-
_=dbfake.WorkspaceBuild(t,store,ws2Table).WithTask(nil).Do()
914+
}).WithTask(database.TaskTable{
915+
Name:"delete-task-2",
916+
Prompt:"delete task 2",
917+
},nil).Do()
918+
task2:=build2.Task
929919

930920
tests:= []struct {
931921
namestring
@@ -1113,21 +1103,16 @@ func TestTools(t *testing.T) {
11131103
},
11141104
}).Do()
11151105

1116-
ws1Table:=dbgen.Workspace(t,store, database.WorkspaceTable{
1106+
build:=dbfake.WorkspaceBuild(t,store, database.WorkspaceTable{
11171107
Name:"get-task-workspace-1",
11181108
OrganizationID:owner.OrganizationID,
11191109
OwnerID:member.ID,
11201110
TemplateID:aiTV.Template.ID,
1121-
})
1122-
task:=dbgen.Task(t,store, database.TaskTable{
1123-
OrganizationID:owner.OrganizationID,
1124-
OwnerID:member.ID,
1125-
Name:"get-task-1",
1126-
WorkspaceID: uuid.NullUUID{UUID:ws1Table.ID,Valid:true},
1127-
TemplateVersionID:aiTV.TemplateVersion.ID,
1128-
Prompt:"get task",
1129-
})
1130-
_=dbfake.WorkspaceBuild(t,store,ws1Table).WithTask(nil).Do()
1111+
}).WithTask(database.TaskTable{
1112+
Name:"get-task-1",
1113+
Prompt:"get task",
1114+
},nil).Do()
1115+
task:=build.Task
11311116

11321117
tests:= []struct {
11331118
namestring
@@ -1376,21 +1361,16 @@ func TestTools(t *testing.T) {
13761361
},
13771362
}).Do()
13781363

1379-
wsTable:=dbgen.Workspace(t,store, database.WorkspaceTable{
1364+
ws:=dbfake.WorkspaceBuild(t,store, database.WorkspaceTable{
13801365
Name:"send-task-input-ws",
13811366
OrganizationID:owner.OrganizationID,
13821367
OwnerID:member.ID,
13831368
TemplateID:aiTV.Template.ID,
1384-
})
1385-
task:=dbgen.Task(t,store, database.TaskTable{
1386-
OrganizationID:owner.OrganizationID,
1387-
OwnerID:member.ID,
1388-
Name:"send-task-input",
1389-
WorkspaceID: uuid.NullUUID{UUID:wsTable.ID,Valid:true},
1390-
TemplateVersionID:aiTV.TemplateVersion.ID,
1391-
Prompt:"send task input",
1392-
})
1393-
ws:=dbfake.WorkspaceBuild(t,store,wsTable).WithTask(&proto.App{Url:srv.URL}).Do()
1369+
}).WithTask(database.TaskTable{
1370+
Name:"send-task-input",
1371+
Prompt:"send task input",
1372+
},&proto.App{Url:srv.URL}).Do()
1373+
task:=ws.Task
13941374

13951375
_=agenttest.New(t,client.URL,ws.AgentToken)
13961376
coderdtest.NewWorkspaceAgentWaiter(t,client,ws.Workspace.ID).Wait()
@@ -1513,21 +1493,16 @@ func TestTools(t *testing.T) {
15131493
},
15141494
}).Do()
15151495

1516-
wsTable:=dbgen.Workspace(t,store, database.WorkspaceTable{
1496+
ws:=dbfake.WorkspaceBuild(t,store, database.WorkspaceTable{
15171497
Name:"get-task-logs-ws",
15181498
OrganizationID:owner.OrganizationID,
15191499
OwnerID:member.ID,
15201500
TemplateID:aiTV.Template.ID,
1521-
})
1522-
task:=dbgen.Task(t,store, database.TaskTable{
1523-
OrganizationID:owner.OrganizationID,
1524-
OwnerID:member.ID,
1525-
Name:"get-task-logs",
1526-
WorkspaceID: uuid.NullUUID{UUID:wsTable.ID,Valid:true},
1527-
TemplateVersionID:aiTV.TemplateVersion.ID,
1528-
Prompt:"get task logs",
1529-
})
1530-
ws:=dbfake.WorkspaceBuild(t,store,wsTable).WithTask(&proto.App{Url:srv.URL}).Do()
1501+
}).WithTask(database.TaskTable{
1502+
Name:"get-task-logs",
1503+
Prompt:"get task logs",
1504+
},&proto.App{Url:srv.URL}).Do()
1505+
task:=ws.Task
15311506

15321507
_=agenttest.New(t,client.URL,ws.AgentToken)
15331508
coderdtest.NewWorkspaceAgentWaiter(t,client,ws.Workspace.ID).Wait()

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp