Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e60aa38

Browse files
committed
add unit tests for the new API
1 parent 318224c commit e60aa38

File tree

3 files changed

+100
-1
lines changed

3 files changed

+100
-1
lines changed

coderd/workspacebuilds.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ func (api *API) workspaceBuildByBuildNumber(rw http.ResponseWriter, r *http.Requ
202202
})
203203
if errors.Is(err, sql.ErrNoRows) {
204204
httpapi.Write(rw, http.StatusNotFound, httpapi.Response{
205-
Message: fmt.Sprintf("Workspace %q Build %q does not exist.", workspaceName, buildNumber),
205+
Message: fmt.Sprintf("Workspace %q Build %d does not exist.", workspaceName, buildNumber),
206206
})
207207
return
208208
}

coderd/workspacebuilds_test.go

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ package coderd_test
22

33
import (
44
"context"
5+
"fmt"
56
"net/http"
7+
"strconv"
68
"testing"
79
"time"
810

@@ -28,6 +30,90 @@ func TestWorkspaceBuild(t *testing.T) {
2830
require.NoError(t, err)
2931
}
3032

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+
31117
func TestWorkspaceBuilds(t *testing.T) {
32118
t.Parallel()
33119
t.Run("Single", func(t *testing.T) {

codersdk/workspacebuilds.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,3 +103,16 @@ func (c *Client) WorkspaceBuildState(ctx context.Context, build uuid.UUID) ([]by
103103
}
104104
return io.ReadAll(res.Body)
105105
}
106+
107+
func (c *Client) WorkspaceBuildByUsernameAndWorkspaceNameAndBuildNumber(ctx context.Context, username string, workspaceName string, buildNumber string) (WorkspaceBuild, error) {
108+
res, err := c.Request(ctx, http.MethodGet, fmt.Sprintf("/api/v2/users/%s/workspace/%s/builds/%s", username, workspaceName, buildNumber), nil)
109+
if err != nil {
110+
return WorkspaceBuild{}, err
111+
}
112+
defer res.Body.Close()
113+
if res.StatusCode != http.StatusOK {
114+
return WorkspaceBuild{}, readBodyAsError(res)
115+
}
116+
var workspaceBuild WorkspaceBuild
117+
return workspaceBuild, json.NewDecoder(res.Body).Decode(&workspaceBuild)
118+
}

0 commit comments

Comments
 (0)