""" Tests for Docker & Kubernetes Document Generation API API. """ import pytest from fastapi.testclient import TestClient from main import app client = TestClient(app) def test_health(): r = client.get("/health") assert r.status_code == 200 data = r.json() assert data["status"] == "healthy" assert "version" in data def test_unauthorized(): r = client.get("/items") assert r.status_code == 403 def test_login(): r = client.post("/auth/token", params={"username": "admin", "password": "admin123"}) assert r.status_code == 200 assert "access_token" in r.json() def _auth_headers(): r = client.post("/auth/token", params={"username": "admin", "password": "admin123"}) token = r.json()["access_token"] return {"Authorization": f"Bearer {token}"} def test_create_item(): headers = _auth_headers() payload = {"name": "Test Item", "description": "A test", "tags": ["test"]} r = client.post("/items", json=payload, headers=headers) assert r.status_code == 201 data = r.json() assert data["name"] == "Test Item" assert "id" in data def test_list_items(): headers = _auth_headers() r = client.get("/items", headers=headers) assert r.status_code == 200 assert isinstance(r.json(), list) def test_get_item(): headers = _auth_headers() # Create payload = {"name": "Get Test", "tags": []} r = client.post("/items", json=payload, headers=headers) item_id = r.json()["id"] # Get r = client.get(f"/items/{item_id}", headers=headers) assert r.status_code == 200 assert r.json()["id"] == item_id def test_update_item(): headers = _auth_headers() payload = {"name": "Update Test", "tags": []} r = client.post("/items", json=payload, headers=headers) item_id = r.json()["id"] r = client.patch(f"/items/{item_id}", json={"name": "Updated"}, headers=headers) assert r.status_code == 200 assert r.json()["name"] == "Updated" def test_delete_item(): headers = _auth_headers() payload = {"name": "Delete Test", "tags": []} r = client.post("/items", json=payload, headers=headers) item_id = r.json()["id"] r = client.delete(f"/items/{item_id}", headers=headers) assert r.status_code == 204 r = client.get(f"/items/{item_id}", headers=headers) assert r.status_code == 404 def test_stats(): headers = _auth_headers() r = client.get("/stats", headers=headers) assert r.status_code == 200 assert "total_items" in r.json() def test_openapi_docs(): r = client.get("/openapi.json") assert r.status_code == 200 assert "openapi" in r.json()