test: drop screenshot suite (preview), keep gate-bypass infra
Per tho: don't add the screenshot test suite to this PR — it's not a common path elsewhere yet, and the dedicated config / CI step / 12 PNGs go with it. Removed: - desktop/playwright-screenshot.config.ts - desktop/tests/e2e/screenshot-feature-flags.ts - 12 screenshot PNGs under desktop/tests/e2e/screenshots/ - the Desktop screenshot e2e step from .github/workflows/ci.yml Kept (genuine test infra, not a 'test addition' in tho's sense): - bridge.ts seedPreviewFeatures option — preview features default-on in E2E so existing smoke specs (workflows.spec.ts etc.) can still reach preview-gated entry points - tests/helpers/features.ts — single SoT for the seeding's preview ID list, derived from preview-features.json - src/shared/features/resolveEnabled.test.mjs — unit coverage for code this PR added Updated stale doc comment in bridge.ts that referenced the removed spec by name. Signed-off-by: npub1223z34hd7vtwc6qj4s7flsxkj644nlre2nthu7lrrmkumhu3xddsrx9r6w <52a228d6edf316ec6812ac3c9fc0d696ab59fc7954d77e7be31eedcddf91335b@sprout-oss.stage.blox.sqprod.co>
2
.github/workflows/ci.yml
vendored
@@ -170,8 +170,6 @@ jobs:
|
||||
run: just desktop-build
|
||||
- name: Desktop smoke e2e
|
||||
run: cd desktop && pnpm exec playwright test --project=smoke
|
||||
- name: Desktop screenshot e2e
|
||||
run: cd desktop && pnpm exec playwright test --config=playwright-screenshot.config.ts
|
||||
- name: Desktop Tauri check
|
||||
run: just desktop-tauri-check
|
||||
env:
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
import { defineConfig, devices } from "@playwright/test";
|
||||
|
||||
export default defineConfig({
|
||||
testDir: "./tests/e2e",
|
||||
timeout: 30_000,
|
||||
retries: 0,
|
||||
workers: 1,
|
||||
reporter: [["list"]],
|
||||
use: {
|
||||
baseURL: "http://127.0.0.1:4173",
|
||||
screenshot: "off",
|
||||
trace: "off",
|
||||
},
|
||||
projects: [
|
||||
{
|
||||
name: "screenshot",
|
||||
testMatch: ["**/screenshot-*.ts"],
|
||||
use: { ...devices["Desktop Chrome"] },
|
||||
},
|
||||
],
|
||||
webServer: {
|
||||
command: "python3 -m http.server 4173 -d dist",
|
||||
cwd: ".",
|
||||
reuseExistingServer: true,
|
||||
url: "http://127.0.0.1:4173",
|
||||
},
|
||||
});
|
||||
@@ -1,167 +0,0 @@
|
||||
import { expect, test } from "@playwright/test";
|
||||
import { installMockBridge } from "../helpers/bridge";
|
||||
import { openSettings } from "../helpers/settings";
|
||||
import { PREVIEW_FEATURE_IDS } from "../helpers/features";
|
||||
|
||||
const WATERCOLOR_CHANNEL_ID = "a27e1ee9-76a6-5bdf-a5d5-1d85610dad11";
|
||||
const FORUM_POST_ID = "mock-forum-release-thread";
|
||||
|
||||
test.beforeEach(async ({ page }) => {
|
||||
// This spec exercises the Experiments toggle flow itself (each preview
|
||||
// feature is enabled via the settings UI), so don't pre-seed overrides.
|
||||
await installMockBridge(page, undefined, { seedPreviewFeatures: false });
|
||||
});
|
||||
|
||||
// Helper: enable a preview feature via settings, then close settings
|
||||
async function enableFeature(
|
||||
page: import("@playwright/test").Page,
|
||||
featureId: string,
|
||||
) {
|
||||
await openSettings(page);
|
||||
await page.getByTestId("settings-nav-experimental").click();
|
||||
await expect(page.getByTestId("settings-experimental")).toBeVisible();
|
||||
await page.getByTestId(`feature-toggle-${featureId}`).click();
|
||||
await page.waitForTimeout(200);
|
||||
await page.getByTestId("settings-back-to-app").click();
|
||||
await page.waitForTimeout(300);
|
||||
}
|
||||
|
||||
// --- Stable features (settings panels, always visible) ---
|
||||
|
||||
test("screenshot: Settings → Agents (stable)", async ({ page }) => {
|
||||
await page.goto("/");
|
||||
await openSettings(page, "agents");
|
||||
await page.waitForTimeout(500);
|
||||
const view = page.getByTestId("settings-view");
|
||||
await view.screenshot({ path: "tests/e2e/screenshots/settings-agents.png" });
|
||||
});
|
||||
|
||||
test("screenshot: Settings → Templates (stable)", async ({ page }) => {
|
||||
await page.goto("/");
|
||||
await openSettings(page, "channel-templates");
|
||||
await page.waitForTimeout(500);
|
||||
const view = page.getByTestId("settings-view");
|
||||
await view.screenshot({
|
||||
path: "tests/e2e/screenshots/settings-templates.png",
|
||||
});
|
||||
});
|
||||
|
||||
test("screenshot: Settings → Custom Emoji (stable)", async ({ page }) => {
|
||||
await page.goto("/");
|
||||
await openSettings(page);
|
||||
await page.getByTestId("settings-nav-custom-emoji").click();
|
||||
await page.waitForTimeout(500);
|
||||
const view = page.getByTestId("settings-view");
|
||||
await view.screenshot({
|
||||
path: "tests/e2e/screenshots/settings-custom-emoji.png",
|
||||
});
|
||||
});
|
||||
|
||||
test("screenshot: Settings → Doctor (stable)", async ({ page }) => {
|
||||
await page.goto("/");
|
||||
await openSettings(page, "doctor");
|
||||
await page.waitForTimeout(500);
|
||||
const view = page.getByTestId("settings-view");
|
||||
await view.screenshot({ path: "tests/e2e/screenshots/settings-doctor.png" });
|
||||
});
|
||||
|
||||
// --- Preview features (opt-in via Experiments) ---
|
||||
|
||||
test("screenshot: Workflows view (preview)", async ({ page }) => {
|
||||
await page.goto("/");
|
||||
await enableFeature(page, "workflows");
|
||||
await page.getByTestId("open-workflows-view").click();
|
||||
await page.waitForTimeout(500);
|
||||
await page.screenshot({
|
||||
path: "tests/e2e/screenshots/view-workflows.png",
|
||||
fullPage: false,
|
||||
});
|
||||
});
|
||||
|
||||
test("screenshot: Projects view (preview)", async ({ page }) => {
|
||||
await page.goto("/");
|
||||
await enableFeature(page, "projects");
|
||||
await page.getByTestId("open-projects-view").click();
|
||||
await page.waitForTimeout(500);
|
||||
await page.screenshot({
|
||||
path: "tests/e2e/screenshots/view-projects.png",
|
||||
fullPage: false,
|
||||
});
|
||||
});
|
||||
|
||||
test("screenshot: Pulse view (preview)", async ({ page }) => {
|
||||
await page.goto("/");
|
||||
await enableFeature(page, "pulse");
|
||||
await page.getByTestId("open-pulse-view").click();
|
||||
await page.waitForTimeout(500);
|
||||
await page.screenshot({
|
||||
path: "tests/e2e/screenshots/view-pulse.png",
|
||||
fullPage: false,
|
||||
});
|
||||
});
|
||||
|
||||
test("screenshot: Forum post list (preview)", async ({ page }) => {
|
||||
await page.goto("/");
|
||||
await enableFeature(page, "forum");
|
||||
await page.goto(`/#/channels/${WATERCOLOR_CHANNEL_ID}`);
|
||||
await expect(
|
||||
page.getByText("Release checklist: async feedback thread."),
|
||||
).toBeVisible();
|
||||
await page.waitForTimeout(500);
|
||||
await page.screenshot({
|
||||
path: "tests/e2e/screenshots/view-forum-posts.png",
|
||||
fullPage: false,
|
||||
});
|
||||
});
|
||||
|
||||
test("screenshot: Forum with active thread (preview)", async ({ page }) => {
|
||||
await page.goto("/");
|
||||
await enableFeature(page, "forum");
|
||||
await page.goto(
|
||||
`/#/channels/${WATERCOLOR_CHANNEL_ID}/posts/${FORUM_POST_ID}`,
|
||||
);
|
||||
await expect(page.getByTestId("chat-title")).toHaveText("watercooler");
|
||||
await page.waitForTimeout(600);
|
||||
await page.screenshot({
|
||||
path: "tests/e2e/screenshots/view-forum-thread.png",
|
||||
fullPage: false,
|
||||
});
|
||||
});
|
||||
|
||||
test("screenshot: Settings → Compute (stable)", async ({ page }) => {
|
||||
await page.goto("/");
|
||||
await openSettings(page);
|
||||
await page.getByTestId("settings-nav-compute").click();
|
||||
await page.waitForTimeout(500);
|
||||
const view = page.getByTestId("settings-view");
|
||||
await view.screenshot({ path: "tests/e2e/screenshots/settings-compute.png" });
|
||||
});
|
||||
|
||||
// --- Experiments panel ---
|
||||
|
||||
test("screenshot: Settings → Experiments (default)", async ({ page }) => {
|
||||
await page.goto("/");
|
||||
await openSettings(page);
|
||||
await page.getByTestId("settings-nav-experimental").click();
|
||||
await expect(page.getByTestId("settings-experimental")).toBeVisible();
|
||||
await page.waitForTimeout(500);
|
||||
const view = page.getByTestId("settings-view");
|
||||
await view.screenshot({
|
||||
path: "tests/e2e/screenshots/settings-experiments-default.png",
|
||||
});
|
||||
});
|
||||
|
||||
test("screenshot: Settings → Experiments (all on)", async ({ page }) => {
|
||||
await page.goto("/");
|
||||
await openSettings(page);
|
||||
await page.getByTestId("settings-nav-experimental").click();
|
||||
await expect(page.getByTestId("settings-experimental")).toBeVisible();
|
||||
for (const id of PREVIEW_FEATURE_IDS) {
|
||||
await page.getByTestId(`feature-toggle-${id}`).click();
|
||||
}
|
||||
await page.waitForTimeout(500);
|
||||
const view = page.getByTestId("settings-view");
|
||||
await view.screenshot({
|
||||
path: "tests/e2e/screenshots/settings-experiments-all-on.png",
|
||||
});
|
||||
});
|
||||
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 40 KiB |
@@ -102,8 +102,7 @@ type BridgeOptions = {
|
||||
* When true (default), seed every preview feature in preview-features.json as
|
||||
* enabled in localStorage so E2E tests can interact with gated UI without
|
||||
* clicking through the Experiments settings panel. Set to false in specs
|
||||
* that test the toggle behavior itself (e.g.
|
||||
* `screenshot-feature-flags.ts`).
|
||||
* that exercise the Experiments toggle UI itself.
|
||||
*/
|
||||
seedPreviewFeatures?: boolean;
|
||||
user?: keyof typeof TEST_IDENTITIES;
|
||||
|
||||