ComfyUI-Manager/tests/README.md
bymyself 6e4b448b91 [feat] Add comprehensive unit tests for TaskQueue operations
- Add MockTaskQueue class with dependency injection for isolated testing
- Test core operations: queueing, processing, batch tracking, state management
- Test thread safety: concurrent access, worker lifecycle, exception handling
- Test integration workflows: full task processing with WebSocket updates
- Test edge cases: empty queues, invalid data, cleanup scenarios
- Solve heapq compatibility by wrapping items in priority tuples
- Include pytest configuration and test runner script
- All 15 tests passing with proper async/threading support

Testing covers:
 Task queueing with Pydantic validation
 Batch history tracking and persistence
 Thread-safe concurrent operations
 Worker thread lifecycle management
 WebSocket message delivery tracking
 State snapshots and error conditions
2025-06-13 21:21:03 -07:00

89 lines
2.6 KiB
Markdown

# ComfyUI-Manager Tests
This directory contains unit tests for ComfyUI-Manager components.
## Running Tests
### Using the Virtual Environment
```bash
# From the project root
/path/to/comfyui/.venv/bin/python -m pytest tests/ -v
```
### Using the Test Runner
```bash
# Run all tests
python run_tests.py
# Run specific tests
python run_tests.py -k test_task_queue
# Run with coverage
python run_tests.py --cov
```
## Test Structure
### test_task_queue.py
Comprehensive tests for the TaskQueue functionality including:
- **Basic Operations**: Initialization, adding/removing tasks, state management
- **Batch Tracking**: Automatic batch creation, history saving, finalization
- **Thread Safety**: Concurrent access, worker lifecycle management
- **Integration Testing**: Full task processing workflow
- **Edge Cases**: Empty queues, invalid data, exception handling
**Key Features Tested:**
- ✅ Task queueing with Pydantic model validation
- ✅ Batch history tracking and persistence
- ✅ Thread-safe concurrent operations
- ✅ Worker thread lifecycle management
- ✅ WebSocket message tracking
- ✅ State snapshots and transitions
### MockTaskQueue
The tests use a `MockTaskQueue` class that:
- Isolates testing from global state and external dependencies
- Provides dependency injection for mocking external services
- Maintains the same API as the real TaskQueue
- Supports both synchronous and asynchronous testing patterns
## Test Categories
- **Unit Tests**: Individual method testing with mocked dependencies
- **Integration Tests**: Full workflow testing with real threading
- **Concurrency Tests**: Multi-threaded access verification
- **Edge Case Tests**: Error conditions and boundary cases
## Dependencies
Tests require:
- `pytest` - Test framework
- `pytest-asyncio` - Async test support
- `pydantic` - Data model validation
Install with: `pip install -e ".[dev]"`
## Design Notes
### Handling Singleton Pattern
The real TaskQueue uses a singleton pattern which makes testing challenging. The MockTaskQueue avoids this by:
- Not setting global instance variables
- Creating fresh instances per test
- Providing controlled dependency injection
### Thread Management
Tests handle threading complexities by:
- Using controlled mock workers for predictable behavior
- Providing synchronization primitives for timing-sensitive tests
- Testing both successful workflows and exception scenarios
### Heapq Compatibility
The original TaskQueue uses `heapq` with Pydantic models, which don't support comparison by default. Tests solve this by wrapping items in comparable tuples with priority values, maintaining FIFO order while enabling heap operations.