Skip to content

Commit d1f42c3

Browse files
authored
Merge pull request #371 from tisnik/use-proper-request-object-to-test-endpoints
Use proper Request object to test REST API endpoints handlers
2 parents a23527b + 223e3b4 commit d1f42c3

File tree

6 files changed

+73
-15
lines changed

6 files changed

+73
-15
lines changed

tests/unit/app/endpoints/test_config.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import pytest
44

5-
from fastapi import HTTPException, status
5+
from fastapi import HTTPException, Request, status
66
from app.endpoints.config import config_endpoint_handler
77
from configuration import AppConfig
88

@@ -15,7 +15,11 @@ def test_config_endpoint_handler_configuration_not_loaded(mocker):
1515
)
1616
mocker.patch("app.endpoints.config.configuration", None)
1717

18-
request = None
18+
request = Request(
19+
scope={
20+
"type": "http",
21+
}
22+
)
1923
with pytest.raises(HTTPException) as e:
2024
config_endpoint_handler(request)
2125
assert e.status_code == status.HTTP_500_INTERNAL_SERVER_ERROR
@@ -49,7 +53,11 @@ def test_config_endpoint_handler_configuration_loaded():
4953
}
5054
cfg = AppConfig()
5155
cfg.init_from_dict(config_dict)
52-
request = None
56+
request = Request(
57+
scope={
58+
"type": "http",
59+
}
60+
)
5361
response = config_endpoint_handler(request)
5462
assert response is not None
5563
assert response == cfg.configuration

tests/unit/app/endpoints/test_info.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
"""Unit tests for the /info REST API endpoint."""
22

3+
from fastapi import Request
4+
35
from app.endpoints.info import info_endpoint_handler
46
from configuration import AppConfig
57

@@ -28,7 +30,11 @@ def test_info_endpoint():
2830
}
2931
cfg = AppConfig()
3032
cfg.init_from_dict(config_dict)
31-
request = None
33+
request = Request(
34+
scope={
35+
"type": "http",
36+
}
37+
)
3238
response = info_endpoint_handler(request)
3339
assert response is not None
3440
assert response.name is not None

tests/unit/app/endpoints/test_metrics.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
"""Unit tests for the /metrics REST API endpoint."""
22

3+
from fastapi import Request
4+
35
from app.endpoints.metrics import metrics_endpoint_handler
46

57

@@ -8,7 +10,12 @@ async def test_metrics_endpoint(mocker):
810
mock_setup_metrics = mocker.patch(
911
"app.endpoints.metrics.setup_model_metrics", return_value=None
1012
)
11-
response = await metrics_endpoint_handler(None)
13+
request = Request(
14+
scope={
15+
"type": "http",
16+
}
17+
)
18+
response = await metrics_endpoint_handler(request)
1219
assert response is not None
1320
assert response.status_code == 200
1421
assert "text/plain" in response.headers["Content-Type"]

tests/unit/app/endpoints/test_query.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,10 @@ async def test_query_endpoint_handler_configuration_not_loaded(mocker):
6666
)
6767
mocker.patch("app.endpoints.query.configuration", None)
6868

69-
request = None
69+
query = "What is OpenStack?"
70+
query_request = QueryRequest(query=query)
7071
with pytest.raises(HTTPException) as e:
71-
await query_endpoint_handler(request, auth=["test-user", "", "token"])
72+
await query_endpoint_handler(query_request, auth=["test-user", "", "token"])
7273
assert e.value.status_code == status.HTTP_500_INTERNAL_SERVER_ERROR
7374
assert e.value.detail["response"] == "Configuration is not loaded"
7475

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
"""Unit tests for the / endpoint handler."""
22

3+
from fastapi import Request
4+
35
from app.endpoints.root import root_endpoint_handler
46

57

68
def test_root_endpoint():
79
"""Test the root endpoint handler."""
8-
request = None
10+
request = Request(
11+
scope={
12+
"type": "http",
13+
}
14+
)
915
response = root_endpoint_handler(request)
1016
assert response is not None

tests/unit/app/endpoints/test_streaming_query.py

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import pytest
1010

