83 lines
2.5 KiB
Python
83 lines
2.5 KiB
Python
|
|
"""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)
|