@@ -2,6 +2,7 @@ package coderd_test
2
2
3
3
import (
4
4
"context"
5
+ "errors"
5
6
"fmt"
6
7
"net/http"
7
8
"strconv"
@@ -164,6 +165,60 @@ func TestWorkspaceBuilds(t *testing.T) {
164
165
require .NoError (t , err )
165
166
})
166
167
168
+ t .Run ("OrphanNotOwner" , func (t * testing.T ) {
169
+ t .Parallel ()
170
+ client := coderdtest .New (t , & coderdtest.Options {IncludeProvisionerD : true })
171
+ first := coderdtest .CreateFirstUser (t , client )
172
+
173
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
174
+ defer cancel ()
175
+
176
+ version := coderdtest .CreateTemplateVersion (t , client , first .OrganizationID , nil )
177
+ template := coderdtest .CreateTemplate (t , client , first .OrganizationID , version .ID )
178
+ coderdtest .AwaitTemplateVersionJob (t , client , version .ID )
179
+
180
+ regularUser := coderdtest .CreateAnotherUser (t , client , first .OrganizationID )
181
+
182
+ workspace := coderdtest .CreateWorkspace (t , regularUser , first .OrganizationID , template .ID )
183
+ coderdtest .AwaitWorkspaceBuildJob (t , regularUser , workspace .LatestBuild .ID )
184
+
185
+ _ , err := regularUser .CreateWorkspaceBuild (ctx , workspace .ID , codersdk.CreateWorkspaceBuildRequest {
186
+ TemplateVersionID : workspace .LatestBuild .TemplateVersionID ,
187
+ Transition : workspace .LatestBuild .Transition ,
188
+ ProvisionerState : []byte (" " ),
189
+ })
190
+ require .Error (t , err )
191
+
192
+ var cerr * codersdk.Error
193
+ require .True (t , errors .As (err , & cerr ))
194
+
195
+ code := cerr .StatusCode ()
196
+ require .Equal (t , http .StatusForbidden , code , "unexpected status %s" , http .StatusText (code ))
197
+ })
198
+
199
+ t .Run ("Orphan" , func (t * testing.T ) {
200
+ t .Parallel ()
201
+ client := coderdtest .New (t , & coderdtest.Options {IncludeProvisionerD : true })
202
+ first := coderdtest .CreateFirstUser (t , client )
203
+
204
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
205
+ defer cancel ()
206
+
207
+ version := coderdtest .CreateTemplateVersion (t , client , first .OrganizationID , nil )
208
+ template := coderdtest .CreateTemplate (t , client , first .OrganizationID , version .ID )
209
+ coderdtest .AwaitTemplateVersionJob (t , client , version .ID )
210
+
211
+ workspace := coderdtest .CreateWorkspace (t , client , first .OrganizationID , template .ID )
212
+ coderdtest .AwaitWorkspaceBuildJob (t , client , workspace .LatestBuild .ID )
213
+
214
+ _ , err := client .CreateWorkspaceBuild (ctx , workspace .ID , codersdk.CreateWorkspaceBuildRequest {
215
+ TemplateVersionID : workspace .LatestBuild .TemplateVersionID ,
216
+ Transition : workspace .LatestBuild .Transition ,
217
+ ProvisionerState : []byte (" " ),
218
+ })
219
+ require .Nil (t , err )
220
+ })
221
+
167
222
t .Run ("PaginateNonExistentRow" , func (t * testing.T ) {
168
223
t .Parallel ()
169
224
client := coderdtest .New (t , & coderdtest.Options {IncludeProvisionerD : true })
0 commit comments