"""Health endpoint smoke test.""" import pytest @pytest.mark.asyncio async def test_health_returns_ok(client): response = await client.get("/api/health") assert response.status_code == 200 body = await response.get_json() assert body == {"status": "ok"} # --- build identity (milestone 318 step 6) -------------------------------- # # With no version image tags left, /api/health is the only place an instance # says which build it is. Both fields are OMITTED when unset rather than sent # empty: absence already means "cannot say" — an image predating the field # says exactly that by not having the key — and a second spelling would make # every reader special-case it (note #3127 §7). # # The test above is load-bearing for that: it asserts the body is EXACTLY # {"status": "ok"} when nothing is stamped, so a well-meaning `or ""` default # fails it. @pytest.mark.asyncio async def test_health_reports_the_build_it_is(client, monkeypatch): from backend.app.api import health monkeypatch.setattr(health, "FC_VERSION", "2026.08.28.1249") monkeypatch.setattr(health, "FC_CHANNEL", "dev") body = await (await client.get("/api/health")).get_json() assert body == { "status": "ok", "version": "2026.08.28.1249", "channel": "dev", } @pytest.mark.asyncio async def test_health_keeps_the_channel_out_of_the_version(client, monkeypatch): """Rule 149, asserted rather than assumed. The tempting shortcut is a `-dev` suffix on the version. The extension's comparator parses each dotted segment with `parseInt`, so a suffixed segment reads as 0 and every dev build compares equal to every other — #2993 exactly. Two separate keys cannot express that mistake. """ from backend.app.api import health monkeypatch.setattr(health, "FC_VERSION", "2026.08.28.1249") monkeypatch.setattr(health, "FC_CHANNEL", "dev") body = await (await client.get("/api/health")).get_json() assert body["version"] == "2026.08.28.1249" assert "dev" not in body["version"] @pytest.mark.asyncio async def test_health_omits_a_channel_it_cannot_name(client, monkeypatch): """A locally-built image has a version but no channel. It must not gain an empty one — the key's absence is the answer.""" from backend.app.api import health monkeypatch.setattr(health, "FC_VERSION", "2026.08.28.1249") monkeypatch.setattr(health, "FC_CHANNEL", "") body = await (await client.get("/api/health")).get_json() assert body == {"status": "ok", "version": "2026.08.28.1249"}