Toxic-comment / tests /test_api.py
asahwells's picture
Initial commit with project setup and basic structure established.
87cc0f2
"""
Lightweight tests for the moderation endpoint.
"""
from fastapi.testclient import TestClient
import pytest
from app.main import app
from app import services
from app.models import SentimentResult
client = TestClient(app)
@pytest.fixture(autouse=True)
def clear_cache():
"""Ensure per-test isolation for cached pipeline calls."""
services.get_sentiment_pipeline.cache_clear() # type: ignore[attr-defined]
yield
services.get_sentiment_pipeline.cache_clear() # type: ignore[attr-defined]
def test_rejects_high_confidence_negative(monkeypatch):
"""Requests should be blocked when the model is confident a message is negative."""
monkeypatch.setattr(
services,
"analyze_text",
lambda _text: SentimentResult(label="NEGATIVE", confidence=0.93),
)
response = client.post("/api/check-message", json={"text": "You are awful."})
assert response.status_code == 400
detail = response.json()
assert detail["status"] == "rejected"
assert detail["label"] == "NEGATIVE"
def test_accepts_positive_or_low_confidence(monkeypatch):
"""Requests should succeed when the message is allowed."""
monkeypatch.setattr(
services,
"analyze_text",
lambda _text: SentimentResult(label="POSITIVE", confidence=0.52),
)
response = client.post("/api/check-message", json={"text": "Great job!"})
payload = response.json()
assert response.status_code == 200
assert payload["status"] == "accepted"
assert payload["label"] == "POSITIVE"