66 lines
1.5 KiB
Python
66 lines
1.5 KiB
Python
import json
|
|
from operator import itemgetter
|
|
|
|
import fpdf
|
|
import pytest
|
|
|
|
from test.server import set_up_processing_server
|
|
|
|
|
|
def processor_fn(payload):
|
|
data = payload["data"].encode()
|
|
metadata = payload["metadata"]
|
|
response_payload = {"metadata_type": str(type(metadata)), "data_type": str(type(data))}
|
|
return response_payload
|
|
|
|
|
|
@pytest.fixture
|
|
def server():
|
|
server = set_up_processing_server(processor_fn)
|
|
server.config.update({"TESTING": True})
|
|
return server
|
|
|
|
|
|
@pytest.fixture
|
|
def client(server):
|
|
return server.test_client()
|
|
|
|
|
|
def test_server_ready_check(client):
|
|
response = client.get("/ready")
|
|
assert response.status_code == 200
|
|
assert response.json == "OK"
|
|
|
|
|
|
@pytest.mark.parametrize("data_type", ["pdf", "bytestring"])
|
|
def test_sending_bytes_through_json(client, data):
|
|
payload = {"data": data.decode("latin1"), "metadata": {"A": 1, "B": [2, 3]}}
|
|
|
|
response = client.post("/process", json=json.dumps(payload))
|
|
|
|
response_payload = response.json
|
|
data_type, metadata_type = itemgetter("data_type", "metadata_type")(response_payload)
|
|
|
|
assert data_type == "<class 'bytes'>"
|
|
assert metadata_type == "<class 'dict'>"
|
|
|
|
|
|
@pytest.fixture
|
|
def pdf():
|
|
pdf = fpdf.FPDF(unit="pt")
|
|
pdf.add_page()
|
|
|
|
return pdf_stream(pdf)
|
|
|
|
|
|
def pdf_stream(pdf: fpdf.fpdf.FPDF):
|
|
return pdf.output(dest="S").encode("latin1")
|
|
|
|
|
|
@pytest.fixture
|
|
def data(data_type, pdf):
|
|
if data_type == "pdf":
|
|
return pdf
|
|
elif data_type == "bytestring":
|
|
return "content".encode("latin1")
|