maCopy/docs/TESTING.md
ilia 656045c4b4
All checks were successful
CI / skip-ci-check (pull_request) Successful in 9s
CI / secret-scan (pull_request) Successful in 8s
CI / node-ci (pull_request) Successful in 26s
Capture oversized screenshots instead of dropping them.
Retina clipboard images over the RGBA size cap were silently skipped; downscale and store a thumbnail so they still appear in history, with regression tests.
2026-07-19 11:14:19 -04:00

2.7 KiB

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.): ~60 frontend + ~65 Rust unit tests.

What is covered

Frontend (src/**/*.test.tsx, transforms.test.ts)

  • App: load entries, paste invoke, delete via keyboard
  • 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, 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)
  • 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
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