diff --git a/tests/components/todo/conftest.py b/tests/components/todo/conftest.py index 5742f2537496..70c428fea1c0 100644 --- a/tests/components/todo/conftest.py +++ b/tests/components/todo/conftest.py @@ -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), + ), ] diff --git a/tests/components/todo/test_init.py b/tests/components/todo/test_init.py index e7a9fd364f98..d11114240b9d 100644 --- a/tests/components/todo/test_init.py +++ b/tests/components/todo/test_init.py @@ -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",