Skip to content

Commit b0d5f52

Browse files
committed
Type hints for tests/unit/app/endpoints/test_providers.py
1 parent 1e1417f commit b0d5f52

1 file changed

Lines changed: 47 additions & 20 deletions

File tree

tests/unit/app/endpoints/test_providers.py

Lines changed: 47 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,58 @@
11
"""Unit tests for the /providers REST API endpoints."""
22

33
import pytest
4+
from pytest_mock import MockerFixture
45
from fastapi import HTTPException, Request, status
56
from llama_stack_client import APIConnectionError
67

8+
from authentication.interface import AuthTuple
9+
710
from app.endpoints.providers import (
811
get_provider_endpoint_handler,
912
providers_endpoint_handler,
1013
)
1114

1215

1316
@pytest.mark.asyncio
14-
async def test_providers_endpoint_configuration_not_loaded(mocker):
17+
async def test_providers_endpoint_configuration_not_loaded(
18+
mocker: MockerFixture,
19+
) -> None:
1520
"""Test that /providers endpoint raises HTTP 500 if configuration is not loaded."""
1621
mocker.patch("app.endpoints.providers.configuration", None)
1722
request = Request(scope={"type": "http"})
18-
auth = ("user", "token", {})
23+
24+
# Authorization tuple required by URL endpoint handler
25+
auth: AuthTuple = ("test_user_id", "test_user", True, "test_token")
1926

2027
with pytest.raises(HTTPException) as e:
2128
await providers_endpoint_handler(request=request, auth=auth)
2229
assert e.value.status_code == status.HTTP_500_INTERNAL_SERVER_ERROR
2330

2431

2532
@pytest.mark.asyncio
26-
async def test_providers_endpoint_connection_error(mocker):
33+
async def test_providers_endpoint_connection_error(mocker: MockerFixture) -> None:
2734
"""Test that /providers endpoint raises HTTP 500 if Llama Stack connection fails."""
2835
mock_client = mocker.AsyncMock()
29-
mock_client.providers.list.side_effect = APIConnectionError(request=None)
36+
mock_client.providers.list.side_effect = APIConnectionError(request=None) # type: ignore
3037
mocker.patch(
3138
"app.endpoints.providers.AsyncLlamaStackClientHolder"
3239
).return_value.get_client.return_value = mock_client
3340

3441
request = Request(scope={"type": "http"})
35-
auth = ("user", "token", {})
42+
43+
# Authorization tuple required by URL endpoint handler
44+
auth: AuthTuple = ("test_user_id", "test_user", True, "test_token")
3645

3746
with pytest.raises(HTTPException) as e:
3847
await providers_endpoint_handler(request=request, auth=auth)
3948
assert e.value.status_code == status.HTTP_500_INTERNAL_SERVER_ERROR
40-
assert "Unable to connect to Llama Stack" in e.value.detail["response"]
49+
detail = e.value.detail
50+
assert isinstance(detail, dict)
51+
assert "Unable to connect to Llama Stack" in detail["response"]
4152

4253

4354
@pytest.mark.asyncio
44-
async def test_providers_endpoint_success(mocker):
55+
async def test_providers_endpoint_success(mocker: MockerFixture) -> None:
4556
"""Test that /providers endpoint returns a grouped list of providers on success."""
4657
provider_list = [
4758
{
@@ -67,7 +78,9 @@ async def test_providers_endpoint_success(mocker):
6778
).return_value.get_client.return_value = mock_client
6879

6980
request = Request(scope={"type": "http"})
70-
auth = ("user", "token", {})
81+
82+
# Authorization tuple required by URL endpoint handler
83+
auth: AuthTuple = ("test_user_id", "test_user", True, "test_token")
7184

7285
response = await providers_endpoint_handler(request=request, auth=auth)
7386
assert "inference" in response.providers
@@ -76,7 +89,7 @@ async def test_providers_endpoint_success(mocker):
7689

7790

7891
@pytest.mark.asyncio
79-
async def test_get_provider_not_found(mocker):
92+
async def test_get_provider_not_found(mocker: MockerFixture) -> None:
8093
"""Test that /providers/{provider_id} endpoint raises HTTP 404 if the provider is not found."""
8194
mock_client = mocker.AsyncMock()
8295
mock_client.providers.list.return_value = []
@@ -85,18 +98,22 @@ async def test_get_provider_not_found(mocker):
8598
).return_value.get_client.return_value = mock_client
8699

