@@ -2,7 +2,9 @@ package coderd_test
2
2
3
3
import (
4
4
"context"
5
+ "fmt"
5
6
"net/http"
7
+ "strconv"
6
8
"testing"
7
9
"time"
8
10
@@ -28,6 +30,90 @@ func TestWorkspaceBuild(t *testing.T) {
28
30
require .NoError (t ,err )
29
31
}
30
32
33
+ func TestWorkspaceBuildByBuildNumber (t * testing.T ) {
34
+ t .Parallel ()
35
+ t .Run ("Successful" ,func (t * testing.T ) {
36
+ client := coderdtest .New (t ,& coderdtest.Options {IncludeProvisionerD :true })
37
+ first := coderdtest .CreateFirstUser (t ,client )
38
+ user ,err := client .User (context .Background (),codersdk .Me )
39
+ require .NoError (t ,err ,"fetch me" )
40
+ version := coderdtest .CreateTemplateVersion (t ,client ,first .OrganizationID ,nil )
41
+ template := coderdtest .CreateTemplate (t ,client ,first .OrganizationID ,version .ID )
42
+ coderdtest .AwaitTemplateVersionJob (t ,client ,version .ID )
43
+ workspace := coderdtest .CreateWorkspace (t ,client ,first .OrganizationID ,template .ID )
44
+ _ ,err = client .WorkspaceBuildByUsernameAndWorkspaceNameAndBuildNumber (
45
+ context .Background (),
46
+ user .Username ,
47
+ workspace .Name ,
48
+ strconv .FormatInt (int64 (workspace .LatestBuild .BuildNumber ),10 ),
49
+ )
50
+ require .NoError (t ,err )
51
+ })
52
+
53
+ t .Run ("BuildNumberNotInt" ,func (t * testing.T ) {
54
+ client := coderdtest .New (t ,& coderdtest.Options {IncludeProvisionerD :true })
55
+ first := coderdtest .CreateFirstUser (t ,client )
56
+ user ,err := client .User (context .Background (),codersdk .Me )
57
+ require .NoError (t ,err ,"fetch me" )
58
+ version := coderdtest .CreateTemplateVersion (t ,client ,first .OrganizationID ,nil )
59
+ template := coderdtest .CreateTemplate (t ,client ,first .OrganizationID ,version .ID )
60
+ coderdtest .AwaitTemplateVersionJob (t ,client ,version .ID )
61
+ workspace := coderdtest .CreateWorkspace (t ,client ,first .OrganizationID ,template .ID )
62
+ _ ,err = client .WorkspaceBuildByUsernameAndWorkspaceNameAndBuildNumber (
63
+ context .Background (),
64
+ user .Username ,
65
+ workspace .Name ,
66
+ "buildNumber" ,
67
+ )
68
+ var apiError * codersdk.Error
69
+ require .ErrorAs (t ,err ,& apiError )
70
+ require .Equal (t ,http .StatusBadRequest ,apiError .StatusCode ())
71
+ require .ErrorContains (t ,apiError ,"Failed to parse build number as integer." )
72
+ })
73
+
74
+ t .Run ("WorkspaceNotFound" ,func (t * testing.T ) {
75
+ client := coderdtest .New (t ,& coderdtest.Options {IncludeProvisionerD :true })
76
+ first := coderdtest .CreateFirstUser (t ,client )
77
+ user ,err := client .User (context .Background (),codersdk .Me )
78
+ require .NoError (t ,err ,"fetch me" )
79
+ version := coderdtest .CreateTemplateVersion (t ,client ,first .OrganizationID ,nil )
80
+ template := coderdtest .CreateTemplate (t ,client ,first .OrganizationID ,version .ID )
81
+ coderdtest .AwaitTemplateVersionJob (t ,client ,version .ID )
82
+ workspace := coderdtest .CreateWorkspace (t ,client ,first .OrganizationID ,template .ID )
83
+ _ ,err = client .WorkspaceBuildByUsernameAndWorkspaceNameAndBuildNumber (
84
+ context .Background (),
85
+ user .Username ,
86
+ "workspaceName" ,
87
+ strconv .FormatInt (int64 (workspace .LatestBuild .BuildNumber ),10 ),
88
+ )
89
+ var apiError * codersdk.Error
90
+ require .ErrorAs (t ,err ,& apiError )
91
+ require .Equal (t ,http .StatusNotFound ,apiError .StatusCode ())
92
+ require .ErrorContains (t ,apiError ,"Workspace\" workspaceName\" does not exist." )
93
+ })
94
+
95
+ t .Run ("WorkspaceBuildNotFound" ,func (t * testing.T ) {
96
+ client := coderdtest .New (t ,& coderdtest.Options {IncludeProvisionerD :true })
97
+ first := coderdtest .CreateFirstUser (t ,client )
98
+ user ,err := client .User (context .Background (),codersdk .Me )
99
+ require .NoError (t ,err ,"fetch me" )
100
+ version := coderdtest .CreateTemplateVersion (t ,client ,first .OrganizationID ,nil )
101
+ template := coderdtest .CreateTemplate (t ,client ,first .OrganizationID ,version .ID )
102
+ coderdtest .AwaitTemplateVersionJob (t ,client ,version .ID )
103
+ workspace := coderdtest .CreateWorkspace (t ,client ,first .OrganizationID ,template .ID )
104
+ _ ,err = client .WorkspaceBuildByUsernameAndWorkspaceNameAndBuildNumber (
105
+ context .Background (),
106
+ user .Username ,
107
+ workspace .Name ,
108
+ "200" ,
109
+ )
110
+ var apiError * codersdk.Error
111
+ require .ErrorAs (t ,err ,& apiError )
112
+ require .Equal (t ,http .StatusNotFound ,apiError .StatusCode ())
113
+ require .ErrorContains (t ,apiError ,fmt .Sprintf ("Workspace %q Build 200 does not exist." ,workspace .Name ))
114
+ })
115
+ }
116
+
31
117
func TestWorkspaceBuilds (t * testing.T ) {
32
118
t .Parallel ()
33
119
t .Run ("Single" ,func (t * testing.T ) {