- 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>
30 lines
968 B
Plaintext
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
|
|
```
|