Skip to content

Commit 3b842f2

Browse files
committed
Fix: CreateWorkspacePage
1 parent 5228e9c commit 3b842f2

File tree

3 files changed

+112
-23
lines changed

3 files changed

+112
-23
lines changed

site/src/pages/CreateWorkspacePage/CreateWorkspacePage.test.tsx

Lines changed: 40 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,25 @@ const renderCreateWorkspacePage = () => {
2929
}
3030

3131
describe("CreateWorkspacePage", () => {
32-
it("renders with rich parameter", async () => {
32+
it("renders", async () => {
3333
jest
3434
.spyOn(API, "getTemplateVersionRichParameters")
3535
.mockResolvedValueOnce([MockTemplateVersionParameter1])
36+
renderCreateWorkspacePage()
3637

37-
await waitFor(() => renderCreateWorkspacePage())
38+
const element = await screen.findByText("Create workspace")
39+
expect(element).toBeDefined()
40+
})
41+
42+
it("renders with rich parameter", async () => {
43+
jest
44+
.spyOn(API, "getTemplateVersionRichParameters")
45+
.mockResolvedValueOnce([MockTemplateVersionParameter1])
46+
renderCreateWorkspacePage()
3847

39-
const element = screen.findByText("Create workspace")
48+
const element = await screen.findByText("Create workspace")
4049
expect(element).toBeDefined()
41-
const firstParameter = screen.findByText(
50+
const firstParameter = await screen.findByText(
4251
MockTemplateVersionParameter1.description,
4352
)
4453
expect(firstParameter).toBeDefined()
@@ -52,6 +61,9 @@ describe("CreateWorkspacePage", () => {
5261
.spyOn(API, "getWorkspaceQuota")
5362
.mockResolvedValueOnce(MockWorkspaceQuota)
5463
jest.spyOn(API, "createWorkspace").mockResolvedValueOnce(MockWorkspace)
64+
jest
65+
.spyOn(API, "getTemplateVersionRichParameters")
66+
.mockResolvedValueOnce([MockTemplateVersionParameter1])
5567

5668
renderCreateWorkspacePage()
5769

@@ -89,17 +101,14 @@ describe("CreateWorkspacePage", () => {
89101
.spyOn(API, "getTemplateVersionRichParameters")
90102
.mockResolvedValueOnce([MockTemplateVersionParameter1])
91103

92-
await waitFor(() =>
93-
renderWithAuth(<CreateWorkspacePage />, {
94-
route:
95-
"/templates/" +
96-
MockTemplate.name +
97-
`/workspace?param.${param}=${paramValue}`,
98-
path: "/templates/:template/workspace",
99-
}),
100-
)
101-
102-
await screen.findByDisplayValue(paramValue)
104+
renderWithAuth(<CreateWorkspacePage />, {
105+
route:
106+
"/templates/" +
107+
MockTemplate.name +
108+
`/workspace?param.${param}=${paramValue}`,
109+
path: "/templates/:template/workspace",
110+
}),
111+
await screen.findByDisplayValue(paramValue)
103112
})
104113

105114
it("uses default rich param values passed from the URL", async () => {
@@ -138,21 +147,26 @@ describe("CreateWorkspacePage", () => {
138147

139148
await waitFor(() => renderCreateWorkspacePage())
140149

141-
const element = screen.findByText("Create workspace")
150+
const element = await screen.findByText("Create workspace")
142151
expect(element).toBeDefined()
143-
const secondParameter = screen.findByText(
152+
const secondParameter = await screen.findByText(
144153
MockTemplateVersionParameter2.description,
145154
)
146155
expect(secondParameter).toBeDefined()
147156

148157
const secondParameterField = await screen.findByLabelText(
149158
MockTemplateVersionParameter2.name,
150159
)
160+
expect(secondParameterField).toBeDefined()
161+
151162
fireEvent.change(secondParameterField, {
152163
target: { value: "4" },
153164
})
165+
fireEvent.submit(secondParameter)
154166

155-
const validationError = screen.findByText("Value must be between")
167+
const validationError = await screen.findByText(
168+
"Value must be between 1 and 3.",
169+
)
156170
expect(validationError).toBeDefined()
157171
})
158172

@@ -166,23 +180,26 @@ describe("CreateWorkspacePage", () => {
166180

167181
await waitFor(() => renderCreateWorkspacePage())
168182

169-
const element = screen.findByText("Create workspace")
183+
const element = await screen.findByText("Create workspace")
170184
expect(element).toBeDefined()
171-
const thirdParameter = screen.findByText(
185+
const thirdParameter = await screen.findByText(
172186
MockTemplateVersionParameter3.description,
173187
)
174188
expect(thirdParameter).toBeDefined()
175189

176190
const thirdParameterField = await screen.findByLabelText(
177191
MockTemplateVersionParameter3.name,
178192
)
193+
expect(thirdParameterField).toBeDefined()
179194
fireEvent.change(thirdParameterField, {
180195
target: { value: "1234" },
181196
})
197+
fireEvent.submit(thirdParameterField)
182198

183-
const validationError = screen.findByText(
184-
MockTemplateVersionParameter3.validation_error,
199+
const validationError = await screen.findByText(
200+
MockTemplateVersionParameter3.validation_error +
201+
" (value does not match the pattern ^[a-z]{3}$).",
185202
)
186-
expect(validationError).toBeDefined()
203+
expect(validationError).toBeInTheDocument()
187204
})
188205
})
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import { screen, waitFor } from "@testing-library/react"
2+
import {
3+
MockTemplateVersionParameter1,
4+
MockWorkspace,
5+
MockWorkspaceBuildParameter1,
6+
MockWorkspaceBuildParameter2,
7+
renderWithAuth,
8+
} from "testHelpers/renderHelpers"
9+
import * as API from "api/api"
10+
import { WorkspaceBuildParametersPage } from "./WorkspaceBuildParametersPage"
11+
12+
const renderWorkspaceBuildParametersPage = () => {
13+
return renderWithAuth(<WorkspaceBuildParametersPage />, {
14+
route: `/@${MockWorkspace.owner_name}/${MockWorkspace.name}/build-parameters`,
15+
path: `/@:ownerName/:workspaceName/build-parameters`,
16+
})
17+
}
18+
19+
describe("WorkspaceBuildParametersPage", () => {
20+
it("renders without rich parameters", async () => {
21+
jest.spyOn(API, "getWorkspace").mockResolvedValueOnce(MockWorkspace)
22+
jest
23+
.spyOn(API, "getTemplateVersionRichParameters")
24+
.mockResolvedValueOnce([])
25+
26+
await waitFor(() => renderWorkspaceBuildParametersPage())
27+
28+
const element = screen.findByDisplayValue("Workspace build parameters")
29+
expect(element).toBeDefined()
30+
31+
const goBackButton = screen.findByDisplayValue("Go back")
32+
expect(goBackButton).toBeDefined()
33+
})
34+
35+
it("renders with rich parameter", async () => {
36+
jest.spyOn(API, "getWorkspace").mockResolvedValueOnce(MockWorkspace)
37+
jest
38+
.spyOn(API, "getTemplateVersionRichParameters")
39+
.mockResolvedValueOnce([MockTemplateVersionParameter1])
40+
jest
41+
.spyOn(API, "getWorkspaceBuildParameters")
42+
.mockResolvedValueOnce([
43+
MockWorkspaceBuildParameter1,
44+
MockWorkspaceBuildParameter2,
45+
])
46+
47+
await waitFor(() => renderWorkspaceBuildParametersPage())
48+
49+
const element = screen.findByText("Workspace build parameters")
50+
expect(element).toBeDefined()
51+
52+
const firstParameter = screen.findByLabelText(
53+
MockTemplateVersionParameter1.name,
54+
)
55+
expect(firstParameter).toBeDefined()
56+
57+
const firstParameterValue = screen.findByText(
58+
MockWorkspaceBuildParameter1.value,
59+
)
60+
expect(firstParameterValue).toBeDefined()
61+
})
62+
})

site/src/testHelpers/entities.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1251,6 +1251,16 @@ export const MockAppearance: TypesGen.AppearanceConfig = {
12511251
},
12521252
}
12531253

1254+
export const MockWorkspaceBuildParameter1: TypesGen.WorkspaceBuildParameter = {
1255+
name: MockTemplateVersionParameter1.name,
1256+
value: "mock-abc",
1257+
}
1258+
1259+
export const MockWorkspaceBuildParameter2: TypesGen.WorkspaceBuildParameter = {
1260+
name: MockTemplateVersionParameter2.name,
1261+
value: "3",
1262+
}
1263+
12541264
export const mockParameterSchema = (
12551265
partial: Partial<TypesGen.ParameterSchema>,
12561266
): TypesGen.ParameterSchema => {

0 commit comments

Comments
 (0)