Harden runtime compatibility policy checks
Some checks failed
Tests / Build and Push CICD Base Image (pull_request) Successful in 1h37m28s
Tests / Build and Push CICD Complete Image (pull_request) Failing after 1h57m45s
Tests / Trailing Whitespace Check (pull_request) Has been skipped
Tests / End of File Check (pull_request) Has been skipped
Tests / YAML Syntax Check (pull_request) Has been skipped
Tests / TOML Syntax Check (pull_request) Has been skipped
Tests / Mixed Line Ending Check (pull_request) Has been skipped
Tests / TOML Formatting Check (pull_request) Has been skipped
Tests / Ruff Linting (pull_request) Has been skipped
Tests / Ruff Format Check (pull_request) Has been skipped
Tests / Pyright Type Check (pull_request) Has been skipped
Tests / Darglint Docstring Check (pull_request) Has been skipped
Tests / No Docstring Types Check (pull_request) Has been skipped
Tests / ESLint Check (pull_request) Has been skipped
Tests / Prettier Format Check (pull_request) Has been skipped
Tests / TypeScript Type Check (pull_request) Has been skipped
Tests / TSDoc Lint Check (pull_request) Has been skipped
Tests / Backend Tests (pull_request) Has been skipped
Tests / Frontend Tests (pull_request) Has been skipped
Tests / Backend Doctests (pull_request) Has been skipped
Tests / Integration Tests (pull_request) Has been skipped
Tests / End-to-End Tests (pull_request) Has been skipped
Some checks failed
Tests / Build and Push CICD Base Image (pull_request) Successful in 1h37m28s
Tests / Build and Push CICD Complete Image (pull_request) Failing after 1h57m45s
Tests / Trailing Whitespace Check (pull_request) Has been skipped
Tests / End of File Check (pull_request) Has been skipped
Tests / YAML Syntax Check (pull_request) Has been skipped
Tests / TOML Syntax Check (pull_request) Has been skipped
Tests / Mixed Line Ending Check (pull_request) Has been skipped
Tests / TOML Formatting Check (pull_request) Has been skipped
Tests / Ruff Linting (pull_request) Has been skipped
Tests / Ruff Format Check (pull_request) Has been skipped
Tests / Pyright Type Check (pull_request) Has been skipped
Tests / Darglint Docstring Check (pull_request) Has been skipped
Tests / No Docstring Types Check (pull_request) Has been skipped
Tests / ESLint Check (pull_request) Has been skipped
Tests / Prettier Format Check (pull_request) Has been skipped
Tests / TypeScript Type Check (pull_request) Has been skipped
Tests / TSDoc Lint Check (pull_request) Has been skipped
Tests / Backend Tests (pull_request) Has been skipped
Tests / Frontend Tests (pull_request) Has been skipped
Tests / Backend Doctests (pull_request) Has been skipped
Tests / Integration Tests (pull_request) Has been skipped
Tests / End-to-End Tests (pull_request) Has been skipped
This commit is contained in:
@@ -1,9 +1,11 @@
|
||||
"""Integration tests for API endpoints."""
|
||||
|
||||
from importlib import metadata
|
||||
|
||||
import pytest
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
from backend.main import app
|
||||
from backend.main import app, compatibility_status
|
||||
|
||||
client = TestClient(app)
|
||||
|
||||
@@ -49,8 +51,42 @@ class TestAPIIntegration:
|
||||
assert payload["ok"] is True
|
||||
assert payload["required_python"] == "3.14"
|
||||
assert "current_python" in payload
|
||||
assert payload["python_policy_valid"] is True
|
||||
assert "required_packages" in payload
|
||||
assert payload["required_packages"]["fastapi"] == "0.120.2"
|
||||
assert payload["required_packages"]["uvicorn"] == "0.38.0"
|
||||
assert payload["package_errors"] == {}
|
||||
|
||||
monkeypatch.delenv("BACKEND_REQUIRED_PYTHON", raising=False)
|
||||
|
||||
def test_startup_rejects_malformed_required_python(
|
||||
self, monkeypatch: pytest.MonkeyPatch
|
||||
) -> None:
|
||||
"""Startup should fail fast when Python policy is not strict major.minor."""
|
||||
monkeypatch.setenv("BACKEND_REQUIRED_PYTHON", "3.14.1")
|
||||
|
||||
with pytest.raises(RuntimeError), TestClient(app):
|
||||
pass
|
||||
|
||||
monkeypatch.delenv("BACKEND_REQUIRED_PYTHON", raising=False)
|
||||
|
||||
def test_compatibility_status_handles_missing_package_metadata(
|
||||
self, monkeypatch: pytest.MonkeyPatch
|
||||
) -> None:
|
||||
"""Compatibility checks should handle missing package metadata gracefully."""
|
||||
|
||||
def raise_not_found(_: str) -> str:
|
||||
raise metadata.PackageNotFoundError("fake")
|
||||
|
||||
monkeypatch.setattr("backend.main._installed_version", raise_not_found)
|
||||
status = compatibility_status()
|
||||
package_checks = status["package_checks"]
|
||||
package_errors = status["package_errors"]
|
||||
|
||||
assert status["ok"] is False
|
||||
assert isinstance(package_checks, dict)
|
||||
assert isinstance(package_errors, dict)
|
||||
assert package_checks["fastapi"] is False
|
||||
assert package_checks["uvicorn"] is False
|
||||
assert "fastapi" in package_errors
|
||||
assert "uvicorn" in package_errors
|
||||
|
||||
Reference in New Issue
Block a user