8
8
"testing"
9
9
"time"
10
10
11
+ "github.com/google/uuid"
11
12
"github.com/stretchr/testify/require"
12
13
13
14
"github.com/coder/coder/v2/coderd/coderdtest"
@@ -154,6 +155,8 @@ func TestTools(t *testing.T) {
154
155
require .NoError (t , err )
155
156
require .Equal (t , codersdk .WorkspaceTransitionStop , result .Transition )
156
157
require .Equal (t , r .Workspace .ID , result .WorkspaceID )
158
+ require .Equal (t , r .TemplateVersion .ID , result .TemplateVersionID )
159
+ require .Equal (t , codersdk .WorkspaceTransitionStop , result .Transition )
157
160
158
161
// Important: cancel the build. We don't run any provisioners, so this
159
162
// will remain in the 'pending' state indefinitely.
@@ -172,11 +175,58 @@ func TestTools(t *testing.T) {
172
175
require .NoError (t , err )
173
176
require .Equal (t , codersdk .WorkspaceTransitionStart , result .Transition )
174
177
require .Equal (t , r .Workspace .ID , result .WorkspaceID )
178
+ require .Equal (t , r .TemplateVersion .ID , result .TemplateVersionID )
179
+ require .Equal (t , codersdk .WorkspaceTransitionStart , result .Transition )
175
180
176
181
// Important: cancel the build. We don't run any provisioners, so this
177
182
// will remain in the 'pending' state indefinitely.
178
183
require .NoError (t , client .CancelWorkspaceBuild (ctx , result .ID ))
179
184
})
185
+
186
+ t .Run ("TemplateVersionChange" , func (t * testing.T ) {
187
+ ctx := testutil .Context (t , testutil .WaitShort )
188
+ ctx = toolsdk .WithClient (ctx , memberClient )
189
+
190
+ // Get the current template version ID before updating
191
+ workspace , err := memberClient .Workspace (ctx , r .Workspace .ID )
192
+ require .NoError (t , err )
193
+ originalVersionID := workspace .LatestBuild .TemplateVersionID
194
+
195
+ // Create a new template version to update to
196
+ newVersion := dbfake .TemplateVersion (t , store ).
197
+ // nolint:gocritic // This is in a test package and does not end up in the build
198
+ Seed (database.TemplateVersion {
199
+ OrganizationID : owner .OrganizationID ,
200
+ CreatedBy : owner .UserID ,
201
+ TemplateID : uuid.NullUUID {UUID : r .Template .ID , Valid : true },
202
+ }).Do ()
203
+
204
+ // Update to new version
205
+ updateBuild , err := testTool (ctx , t , toolsdk .CreateWorkspaceBuild , map [string ]any {
206
+ "workspace_id" : r .Workspace .ID .String (),
207
+ "transition" : "start" ,
208
+ "template_version_id" : newVersion .TemplateVersion .ID .String (),
209
+ })
210
+ require .NoError (t , err )
211
+ require .Equal (t , codersdk .WorkspaceTransitionStart , updateBuild .Transition )
212
+ require .Equal (t , r .Workspace .ID .String (), updateBuild .WorkspaceID .String ())
213
+ require .Equal (t , newVersion .TemplateVersion .ID .String (), updateBuild .TemplateVersionID .String ())
214
+ // Cancel the build so it doesn't remain in the 'pending' state indefinitely.
215
+ require .NoError (t , client .CancelWorkspaceBuild (ctx , updateBuild .ID ))
216
+
217
+ // Roll back to the original version
218
+ rollbackBuild , err := testTool (ctx , t , toolsdk .CreateWorkspaceBuild , map [string ]any {
219
+ "workspace_id" : r .Workspace .ID .String (),
220
+ "transition" : "start" ,
221
+ "template_version_id" : originalVersionID .String (),
222
+ })
223
+ require .NoError (t , err )
224
+ require .Equal (t , codersdk .WorkspaceTransitionStart , rollbackBuild .Transition )
225
+ require .Equal (t , r .Workspace .ID .String (), rollbackBuild .WorkspaceID .String ())
226
+ require .Equal (t , originalVersionID .String (), rollbackBuild .TemplateVersionID .String ())
227
+ // Cancel the build so it doesn't remain in the 'pending' state indefinitely.
228
+ require .NoError (t , client .CancelWorkspaceBuild (ctx , rollbackBuild .ID ))
229
+ })
180
230
})
181
231
182
232
t .Run ("ListTemplateVersionParameters" , func (t * testing.T ) {
0 commit comments