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)