Systematic rename of all semantic anchors (#region, [DEF], @RELATION) across 1400+ files — backend Python, frontend Svelte/TS, specs, docs: - Flat anchors become Namespace.Module.Entity - @RELATION references updated to match new anchor paths - Zero business logic changes
116 lines
4.3 KiB
Python
116 lines
4.3 KiB
Python
# #region Test.RouterThinModules [C:2] [TYPE Module] [SEMANTICS test,router,fastapi,api]
|
|
# @BRIEF Tests for thin router modules: dashboards/_router.py, git/_router.py,
|
|
# translate/_router.py, maintenance/_router.py.
|
|
# These modules define APIRouter instances used by route handlers.
|
|
# @RELATION BINDS_TO -> [Api.Router.DashboardsRouter]
|
|
# @RELATION BINDS_TO -> [Api.Router.GitRouter]
|
|
# @RELATION BINDS_TO -> [Api.Router.TranslateRouterModule]
|
|
# @RELATION BINDS_TO -> [Api.Router.MaintenanceRouter]
|
|
# @TEST_CONTRACT: dashboards router -> prefix=/api/dashboards, tags=["Dashboards"]
|
|
# @TEST_CONTRACT: git router -> no prefix, tags=["git"]
|
|
# @TEST_CONTRACT: translate router -> prefix=/api/translate, tags=["translate"], feature-gated
|
|
# @TEST_CONTRACT: maintenance router -> prefix=/api/maintenance, tags=["Maintenance"]
|
|
# @TEST_EDGE: router_instances_are_APIRouter -> verify type
|
|
# @TEST_EDGE: translate_router_dependencies -> require_feature dependency present
|
|
|
|
import pytest
|
|
from fastapi import APIRouter
|
|
|
|
|
|
class TestDashboardsRouter:
|
|
"""Dashboards router — prefix and tags."""
|
|
|
|
def test_router_type(self):
|
|
from src.api.routes.dashboards._router import router
|
|
assert isinstance(router, APIRouter)
|
|
|
|
def test_router_prefix(self):
|
|
from src.api.routes.dashboards._router import router
|
|
assert router.prefix == "/api/dashboards"
|
|
|
|
def test_router_tags(self):
|
|
from src.api.routes.dashboards._router import router
|
|
assert "Dashboards" in router.tags
|
|
|
|
def test_router_has_routes(self):
|
|
from src.api.routes.dashboards._router import router
|
|
# The routes are added by other modules importing this router
|
|
assert hasattr(router, "routes")
|
|
|
|
|
|
class TestGitRouter:
|
|
"""Git router — no prefix, git tag."""
|
|
|
|
def test_router_type(self):
|
|
from src.api.routes.git._router import router
|
|
assert isinstance(router, APIRouter)
|
|
|
|
def test_router_no_prefix(self):
|
|
from src.api.routes.git._router import router
|
|
# Git router doesn't set prefix (routes set their own prefixes)
|
|
assert router.prefix == ""
|
|
|
|
def test_router_tags(self):
|
|
from src.api.routes.git._router import router
|
|
assert "git" in router.tags
|
|
|
|
|
|
class TestTranslateRouter:
|
|
"""Translate router — prefix, tags, feature flag dependency."""
|
|
|
|
def test_router_type(self):
|
|
from src.api.routes.translate._router import router
|
|
assert isinstance(router, APIRouter)
|
|
|
|
def test_router_prefix(self):
|
|
from src.api.routes.translate._router import router
|
|
assert router.prefix == "/api/translate"
|
|
|
|
def test_router_tags(self):
|
|
from src.api.routes.translate._router import router
|
|
assert "translate" in router.tags
|
|
|
|
def test_router_has_dependencies(self):
|
|
from src.api.routes.translate._router import router
|
|
assert len(router.dependencies) > 0
|
|
|
|
def test_router_dependency_is_require_feature(self):
|
|
from src.api.routes.translate._router import router
|
|
from fastapi import params
|
|
|
|
deps = router.dependencies
|
|
assert len(deps) >= 1
|
|
dep = deps[0]
|
|
# The dependency is a Depends(require_feature("translate"))
|
|
assert isinstance(dep, params.Depends)
|
|
|
|
|
|
class TestMaintenanceRouter:
|
|
"""Maintenance router — prefix and tags."""
|
|
|
|
def test_router_type(self):
|
|
from src.api.routes.maintenance._router import router
|
|
assert isinstance(router, APIRouter)
|
|
|
|
def test_router_prefix(self):
|
|
from src.api.routes.maintenance._router import router
|
|
assert router.prefix == "/api/maintenance"
|
|
|
|
def test_router_tags(self):
|
|
from src.api.routes.maintenance._router import router
|
|
tags_lower = [t.lower() for t in router.tags]
|
|
assert "maintenance" in tags_lower
|
|
|
|
def test_routes_are_imported(self):
|
|
"""Verify that the _routes module is imported in _router.py."""
|
|
from src.api.routes.maintenance import _router
|
|
# The import `from . import _routes` in _router.py registers routes
|
|
# on the router. If the import is successful and routes exist, it works.
|
|
assert hasattr(_router, "router")
|
|
# Check that the router has non-trivial number of routes
|
|
# (list_events, start, end, end-all, settings GET, settings PUT = 6)
|
|
assert len(_router.router.routes) >= 1
|
|
|
|
|
|
# #endregion Test.RouterThinModules
|