Skip to content

Commit df06d53

Browse files
committed
tryin
1 parent 7a33590 commit df06d53

File tree

5 files changed

+31
-66
lines changed

5 files changed

+31
-66
lines changed

site/src/api/api.ts

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import type dayjs from "dayjs";
2424
import userAgentParser from "ua-parser-js";
2525
import { OneWayWebSocket } from "../utils/OneWayWebSocket";
2626
import { delay } from "../utils/delay";
27-
import { type FieldError, isApiError } from "./errors";
27+
import { ParameterValidationError, isApiError } from "./errors";
2828
import type {
2929
DynamicParametersRequest,
3030
PostWorkspaceUsageRequest,
@@ -398,15 +398,6 @@ export class MissingBuildParameters extends Error {
398398
}
399399
}
400400

401-
export class ParameterValidationError extends Error {
402-
constructor(
403-
public readonly versionId: string,
404-
public readonly validations: FieldError[],
405-
) {
406-
super("Parameters are not valid for new template version");
407-
}
408-
}
409-
410401
export type GetProvisionerJobsParams = {
411402
status?: string;
412403
limit?: number;
@@ -2256,6 +2247,7 @@ class ApiMethods {
22562247
error.response.data.validations &&
22572248
error.response.data.validations.length > 0
22582249
) {
2250+
console.log(error.response.data.validations);
22592251
throw new ParameterValidationError(
22602252
templateVersionId,
22612253
error.response.data.validations,

site/src/api/errors.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,3 +149,12 @@ export class DetailedError extends Error {
149149
super(message);
150150
}
151151
}
152+
153+
export class ParameterValidationError extends Error {
154+
constructor(
155+
public readonly versionId: string,
156+
public readonly validations: FieldError[],
157+
) {
158+
super("Parameters are not valid for new template version");
159+
}
160+
}

site/src/modules/workspaces/WorkspaceMoreActions/WorkspaceMoreActions.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { MissingBuildParameters, ParameterValidationError } from "api/api";
2-
import { isApiError } from "api/errors";
1+
import { MissingBuildParameters } from "api/api";
2+
import { ParameterValidationError, isApiError } from "api/errors";
33
import { type ApiError, getErrorMessage } from "api/errors";
44
import {
55
changeVersion,

site/src/modules/workspaces/WorkspaceUpdateDialogs.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { MissingBuildParameters, ParameterValidationError } from "api/api";
1+
import { MissingBuildParameters } from "api/api";
2+
import { ParameterValidationError } from "api/errors";
23
import { updateWorkspace } from "api/queries/workspaces";
34
import type {
45
TemplateVersion,

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

Lines changed: 16 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { screen, waitFor, within } from "@testing-library/react";
22
import userEvent from "@testing-library/user-event";
33
import * as apiModule from "api/api";
4+
import { ParameterValidationError } from "api/errors";
45
import type { TemplateVersionParameter, Workspace } from "api/typesGenerated";
56
import MockServerSocket from "jest-websocket-mock";
67
import {
@@ -282,11 +283,9 @@ describe("WorkspacePage", () => {
282283
});
283284

284285
it("requests an update when the user presses Update", async () => {
285-
// Mocks
286286
jest
287287
.spyOn(API, "getWorkspaceByOwnerAndName")
288288
.mockResolvedValueOnce(MockOutdatedWorkspace);
289-
290289
const updateWorkspaceMock = jest
291290
.spyOn(API, "updateWorkspace")
292291
.mockResolvedValueOnce(MockWorkspaceBuild);
@@ -306,73 +305,37 @@ describe("WorkspacePage", () => {
306305
});
307306
});
308307

309-
it("updates the parameters when they are missing during update", async () => {
310-
// Mocks
308+
it("requires invalid parameters to be updated", async () => {
311309
jest
312310
.spyOn(API, "getWorkspaceByOwnerAndName")
313311
.mockResolvedValueOnce(MockOutdatedWorkspace);
314-
const updateWorkspaceSpy = jest
312+
const updateWorkspaceMock = jest
315313
.spyOn(API, "updateWorkspace")
316314
.mockRejectedValueOnce(
317-
new MissingBuildParameters(
318-
[MockTemplateVersionParameter1, MockTemplateVersionParameter2],
315+
new ParameterValidationError(
319316
MockOutdatedWorkspace.template_active_version_id,
317+
[
318+
{
319+
field: MockTemplateVersionParameter1.name,
320+
detail:
321+
"Required parameter not provided; parameter value is null",
322+
},
323+
],
320324
),
321325
);
322326

323-
// Render
324327
await renderWorkspacePage(MockWorkspace);
325328

326-
// Actions
329+
// Start workspace update
327330
const user = userEvent.setup();
328331
await user.click(screen.getByTestId("workspace-update-button"));
329332
const confirmButton = await screen.findByTestId("confirm-button");
330333
await user.click(confirmButton);
331334

332-
// The update was called
333-
await waitFor(() => {
334-
expect(API.updateWorkspace).toBeCalled();
335-
updateWorkspaceSpy.mockClear();
336-
});
337-
338-
// After trying to update, a new dialog asking for missed parameters should
339-
// be displayed and filled
340-
const dialog = await waitFor(() => screen.findByTestId("dialog"), {
341-
timeout: 2000,
342-
});
343-
const firstParameterInput = within(dialog).getByLabelText(
344-
MockTemplateVersionParameter1.name,
345-
{ exact: false },
346-
);
347-
await user.clear(firstParameterInput);
348-
await user.type(firstParameterInput, "some-value");
349-
const secondParameterInput = within(dialog).getByLabelText(
350-
MockTemplateVersionParameter2.name,
351-
{ exact: false },
352-
);
353-
await user.clear(secondParameterInput);
354-
await user.type(secondParameterInput, "2");
355-
await user.click(
356-
within(dialog).getByRole("button", { name: /update parameters/i }),
357-
);
358-
359-
// Check if the update was called using the values from the form
360-
await waitFor(() => {
361-
expect(API.updateWorkspace).toHaveBeenCalledWith(
362-
MockOutdatedWorkspace,
363-
[
364-
{
365-
name: MockTemplateVersionParameter1.name,
366-
value: "some-value",
367-
},
368-
{
369-
name: MockTemplateVersionParameter2.name,
370-
value: "2",
371-
},
372-
],
373-
false,
374-
);
375-
});
335+
// Dialog should warn the parameters need to be updated
336+
const dialog = await screen.findByTestId("dialog");
337+
await within(dialog).findByText("Update workspace parameters");
338+
await screen.findByText(/go to the workspace parameters page to review/);
376339
});
377340

378341
it("restart the workspace with one time parameters when having the confirmation dialog", async () => {

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