63 lines
2.3 KiB
Python
63 lines
2.3 KiB
Python
import pytest
|
|
import asyncio
|
|
from unittest.mock import patch, AsyncMock
|
|
from ..src.abricksetapi import get_set
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
@patch("abricksetapi.login", new_callable=AsyncMock)
|
|
@patch("abricksetapi.aiohttp.ClientSession")
|
|
async def test_get_set_success(mock_session_cls, mock_login):
|
|
# Mock login response
|
|
mock_login.return_value = {"hash": "fakehash"}
|
|
|
|
# Prepare mock response data
|
|
mock_response_data = {
|
|
"sets": [
|
|
{
|
|
"number": "10349-1",
|
|
"name": "Icons: Modular Jazz Club",
|
|
"image": {"thumbnailURL": "http://image.url"},
|
|
"barcode": {"UPC": "123456789012"},
|
|
"LEGOCom": {"US": {"retailPrice": 229.99}},
|
|
}
|
|
]
|
|
}
|
|
mock_response = AsyncMock()
|
|
mock_response.status = 200
|
|
mock_response.read.return_value = asyncio.Future()
|
|
mock_response.read.return_value.set_result(
|
|
str.encode(str(mock_response_data).replace("'", '"'))
|
|
)
|
|
|
|
# Mock session.get to return our mock_response
|
|
mock_session = AsyncMock()
|
|
mock_session.get.return_value.__aenter__.return_value = mock_response
|
|
mock_session_cls.return_value.__aenter__.return_value = mock_session
|
|
|
|
result = await get_set("10349")
|
|
assert result["set_num"] == "10349-1"
|
|
assert result["set_name"] == "Icons: Modular Jazz Club"
|
|
assert result["set_image"] == "http://image.url"
|
|
assert result["set_barcode"] == "123456789012"
|
|
assert result["set_retailprice"] == 230
|
|
assert "set_adjustredprice" in result
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
@patch("abricksetapi.login", new_callable=AsyncMock)
|
|
@patch("abricksetapi.aiohttp.ClientSession")
|
|
async def test_get_set_api_error(mock_session_cls, mock_login):
|
|
mock_login.return_value = {"hash": "fakehash"}
|
|
mock_response = AsyncMock()
|
|
mock_response.status = 500
|
|
mock_response.read.return_value = asyncio.Future()
|
|
mock_response.read.return_value.set_result(b"{}")
|
|
mock_session = AsyncMock()
|
|
mock_session.get.return_value.__aenter__.return_value = mock_response
|
|
mock_session_cls.return_value.__aenter__.return_value = mock_session
|
|
|
|
with pytest.raises(Exception) as excinfo:
|
|
await get_set("badset")
|
|
assert "Internal Server Error" in str(excinfo.value)
|