Files
AgentCompany/tests/e2e/screenshots.spec.ts
T
ZacharyZhang-NY 2d43950123 Read skills from the global and workspace .agents/skills directories
- Discover skill directories under ~/.agents/skills and each
  workspace''s .agents/skills; a directory qualifies with a full
  skill.manifest.json or just a SKILL.md, whose manifest is derived
  (frontmatter name or the directory name). Paths resolve per platform
  on Windows, macOS, and Linux.
- Sync at startup for every organization and again when the Skills
  page opens; skills the org already carries are skipped, and one
  broken directory cannot block the rest.
- AGENTCOMPANY_NEW_SKILLS_ROOT points tests at a temporary library
  (overriding USERPROFILE crashes Electron on Windows).
2026-07-07 01:21:33 -04:00

82 lines
3.6 KiB
TypeScript

import { _electron as electron, expect, test, type Page } from "@playwright/test";
import { mkdirSync } from "node:fs";
import { tmpdir } from "node:os";
import { join, resolve } from "node:path";
import { randomUUID } from "node:crypto";
test("captures every page for visual review", async () => {
const profileDir = join(tmpdir(), `agentcompany-new-shots-${randomUUID()}`);
mkdirSync(profileDir, { recursive: true });
const app = await electron.launch({
args: [resolve("out/main/index.js")],
env: {
...process.env,
AGENTCOMPANY_NEW_PROFILE_DIR: profileDir,
AGENTCOMPANY_NEW_AUTORUN: "0",
AGENTCOMPANY_NEW_SKILLS_ROOT: join(profileDir, "skills-root"),
},
});
const outDir = resolve("test-results/screenshots");
mkdirSync(outDir, { recursive: true });
try {
const page = await app.firstWindow();
await page.setViewportSize({ width: 1440, height: 900 });
await page.screenshot({ path: join(outDir, "00-onboarding-welcome.png"), fullPage: false });
await page.getByRole("button", { name: "Get started" }).click();
await page.screenshot({ path: join(outDir, "01-onboarding-provider.png"), fullPage: false });
await page.getByLabel("API key").fill("local-dev-key");
await page.getByLabel("Model").fill("gpt-5.4");
await page.getByRole("button", { name: "Continue" }).click();
await page.getByLabel("Company name").fill("OrbitOps");
await page.getByLabel("Your name").fill("Yu Chen");
await page.getByLabel("Description").fill("Multi-agent operations platform.");
await page.screenshot({ path: join(outDir, "02-onboarding-company.png"), fullPage: false });
await page.getByRole("button", { name: "Continue" }).click();
await page.screenshot({ path: join(outDir, "03-onboarding-mode.png"), fullPage: false });
await page.getByRole("button", { name: "Continue" }).click();
await page.getByLabel("Goal").fill("Ship the v1 launch by July.");
await page.getByLabel("Acceptance criteria").fill("Pricing model + landing page + 3 pilot signups.");
await page.screenshot({ path: join(outDir, "04-onboarding-goal.png"), fullPage: false });
await page.getByRole("button", { name: "Launch" }).click();
await expect(page.getByRole("button", { name: /OrbitOps/ })).toBeVisible();
await snap(page, outDir, "10-home");
await go(page, "Team", outDir, "11-team");
await go(page, "Work", outDir, "12-work");
await go(page, "Messages", outDir, "13-messages");
await go(page, "Files", outDir, "14-files");
await go(page, "Approvals", outDir, "15-approvals");
await go(page, "Connectors", outDir, "16-connectors");
await go(page, "Settings", outDir, "17-settings");
await go(page, "Office", outDir, "18-office");
for (const tab of ["General", "Providers", "Skills", "Advanced"]) {
await page.getByRole("button", { name: "Settings" }).click();
await page.getByRole("button", { name: tab }).first().click();
await snap(page, outDir, `settings-${tab.toLowerCase()}`);
}
await page.setViewportSize({ width: 980, height: 700 });
await go(page, "Home", outDir, "20-narrow-home");
await go(page, "Messages", outDir, "21-narrow-messages");
await go(page, "Files", outDir, "22-narrow-files");
} finally {
await app.close();
}
});
async function go(page: Page, nav: string, dir: string, name: string): Promise<void> {
await page.getByRole("button", { name: nav, exact: true }).click();
await snap(page, dir, name);
}
async function snap(page: Page, dir: string, name: string): Promise<void> {
await page.waitForTimeout(120);
await page.screenshot({ path: join(dir, `${name}.png`), fullPage: false });
}