"""Unit tests for the frontend endpoints (GET /, static assets) -- module 5 phase 4 ยง7. Uses FastAPI's TestClient without entering it as a context manager, so the app's `lifespan` (which needs a live kb-postgres DSN, app/main.py:34-49) never runs -- `/` and `/static/*` don't touch `app.state`, so this is safe and keeps these tests DB-free like the rest of the suite. `/search`/`/healthz` behavior is covered separately (tests/test_search.py) against the DB-independent `run_search` core, not through this TestClient.""" from __future__ import annotations import pathlib import sys sys.path.insert(0, str(pathlib.Path(__file__).resolve().parents[1])) from fastapi.testclient import TestClient # noqa: E402 from app.main import app # noqa: E402 client = TestClient(app) class TestIndex: def test_returns_html(self): response = client.get("/") assert response.status_code == 200 assert response.headers["content-type"].startswith("text/html") def test_contains_search_form_and_polish_copy(self): response = client.get("/") assert 'id="search-form"' in response.text assert 'id="query"' in response.text assert 'id="mode-flat"' in response.text assert "Wyszukiwarka KB" in response.text def test_references_static_assets(self): response = client.get("/") assert "/static/app.js" in response.text assert "/static/style.css" in response.text class TestStaticAssets: def test_app_js_served(self): response = client.get("/static/app.js") assert response.status_code == 200 assert "buildSearchUrl" in response.text def test_style_css_served(self): response = client.get("/static/style.css") assert response.status_code == 200