@@ -16,6 +16,7 @@ import (
16
16
"github.com/coder/coder/v2/coderd/database/dbtime"
17
17
"github.com/coder/coder/v2/coderd/provisionerdserver"
18
18
"github.com/coder/coder/v2/coderd/telemetry"
19
+ "github.com/coder/coder/v2/provisionersdk/proto"
19
20
sdkproto "github.com/coder/coder/v2/provisionersdk/proto"
20
21
)
21
22
@@ -37,6 +38,64 @@ func Workspace(t testing.TB, db database.Store, seed database.Workspace) databas
37
38
return dbgen .Workspace (t , db , seed )
38
39
}
39
40
41
+ func TemplateWithVersion (t testing.TB , db database.Store , tpl database.Template , tv database.TemplateVersion , job database.ProvisionerJob , resources ... * proto.Resource ) (database.Template , database.TemplateVersion ) {
42
+ t .Helper ()
43
+
44
+ template := dbgen .Template (t , db , tpl )
45
+
46
+ tv .TemplateID = dbgen .TakeFirst (tv .TemplateID , uuid.NullUUID {UUID : template .ID , Valid : true })
47
+ tv .OrganizationID = dbgen .TakeFirst (tv .OrganizationID , template .OrganizationID )
48
+ tv .CreatedBy = dbgen .TakeFirst (tv .CreatedBy , template .CreatedBy )
49
+ version := TemplateVersion (t , db , tv , job , resources ... )
50
+
51
+ err := db .UpdateTemplateActiveVersionByID (dbgen .Ctx , database.UpdateTemplateActiveVersionByIDParams {
52
+ ID : template .ID ,
53
+ ActiveVersionID : version .ID ,
54
+ UpdatedAt : dbtime .Now (),
55
+ })
56
+ require .NoError (t , err )
57
+
58
+ return template , version
59
+ }
60
+
61
+ func TemplateVersion (t testing.TB , db database.Store , tv database.TemplateVersion , job database.ProvisionerJob , resources ... * proto.Resource ) database.TemplateVersion {
62
+ templateVersion := dbgen .TemplateVersion (t , db , tv )
63
+ payload , err := json .Marshal (provisionerdserver.TemplateVersionImportJob {
64
+ TemplateVersionID : templateVersion .ID ,
65
+ })
66
+ require .NoError (t , err )
67
+
68
+ job .ID = dbgen .TakeFirst (job .ID , templateVersion .JobID )
69
+ job .OrganizationID = dbgen .TakeFirst (job .OrganizationID , templateVersion .OrganizationID )
70
+ job .Input = dbgen .TakeFirstSlice (job .Input , payload )
71
+ job .Type = dbgen .TakeFirst (job .Type , database .ProvisionerJobTypeTemplateVersionImport )
72
+ job .CompletedAt = dbgen .TakeFirst (job .CompletedAt , sql.NullTime {
73
+ Time : dbtime .Now (),
74
+ Valid : true ,
75
+ })
76
+
77
+ job = dbgen .ProvisionerJob (t , db , nil , job )
78
+ ProvisionerJobResources (t , db , job .ID , "" , resources ... )
79
+ return templateVersion
80
+ }
81
+
82
+ func TemplateVersionWithParams (t testing.TB , db database.Store , tv database.TemplateVersion , job database.ProvisionerJob , params []database.TemplateVersionParameter ) (database.TemplateVersion , []database.TemplateVersionParameter ) {
83
+ t .Helper ()
84
+
85
+ version := TemplateVersion (t , db , tv , job )
86
+ tvps := make ([]database.TemplateVersionParameter , 0 , len (params ))
87
+
88
+ for _ , param := range params {
89
+ if param .TemplateVersionID == uuid .Nil {
90
+ param .TemplateVersionID = version .ID
91
+ }
92
+ tvp := dbgen .TemplateVersionParameter (t , db , param )
93
+ tvps = append (tvps , tvp )
94
+ }
95
+
96
+ return version , tvps
97
+ }
98
+
40
99
// WorkspaceWithAgent is a helper that generates a workspace with a single resource
41
100
// that has an agent attached to it. The agent token is returned.
42
101
func WorkspaceWithAgent (t testing.TB , db database.Store , seed database.Workspace ) (database.Workspace , string ) {
@@ -56,6 +115,19 @@ func WorkspaceWithAgent(t testing.TB, db database.Store, seed database.Workspace
56
115
return ws , authToken
57
116
}
58
117
118
+ func WorkspaceBuildWithParameters (t testing.TB , db database.Store , ws database.Workspace , build database.WorkspaceBuild , params []database.WorkspaceBuildParameter , resources ... * sdkproto.Resource ) (database.WorkspaceBuild , []database.WorkspaceBuildParameter ) {
119
+ t .Helper ()
120
+
121
+ b := WorkspaceBuild (t , db , ws , build , resources ... )
122
+
123
+ for i , param := range params {
124
+ if param .WorkspaceBuildID == uuid .Nil {
125
+ params [i ].WorkspaceBuildID = b .ID
126
+ }
127
+ }
128
+ return b , dbgen .WorkspaceBuildParameters (t , db , params )
129
+ }
130
+
59
131
// WorkspaceBuild inserts a build and a successful job into the database.
60
132
func WorkspaceBuild (t testing.TB , db database.Store , ws database.Workspace , seed database.WorkspaceBuild , resources ... * sdkproto.Resource ) database.WorkspaceBuild {
61
133
t .Helper ()
@@ -69,9 +141,7 @@ func WorkspaceBuild(t testing.TB, db database.Store, ws database.Workspace, seed
69
141
WorkspaceBuildID : seed .ID ,
70
142
})
71
143
require .NoError (t , err )
72
- //nolint:gocritic // This is only used by tests.
73
- ctx := dbauthz .AsSystemRestricted (context .Background ())
74
- job , err := db .InsertProvisionerJob (ctx , database.InsertProvisionerJobParams {
144
+ job , err := db .InsertProvisionerJob (dbgen .Ctx , database.InsertProvisionerJobParams {
75
145
ID : jobID ,
76
146
CreatedAt : dbtime .Now (),
77
147
UpdatedAt : dbtime .Now (),
@@ -86,7 +156,7 @@ func WorkspaceBuild(t testing.TB, db database.Store, ws database.Workspace, seed
86
156
TraceMetadata : pqtype.NullRawMessage {},
87
157
})
88
158
require .NoError (t , err , "insert job" )
89
- err = db .UpdateProvisionerJobWithCompleteByID (ctx , database.UpdateProvisionerJobWithCompleteByIDParams {
159
+ err = db .UpdateProvisionerJobWithCompleteByID (dbgen . Ctx , database.UpdateProvisionerJobWithCompleteByIDParams {
90
160
ID : job .ID ,
91
161
UpdatedAt : dbtime .Now (),
92
162
Error : sql.NullString {},
@@ -101,30 +171,14 @@ func WorkspaceBuild(t testing.TB, db database.Store, ws database.Workspace, seed
101
171
// This intentionally fulfills the minimum requirements of the schema.
102
172
// Tests can provide a custom version ID if necessary.
103
173
if seed .TemplateVersionID == uuid .Nil {
104
- jobID := uuid .New ()
105
- templateVersion := dbgen .TemplateVersion (t , db , database.TemplateVersion {
106
- JobID : jobID ,
174
+ templateVersion := TemplateVersion (t , db , database.TemplateVersion {
107
175
OrganizationID : ws .OrganizationID ,
108
176
CreatedBy : ws .OwnerID ,
109
177
TemplateID : uuid.NullUUID {
110
178
UUID : ws .TemplateID ,
111
179
Valid : true ,
112
180
},
113
- })
114
- payload , _ := json .Marshal (provisionerdserver.TemplateVersionImportJob {
115
- TemplateVersionID : templateVersion .ID ,
116
- })
117
- dbgen .ProvisionerJob (t , db , nil , database.ProvisionerJob {
118
- ID : jobID ,
119
- OrganizationID : ws .OrganizationID ,
120
- Input : payload ,
121
- Type : database .ProvisionerJobTypeTemplateVersionImport ,
122
- CompletedAt : sql.NullTime {
123
- Time : dbtime .Now (),
124
- Valid : true ,
125
- },
126
- })
127
- ProvisionerJobResources (t , db , jobID , seed .Transition , resources ... )
181
+ }, database.ProvisionerJob {})
128
182
seed .TemplateVersionID = templateVersion .ID
129
183
}
130
184
build := dbgen .WorkspaceBuild (t , db , seed )
@@ -145,3 +199,25 @@ func ProvisionerJobResources(t testing.TB, db database.Store, job uuid.UUID, tra
145
199
require .NoError (t , err )
146
200
}
147
201
}
202
+
203
+ func must [V any ](v V , err error ) V {
204
+ if err != nil {
205
+ panic (err )
206
+ }
207
+ return v
208
+ }
209
+
210
+ // takeFirstF takes the first value that returns true
211
+ func takeFirstF [Value any ](values []Value , take func (v Value ) bool ) Value {
212
+ for _ , v := range values {
213
+ if take (v ) {
214
+ return v
215
+ }
216
+ }
217
+ // If all empty, return the last element
218
+ if len (values ) > 0 {
219
+ return values [len (values )- 1 ]
220
+ }
221
+ var empty Value
222
+ return empty
223
+ }
0 commit comments