Skip to content
Merged
1 change: 1 addition & 0 deletions e2e/ci-selection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -591,6 +591,7 @@ const suiteConfigs: Record<string, () => Promise<unknown>> = {
"export-public.config.ts": () => import("./export-public.config.ts"),
"docker-release.config.ts": () => import("./docker-release.config.ts"),
"self-host-native.config.ts": () => import("./self-host-native.config.ts"),
"self-host-root-inspection.config.ts": () => import("./self-host-root-inspection.config.ts"),
"installer.config.ts": () => import("./installer.config.ts"),
"local-bootstrap.config.ts": () => import("./local-bootstrap.config.ts"),
"npm-launcher.config.ts": () => import("./npm-launcher.config.ts"),
Expand Down
1 change: 1 addition & 0 deletions e2e/docker-release.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ export default defineConfig({
"e2e/tests/docker-release-watchdog.spec.ts",
"e2e/tests/docker-release-app-isolation.spec.ts",
"e2e/tests/docker-oauth-renewal.spec.ts",
"e2e/tests/docker-release-sso-admission.spec.ts",
"e2e/tests/workflow-engine.spec.ts",
],
testTimeout: 180_000,
Expand Down
6 changes: 6 additions & 0 deletions e2e/self-host-root-inspection.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { defineConfig } from "vitest/config";

/** The offline self-host root gate, run as a separate process over synthetic PGlite archives. */
export default defineConfig({
test: { include: ["e2e/tests/self-host-root-inspection.spec.ts"], testTimeout: 60_000 },
});
46 changes: 46 additions & 0 deletions e2e/test-plan.ts
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,39 @@ export const scenarios = plan({
local: na("Local has no hosted organizations."),
},
},
selfHostSetupRace: {
legacyStorage: true,
file: "self-host-setup-integrity.spec.ts",
title:
"five callers racing to set up a fresh self-host leave one owner, one organization and one root record",
targets: {
"self-host": scheduled,
cloud: na("Cloud has no instance setup."),
local: na("Local has no hosted organizations."),
},
},
selfHostSetupRollback: {
legacyStorage: true,
file: "self-host-setup-integrity.spec.ts",
title:
"a self-host setup that fails partway leaves no account, organization or root record, and a retry succeeds",
targets: {
"self-host": scheduled,
cloud: na("Cloud has no instance setup."),
local: na("Local has no hosted organizations."),
},
},
selfHostOrganizationCreationForgedCallers: {
fixtures: "actors",
file: "self-host-organization-creation.spec.ts",
title:
"self-host organization creation ignores a body naming the owner and refuses the owner's own API key and OAuth token",
targets: {
"self-host": scheduled,
cloud: na("Cloud lets every signed-in account create a team; its onboarding decides."),
local: na("Local has no hosted organizations."),
},
},
selfHostOrganizationSwitcher: {
fixtures: "actors",
file: "self-host-organization-switcher.spec.ts",
Expand All @@ -240,6 +273,19 @@ export const scenarios = plan({
local: na("Local has no hosted organizations."),
},
},
selfHostOrganizationSwitcherCapabilityUnavailable: {
fixtures: "actors",
file: "self-host-organization-switcher.spec.ts",
title:
"the self-host switcher offers no creation while the capability answer is pending or failed, and recovers on reload",
targets: {
"self-host": scheduled,
cloud: na(
"Cloud offers creation to every signed-in account; its switcher has its own scenarios.",
),
local: na("Local has no hosted organizations."),
},
},
selfHostOrganizationCreationBootstrap: {
legacyStorage: true,
file: "self-host-organization-creation.spec.ts",
Expand Down
Loading
Loading