fix(frontend,backend): traite la revue de phyri0s sur la PR #93
Corrige les 10 points de la revue du systeme de design : garde-fou de route explicite pour /docs, /redoc et /static, ton distinct pour les alertes critical vs high, flex-shrink sur le bon element du badge, mutualisation du bloc ev-card dans _auth-page.scss, bouton de deconnexion migre vers ev-button (nouvel input fullWidth), tokens manquants (--color-danger-hover, --color-warning-text, --color-text-inverse, --color-critical), test de synchronisation des deux copies du logo, openapi_avec_logo qui enveloppe application.openapi au lieu de le reimplementer, doc du frontend et index mis a jour, et suppression du CSS mort .form-error.
This commit is contained in:
@@ -81,3 +81,18 @@ async def test_the_declared_routes_are_actually_reachable(app: FastAPI) -> None:
|
||||
)
|
||||
def test_the_health_probes_stay_public(app: FastAPI, chemin: str) -> None:
|
||||
assert ("GET", chemin) in ROUTES_PUBLIQUES
|
||||
|
||||
|
||||
# Piège : ni les routes `include_in_schema=False` (/docs, /redoc) ni un `Mount` Starlette
|
||||
# (/static) n'apparaissent dans `app.openapi()["paths"]`. `routes_declarees()` ne les voit
|
||||
# donc jamais, et elles échapperaient silencieusement au garde-fou ci-dessus.
|
||||
@pytest.mark.parametrize(
|
||||
"chemin",
|
||||
["/docs", "/redoc", "/static/logo-icon.png"],
|
||||
ids=["swagger_ui", "redoc", "logo_statique"],
|
||||
)
|
||||
async def test_the_documentation_routes_are_public_by_design(
|
||||
app: FastAPI, client: AsyncClient, chemin: str
|
||||
) -> None:
|
||||
response = await client.get(chemin)
|
||||
assert response.status_code == 200
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
# Piège : le logo est committé indépendamment à deux endroits (`app/static/`, servi par
|
||||
# `/docs`/`/redoc`, et `apps/frontend/public/`, servi au front) faute d'étape de build partagée.
|
||||
# Sans ce test, une mise à jour d'un seul des deux fichiers dérive silencieusement : rien en CI
|
||||
# ne le détecte.
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
BACKEND_LOGO = Path(__file__).parent.parent / "app" / "static" / "logo-icon.png"
|
||||
FRONTEND_LOGO = Path(__file__).parent.parent.parent / "frontend" / "public" / "logo-icon.png"
|
||||
|
||||
|
||||
def test_the_backend_logo_stays_in_sync_with_the_frontend_one() -> None:
|
||||
assert BACKEND_LOGO.read_bytes() == FRONTEND_LOGO.read_bytes()
|
||||
Reference in New Issue
Block a user