Skip to content

Commit 130dbc2

Browse files
committed
fix validate_token tests
1 parent 2d589f1 commit 130dbc2

File tree

1 file changed

+62
-13
lines changed

1 file changed

+62
-13
lines changed

tests/test_device_tools.py

Lines changed: 62 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@
1717
from binascii import unhexlify
1818
from datetime import datetime, timedelta
1919
from struct import unpack
20-
from unittest.mock import patch
20+
from unittest.mock import AsyncMock, patch
2121

22-
import pytest_asyncio
22+
import pytest
23+
from aiohttp import ClientSession, ContentTypeError
2324
from assertpy import assert_that
2425
from pytest import mark
2526

@@ -143,29 +144,77 @@ def test_convert_token_to_packet_with_false_token_should_throw_an_error(token, e
143144
).when_called_with(token).is_equal_to(response)
144145

145146

146-
@pytest_asyncio.fixture
147+
@pytest.mark.asyncio
147148
@mark.parametrize("username, token, is_token_valid", [
148149
("[email protected]", "zvVvd7JxtN7CgvkD1Psujw==", True)
149150
])
150-
async def test_validate_token_should_return_token_valid(mock_post, username, token, is_token_valid):
151-
mock_response = mock_post.return_value
152-
mock_response.status_code = 200
151+
async def test_validate_token_should_return_token_valid(username, token, is_token_valid):
152+
mock_response = AsyncMock()
153+
mock_response.status = 200
153154
mock_response.json.return_value = {"result": "True"}
154-
assert_that(tools.validate_token(username, token)).is_equal_to(is_token_valid)
155155

156+
mock_session = AsyncMock(spec=ClientSession)
157+
mock_session.__aenter__.return_value = mock_session
158+
mock_session.post.return_value.__aenter__.return_value = mock_response
156159

157-
@pytest_asyncio.fixture
160+
with patch("aiohttp.ClientSession", return_value=mock_session):
161+
assert_that(await tools.validate_token(username, token)).is_equal_to(is_token_valid)
162+
163+
164+
@pytest.mark.asyncio
158165
@mark.parametrize("username, token, is_token_valid", [
159166
("[email protected]", "", False),
160167
("[email protected]", "notvalidtoken", False),
161168
("", "notvalidtoken", False),
162169
("", "", False)
163170
])
164-
async def test_validate_token_should_return_token_invalid(mock_post, username, token, is_token_valid):
165-
mock_response = mock_post.return_value
166-
mock_response.status_code = 200
167-
mock_response.json.return_value = {"result": "False"}
168-
assert_that(tools.validate_token(username, token)).is_equal_to(is_token_valid)
171+
async def test_validate_token_should_return_token_invalid(username, token, is_token_valid):
172+
"""Test validate_token with invalid token response."""
173+
mock_response = AsyncMock()
174+
mock_response.status = 200
175+
mock_response.json.return_value = {"result": "false"}
176+
177+
mock_session = AsyncMock(spec=ClientSession)
178+
mock_session.__aenter__.return_value = mock_session
179+
mock_session.post.return_value.__aenter__.return_value = mock_response
180+
181+
with patch("aiohttp.ClientSession", return_value=mock_session):
182+
assert_that(await tools.validate_token(username, token)).is_equal_to(is_token_valid)
183+
184+
185+
@pytest.mark.asyncio
186+
@mark.parametrize("username, token, return_value", [
187+
("[email protected]", "zvVvd7JxtN7CgvkD1Psujw==", False)
188+
])
189+
async def test_validate_token_http_error(username, token, return_value):
190+
"""Test validate_token with HTTP error response."""
191+
mock_response = AsyncMock()
192+
mock_response.status = 404
193+
194+
mock_session = AsyncMock(spec=ClientSession)
195+
mock_session.__aenter__.return_value = mock_session
196+
mock_session.post.return_value.__aenter__.return_value = mock_response
197+
198+
with patch("aioswitcher.device.tools.aiohttp.ClientSession", return_value=mock_session):
199+
assert_that(await tools.validate_token(username, token)).is_equal_to(return_value)
200+
201+
202+
@pytest.mark.asyncio
203+
@mark.parametrize("username, token, return_value", [
204+
("[email protected]", "zvVvd7JxtN7CgvkD1Psujw==", False)
205+
])
206+
async def test_validate_token_json_error(username, token, return_value):
207+
"""Test validate_token with invalid JSON response."""
208+
mock_response = AsyncMock()
209+
mock_response.status = 200
210+
mock_response.json.side_effect = ContentTypeError(None, None)
211+
212+
mock_session = AsyncMock(spec=ClientSession)
213+
mock_session.__aenter__.return_value = mock_session
214+
mock_session.post.return_value.__aenter__.return_value = mock_response
215+
216+
with patch("aioswitcher.device.tools.aiohttp.ClientSession", return_value=mock_session):
217+
assert_that(await tools.validate_token(username, token)).is_equal_to(return_value)
169218

170219

171220
@mark.parametrize("device_type, circuit_number, index", [

0 commit comments

Comments
 (0)