Skip to content

Commit be0c176

Browse files
committed
site: fix some tests
1 parent 8dd13d3 commit be0c176

File tree

1 file changed

+100
-51
lines changed

1 file changed

+100
-51
lines changed

site/src/api/api.test.ts

Lines changed: 100 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import {
22
MockTemplate,
3+
MockTemplateVersion2,
34
MockTemplateVersionParameter1,
45
MockTemplateVersionParameter2,
56
MockWorkspace,
7+
MockStoppedWorkspace,
68
MockWorkspaceBuild,
79
MockWorkspaceBuildParameter1,
810
} from "testHelpers/entities";
@@ -171,65 +173,112 @@ describe("api.ts", () => {
171173
});
172174

173175
describe("update", () => {
174-
it("creates a build with start and the latest template", async () => {
175-
jest
176-
.spyOn(API, "postWorkspaceBuild")
177-
.mockResolvedValueOnce(MockWorkspaceBuild);
178-
jest.spyOn(API, "getTemplate").mockResolvedValueOnce(MockTemplate);
179-
await API.updateWorkspace(MockWorkspace);
180-
expect(API.postWorkspaceBuild).toHaveBeenCalledWith(MockWorkspace.id, {
181-
transition: "start",
182-
template_version_id: MockTemplate.active_version_id,
183-
rich_parameter_values: [],
176+
describe("given a running workspace", () => {
177+
it("stops with current version before starting with the latest version", async () => {
178+
jest.spyOn(API, "postWorkspaceBuild").mockResolvedValueOnce({
179+
...MockWorkspaceBuild,
180+
transition: "stop",
181+
});
182+
jest.spyOn(API, "postWorkspaceBuild").mockResolvedValueOnce({
183+
...MockWorkspaceBuild,
184+
template_version_id: MockTemplateVersion2.id,
185+
transition: "start",
186+
});
187+
jest.spyOn(API, "getTemplate").mockResolvedValueOnce({
188+
...MockTemplate,
189+
active_version_id: MockTemplateVersion2.id,
190+
});
191+
await API.updateWorkspace(MockWorkspace);
192+
expect(API.postWorkspaceBuild).toHaveBeenCalledWith(MockWorkspace.id, {
193+
transition: "stop",
194+
log_level: undefined,
195+
});
196+
expect(API.postWorkspaceBuild).toHaveBeenCalledWith(MockWorkspace.id, {
197+
transition: "start",
198+
template_version_id: MockTemplateVersion2.id,
199+
rich_parameter_values: [],
200+
});
184201
});
185-
});
186202

187-
it("fails when having missing parameters", async () => {
188-
jest
189-
.spyOn(API, "postWorkspaceBuild")
190-
.mockResolvedValue(MockWorkspaceBuild);
191-
jest.spyOn(API, "getTemplate").mockResolvedValue(MockTemplate);
192-
jest.spyOn(API, "getWorkspaceBuildParameters").mockResolvedValue([]);
193-
jest
194-
.spyOn(API, "getTemplateVersionRichParameters")
195-
.mockResolvedValue([
203+
it("fails when having missing parameters", async () => {
204+
jest
205+
.spyOn(API, "postWorkspaceBuild")
206+
.mockResolvedValue(MockWorkspaceBuild);
207+
jest.spyOn(API, "getTemplate").mockResolvedValue(MockTemplate);
208+
jest.spyOn(API, "getWorkspaceBuildParameters").mockResolvedValue([]);
209+
jest
210+
.spyOn(API, "getTemplateVersionRichParameters")
211+
.mockResolvedValue([
212+
MockTemplateVersionParameter1,
213+
{ ...MockTemplateVersionParameter2, mutable: false },
214+
]);
215+
216+
let error = new Error();
217+
try {
218+
await API.updateWorkspace(MockWorkspace);
219+
} catch (e) {
220+
error = e as Error;
221+
}
222+
223+
expect(error).toBeInstanceOf(MissingBuildParameters);
224+
// Verify if the correct missing parameters are being passed
225+
expect((error as MissingBuildParameters).parameters).toEqual([
196226
MockTemplateVersionParameter1,
197227
{ ...MockTemplateVersionParameter2, mutable: false },
198228
]);
229+
});
199230

200-
let error = new Error();
201-
try {
231+
it("creates a build with no parameters if it is already filled", async () => {
232+
jest.spyOn(API, "postWorkspaceBuild").mockResolvedValueOnce({
233+
...MockWorkspaceBuild,
234+
transition: "stop",
235+
});
236+
jest.spyOn(API, "postWorkspaceBuild").mockResolvedValueOnce({
237+
...MockWorkspaceBuild,
238+
template_version_id: MockTemplateVersion2.id,
239+
transition: "start",
240+
});
241+
jest.spyOn(API, "getTemplate").mockResolvedValueOnce(MockTemplate);
242+
jest
243+
.spyOn(API, "getWorkspaceBuildParameters")
244+
.mockResolvedValue([MockWorkspaceBuildParameter1]);
245+
jest.spyOn(API, "getTemplateVersionRichParameters").mockResolvedValue([
246+
{
247+
...MockTemplateVersionParameter1,
248+
required: true,
249+
mutable: false,
250+
},
251+
]);
202252
await API.updateWorkspace(MockWorkspace);
203-
} catch (e) {
204-
error = e as Error;
205-
}
206-
207-
expect(error).toBeInstanceOf(MissingBuildParameters);
208-
// Verify if the correct missing parameters are being passed
209-
expect((error as MissingBuildParameters).parameters).toEqual([
210-
MockTemplateVersionParameter1,
211-
{ ...MockTemplateVersionParameter2, mutable: false },
212-
]);
253+
expect(API.postWorkspaceBuild).toHaveBeenCalledWith(MockWorkspace.id, {
254+
transition: "stop",
255+
log_level: undefined,
256+
});
257+
expect(API.postWorkspaceBuild).toHaveBeenCalledWith(MockWorkspace.id, {
258+
transition: "start",
259+
template_version_id: MockTemplate.active_version_id,
260+
rich_parameter_values: [],
261+
});
262+
});
213263
});
214-
215-
it("creates a build with the no parameters if it is already filled", async () => {
216-
jest
217-
.spyOn(API, "postWorkspaceBuild")
218-
.mockResolvedValueOnce(MockWorkspaceBuild);
219-
jest.spyOn(API, "getTemplate").mockResolvedValueOnce(MockTemplate);
220-
jest
221-
.spyOn(API, "getWorkspaceBuildParameters")
222-
.mockResolvedValue([MockWorkspaceBuildParameter1]);
223-
jest
224-
.spyOn(API, "getTemplateVersionRichParameters")
225-
.mockResolvedValue([
226-
{ ...MockTemplateVersionParameter1, required: true, mutable: false },
227-
]);
228-
await API.updateWorkspace(MockWorkspace);
229-
expect(API.postWorkspaceBuild).toHaveBeenCalledWith(MockWorkspace.id, {
230-
transition: "start",
231-
template_version_id: MockTemplate.active_version_id,
232-
rich_parameter_values: [],
264+
describe("given a stopped workspace", () => {
265+
it("creates a build with start and the latest template", async () => {
266+
jest
267+
.spyOn(API, "postWorkspaceBuild")
268+
.mockResolvedValueOnce(MockWorkspaceBuild);
269+
jest.spyOn(API, "getTemplate").mockResolvedValueOnce({
270+
...MockTemplate,
271+
active_version_id: MockTemplateVersion2.id,
272+
});
273+
await API.updateWorkspace(MockStoppedWorkspace);
274+
expect(API.postWorkspaceBuild).toHaveBeenCalledWith(
275+
MockStoppedWorkspace.id,
276+
{
277+
transition: "start",
278+
template_version_id: MockTemplateVersion2.id,
279+
rich_parameter_values: [],
280+
},
281+
);
233282
});
234283
});
235284
});

0 commit comments

Comments
 (0)