Skip to content

Commit bd3a026

Browse files
committed
Test
1 parent 40a62a8 commit bd3a026

File tree

4 files changed

+97
-17
lines changed

4 files changed

+97
-17
lines changed

site/src/components/Workspace/Workspace.test.tsx

Lines changed: 0 additions & 15 deletions
This file was deleted.

site/src/components/WorkspaceStatusBar/WorkspaceStatusBar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ export const WorkspaceStatusBar: React.FC<WorkspaceStatusBarProps> = ({
7373
<div className={styles.horizontal}>
7474
<div className={styles.horizontal}>
7575
<Typography variant="h4">{workspace.name}</Typography>
76-
<Box className={styles.statusChip}>
76+
<Box className={styles.statusChip} role="status">
7777
{workspaceStatus === "started" && Language.started}
7878
{workspaceStatus === "starting" && Language.starting}
7979
{workspaceStatus === "stopped" && Language.stopped}

site/src/pages/WorkspacePage/WorkspacePage.test.tsx

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { screen } from "@testing-library/react"
2+
import { rest } from "msw"
23
import React from "react"
3-
import { MockTemplate, MockWorkspace, renderWithAuth } from "../../testHelpers"
4+
import { MockFailedWorkspace, MockStoppedWorkspace, MockTemplate, MockWorkspace, renderWithAuth } from "../../testHelpers"
5+
import { server } from "../../testHelpers/server"
46
import { WorkspacePage } from "./WorkspacePage"
57

68
describe("Workspace Page", () => {
@@ -11,4 +13,47 @@ describe("Workspace Page", () => {
1113
expect(workspaceName).toBeDefined()
1214
expect(templateName).toBeDefined()
1315
})
16+
it("shows the status of the workspace", async () => {
17+
renderWithAuth(<WorkspacePage />, { route: `/workspaces/${MockWorkspace.id}`, path: "/workspaces/:workspace" })
18+
const status = await screen.findByRole("status")
19+
expect(status).toHaveTextContent("Running")
20+
})
21+
it("stops the workspace when the user presses Stop", async () => {
22+
renderWithAuth(<WorkspacePage />, { route: `/workspaces/${MockWorkspace.id}`, path: "/workspaces/:workspace" })
23+
const status = await screen.findByText("Running")
24+
expect(status).toBeDefined()
25+
const stopButton = await screen.findByText("Stop")
26+
stopButton.click()
27+
const laterStatus = await screen.findByText("Stopping")
28+
expect(laterStatus).toBeDefined()
29+
})
30+
it("starts the workspace when the user presses Start", async () => {
31+
server.use(
32+
rest.get(`/api/v2/workspaces/${MockWorkspace.id}`, (req, res, ctx) => {
33+
return res(ctx.status(200), ctx.json(MockStoppedWorkspace))
34+
}),
35+
)
36+
renderWithAuth(<WorkspacePage />, { route: `/workspaces/${MockWorkspace.id}`, path: "/workspaces/:workspace" })
37+
const startButton = await screen.findByText("Start")
38+
const status = await screen.findByText("Stopped")
39+
expect(status).toBeDefined()
40+
startButton.click()
41+
const laterStatus = await screen.findByText("Building")
42+
expect(laterStatus).toBeDefined()
43+
})
44+
it("retries starting the workspace when the user presses Retry", async () => {
45+
// MockFailedWorkspace.latest_build.transition is start so Retry will attempt to start
46+
renderWithAuth(<WorkspacePage />, { route: `/workspaces/${MockWorkspace.id}`, path: "/workspaces/:workspace" })
47+
server.use(
48+
rest.get(`/api/v2/workspaces/${MockWorkspace.id}`, (req, res, ctx) => {
49+
return res(ctx.status(200), ctx.json(MockFailedWorkspace))
50+
}),
51+
)
52+
const status = await screen.findByText("Build Failed")
53+
expect(status).toBeDefined()
54+
const retryButton = await screen.findByText("Retry")
55+
retryButton.click()
56+
const laterStatus = await screen.findByText("Building")
57+
expect(laterStatus).toBeDefined()
58+
})
1459
})

site/src/testHelpers/entities.ts

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,34 @@ export const MockProvisionerJob = {
9393
worker_id: "test-worker-id",
9494
}
9595

96+
export const MockFailedProvisionerJob = {
97+
id: "test-provisioner-job",
98+
created_at: "",
99+
started_at: "",
100+
completed_at: "",
101+
error: "",
102+
status: "failed" as ProvisionerJobStatus,
103+
worker_id: "test-worker-id",
104+
}
105+
96106
export const MockWorkspaceBuild = {
97107
id: "test-workspace-build",
98108
transition: "start" as WorkspaceBuildTransition,
99109
job: MockProvisionerJob,
100110
}
101111

112+
export const MockWorkspaceBuildStop = {
113+
id: "test-workspace-build",
114+
transition: "stop" as WorkspaceBuildTransition,
115+
job: MockProvisionerJob,
116+
}
117+
118+
export const MockFailedWorkspaceBuild = {
119+
id: "test-workspace-build",
120+
transition: "start" as WorkspaceBuildTransition,
121+
job: MockFailedProvisionerJob,
122+
}
123+
102124
// These are special cases of MockWorkspaceBuild for more precise testing
103125
export const MockWorkspaceStart = {
104126
id: "test-workspace-build-start",
@@ -128,6 +150,34 @@ export const MockWorkspace: Workspace = {
128150
latest_build: MockWorkspaceBuild,
129151
}
130152

153+
export const MockStoppedWorkspace: Workspace = {
154+
id: "test-workspace",
155+
name: "Test-Workspace",
156+
created_at: "",
157+
updated_at: "",
158+
template_id: MockTemplate.id,
159+
outdated: false,
160+
owner_id: MockUser.id,
161+
autostart_schedule: MockWorkspaceAutostartEnabled.schedule,
162+
autostop_schedule: MockWorkspaceAutostopEnabled.schedule,
163+
latest_build: MockWorkspaceBuildStop,
164+
}
165+
166+
export const MockFailedWorkspace: Workspace = {
167+
id: "test-workspace",
168+
name: "Test-Workspace",
169+
created_at: "",
170+
updated_at: "",
171+
template_id: MockTemplate.id,
172+
outdated: false,
173+
owner_id: MockUser.id,
174+
autostart_schedule: MockWorkspaceAutostartEnabled.schedule,
175+
autostop_schedule: MockWorkspaceAutostopEnabled.schedule,
176+
latest_build: MockFailedWorkspaceBuild,
177+
}
178+
179+
180+
131181
export const MockWorkspaceAgent: WorkspaceAgent = {
132182
id: "test-workspace-agent",
133183
name: "a-workspace-agent",

0 commit comments

Comments
 (0)