87100
request = Request(scope={"type": "http"})
88-
auth = ("user", "token", {})
101+
102+
# Authorization tuple required by URL endpoint handler
103+
auth: AuthTuple = ("test_user_id", "test_user", True, "test_token")
89104

90105
with pytest.raises(HTTPException) as e:
91106
await get_provider_endpoint_handler(
92107
request=request, provider_id="openai", auth=auth
93108
)
94109
assert e.value.status_code == status.HTTP_404_NOT_FOUND
95-
assert "not found" in e.value.detail["response"]
110+
detail = e.value.detail
111+
assert isinstance(detail, dict)
112+
assert "not found" in detail["response"]
96113

97114

98115
@pytest.mark.asyncio
99-
async def test_get_provider_success(mocker):
116+
async def test_get_provider_success(mocker: MockerFixture) -> None:
100117
"""Test that /providers/{provider_id} endpoint returns provider details on success."""
101118
provider = {
102119
"api": "inference",
@@ -112,7 +129,9 @@ async def test_get_provider_success(mocker):
112129
).return_value.get_client.return_value = mock_client
113130

114131
request = Request(scope={"type": "http"})
115-
auth = ("user", "token", {})
132+
133+
# Authorization tuple required by URL endpoint handler
134+
auth: AuthTuple = ("test_user_id", "test_user", True, "test_token")
116135

117136
response = await get_provider_endpoint_handler(
118137
request=request, provider_id="openai", auth=auth
@@ -122,27 +141,31 @@ async def test_get_provider_success(mocker):
122141

123142

124143
@pytest.mark.asyncio
125-
async def test_get_provider_connection_error(mocker):
144+
async def test_get_provider_connection_error(mocker: MockerFixture) -> None:
126145
"""Test that /providers/{provider_id} raises HTTP 500 if Llama Stack connection fails."""
127146
mock_client = mocker.AsyncMock()
128-
mock_client.providers.list.side_effect = APIConnectionError(request=None)
147+
mock_client.providers.list.side_effect = APIConnectionError(request=None) # type: ignore
129148
mocker.patch(
130149
"app.endpoints.providers.AsyncLlamaStackClientHolder"
131150
).return_value.get_client.return_value = mock_client
132151

133152
request = Request(scope={"type": "http"})
134-
auth = ("user", "token", {})
153+
154+
# Authorization tuple required by URL endpoint handler
155+
auth: AuthTuple = ("test_user_id", "test_user", True, "test_token")
135156

136157
with pytest.raises(HTTPException) as e:
137158
await get_provider_endpoint_handler(
138159
request=request, provider_id="openai", auth=auth
139160
)
140161
assert e.value.status_code == status.HTTP_500_INTERNAL_SERVER_ERROR
141-
assert "Unable to connect to Llama Stack" in e.value.detail["response"]
162+
detail = e.value.detail
163+
assert isinstance(detail, dict)
164+
assert "Unable to connect to Llama Stack" in detail["response"]
142165

143166

144167
@pytest.mark.asyncio
145-
async def test_get_provider_unexpected_exception(mocker):
168+
async def test_get_provider_unexpected_exception(mocker: MockerFixture) -> None:
146169
"""Test that /providers/{provider_id} endpoint raises HTTP 500 for unexpected exceptions."""
147170
mock_client = mocker.AsyncMock()
148171
mock_client.providers.list.side_effect = Exception("boom")
@@ -151,11 +174,15 @@ async def test_get_provider_unexpected_exception(mocker):
151174
).return_value.get_client.return_value = mock_client
152175

153176
request = Request(scope={"type": "http"})
154-
auth = ("user", "token", {})
177+
178+
# Authorization tuple required by URL endpoint handler
179+
auth: AuthTuple = ("test_user_id", "test_user", True, "test_token")
155180

156181
with pytest.raises(HTTPException) as e:
157182
await get_provider_endpoint_handler(
158183
request=request, provider_id="openai", auth=auth
159184
)
160185
assert e.value.status_code == status.HTTP_500_INTERNAL_SERVER_ERROR
161-
assert "Unable to retrieve list of providers" in e.value.detail["response"]
186+
detail = e.value.detail
187+
assert isinstance(detail, dict)
188+
assert "Unable to retrieve list of providers" in detail["response"]

0 commit comments

Comments
 (0)