"""Tests for Picnic Tasks todo platform.""" from unittest.mock import MagicMock, Mock import pytest from syrupy.assertion import SnapshotAssertion from homeassistant.components.todo import DOMAIN from homeassistant.core import HomeAssistant from homeassistant.exceptions import ServiceValidationError from .conftest import ENTITY_ID from tests.common import MockConfigEntry async def test_cart_list_with_items( hass: HomeAssistant, init_integration, get_items, snapshot: SnapshotAssertion, ) -> None: """Test loading of shopping cart.""" state = hass.states.get(ENTITY_ID) assert state assert state.state == "10" assert snapshot == await get_items() async def test_cart_list_empty_items( hass: HomeAssistant, mock_picnic_api: MagicMock, mock_config_entry: MockConfigEntry ) -> None: """Test loading of shopping cart without items.""" mock_picnic_api.get_cart.return_value = {"items": []} mock_config_entry.add_to_hass(hass) await hass.config_entries.async_setup(mock_config_entry.entry_id) await hass.async_block_till_done() state = hass.states.get(ENTITY_ID) assert state assert state.state == "0" async def test_cart_list_unexpected_response( hass: HomeAssistant, mock_picnic_api: MagicMock, mock_config_entry: MockConfigEntry ) -> None: """Test loading of shopping cart without expected response.""" mock_picnic_api.get_cart.return_value = {} mock_config_entry.add_to_hass(hass) await hass.config_entries.async_setup(mock_config_entry.entry_id) await hass.async_block_till_done() state = hass.states.get(ENTITY_ID) assert state is None async def test_cart_list_null_response( hass: HomeAssistant, mock_picnic_api: MagicMock, mock_config_entry: MockConfigEntry ) -> None: """Test loading of shopping cart without response.""" mock_picnic_api.get_cart.return_value = None mock_config_entry.add_to_hass(hass) await hass.config_entries.async_setup(mock_config_entry.entry_id) await hass.async_block_till_done() state = hass.states.get(ENTITY_ID) assert state is None async def test_create_todo_list_item( hass: HomeAssistant, init_integration: MockConfigEntry, mock_picnic_api: MagicMock ) -> None: """Test for creating a picnic cart item.""" assert len(mock_picnic_api.get_cart.mock_calls) == 1 mock_picnic_api.search = Mock() mock_picnic_api.search.return_value = [ { "items": [ { "id": 321, "name": "Picnic Melk", "unit_quantity": "2 liter", } ] } ] mock_picnic_api.add_product = Mock() await hass.services.async_call( DOMAIN, "add_item", {"item": "Melk"}, target={"entity_id": ENTITY_ID}, blocking=True, ) args = mock_picnic_api.search.call_args assert args assert args[0][0] == "Melk" args = mock_picnic_api.add_product.call_args assert args assert args[0][0] == "321" assert args[0][1] == 1 assert len(mock_picnic_api.get_cart.mock_calls) == 2 async def test_create_todo_list_item_not_found( hass: HomeAssistant, init_integration: MockConfigEntry, mock_picnic_api: MagicMock ) -> None: """Test for creating a picnic cart item when ID is not found.""" mock_picnic_api.search = Mock() mock_picnic_api.search.return_value = [{"items": []}] with pytest.raises(ServiceValidationError): await hass.services.async_call( DOMAIN, "add_item", {"item": "Melk"}, target={"entity_id": ENTITY_ID}, blocking=True, )