Files
maCopy/docs/TESTING.md
T
ilia 43d0582804 Fix FTS search for path punctuation like /idobkin.
Sanitize MATCH tokens so slash/dot queries no longer error and leave a stale full history list; clear the UI on search failure.
2026-08-11 09:51:43 -04:00

62 lines
2.8 KiB
Markdown

# Testing
maCopy has an automated suite. There is no separate “live” Storybook/UI docs site yet — product behavior is documented in README / ROADMAP, and verified by tests.
## Commands
| Command | What it runs |
|---|---|
| `npm test` | Frontend (Vitest + Testing Library, jsdom — CI default) |
| `npm run test:ui` | Same tests in the Vitest UI (open in your browser) |
| `npm run test:headed` | Unit tests in Chromium — still mostly a flash (DOM mount/unmount) |
| `npm run test:visual` | **Watchable** headed Playwright walkthrough of the real UI (`visual.html`) |
| `npm run test:watch` | Frontend in watch mode |
| `npm run test:rust` | Rust unit tests (`cargo test`) |
| `npm run test:all` | Frontend + Rust |
| `npm run lint` | TypeScript `tsc --noEmit` |
| `npm run check` | Lint + all tests (CI-style gate) |
Current counts (approx.): **~72 frontend** + **~67 Rust** unit tests.
## What is covered
### Frontend (`src/**/*.test.tsx`, `transforms.test.ts`)
- App: load entries, paste invoke, delete via keyboard, **search invoke + clear on search failure**
- ClipboardList: selection, multi-select modifiers, image stubs/thumbs (including truncated thumb previews), Alt=plain paste
- ContextMenu: Paste / Paste plain / transforms / Pin / Delete
- SettingsPanel: toggles, history limit, hotkey recorder, **Launch at login → autostart enable**
- SearchBar basics
- Transforms: plain text strip, JSON pretty, collapse / oneline
Tauri APIs are mocked in `src/test/setup.ts` (invoke, window, events, clipboard, autostart).
### Backend (`src-tauri/src/**` `#[cfg(test)]`)
- SQLite CRUD, FTS5 (incl. `/path` / `github.com` punctuation), trim + pin preservation, settings
- List previews: truncate text, omit image blobs, return thumbnails (including stub `[image WxH]` rows)
- Search excludes image rows (text-only FTS); App clears the list if search IPC fails
- Sensitive redaction (card / password / banking) while `get_entry` stays full
- Hotkey parser (`cmd+\`` etc.)
- Image thumbnail / PNG helpers + `fit_rgba_under_bytes` against production `MAX_IMAGE_BYTES`
- **Oversized / Retina screenshot prepare** — never skip; downscale + thumb + DB list preview
- Clipboard content hashing fingerprints
## What is *not* covered (yet)
- End-to-end UI on a real Mac (no Playwright against the Tauri window)
- Live pasteboard polling (requires macOS Accessibility / real `NSPasteboard`)
- Accessibility permission / AppleScript paste in CI
- Notarized release smoke tests
- Performance benchmarks in CI
- Prefer-image-when-text-also-present (poller text-wins path)
- Exclude-apps / pause-monitoring integration
## Recommended workflow
```bash
npm run check # before every PR / commit
npm run tauri dev # manual smoke: hotkey, paste, redaction, thumbs
npm run tauri build # release .app when testing Login Items / signing
```