"""Unit tests for QueryRequest validation (schemas.py).""" import pytest from pydantic import ValidationError from app.rag.schemas import QueryRequest def test_question_too_short_returns_422(): with pytest.raises(ValidationError) as exc_info: QueryRequest(question="ab") errors = exc_info.value.errors() assert any(e["loc"] == ("question",) for e in errors) def test_question_too_long_returns_422(): with pytest.raises(ValidationError) as exc_info: QueryRequest(question="x" * 501) errors = exc_info.value.errors() assert any(e["loc"] == ("question",) for e in errors) def test_xss_script_tag_rejected(): with pytest.raises(ValidationError): QueryRequest(question="") def test_xss_javascript_scheme_rejected(): with pytest.raises(ValidationError): QueryRequest(question="javascript:alert(1)") def test_xss_event_handler_rejected(): with pytest.raises(ValidationError): QueryRequest(question="") def test_valid_question_accepted(): req = QueryRequest(question="What are Zara's abilities?") assert req.question == "What are Zara's abilities?" def test_too_many_card_mentions_rejected(): with pytest.raises(ValidationError): QueryRequest(question="valid question here", card_mentions=["card"] * 11) def test_card_mention_too_long_rejected(): with pytest.raises(ValidationError): QueryRequest(question="valid question here", card_mentions=["x" * 101]) def test_invalid_language_rejected(): with pytest.raises(ValidationError): QueryRequest(question="valid question here", language="fr") # type: ignore[arg-type] def test_valid_language_en_accepted(): req = QueryRequest(question="valid question here", language="en") assert req.language == "en" def test_valid_language_es_accepted(): req = QueryRequest(question="valid question here", language="es") assert req.language == "es" def test_session_id_too_long_rejected(): with pytest.raises(ValidationError): QueryRequest(question="valid question here", session_id="x" * 65) def test_session_id_within_limit_accepted(): req = QueryRequest(question="valid question here", session_id="abc123") assert req.session_id == "abc123"