diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index bf1a35a..a9d5455 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -7,8 +7,8 @@ on: branches: [ main ] jobs: - test-api: - name: API Tests + test: + name: Run Test Suite runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -17,41 +17,5 @@ jobs: version: "latest" - run: uv python install 3.13 - run: uv sync - - run: uv run pytest tests/test_api.py -v --tb=short - - test-edge-cases: - name: Edge Case Tests - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: astral-sh/setup-uv@v5 - with: - version: "latest" - - run: uv python install 3.13 - - run: uv sync - - run: uv run pytest tests/test_edge_cases.py -v --tb=short - - test-web-routes: - name: Web Route Tests - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: astral-sh/setup-uv@v5 - with: - version: "latest" - - run: uv python install 3.13 - - run: uv sync - - run: uv run pytest tests/test_web_routes.py -v --tb=short - - lint: - name: Code Quality - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: astral-sh/setup-uv@v5 - with: - version: "latest" - - run: uv python install 3.13 - - run: uv sync - - run: uv run ruff check . || echo "Ruff not configured, skipping" - continue-on-error: true + - name: Run tests in parallel + run: uv run pytest tests/ -n auto -v --tb=short diff --git a/pyproject.toml b/pyproject.toml index 47fd2d5..8703969 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,6 +12,7 @@ dependencies = [ "parse>=1.20.2", "pytest>=8.3.5", "pytest-cov>=6.0.0", + "pytest-xdist>=3.5.0", "python-gedcom>=1.0.0", "requests>=2.32.3", "uvicorn>=0.34.2", diff --git a/uv.lock b/uv.lock index 93f3e69..0da4f2a 100644 --- a/uv.lock +++ b/uv.lock @@ -186,6 +186,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d7/ee/bf0adb559ad3c786f12bcbc9296b3f5675f529199bef03e2df281fa1fadb/email_validator-2.2.0-py3-none-any.whl", hash = "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631", size = 33521, upload-time = "2024-06-20T11:30:28.248Z" }, ] +[[package]] +name = "execnet" +version = "2.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/89/780e11f9588d9e7128a3f87788354c7946a9cbb1401ad38a48c4db9a4f07/execnet-2.1.2.tar.gz", hash = "sha256:63d83bfdd9a23e35b9c6a3261412324f964c2ec8dcd8d3c6916ee9373e0befcd", size = 166622, upload-time = "2025-11-12T09:56:37.75Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ab/84/02fc1827e8cdded4aa65baef11296a9bbe595c474f0d6d758af082d849fd/execnet-2.1.2-py3-none-any.whl", hash = "sha256:67fba928dd5a544b783f6056f449e5e3931a5c378b128bc18501f7ea79e296ec", size = 40708, upload-time = "2025-11-12T09:56:36.333Z" }, +] + [[package]] name = "fastapi" version = "0.115.12" @@ -336,6 +345,7 @@ dependencies = [ { name = "parse" }, { name = "pytest" }, { name = "pytest-cov" }, + { name = "pytest-xdist" }, { name = "python-gedcom" }, { name = "requests" }, { name = "uvicorn" }, @@ -350,6 +360,7 @@ requires-dist = [ { name = "parse", specifier = ">=1.20.2" }, { name = "pytest", specifier = ">=8.3.5" }, { name = "pytest-cov", specifier = ">=6.0.0" }, + { name = "pytest-xdist", specifier = ">=3.5.0" }, { name = "python-gedcom", specifier = ">=1.0.0" }, { name = "requests", specifier = ">=2.32.3" }, { name = "uvicorn", specifier = ">=0.34.2" }, @@ -518,6 +529,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl", hash = "sha256:3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861", size = 22424, upload-time = "2025-09-09T10:57:00.695Z" }, ] +[[package]] +name = "pytest-xdist" +version = "3.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "execnet" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/b4/439b179d1ff526791eb921115fca8e44e596a13efeda518b9d845a619450/pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1", size = 88069, upload-time = "2025-07-01T13:30:59.346Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88", size = 46396, upload-time = "2025-07-01T13:30:56.632Z" }, +] + [[package]] name = "python-dotenv" version = "1.1.0"