Files
BadNote/server/tests/test_ocr.py
T

82 lines
2.5 KiB
Python
Raw Normal View History

"""Tests for OCR endpoints."""
import sys, os
sys.path.insert(0, os.path.dirname(__file__))
import pytest
import pytest_asyncio
from httpx import AsyncClient
from helpers import auth_header, register_and_login
@pytest.mark.asyncio
async def test_submit_ocr_job(client: AsyncClient):
token, _ = await register_and_login(client)
resp = await client.post(
"/api/ocr/process",
json={"note_id": "note-ocr-1", "document_id": None, "page_number": None},
headers=auth_header(token),
)
assert resp.status_code == 201
data = resp.json()
assert "job_id" in data
@pytest.mark.asyncio
async def test_get_job_status(client: AsyncClient):
token, _ = await register_and_login(client)
resp = await client.post(
"/api/ocr/process",
json={"note_id": "note-ocr-2", "document_id": None, "page_number": None},
headers=auth_header(token),
)
job_id = resp.json()["job_id"]
resp = await client.get(f"/api/ocr/status/{job_id}", headers=auth_header(token))
assert resp.status_code == 200
data = resp.json()
assert data["id"] == job_id
assert data["status"] == "pending"
@pytest.mark.asyncio
async def test_get_job_status_not_found(client: AsyncClient):
token, _ = await register_and_login(client)
resp = await client.get("/api/ocr/status/nonexistent", headers=auth_header(token))
assert resp.status_code == 404
@pytest.mark.asyncio
async def test_get_ocr_results_empty(client: AsyncClient):
token, _ = await register_and_login(client)
resp = await client.get("/api/ocr/results/note-no-jobs", headers=auth_header(token))
assert resp.status_code == 200
assert resp.json() == []
@pytest.mark.asyncio
async def test_get_ocr_results_with_jobs(client: AsyncClient):
token, _ = await register_and_login(client)
await client.post(
"/api/ocr/process",
json={"note_id": "note-ocr-3", "document_id": None, "page_number": None},
headers=auth_header(token),
)
await client.post(
"/api/ocr/process",
json={"note_id": "note-ocr-3", "document_id": None, "page_number": None},
headers=auth_header(token),
)
resp = await client.get("/api/ocr/results/note-ocr-3", headers=auth_header(token))
assert resp.status_code == 200
assert len(resp.json()) == 2
@pytest.mark.asyncio
async def test_ocr_requires_auth(client: AsyncClient):
resp = await client.post(
"/api/ocr/process",
json={"note_id": "x", "document_id": None, "page_number": None},
)
assert resp.status_code in (401, 403)