This repository has been archived on 2026-03-24. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Timmy-time-dashboard/tests/conftest_markers.py
Alexander Whitestone e5190b248a CI/CD Optimization: Guard Rails, Pre-commit Checks, and Test Fixes (#90)
* CI/CD Optimization: Guard Rails, Black Linting, and Pre-commit Hooks

- Fixed all test collection errors (Selenium imports, fixture paths, syntax)
- Implemented pre-commit hooks with Black formatting and isort
- Created comprehensive Makefile with test targets (unit, integration, functional, e2e)
- Added pytest.ini with marker definitions for test categorization
- Established guard rails to prevent future collection errors
- Wrapped optional dependencies (Selenium, MoviePy) in try-except blocks
- Added conftest_markers for automatic test categorization

This ensures a smooth development stream with:
- Fast feedback loops (pre-commit checks before push)
- Consistent code formatting (Black)
- Reliable CI/CD (no collection errors, proper test isolation)
- Clear test organization (unit, integration, functional, E2E)

* Fix CI/CD test failures:
- Export templates from dashboard.app
- Fix model name assertion in test_agent.py
- Fix platform-agnostic path resolution in test_path_resolution.py
- Skip Docker tests in test_docker_deployment.py if docker not available
- Fix test_model_fallback_chain logic in test_ollama_integration.py

* Add preventative pre-commit checks and Docker test skipif decorators:
- Create pre_commit_checks.py script for common CI failures
- Add skipif decorators to Docker tests
- Improve test robustness for CI environments
2026-02-28 11:36:50 -05:00

60 lines
2.2 KiB
Python

"""Pytest configuration for test markers and categorization.
This module registers pytest markers for test categorization without modifying
individual test files. All tests are automatically categorized based on their
location in the test directory structure.
"""
import pytest
def pytest_configure(config):
"""Register custom pytest markers."""
markers = [
"unit: Unit tests (fast, no I/O, no external services)",
"integration: Integration tests (may use SQLite, in-process agents)",
"functional: Functional tests (real HTTP requests, no mocking)",
"e2e: End-to-end tests (full system, may be slow)",
"slow: Tests that take >1 second",
"selenium: Requires Selenium and Chrome (browser automation)",
"docker: Requires Docker and docker-compose",
"ollama: Requires Ollama service running",
"external_api: Requires external API access",
"skip_ci: Skip in CI environment (local development only)",
]
for marker in markers:
config.addinivalue_line("markers", marker)
def pytest_collection_modifyitems(config, items):
"""Automatically assign markers to tests based on file location."""
for item in items:
test_path = str(item.fspath)
# Categorize based on directory
if "e2e" in test_path:
item.add_marker(pytest.mark.e2e)
item.add_marker(pytest.mark.slow)
elif "functional" in test_path:
item.add_marker(pytest.mark.functional)
elif "integration" in test_path:
item.add_marker(pytest.mark.integration)
else:
item.add_marker(pytest.mark.unit)
# Add additional markers based on test name/path
if "selenium" in test_path or "ui_" in item.name:
item.add_marker(pytest.mark.selenium)
item.add_marker(pytest.mark.skip_ci)
if "docker" in test_path:
item.add_marker(pytest.mark.docker)
item.add_marker(pytest.mark.skip_ci)
if "ollama" in test_path or "test_ollama" in item.name:
item.add_marker(pytest.mark.ollama)
# Mark slow tests
if "slow" in item.name:
item.add_marker(pytest.mark.slow)