11-
from fastapi import HTTPException, status
11+
from fastapi import HTTPException, Request, status
1212
from fastapi.responses import StreamingResponse
1313

1414
from llama_stack_client import APIConnectionError
@@ -118,9 +118,14 @@ async def test_streaming_query_endpoint_handler_configuration_not_loaded(mocker)
118118
query = "What is OpenStack?"
119119
query_request = QueryRequest(query=query)
120120

121+
request = Request(
122+
scope={
123+
"type": "http",
124+
}
125+
)
121126
# await the async function
122127
with pytest.raises(HTTPException) as e:
123-
await streaming_query_endpoint_handler(None, query_request, auth=MOCK_AUTH)
128+
await streaming_query_endpoint_handler(request, query_request, auth=MOCK_AUTH)
124129
assert e.status_code == status.HTTP_500_INTERNAL_SERVER_ERROR
125130
assert e.detail["response"] == "Configuration is not loaded"
126131

@@ -145,9 +150,14 @@ async def test_streaming_query_endpoint_on_connection_error(mocker):
145150
mock_async_lsc = mocker.patch("client.AsyncLlamaStackClientHolder.get_client")
146151
mock_async_lsc.return_value = mock_client
147152

153+
request = Request(
154+
scope={
155+
"type": "http",
156+
}
157+
)
148158
# await the async function
149159
with pytest.raises(HTTPException) as e:
150-
await streaming_query_endpoint_handler(None, query_request, auth=MOCK_AUTH)
160+
await streaming_query_endpoint_handler(request, query_request, auth=MOCK_AUTH)
151161
assert e.status_code == status.HTTP_500_INTERNAL_SERVER_ERROR
152162
assert e.detail["response"] == "Configuration is not loaded"
153163

@@ -256,9 +266,14 @@ async def _test_streaming_query_endpoint_handler(mocker, store_transcript=False)
256266

257267
query_request = QueryRequest(query=query)
258268

269+
request = Request(
270+
scope={
271+
"type": "http",
272+
}
273+
)
259274
# Await the async function
260275
response = await streaming_query_endpoint_handler(
261-
None, query_request, auth=MOCK_AUTH
276+
request, query_request, auth=MOCK_AUTH
262277
)
263278

264279
# assert the response is a StreamingResponse
@@ -1259,8 +1274,13 @@ async def test_auth_tuple_unpacking_in_streaming_query_endpoint_handler(mocker):
12591274
"app.endpoints.streaming_query.is_transcripts_enabled", return_value=False
12601275
)
12611276

1277+
request = Request(
1278+
scope={
1279+
"type": "http",
1280+
}
1281+
)
12621282
await streaming_query_endpoint_handler(
1263-
None,
1283+
request,
12641284
QueryRequest(query="test query"),
12651285
auth=("user123", "username", "auth_token_123"),
12661286
mcp_headers=None,
@@ -1301,8 +1321,13 @@ async def test_streaming_query_endpoint_handler_no_tools_true(mocker):
13011321

13021322
query_request = QueryRequest(query="What is OpenStack?", no_tools=True)
13031323

1324+
request = Request(
1325+
scope={
1326+
"type": "http",
1327+
}
1328+
)
13041329
response = await streaming_query_endpoint_handler(
1305-
None, query_request, auth=MOCK_AUTH
1330+
request, query_request, auth=MOCK_AUTH
13061331
)
13071332

13081333
# Assert the response is a StreamingResponse
@@ -1341,8 +1366,13 @@ async def test_streaming_query_endpoint_handler_no_tools_false(mocker):
13411366

13421367
query_request = QueryRequest(query="What is OpenStack?", no_tools=False)
13431368

1369+
request = Request(
1370+
scope={
1371+
"type": "http",
1372+
}
1373+
)
13441374
response = await streaming_query_endpoint_handler(
1345-
None, query_request, auth=MOCK_AUTH
1375+
request, query_request, auth=MOCK_AUTH
13461376
)
13471377

13481378
# Assert the response is a StreamingResponse

0 commit comments

Comments
 (0)