from fastapi.testclient import TestClient from backend.app import app from backend.api import notebooks as notebooks_api from backend.services.storage import NotebookStore client = TestClient(app) AUTH_U1 = {"X-User-Id": "u1"} AUTH_U2 = {"X-User-Id": "u2"} def setup_function(): notebooks_api.store = NotebookStore(base_dir="tests_tmp_data") def test_create_list_get_rename_delete_notebook(tmp_path): notebooks_api.store = NotebookStore(base_dir=str(tmp_path)) payload = {"user_id": "u1", "name": "Notebook 1"} resp = client.post("/api/notebooks/", json=payload, headers=AUTH_U1) assert resp.status_code == 200 data = resp.json() assert data["user_id"] == "u1" assert data["name"] == "Notebook 1" assert "notebook_id" in data notebook_id = data["notebook_id"] resp_list = client.get("/api/notebooks/", params={"user_id": "u1"}, headers=AUTH_U1) assert resp_list.status_code == 200 listed = resp_list.json() assert len(listed) == 1 assert listed[0]["notebook_id"] == notebook_id resp_get = client.get(f"/api/notebooks/{notebook_id}", params={"user_id": "u1"}, headers=AUTH_U1) assert resp_get.status_code == 200 data_get = resp_get.json() assert data_get["notebook_id"] == notebook_id resp_wrong_user = client.get(f"/api/notebooks/{notebook_id}", params={"user_id": "u2"}, headers=AUTH_U2) assert resp_wrong_user.status_code == 404 resp_rename = client.patch( f"/api/notebooks/{notebook_id}", json={"user_id": "u1", "name": "Renamed"}, headers=AUTH_U1, ) assert resp_rename.status_code == 200 assert resp_rename.json()["name"] == "Renamed" resp_delete = client.delete(f"/api/notebooks/{notebook_id}", params={"user_id": "u1"}, headers=AUTH_U1) assert resp_delete.status_code == 200 assert resp_delete.json() == {"deleted": True} def test_get_missing_notebook(tmp_path): notebooks_api.store = NotebookStore(base_dir=str(tmp_path)) resp = client.get("/api/notebooks/missing", params={"user_id": "u1"}, headers=AUTH_U1) assert resp.status_code == 404 def test_rejects_mismatched_user_id_payload(tmp_path): notebooks_api.store = NotebookStore(base_dir=str(tmp_path)) resp = client.post( "/api/notebooks/", json={"user_id": "u2", "name": "Notebook 1"}, headers=AUTH_U1, ) assert resp.status_code == 403