mirror of
https://github.com/home-assistant/core.git
synced 2026-09-03 03:51:51 +01:00
Improve todo tests (#173454)
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
"""Fixtures for the todo component tests."""
|
||||
|
||||
from collections.abc import Generator
|
||||
import datetime
|
||||
from unittest.mock import AsyncMock
|
||||
import zoneinfo
|
||||
|
||||
import pytest
|
||||
|
||||
@@ -19,6 +21,8 @@ from . import TEST_DOMAIN, MockFlow, MockTodoListEntity
|
||||
|
||||
from tests.common import MockModule, mock_config_flow, mock_integration, mock_platform
|
||||
|
||||
TEST_TIMEZONE = zoneinfo.ZoneInfo("America/Regina")
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def config_flow_fixture(hass: HomeAssistant) -> Generator[None]:
|
||||
@@ -62,7 +66,7 @@ def mock_setup_integration(hass: HomeAssistant) -> None:
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
async def set_time_zone(hass: HomeAssistant) -> None:
|
||||
"""Set the time zone for the tests that keesp UTC-6 all year round."""
|
||||
"""Set the time zone for the tests that keeps UTC-6 all year round."""
|
||||
await hass.config.async_set_time_zone("America/Regina")
|
||||
|
||||
|
||||
@@ -70,8 +74,17 @@ async def set_time_zone(hass: HomeAssistant) -> None:
|
||||
def mock_test_entity_items() -> list[TodoItem]:
|
||||
"""Fixture that creates the items returned by the test entity."""
|
||||
return [
|
||||
TodoItem(summary="Item #1", uid="1", status=TodoItemStatus.NEEDS_ACTION),
|
||||
TodoItem(summary="Item #2", uid="2", status=TodoItemStatus.COMPLETED),
|
||||
TodoItem(
|
||||
summary="Item #1",
|
||||
uid="1",
|
||||
status=TodoItemStatus.NEEDS_ACTION,
|
||||
),
|
||||
TodoItem(
|
||||
summary="Item #2",
|
||||
uid="2",
|
||||
status=TodoItemStatus.COMPLETED,
|
||||
completed=datetime.datetime(2026, 3, 27, 11, 0, 0, tzinfo=TEST_TIMEZONE),
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
|
||||
@@ -35,6 +35,9 @@ from . import create_mock_platform
|
||||
|
||||
from tests.typing import WebSocketGenerator
|
||||
|
||||
TEST_TIMEZONE = zoneinfo.ZoneInfo("America/Regina")
|
||||
TEST_OFFSET = "-06:00"
|
||||
|
||||
ITEM_1 = {
|
||||
"uid": "1",
|
||||
"summary": "Item #1",
|
||||
@@ -44,9 +47,8 @@ ITEM_2 = {
|
||||
"uid": "2",
|
||||
"summary": "Item #2",
|
||||
"status": "completed",
|
||||
"completed": f"2026-03-27T11:00:00{TEST_OFFSET}",
|
||||
}
|
||||
TEST_TIMEZONE = zoneinfo.ZoneInfo("America/Regina")
|
||||
TEST_OFFSET = "-06:00"
|
||||
|
||||
|
||||
async def test_unload_entry(
|
||||
@@ -81,7 +83,7 @@ async def test_list_todo_items(
|
||||
state = hass.states.get("todo.entity1")
|
||||
assert state
|
||||
assert state.state == "1"
|
||||
assert state.attributes == {"supported_features": 15}
|
||||
assert state.attributes == {ATTR_SUPPORTED_FEATURES: 15}
|
||||
|
||||
client = await hass_ws_client(hass)
|
||||
await client.send_json(
|
||||
@@ -324,6 +326,7 @@ async def test_add_item_service_extended_fields(
|
||||
) -> None:
|
||||
"""Test adding an item in a To-do list."""
|
||||
|
||||
assert test_entity._attr_supported_features is not None
|
||||
test_entity._attr_supported_features |= supported_entity_feature
|
||||
await create_mock_platform(hass, [test_entity])
|
||||
|
||||
@@ -555,9 +558,9 @@ async def test_update_item_service_invalid_input(
|
||||
@pytest.mark.parametrize(
|
||||
("update_data"),
|
||||
[
|
||||
({"due_datetime": f"2023-11-13T17:00:00{TEST_OFFSET}"}),
|
||||
({"due_date": "2023-11-13"}),
|
||||
({"description": "Submit revised draft"}),
|
||||
({ATTR_DUE_DATETIME: f"2023-11-13T17:00:00{TEST_OFFSET}"}),
|
||||
({ATTR_DUE_DATE: "2023-11-13"}),
|
||||
({ATTR_DESCRIPTION: "Submit revised draft"}),
|
||||
],
|
||||
)
|
||||
async def test_update_todo_item_field_unsupported(
|
||||
@@ -623,6 +626,7 @@ async def test_update_todo_item_extended_fields(
|
||||
) -> None:
|
||||
"""Test updating an item in a To-do list."""
|
||||
|
||||
assert test_entity._attr_supported_features is not None
|
||||
test_entity._attr_supported_features |= supported_entity_feature
|
||||
await create_mock_platform(hass, [test_entity])
|
||||
|
||||
@@ -645,32 +649,32 @@ async def test_update_todo_item_extended_fields(
|
||||
[
|
||||
(
|
||||
[TodoItem(uid="1", summary="Summary", description="description")],
|
||||
{"description": "Submit revised draft"},
|
||||
{ATTR_DESCRIPTION: "Submit revised draft"},
|
||||
TodoItem(uid="1", summary="Summary", description="Submit revised draft"),
|
||||
),
|
||||
(
|
||||
[TodoItem(uid="1", summary="Summary", description="description")],
|
||||
{"description": ""},
|
||||
{ATTR_DESCRIPTION: ""},
|
||||
TodoItem(uid="1", summary="Summary", description=""),
|
||||
),
|
||||
(
|
||||
[TodoItem(uid="1", summary="Summary", description="description")],
|
||||
{"description": None},
|
||||
{ATTR_DESCRIPTION: None},
|
||||
TodoItem(uid="1", summary="Summary"),
|
||||
),
|
||||
(
|
||||
[TodoItem(uid="1", summary="Summary", due=datetime.date(2024, 1, 1))],
|
||||
{"due_date": datetime.date(2024, 1, 2)},
|
||||
{ATTR_DUE_DATE: datetime.date(2024, 1, 2)},
|
||||
TodoItem(uid="1", summary="Summary", due=datetime.date(2024, 1, 2)),
|
||||
),
|
||||
(
|
||||
[TodoItem(uid="1", summary="Summary", due=datetime.date(2024, 1, 1))],
|
||||
{"due_date": None},
|
||||
{ATTR_DUE_DATE: None},
|
||||
TodoItem(uid="1", summary="Summary"),
|
||||
),
|
||||
(
|
||||
[TodoItem(uid="1", summary="Summary", due=datetime.date(2024, 1, 1))],
|
||||
{"due_datetime": datetime.datetime(2024, 1, 1, 10, 0, 0)},
|
||||
{ATTR_DUE_DATETIME: datetime.datetime(2024, 1, 1, 10, 0, 0)},
|
||||
TodoItem(
|
||||
uid="1",
|
||||
summary="Summary",
|
||||
@@ -687,7 +691,7 @@ async def test_update_todo_item_extended_fields(
|
||||
due=datetime.datetime(2024, 1, 1, 10, 0, 0),
|
||||
)
|
||||
],
|
||||
{"due_datetime": None},
|
||||
{ATTR_DUE_DATETIME: None},
|
||||
TodoItem(uid="1", summary="Summary"),
|
||||
),
|
||||
],
|
||||
@@ -709,6 +713,7 @@ async def test_update_todo_item_extended_fields_overwrite_existing_values(
|
||||
) -> None:
|
||||
"""Test updating an item in a To-do list."""
|
||||
|
||||
assert test_entity._attr_supported_features is not None
|
||||
test_entity._attr_supported_features |= (
|
||||
TodoListEntityFeature.SET_DESCRIPTION_ON_ITEM
|
||||
| TodoListEntityFeature.SET_DUE_DATE_ON_ITEM
|
||||
@@ -1094,7 +1099,7 @@ async def test_subscribe(
|
||||
"status": "completed",
|
||||
"due": None,
|
||||
"description": None,
|
||||
"completed": None,
|
||||
"completed": f"2026-03-27T11:00:00{TEST_OFFSET}",
|
||||
},
|
||||
]
|
||||
}
|
||||
@@ -1122,7 +1127,7 @@ async def test_subscribe(
|
||||
"status": "completed",
|
||||
"due": None,
|
||||
"description": None,
|
||||
"completed": None,
|
||||
"completed": f"2026-03-27T11:00:00{TEST_OFFSET}",
|
||||
},
|
||||
{
|
||||
"summary": "Item #3",
|
||||
|
||||
Reference in New Issue
Block a user