maCopy/.cursor/rules/testing.mdc
ilia 80a6c01cdb Fix cursor positioning, resize, and paste; add App tests and Cursor rules
- Use CoreGraphics (core-graphics crate) for global mouse position instead
  of Tauri's window-relative cursor_position() which fails when hidden
- Switch to titleBarStyle overlay with hiddenTitle for native resize handles
  while keeping the frameless look (decorations:false had no resize affordance)
- Fix paste_and_refocus: use .output() instead of .spawn() so osascript
  actually completes, increase delay to 250ms for reliable app refocus
- Add comprehensive App.test.tsx (7 integration tests) bringing total to 47
- Add multi-select and type badge tests for ClipboardList and ContextMenu
- Update Tauri mock in setup.ts with innerSize/scaleFactor for resize tests
- Create .cursor/rules/ with 4 rule files for project conventions
- Add npm run lint and npm run check scripts
- Update README with full usage table and current test counts (74 total)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-12 14:15:42 -04:00

30 lines
968 B
Plaintext

---
description: Testing conventions for Rust and TypeScript
globs: "**/*.test.{ts,tsx}"
alwaysApply: false
---
# Testing Conventions
## Rust Tests (cargo test)
- In-module `#[cfg(test)]` blocks using `Database::in_memory()`
- Test naming: `snake_case` describing behavior (e.g. `trim_preserves_pinned_entries`)
- All tests must pass before committing: `cd src-tauri && cargo test`
## Frontend Tests (Vitest)
- Use `@testing-library/react` with `jsdom` environment
- Mock Tauri APIs in `src/test/setup.ts` — never call real IPC in tests
- Use `makeEntry()` and `makeSettings()` factories for test data
- Call `resetIdCounter()` in `beforeEach` when IDs matter
- When testing async Tauri commands, use `waitFor()` assertions
- Guard `scrollIntoView` with optional chaining (`el?.scrollIntoView?.()`) since jsdom doesn't implement it
## Running Tests
```bash
cd src-tauri && cargo test # Rust: 27 tests
npx vitest run # Frontend: 47 tests
```