From 27749ce954884c7ce9eb04898832d6fd01ea8bdb Mon Sep 17 00:00:00 2001 From: G r e y Date: Wed, 16 Mar 2022 03:11:24 -0400 Subject: [PATCH] feat(site): add healthz page (#458) Summary: This is a port of v1 healthz page to v2 Impact: A simple way to check site health (requires no auth). Good smoke test for e2e. --- site/e2e/pom/HealthzPage.ts | 13 +++++++++++++ site/e2e/tests/healthz.spec.ts | 8 ++++++++ site/src/app.tsx | 2 ++ site/src/pages/healthz.tsx | 8 ++++++++ 4 files changed, 31 insertions(+) create mode 100644 site/e2e/pom/HealthzPage.ts create mode 100644 site/e2e/tests/healthz.spec.ts create mode 100644 site/src/pages/healthz.tsx diff --git a/site/e2e/pom/HealthzPage.ts b/site/e2e/pom/HealthzPage.ts new file mode 100644 index 0000000000..7a85ec38fb --- /dev/null +++ b/site/e2e/pom/HealthzPage.ts @@ -0,0 +1,13 @@ +import { Locator, Page } from "@playwright/test" +import { BasePom } from "./BasePom" + +export class HealthzPage extends BasePom { + constructor(baseURL: string | undefined, page: Page) { + super(baseURL, "/healthz", page) + } + + getOk(): Locator { + const locator = this.page.locator("text=ok") + return locator + } +} diff --git a/site/e2e/tests/healthz.spec.ts b/site/e2e/tests/healthz.spec.ts new file mode 100644 index 0000000000..c58ede2503 --- /dev/null +++ b/site/e2e/tests/healthz.spec.ts @@ -0,0 +1,8 @@ +import { test } from "@playwright/test" +import { HealthzPage } from "../pom/HealthzPage" + +test("Healthz is available without authentication", async ({ baseURL, page }) => { + const healthzPage = new HealthzPage(baseURL, page) + await page.goto(healthzPage.url, { waitUntil: "networkidle" }) + await healthzPage.getOk().waitFor({ state: "visible" }) +}) diff --git a/site/src/app.tsx b/site/src/app.tsx index 51e0872b09..0178b992b2 100644 --- a/site/src/app.tsx +++ b/site/src/app.tsx @@ -14,6 +14,7 @@ import { ProjectsPage } from "./pages/projects" import { ProjectPage } from "./pages/projects/[organization]/[project]" import { CreateWorkspacePage } from "./pages/projects/[organization]/[project]/create" import { WorkspacePage } from "./pages/workspaces/[workspace]" +import { HealthzPage } from "./pages/healthz" export const App: React.FC = () => { return ( @@ -45,6 +46,7 @@ export const App: React.FC = () => { } /> } /> + } /> } /> diff --git a/site/src/pages/healthz.tsx b/site/src/pages/healthz.tsx new file mode 100644 index 0000000000..76b000e102 --- /dev/null +++ b/site/src/pages/healthz.tsx @@ -0,0 +1,8 @@ +import React from "react" + +/** + * HealthzPage is a page that is available without authentication that is used + * for reporting whether or not the Dashboard is online. It should be + * accessible by humans and services. + */ +export const HealthzPage: React.FC = () =>
ok