File size: 3,642 Bytes
a5784e9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
"""
High-quality tests for api_utils/utils_ext/validation.py (zero mocking).

Focus: Test real validation logic with no mocks, only pure function testing.
"""

import pytest

from models import Message


def test_validate_chat_request_valid():
    """
    Test scenario: Valid chat request (containing user message)
    Strategy: Pure function test, no mocking needed
    """
    from api_utils.utils_ext.validation import validate_chat_request

    messages = [Message(role="user", content="Hello")]

    result = validate_chat_request(messages, req_id="req123")

    assert result["error"] is None
    assert result["warning"] is None


def test_validate_chat_request_with_system_and_user():
    """
    Test scenario: Request containing system and user messages
    Verify: Valid request
    """
    from api_utils.utils_ext.validation import validate_chat_request

    messages = [
        Message(role="system", content="You are a helpful assistant."),
        Message(role="user", content="Hello"),
    ]

    result = validate_chat_request(messages, req_id="req456")

    assert result["error"] is None
    assert result["warning"] is None


def test_validate_chat_request_with_assistant_message():
    """
    Test scenario: Conversation history containing assistant message
    Verify: Valid request
    """
    from api_utils.utils_ext.validation import validate_chat_request

    messages = [
        Message(role="user", content="What is 2+2?"),
        Message(role="assistant", content="4"),
        Message(role="user", content="Thanks!"),
    ]

    result = validate_chat_request(messages, req_id="req789")

    assert result["error"] is None
    assert result["warning"] is None


def test_validate_chat_request_empty_messages():
    """
    Test scenario: messages array is empty
    Expected: Throw ValueError
    """
    from api_utils.utils_ext.validation import validate_chat_request

    with pytest.raises(ValueError, match="messages.*missing or empty"):
        validate_chat_request(messages=[], req_id="req101")


def test_validate_chat_request_only_system_messages():
    """
    Test scenario: Only system messages, no user or assistant messages
    Expected: Throw ValueError
    """
    from api_utils.utils_ext.validation import validate_chat_request

    messages = [
        Message(role="system", content="System prompt 1"),
        Message(role="system", content="System prompt 2"),
    ]

    with pytest.raises(ValueError, match="All messages are system messages"):
        validate_chat_request(messages, req_id="req202")


def test_validate_chat_request_req_id_in_error_message():
    """
    Test scenario: Verify error message contains req_id
    Verify: Error tracking
    """
    from api_utils.utils_ext.validation import validate_chat_request

    try:
        validate_chat_request(messages=[], req_id="req303")
        pytest.fail("Expected ValueError")
    except ValueError as e:
        assert "[req303]" in str(e)


def test_validate_chat_request_mixed_messages_valid():
    """
    Test scenario: Complex message history (mixed system, user, assistant)
    Verify: Valid request
    """
    from api_utils.utils_ext.validation import validate_chat_request

    messages = [
        Message(role="system", content="Context"),
        Message(role="user", content="Question 1"),
        Message(role="assistant", content="Answer 1"),
        Message(role="system", content="Additional context"),
        Message(role="user", content="Question 2"),
    ]

    result = validate_chat_request(messages, req_id="req404")

    assert result["error"] is None
    assert result["warning"] is None