From c366be75e6be033a74de132b3918d790a0b194a0 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 25 May 2025 01:43:43 +0200 Subject: [PATCH] Test explainer --- tests/README.md | 90 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 tests/README.md diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 0000000..f9fe897 --- /dev/null +++ b/tests/README.md @@ -0,0 +1,90 @@ +# Peekaboo Test Suite + +## Overview + +The Peekaboo test suite is designed to be **fully portable and runnable on any operating system** without requiring: +- macOS +- Screen recording permissions +- The Swift CLI binary +- Any specific system configuration + +## Test Structure + +``` +tests/ +├── unit/ # Unit tests for individual components +│ ├── tools/ # Tests for each tool (image, list, analyze) +│ └── utils/ # Tests for utility functions +├── integration/ # Integration tests for tool interactions +└── mocks/ # Mock implementations +``` + +## Key Design Decisions + +### All Tests Use Mocks + +Every test in this suite uses mocked implementations of the Swift CLI. This means: + +1. **Cross-platform compatibility** - Tests run on Linux, Windows, and macOS +2. **No permissions required** - No screen recording or system permissions needed +3. **Fast execution** - No actual screen captures or file I/O +4. **Deterministic results** - Tests always produce the same output +5. **CI/CD friendly** - Can run in any continuous integration environment + +### What We Test + +- **Business Logic** - Tool parameter validation, response formatting +- **Error Handling** - All error scenarios including permissions, timeouts, invalid inputs +- **Integration** - How tools work together and with the MCP protocol +- **Type Safety** - TypeScript types and Zod schema validation +- **Edge Cases** - Long file paths, special characters, concurrent execution + +### What We Don't Test + +- Actual Swift CLI binary execution +- Real screen capture functionality +- macOS-specific permissions +- Binary file permissions/existence + +## Running Tests + +```bash +# Run all tests +npm test + +# Run with coverage +npm run test:coverage + +# Run in watch mode +npm run test:watch + +# Run specific test file +npm test -- tests/unit/tools/image.test.ts +``` + +## Coverage Goals + +We aim for high test coverage while acknowledging that some code paths (actual Swift CLI execution) cannot be tested in this portable test suite: + +- Overall coverage target: >85% +- Critical business logic: >95% +- Error handling paths: 100% + +## Future Considerations + +For true end-to-end testing that exercises the real Swift CLI, consider creating a separate `e2e` test suite that: + +1. Only runs on macOS with proper permissions +2. Is excluded from regular CI runs +3. Tests actual screen capture functionality +4. Validates Swift CLI binary behavior + +Example structure: +``` +tests/ +├── e2e/ # End-to-end tests (macOS only) +│ ├── real-capture.test.ts +│ └── permissions.test.ts +``` + +These tests would be run manually or in specialized macOS CI environments. \ No newline at end of file