core/tests/components/picnic/test_todo.py

127 lines
3.6 KiB
Python

"""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,
)