from collections.abc import Generator from typing import Any import pytest from flask.testing import FlaskClient from src.app import app @pytest.fixture def client() -> Generator[FlaskClient, Any, Any]: app.config["TESTING"] = True with app.test_client() as client: yield client def test_heartbeat_status_code(client: FlaskClient) -> None: response = client.get("/heartbeat") assert response.status_code == 200 def test_camera_start(client: FlaskClient) -> None: response = client.post("/camera/start") assert response.status_code == 200 assert response.get_json()["status"] == "started" def test_camera_stop(client: FlaskClient) -> None: client.post("/camera/start") response = client.post("/camera/stop") assert response.status_code == 200 assert response.get_json()["status"] == "stopped" def test_camera_status(client: FlaskClient) -> None: response = client.get("/camera/status") assert response.status_code == 200 data = response.get_json() assert "running" in data assert "ready" in data def test_hls_404_when_not_running(client: FlaskClient) -> None: response = client.get("/camera/hls/stream.m3u8") assert response.status_code == 404 def test_index_page(client: FlaskClient) -> None: response = client.get("/") assert response.status_code == 200 assert b"Pi Camera" in response.data