|
17 | 17 | from binascii import unhexlify
|
18 | 18 | from datetime import datetime, timedelta
|
19 | 19 | from struct import unpack
|
20 |
| -from unittest.mock import patch |
| 20 | +from unittest.mock import AsyncMock, patch |
21 | 21 |
|
22 |
| -import pytest_asyncio |
| 22 | +import pytest |
| 23 | +from aiohttp import ClientSession, ContentTypeError |
23 | 24 | from assertpy import assert_that
|
24 | 25 | from pytest import mark
|
25 | 26 |
|
@@ -143,29 +144,77 @@ def test_convert_token_to_packet_with_false_token_should_throw_an_error(token, e
|
143 | 144 | ).when_called_with(token).is_equal_to(response)
|
144 | 145 |
|
145 | 146 |
|
146 |
| -@pytest_asyncio.fixture |
| 147 | +@pytest.mark.asyncio |
147 | 148 | @mark.parametrize("username, token, is_token_valid", [
|
148 | 149 | ("[email protected]", "zvVvd7JxtN7CgvkD1Psujw==", True)
|
149 | 150 | ])
|
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 |
153 | 154 | mock_response.json.return_value = {"result": "True"}
|
154 |
| - assert_that(tools.validate_token(username, token)).is_equal_to(is_token_valid) |
155 | 155 |
|
| 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 |
156 | 159 |
|
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 |
158 | 165 | @mark.parametrize("username, token, is_token_valid", [
|
159 | 166 |
|
160 | 167 | ("[email protected]", "notvalidtoken", False),
|
161 | 168 | ("", "notvalidtoken", False),
|
162 | 169 | ("", "", False)
|
163 | 170 | ])
|
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) |
169 | 218 |
|
170 | 219 |
|
171 | 220 | @mark.parametrize("device_type, circuit_number, index", [
|
|
0 commit comments