Files
MajoorWaldi-ComfyUI-Majoor-…/tests/README.md
T
2026-04-05 20:37:19 +02:00

184 lines
3.8 KiB
Markdown

# Tests - Majoor Assets Manager
Test suite for ComfyUI-Majoor-AssetsManager.
---
## Test Structure
```
tests/
├── conftest.py # Pytest fixtures & shared setup
├── README.md # Test documentation
├── run_tests_all.bat # Windows full-suite runner
├── __init__.py
├── assets/ # Asset fixtures and media samples
├── compat/ # Backward-compatibility coverage
├── config/ # Configuration tests and runner
├── core/ # Core route and path helpers
├── database/ # Schema and SQLite behavior
├── features/ # Main feature, service, and route coverage
├── metadata/ # Metadata extraction coverage
├── parser/ # Parser-focused regression samples
├── quality/ # Quality-gate tests
├── rating_tags/ # Ratings, tags, and sync behavior
├── regressions/ # Targeted regression coverage
├── routes/ # Route-level scenarios
└── security/ # Security-specific tests
```
---
## Running Tests
### All tests (Windows)
Double-click `run_tests.bat` in the project root, or:
```bash
cd ComfyUI/custom_nodes/ComfyUI-Majoor-AssetsManager
python -m pytest tests/ -q
```
### Single test file
```bash
python -m pytest tests/core/test_routes.py -v
```
### Single folder
```bash
python -m pytest tests/metadata/ -v
```
### Single test function
```bash
python -m pytest tests/core/test_routes.py::test_routes -v
```
### With coverage
```bash
pytest tests/ --cov=mjr_am_backend --cov=mjr_am_shared --cov-report=html
```
---
## Test Categories
### `core/` - Core functionality
- Result pattern (Ok/Err)
- IndexService scan/search
- FTS5 full-text search
- API route handlers
- End-to-end integration
### `metadata/` - Metadata extraction
- ExifTool/FFprobe extraction
- PNG/WEBP/video generation info
- Workflow JSON parsing
- Quality score calculations
### `rating_tags/` - Ratings & tags
- Rating/tag extraction from files
- OS file sync
- Import operations
### `assets/` - Assets & search
- Batch operations
- Delete operations
- FTS5 search
- Staging deduplication
### `database/` - Database & schema
- Schema migration/healing
- SQLite query patterns
- Geninfo self-healing
### `config/` - Config & security
- CSRF protection
- Origin validation
- Rate limiting
- Path traversal prevention
- Settings persistence
### `features/` - Feature tests
- Collections CRUD
- Multi-file ZIP export
- Date histogram
- Viewer grid masks
### `regressions/` - Regression tests
- Audit issue fixes
- Scan batching regressions
- Logging system
---
## Writing Tests
### Test isolation
Each test should be independent using in-memory databases:
```python
@pytest.mark.asyncio
async def test_example():
db = Sqlite(":memory:")
await migrate_schema(db)
# ... test logic
await db.aclose()
```
### Result pattern
Always verify the Result pattern:
```python
def test_service_result():
result = service.do_something()
assert isinstance(result, Result)
if result.ok:
assert result.data is not None
else:
assert result.error is not None
```
### Mock external tools
Don't depend on ExifTool/FFprobe availability:
```python
class MockExifTool:
def is_available(self):
return False
```
---
## Fixtures
Common fixtures are defined in `conftest.py`:
- `test_db` - In-memory SQLite with schema
- `temp_dir` - Temporary directory for test files
- `mock_exiftool` - Mocked ExifTool adapter
---
## Resources
- [pytest docs](https://docs.pytest.org/)
- [Coverage.py](https://coverage.readthedocs.io/)
---
Last updated: April 5, 2026