Improve todo tests (#173454)

This commit is contained in:
James Myatt
2026-06-11 06:43:53 +02:00
committed by GitHub
parent 1126e89d32
commit 2e4185840a
2 changed files with 36 additions and 18 deletions
+16 -3
View File
@@ -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),
),
]
+20 -15
View File
@@ -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",