Files
inkling/tests/e2e/smoke.spec.ts
altair823 2d90a48621 feat(copy): replace '기억 구출' framing with 표면별 자연 동사 + Zeigarnik priming
F3: '구출' (rescue) is unnatural everyday Korean. Replace per-surface:
  - 트레이 '구출한 메모 보기' → '보관한 메모 보기'
  - 트레이 '기억 구출하기' → '한 줄 적기'
  - 토스트 #2 → '머릿속에서 꺼내 두었습니다.'
  - 토스트 #3 → '방금 한 줄 잡아뒀습니다.'
  - QC 힌트 'Ctrl+Enter 구출' → 'Ctrl+Enter 저장'
  - package.json description → 'local-first 한 줄 보관 도구'

F4-E (Zeigarnik priming): empty state copy reframed to evoke the
"unfinished thought tugging at memory" → "외재화로 해소" loop:
  - '첫 기억을 구출해보세요.' → '머릿속에 떠다니는 한 줄을 적어보세요.'

E2E smoke assertion updated to match. Slice §1.1 invariant 5
('실패/끊김/연속 실패' 금지) preserved.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 11:29:31 +09:00

32 lines
1.3 KiB
TypeScript

import { test, expect, _electron as electron } from '@playwright/test';
import { resolve } from 'node:path';
test('inbox shell shows v0.2 empty state', async () => {
// Strip ELECTRON_RUN_AS_NODE if it leaked in from the parent process
// (some harnesses set it for native-module rebuild and forget to clear it).
// When set, Electron's main-process module hook is skipped and require('electron')
// returns only the binary path, so app.whenReady is undefined.
const env: Record<string, string> = {};
for (const [k, v] of Object.entries(process.env)) {
if (k === 'ELECTRON_RUN_AS_NODE') continue;
if (typeof v === 'string') env[k] = v;
}
env.INKLING_DEBUG = '1';
const app = await electron.launch({
args: [resolve('out/main/index.js')],
env
});
const first = await app.firstWindow();
// Both the inbox and quickcapture windows are created at startup;
// firstWindow() may pick either, so select by title.
await new Promise((r) => setTimeout(r, 500));
let inbox = first;
for (const w of app.windows()) {
if ((await w.title()) === 'Inkling') { inbox = w; break; }
}
await inbox.waitForLoadState('load');
await expect(inbox.getByRole('heading', { name: 'Inkling' })).toBeVisible();
await expect(inbox.getByText('머릿속에 떠다니는 한 줄을 적어보세요.')).toBeVisible();
await app.close();
});