Skip to content

Commit 4c0314a

Browse files
committed
site: fix some tests
1 parent 56f0410 commit 4c0314a

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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy