everycure-ner-pdf / tests /test_api.py
Luis Chaves
added answers and improved how context is fetched from the chunks
ca919d4
import pytest
from fastapi.testclient import TestClient
from everycure.app import app
import os
import tempfile
client = TestClient(app)
def create_test_pdf():
# Create a temporary PDF file for testing
with tempfile.NamedTemporaryFile(suffix=".pdf", delete=False) as tmp:
tmp.write(b"%PDF-1.5\nTest PDF content")
return tmp.name
@pytest.fixture
def test_pdf():
pdf_path = create_test_pdf()
yield pdf_path
# Cleanup after test
os.unlink(pdf_path)
def test_extract_entities_invalid_file():
# Test with non-PDF file
with tempfile.NamedTemporaryFile(suffix=".txt") as tmp:
tmp.write(b"Not a PDF file")
tmp.seek(0)
response = client.post(
"/api/v1/extract",
files={"file": ("test.txt", tmp, "text/plain")}
)
assert response.status_code == 415
assert "Unsupported file type" in response.json()["detail"]
def test_extract_entities_empty_file(test_pdf):
with open(test_pdf, "rb") as f:
response = client.post(
"/api/v1/extract",
files={} # No file provided
)
assert response.status_code == 400 # Bad request error
assert "Bad request, file not included or empty filename" in response.json()["detail"]
def test_extract_entities_server_error(monkeypatch):
# Mock extract_entities_from_pdf to raise an exception
def mock_extract(*args):
raise Exception("Internal server error")
monkeypatch.setattr("everycure.app.extract_entities_from_pdf", mock_extract)
# Create a valid PDF file but force a server error
with tempfile.NamedTemporaryFile(suffix=".pdf") as tmp:
tmp.write(b"%PDF-1.5\nTest PDF content")
tmp.seek(0)
response = client.post(
"/api/v1/extract",
files={"file": ("test.pdf", tmp, "application/pdf")}
)
assert response.status_code == 500
assert "Internal server error" in response.json()["detail"]