From 17a1c488263589615a80829eedd69f0d8d7b1d22 Mon Sep 17 00:00:00 2001 From: Kira Pilot Date: Wed, 29 Mar 2023 19:50:36 +0000 Subject: [PATCH 1/2] chore(UI): redirecting from workspace page if 404 --- .../src/pages/WorkspacePage/WorkspacePage.tsx | 85 ++++++++++--------- .../xServices/workspace/workspaceXService.ts | 5 +- 2 files changed, 48 insertions(+), 42 deletions(-) diff --git a/site/src/pages/WorkspacePage/WorkspacePage.tsx b/site/src/pages/WorkspacePage/WorkspacePage.tsx index c805e33c02cef..673d12a1e2e23 100644 --- a/site/src/pages/WorkspacePage/WorkspacePage.tsx +++ b/site/src/pages/WorkspacePage/WorkspacePage.tsx @@ -9,6 +9,7 @@ import { firstOrItem } from "util/array" import { quotaMachine } from "xServices/quotas/quotasXService" import { workspaceMachine } from "xServices/workspace/workspaceXService" import { WorkspaceReadyPage } from "./WorkspaceReadyPage" +import { RequirePermission } from "components/RequirePermission/RequirePermission" export const WorkspacePage: FC = () => { const { username: usernameQueryParam, workspace: workspaceQueryParam } = @@ -42,46 +43,50 @@ export const WorkspacePage: FC = () => { }, [username, quotaSend]) return ( - - -
- {Boolean(getWorkspaceError) && ( - - )} - {Boolean(getTemplateWarning) && ( - - )} - {Boolean(getTemplateParametersWarning) && ( - - )} - {Boolean(checkPermissionsError) && ( - - )} - {Boolean(getQuotaError) && ( - - )} -
-
- - - - - - -
+ + + +
+ {Boolean(getWorkspaceError) && ( + + )} + {Boolean(getTemplateWarning) && ( + + )} + {Boolean(getTemplateParametersWarning) && ( + + )} + {Boolean(checkPermissionsError) && ( + + )} + {Boolean(getQuotaError) && ( + + )} +
+
+ + + + + + +
+
) } diff --git a/site/src/xServices/workspace/workspaceXService.ts b/site/src/xServices/workspace/workspaceXService.ts index 1fc1c543fd78e..4a5f47506be6a 100644 --- a/site/src/xServices/workspace/workspaceXService.ts +++ b/site/src/xServices/workspace/workspaceXService.ts @@ -9,6 +9,7 @@ import { displayError, displaySuccess, } from "../../components/GlobalSnackbar/utils" +import { AxiosError } from "axios" const latestBuild = (builds: TypesGen.WorkspaceBuild[]) => { // Cloning builds to not change the origin object with the sort() @@ -56,7 +57,7 @@ export interface WorkspaceContext { workspace?: TypesGen.Workspace template?: TypesGen.Template build?: TypesGen.WorkspaceBuild - getWorkspaceError?: Error | unknown + getWorkspaceError?: AxiosError getTemplateWarning: Error | unknown getTemplateParametersWarning: Error | unknown // Builds @@ -491,7 +492,7 @@ export const workspaceMachine = createMachine( workspace: (_, event) => event.data, }), assignGetWorkspaceError: assign({ - getWorkspaceError: (_, event) => event.data, + getWorkspaceError: (_, event) => event.data as AxiosError, }), clearGetWorkspaceError: (context) => assign({ ...context, getWorkspaceError: undefined }), From 86ff2e272f15b0abb8a6e0cf3f2b2769dfc6de0a Mon Sep 17 00:00:00 2001 From: Kira Pilot Date: Thu, 30 Mar 2023 12:58:19 +0000 Subject: [PATCH 2/2] added new routes test --- site/e2e/globalSetup.ts | 4 +++- site/e2e/tests/workspaceAccess.spec.ts | 31 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 site/e2e/tests/workspaceAccess.spec.ts diff --git a/site/e2e/globalSetup.ts b/site/e2e/globalSetup.ts index ad61cca6f0f3d..611e9f6455806 100644 --- a/site/e2e/globalSetup.ts +++ b/site/e2e/globalSetup.ts @@ -8,13 +8,15 @@ const globalSetup = async (): Promise => { axios.defaults.baseURL = `http://localhost:${constants.defaultPort}` // Create first user - await createFirstUser({ + const firstUser = await createFirstUser({ email: constants.email, username: constants.username, password: constants.password, trial: false, }) + process.env.FIRST_USER = JSON.stringify(firstUser) + // Authenticated storage const authenticatedRequestContext = await request.newContext() await authenticatedRequestContext.post( diff --git a/site/e2e/tests/workspaceAccess.spec.ts b/site/e2e/tests/workspaceAccess.spec.ts new file mode 100644 index 0000000000000..c5bc32fb326ce --- /dev/null +++ b/site/e2e/tests/workspaceAccess.spec.ts @@ -0,0 +1,31 @@ +import { test, expect } from "@playwright/test" +import { getStatePath } from "../helpers" +import { createTemplate, createTemplateVersion, getOrganization } from "api/api" + +test.use({ storageState: getStatePath("authState") }) + +test("admin can view own workspace", async ({ page, baseURL }) => { + // import the user response and get the org id off of that + const { FIRST_USER } = process.env + const { user_id, organization_id } = JSON.parse(FIRST_USER as any) + + console.log("organizationId", organization_id) + + const org = await getOrganization(organization_id) + console.log("org", org) + + // const { id } = await createTemplateVersion(organization_id, { + // storage_method: "file", + // provisioner: "terraform", + // tags: {}, + // }) + + // console.log("templateVID", id) + // // Create template + // await createTemplate(organization_id, { + // name: "my-template", + // template_version_id: id, + // }) + // await page.goto(`${baseURL}/templates`, { waitUntil: "networkidle" }) + // await expect(page).toHaveTitle("Templates - Coder") +}) 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