Files
zugferd-service/tests/test_api.py

96 lines
2.8 KiB
Python

import base64
import pytest
from fastapi.testclient import TestClient
from src.main import app
@pytest.fixture
def client():
return TestClient(app)
def test_extract_valid_zugferd(client):
with open("tests/fixtures/EN16931_Einfach.pdf", "rb") as f:
pdf_base64 = base64.b64encode(f.read()).decode()
response = client.post("/extract", json={"pdf_base64": pdf_base64})
assert response.status_code == 200
data = response.json()
assert data["is_zugferd"] is True
assert data["zugferd_profil"] == "EN16931"
assert "xml_raw" in data
assert "xml_data" in data
assert "pdf_text" in data
assert "extraction_meta" in data
def test_extract_non_zugferd(client):
with open("tests/fixtures/EmptyPDFA1.pdf", "rb") as f:
pdf_base64 = base64.b64encode(f.read()).decode()
response = client.post("/extract", json={"pdf_base64": pdf_base64})
assert response.status_code == 200
data = response.json()
assert data["is_zugferd"] is False
assert data["zugferd_profil"] is None
assert "pdf_text" in data
assert "extraction_meta" in data
def test_extract_invalid_base64(client):
response = client.post("/extract", json={"pdf_base64": "invalid!!!"})
assert response.status_code == 400
data = response.json()
assert data["error"] == "invalid_base64"
assert "message" in data
def test_extract_non_pdf(client):
pdf_base64 = base64.b64encode(b"Hello World").decode()
response = client.post("/extract", json={"pdf_base64": pdf_base64})
assert response.status_code == 400
data = response.json()
assert "error" in data
def test_validate_pflichtfelder(client):
response = client.post(
"/validate",
json={
"xml_data": {
"invoice_number": "RE-001",
"invoice_date": "2025-02-04",
"supplier": {"name": "Test GmbH", "vat_id": "DE123456789"},
"buyer": {"name": "Kunde AG"},
"totals": {
"net": 100.0,
"gross": 119.0,
"vat_total": 19.0,
"line_total_sum": 100.0,
},
"line_items": [
{
"position": 1,
"description": "Test",
"quantity": 1.0,
"unit": "Stück",
"unit_price": 100.0,
"line_total": 100.0,
}
],
},
"checks": ["pflichtfelder"],
},
)
assert response.status_code == 200
data = response.json()
assert "result" in data
assert "is_valid" in data["result"]
def test_validate_empty_checks(client):
response = client.post("/validate", json={"xml_data": {}, "checks": []})
assert response.status_code == 200