SPB Git

Repository Public

shots.spec.ts 4.4 KB 99 lines typescript

1import { expect, test } from '@playwright/test';2import { FIX, mission, reveal, seeded, setTheme, shot } from './helpers';34/** Desktop screenshots (1440×900), light and dark, of the seeded fixture state. Reviewed by eye. */5for (const theme of ['light', 'dark'] as const) {6  test.describe(`desktop screenshots — ${theme}`, () => {7    test.beforeEach(async ({ page }) => {8      await seeded(page);9      await setTheme(page, theme);10    });11    const settle = (page: import('@playwright/test').Page) => page.waitForTimeout(700);1213    test('home', async ({ page }) => {14      await page.goto('/home/');15      await expect(page.getByTestId('needs-you').getByTestId('wait-card')).toHaveCount(2);16      await expect(page.getByTestId('health-worker')).toHaveAttribute('data-ok', 'true');17      await settle(page);18      await shot(page, `desktop-home-${theme}`);19    });20    test('mission detail with an expanded diff', async ({ page }) => {21      const m = await mission(page, FIX.done);22      await page.goto(`/mission/?id=${m.id}`);23      await expect(page.getByTestId('run-result')).toBeVisible();24      const edit = page.locator('[data-testid="tool-row"][data-tool="edit_file"]').first();25      await reveal(page, edit);26      await page.getByTestId('timeline-scroll').evaluate((el) => { el.scrollTop -= 190; });27      await expect(edit.getByTestId('diff-view')).toBeVisible();28      await settle(page);29      await shot(page, `desktop-mission-${theme}`);30      // the tail: shell block, approval outcome, result31      const shell = page.locator('[data-testid="tool-row"][data-tool="shell"]');32      await reveal(page, shell);33      await shell.getByRole('button').first().click();34      await shell.scrollIntoViewIfNeeded();35      await settle(page);36      await shot(page, `desktop-mission-shell-${theme}`);37    });38    test('mission waiting on an approval (live)', async ({ page }) => {39      const m = await mission(page, FIX.approval);40      await page.goto(`/mission/?id=${m.id}`);41      await expect(page.getByTestId('timeline-wait').getByTestId('wait-approve')).toBeVisible();42      await settle(page);43      await shot(page, `desktop-mission-waiting-${theme}`);44    });45    test('approvals', async ({ page }) => {46      await page.goto('/approvals/');47      await expect(page.getByTestId('wait-card')).toHaveCount(2);48      await settle(page);49      await shot(page, `desktop-approvals-${theme}`);50    });51    test('spend', async ({ page }) => {52      await page.goto('/spend/');53      await expect(page.getByTestId('week-bar')).toHaveCount(7);54      await settle(page);55      await shot(page, `desktop-spend-${theme}`);56    });57    test('settings', async ({ page }) => {58      await page.goto('/settings/');59      await expect(page.getByTestId('settings')).toBeVisible();60      await settle(page);61      await shot(page, `desktop-settings-${theme}`);62    });63    test('missions, new mission dialog, policy', async ({ page }) => {64      await page.goto('/missions/');65      await expect(page.getByTestId('mission-row')).toHaveCount(6);66      await expect(page.getByTestId('mission-row').first()).toContainText('Claude');67      await settle(page);68      await shot(page, `desktop-missions-${theme}`);69      await page.getByTestId('new-mission').click();70      await page.getByTestId('mission-objective').fill('Some invoice totals are off by one cent. Find the cause, fix it with a regression test and commit.');71      await expect(page.getByTestId('model-picker')).toBeVisible();72      await settle(page);73      await shot(page, `desktop-new-mission-${theme}`);74      await page.keyboard.press('Escape');75      await page.goto('/policy/');76      await expect(page.getByTestId('rule-row')).toHaveCount(2);77      await settle(page);78      await shot(page, `desktop-policy-${theme}`);79    });80  });81}8283test('system, projects, login (light)', async ({ page }) => {84  await seeded(page);85  await page.goto('/system/');86  await expect(page.getByTestId('system-models')).toBeVisible();87  await page.waitForTimeout(500);88  await shot(page, 'desktop-system-light');89  await page.goto('/projects/');90  await expect(page.getByTestId('project-card')).toHaveCount(2);91  await page.waitForTimeout(400);92  await shot(page, 'desktop-projects-light');93  await page.context().clearCookies();94  await page.goto('/login/');95  await expect(page.getByTestId('login-submit')).toBeVisible();96  await page.waitForTimeout(500);97  await shot(page, 'desktop-login-light');98});99
Files main
Menu

Theme