-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathclient_v2_test.py
More file actions
175 lines (137 loc) · 6.61 KB
/
client_v2_test.py
File metadata and controls
175 lines (137 loc) · 6.61 KB
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
from typing import Any
from unittest.mock import MagicMock
import pytest
from unstract.llmwhisperer.client_v2 import LLMWhispererClientException, LLMWhispererClientV2
WEBHOOK_URL = "http://test-webhook.com/callback"
AUTH_TOKEN = "dummy-auth-token"
WEBHOOK_NAME = "test_webhook"
WEBHOOK_RESPONSE = {"message": "Webhook registered successfully"}
WHISPER_RESPONSE = {"status_code": 200, "extraction": {"result_text": "Test result"}}
def test_register_webhook(mocker: Any, client_v2: LLMWhispererClientV2) -> None:
mock_send = mocker.patch("requests.Session.send")
mock_response = MagicMock()
mock_response.status_code = 201
mock_response.text = '{"message": "Webhook registered successfully"}' # noqa: E501
mock_send.return_value = mock_response
response = client_v2.register_webhook(WEBHOOK_URL, AUTH_TOKEN, WEBHOOK_NAME)
assert response == WEBHOOK_RESPONSE
mock_send.assert_called_once()
def test_get_webhook_details(mocker: Any, client_v2: LLMWhispererClientV2) -> None:
mock_send = mocker.patch("requests.Session.send")
mock_response = MagicMock()
mock_response.status_code = 200
mock_response.text = '{"status": "success", "webhook_details": {"url": "http://test-webhook.com/callback"}}' # noqa: E501
mock_send.return_value = mock_response
response = client_v2.get_webhook_details(WEBHOOK_NAME)
assert response["status"] == "success"
assert response["webhook_details"]["url"] == WEBHOOK_URL
def test_whisper_json_string_response_error(mocker: Any, client_v2: LLMWhispererClientV2) -> None:
"""Test whisper method handles JSON string responses correctly for error
cases."""
mock_send = mocker.patch("requests.Session.send")
mock_response = MagicMock()
mock_response.status_code = 400
mock_response.text = '"Error message as JSON string"'
mock_response.encoding = "utf-8"
mock_send.return_value = mock_response
with pytest.raises(LLMWhispererClientException) as exc_info:
client_v2.whisper(url="https://example.com/test.pdf")
error = exc_info.value.args[0]
assert error["message"] == "Error message as JSON string"
assert error["status_code"] == 400
assert error["extraction"] == {}
def test_whisper_json_string_response_202(mocker: Any, client_v2: LLMWhispererClientV2) -> None:
"""Test whisper method handles JSON string responses correctly for 202
status."""
mock_send = mocker.patch("requests.Session.send")
mock_response = MagicMock()
mock_response.status_code = 202
mock_response.text = '"Processing in progress"'
mock_response.encoding = "utf-8"
mock_send.return_value = mock_response
response = client_v2.whisper(url="https://example.com/test.pdf", wait_for_completion=False)
assert response["message"] == "Processing in progress"
assert response["status_code"] == 202
assert response["extraction"] == {}
def test_whisper_invalid_json_response_error(mocker: Any, client_v2: LLMWhispererClientV2) -> None:
"""Test whisper method handles invalid JSON responses correctly for error
cases."""
mock_send = mocker.patch("requests.Session.send")
mock_response = MagicMock()
mock_response.status_code = 500
mock_response.text = "Invalid JSON response"
mock_response.encoding = "utf-8"
mock_send.return_value = mock_response
with pytest.raises(LLMWhispererClientException) as exc_info:
client_v2.whisper(url="https://example.com/test.pdf")
error = exc_info.value.args[0]
assert error["message"] == "Invalid JSON response"
assert error["status_code"] == 500
assert error["extraction"] == {}
def test_whisper_invalid_json_response_202(mocker: Any, client_v2: LLMWhispererClientV2) -> None:
"""Test whisper method handles invalid JSON responses correctly for 202
status."""
mock_send = mocker.patch("requests.Session.send")
mock_response = MagicMock()
mock_response.status_code = 202
mock_response.text = "Invalid JSON response"
mock_response.encoding = "utf-8"
mock_send.return_value = mock_response
response = client_v2.whisper(url="https://example.com/test.pdf", wait_for_completion=False)
assert response["message"] == "Invalid JSON response"
assert response["status_code"] == 202
assert response["extraction"] == {}
def test_get_usage_with_tag_only(mocker: Any, client_v2: LLMWhispererClientV2) -> None:
"""Test get_usage method with only required tag parameter."""
mock_send = mocker.patch("requests.Session.send")
mock_response = MagicMock()
mock_response.status_code = 200
mock_response.text = """{
"end_date": "2024-01-31",
"start_date": "2024-01-01",
"subscription_id": "test-subscription-id",
"tag": "test-tag",
"usage": [
{"service_type": "form", "pages_processed": 100},
{"service_type": "high_quality", "pages_processed": 50}
]
}"""
mock_send.return_value = mock_response
response = client_v2.get_usage(tag="test-tag")
assert response["tag"] == "test-tag"
assert response["subscription_id"] == "test-subscription-id"
assert "usage" in response
assert len(response["usage"]) == 2
mock_send.assert_called_once()
def test_get_usage_with_date_range(mocker: Any, client_v2: LLMWhispererClientV2) -> None:
"""Test get_usage method with tag and date range parameters."""
mock_send = mocker.patch("requests.Session.send")
mock_response = MagicMock()
mock_response.status_code = 200
mock_response.text = """{
"end_date": "2024-01-31",
"start_date": "2024-01-01",
"subscription_id": "test-subscription-id",
"tag": "production",
"usage": [
{"service_type": "form", "pages_processed": 500}
]
}"""
mock_send.return_value = mock_response
response = client_v2.get_usage(tag="production", from_date="2024-01-01", to_date="2024-01-31")
assert response["start_date"] == "2024-01-01"
assert response["end_date"] == "2024-01-31"
assert response["tag"] == "production"
mock_send.assert_called_once()
def test_get_usage_error_response(mocker: Any, client_v2: LLMWhispererClientV2) -> None:
"""Test get_usage method handles error responses correctly."""
mock_send = mocker.patch("requests.Session.send")
mock_response = MagicMock()
mock_response.status_code = 400
mock_response.text = '{"message": "Invalid tag parameter"}'
mock_send.return_value = mock_response
with pytest.raises(LLMWhispererClientException) as exc_info:
client_v2.get_usage(tag="invalid-tag")
error = exc_info.value.args[0]
assert error["message"] == "Invalid tag parameter"
assert error["status_code"] == 400