Skip to content

Commit 80bda79

Browse files
Added task runner tests
1 parent 6191ad4 commit 80bda79

2 files changed

Lines changed: 662 additions & 1 deletion

File tree

Lines changed: 228 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,228 @@
1+
import pytest
2+
from unittest.mock import MagicMock, patch
3+
from conductor.client.adapters.api_client_adapter import ApiClientAdapter
4+
from conductor.client.codegen.rest import AuthorizationException, ApiException
5+
6+
7+
@pytest.fixture
8+
def mock_config():
9+
config = MagicMock()
10+
config.host = "http://test.com"
11+
return config
12+
13+
14+
@pytest.fixture
15+
def api_adapter(mock_config):
16+
client_adapter = ApiClientAdapter()
17+
client_adapter.configuration = mock_config
18+
return client_adapter
19+
20+
21+
def test_call_api_success(api_adapter):
22+
mock_response = MagicMock()
23+
api_adapter._ApiClientAdapter__call_api_no_retry = MagicMock(
24+
return_value=mock_response
25+
)
26+
27+
result = api_adapter._ApiClientAdapter__call_api(
28+
resource_path="/test",
29+
method="GET",
30+
path_params=None,
31+
query_params=None,
32+
header_params=None,
33+
body=None,
34+
post_params=None,
35+
files=None,
36+
response_type=None,
37+
auth_settings=None,
38+
_return_http_data_only=None,
39+
collection_formats=None,
40+
_preload_content=True,
41+
_request_timeout=None,
42+
)
43+
44+
assert result == mock_response
45+
api_adapter._ApiClientAdapter__call_api_no_retry.assert_called_once()
46+
47+
48+
def test_call_api_authorization_exception_expired_token(api_adapter):
49+
mock_response = MagicMock()
50+
mock_auth_exception = AuthorizationException(status=401, reason="Unauthorized")
51+
mock_auth_exception._error_code = "EXPIRED_TOKEN"
52+
api_adapter._ApiClientAdapter__call_api_no_retry = MagicMock(
53+
side_effect=[mock_auth_exception, mock_response]
54+
)
55+
api_adapter._ApiClientAdapter__force_refresh_auth_token = MagicMock()
56+
57+
with patch("conductor.client.adapters.api_client_adapter.logger") as mock_logger:
58+
result = api_adapter._ApiClientAdapter__call_api(
59+
resource_path="/test",
60+
method="GET",
61+
path_params=None,
62+
query_params=None,
63+
header_params=None,
64+
body=None,
65+
post_params=None,
66+
files=None,
67+
response_type=None,
68+
auth_settings=None,
69+
_return_http_data_only=None,
70+
collection_formats=None,
71+
_preload_content=True,
72+
_request_timeout=None,
73+
)
74+
75+
assert result == mock_response
76+
assert api_adapter._ApiClientAdapter__call_api_no_retry.call_count == 2
77+
api_adapter._ApiClientAdapter__force_refresh_auth_token.assert_called_once()
78+
mock_logger.warning.assert_called_once()
79+
80+
81+
def test_call_api_authorization_exception_invalid_token(api_adapter):
82+
mock_response = MagicMock()
83+
mock_auth_exception = AuthorizationException(status=401, reason="Unauthorized")
84+
mock_auth_exception._error_code = "INVALID_TOKEN"
85+
api_adapter._ApiClientAdapter__call_api_no_retry = MagicMock(
86+
side_effect=[mock_auth_exception, mock_response]
87+
)
88+
api_adapter._ApiClientAdapter__force_refresh_auth_token = MagicMock()
89+
90+
with patch("conductor.client.adapters.api_client_adapter.logger") as mock_logger:
91+
result = api_adapter._ApiClientAdapter__call_api(
92+
resource_path="/test",
93+
method="GET",
94+
path_params=None,
95+
query_params=None,
96+
header_params=None,
97+
body=None,
98+
post_params=None,
99+
files=None,
100+
response_type=None,
101+
auth_settings=None,
102+
_return_http_data_only=None,
103+
collection_formats=None,
104+
_preload_content=True,
105+
_request_timeout=None,
106+
)
107+
108+
assert result == mock_response
109+
assert api_adapter._ApiClientAdapter__call_api_no_retry.call_count == 2
110+
api_adapter._ApiClientAdapter__force_refresh_auth_token.assert_called_once()
111+
mock_logger.warning.assert_called_once()
112+
113+
114+
def test_call_api_authorization_exception_other(api_adapter):
115+
mock_auth_exception = AuthorizationException(status=401, reason="Unauthorized")
116+
mock_auth_exception._error_code = "OTHER_ERROR"
117+
api_adapter._ApiClientAdapter__call_api_no_retry = MagicMock(
118+
side_effect=mock_auth_exception
119+
)
120+
121+
with pytest.raises(AuthorizationException):
122+
api_adapter._ApiClientAdapter__call_api(
123+
resource_path="/test",
124+
method="GET",
125+
path_params=None,
126+
query_params=None,
127+
header_params=None,
128+
body=None,
129+
post_params=None,
130+
files=None,
131+
response_type=None,
132+
auth_settings=None,
133+
_return_http_data_only=None,
134+
collection_formats=None,
135+
_preload_content=True,
136+
_request_timeout=None,
137+
)
138+
139+
140+
def test_call_api_exception(api_adapter):
141+
api_adapter._ApiClientAdapter__call_api_no_retry = MagicMock(
142+
side_effect=ApiException(status=500, reason="Server Error")
143+
)
144+
145+
with patch("conductor.client.adapters.api_client_adapter.logger") as mock_logger:
146+
with pytest.raises(ApiException):
147+
api_adapter._ApiClientAdapter__call_api(
148+
resource_path="/test",
149+
method="GET",
150+
path_params=None,
151+
query_params=None,
152+
header_params=None,
153+
body=None,
154+
post_params=None,
155+
files=None,
156+
response_type=None,
157+
auth_settings=None,
158+
_return_http_data_only=None,
159+
collection_formats=None,
160+
_preload_content=True,
161+
_request_timeout=None,
162+
)
163+
164+
mock_logger.error.assert_called_once()
165+
166+
167+
def test_call_api_with_all_parameters(api_adapter):
168+
mock_response = MagicMock()
169+
api_adapter._ApiClientAdapter__call_api_no_retry = MagicMock(
170+
return_value=mock_response
171+
)
172+
173+
result = api_adapter._ApiClientAdapter__call_api(
174+
resource_path="/test",
175+
method="POST",
176+
path_params={"id": "123"},
177+
query_params={"param": "value"},
178+
header_params={"Authorization": "Bearer token"},
179+
body={"data": "test"},
180+
post_params={"form": "data"},
181+
files={"file": "content"},
182+
response_type=dict,
183+
auth_settings=["api_key"],
184+
_return_http_data_only=True,
185+
collection_formats={"param": "csv"},
186+
_preload_content=False,
187+
_request_timeout=30,
188+
)
189+
190+
assert result == mock_response
191+
api_adapter._ApiClientAdapter__call_api_no_retry.assert_called_once_with(
192+
resource_path="/test",
193+
method="POST",
194+
path_params={"id": "123"},
195+
query_params={"param": "value"},
196+
header_params={"Authorization": "Bearer token"},
197+
body={"data": "test"},
198+
post_params={"form": "data"},
199+
files={"file": "content"},
200+
response_type=dict,
201+
auth_settings=["api_key"],
202+
_return_http_data_only=True,
203+
collection_formats={"param": "csv"},
204+
_preload_content=False,
205+
_request_timeout=30,
206+
)
207+
208+
209+
def test_call_api_debug_logging(api_adapter):
210+
api_adapter._ApiClientAdapter__call_api_no_retry = MagicMock(
211+
return_value=MagicMock()
212+
)
213+
214+
with patch("conductor.client.adapters.api_client_adapter.logger") as mock_logger:
215+
api_adapter._ApiClientAdapter__call_api(
216+
resource_path="/test",
217+
method="GET",
218+
header_params={"Authorization": "Bearer token"},
219+
)
220+
221+
mock_logger.debug.assert_called_once()
222+
call_args = mock_logger.debug.call_args[0]
223+
assert (
224+
call_args[0] == "HTTP request method: %s; resource_path: %s; header_params: %s"
225+
)
226+
assert call_args[1] == "GET"
227+
assert call_args[2] == "/test"
228+
assert call_args[3] == {"Authorization": "Bearer token"}

0 commit comments

Comments
 (0)