classifier-general / tests /test_routes.py
AyoubChLin's picture
[REF] api documentation
2571402
from io import BytesIO
from fastapi.testclient import TestClient
from app.main import app
from app.pipelines.classification_pipeline import classification_pipeline
client = TestClient(app)
def test_classifier_endpoint_contract(monkeypatch):
monkeypatch.setattr(classification_pipeline, "classify_text", lambda text: "news")
response = client.post("/api/classifier", json={"text": "This is a long enough sentence for classification."})
assert response.status_code == 200
assert response.json() == "news"
def test_language_endpoint_contract(monkeypatch):
monkeypatch.setattr(classification_pipeline, "detect_language", lambda text: "en")
response = client.post("/api/language", json={"text": "This is a language detection sample text."})
assert response.status_code == 200
assert response.json() == "en"
def test_labels_config_roundtrip():
response = client.post("/configlabel", json={"labels": ["tech", "health", "legal"]})
assert response.status_code == 200
assert response.json() == ["tech", "health", "legal"]
get_response = client.get("/labels")
assert get_response.status_code == 200
assert get_response.json() == ["tech", "health", "legal"]
def test_labels_config_accepts_labels_list_payload():
response = client.post("/configlabel", json={"labels": ["tech", "health", "legal"]})
assert response.status_code == 200
assert response.json() == ["tech", "health", "legal"]
def test_labels_config_rejects_empty_labels():
response = client.post("/configlabel", json={"labels": [" ", ""]})
assert response.status_code == 400
assert response.json() == {"detail": "At least one label is required"}
def test_labels_config_rejects_missing_labels():
response = client.post("/configlabel", json={})
assert response.status_code == 422
assert "labels" in response.text
def test_labels_config_rejects_text_field():
response = client.post("/configlabel", json={"text": "tech,health"})
assert response.status_code == 422
assert "extra_forbidden" in response.text
def test_labels_config_rejects_texts_field():
response = client.post("/configlabel", json={"texts": ["tech,health"]})
assert response.status_code == 422
assert "extra_forbidden" in response.text
def test_transform_file_contract(monkeypatch):
monkeypatch.setattr(classification_pipeline, "transform_file", lambda filename, path: "extracted content")
files = {"file": ("sample.txt", BytesIO(b"hello"), "text/plain")}
response = client.post("/api/transformer", files=files)
assert response.status_code == 200
assert response.json()["filename"] == "sample.txt"
assert response.json()["content"] == "extracted content"
def test_classify_file_contract(monkeypatch):
monkeypatch.setattr(
classification_pipeline,
"classify_file",
lambda filename, path: {"label": "finance", "language": "en"},
)
files = {"file": ("sample.txt", BytesIO(b"hello"), "text/plain")}
response = client.post("/classify", files=files)
assert response.status_code == 200
assert response.json() == {"label": "finance", "language": "en", "type": None}