From eaa25a33d73757520051e5453b3fe6a177547d7a Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Mon, 23 Sep 2024 18:09:53 +0200 Subject: [PATCH] Add more Wordle sensors (#126561) * Add more Wordle sensors * Add more Wordle sensors --- homeassistant/components/nyt_games/icons.json | 9 ++ homeassistant/components/nyt_games/sensor.py | 25 +++ .../components/nyt_games/strings.json | 9 ++ .../nyt_games/snapshots/test_sensor.ambr | 152 ++++++++++++++++++ 4 files changed, 195 insertions(+) diff --git a/homeassistant/components/nyt_games/icons.json b/homeassistant/components/nyt_games/icons.json index fe18cddc5c7..9e455cbf951 100644 --- a/homeassistant/components/nyt_games/icons.json +++ b/homeassistant/components/nyt_games/icons.json @@ -3,6 +3,15 @@ "sensor": { "wordles_played": { "default": "mdi:text-long" + }, + "wordles_won": { + "default": "mdi:trophy-award" + }, + "wordles_streak": { + "default": "mdi:calendar-range" + }, + "wordles_max_streak": { + "default": "mdi:calendar-month" } } } diff --git a/homeassistant/components/nyt_games/sensor.py b/homeassistant/components/nyt_games/sensor.py index 157b0311481..d677f2d166c 100644 --- a/homeassistant/components/nyt_games/sensor.py +++ b/homeassistant/components/nyt_games/sensor.py @@ -6,10 +6,12 @@ from dataclasses import dataclass from nyt_games import Wordle from homeassistant.components.sensor import ( + SensorDeviceClass, SensorEntity, SensorEntityDescription, SensorStateClass, ) +from homeassistant.const import UnitOfTime from homeassistant.core import HomeAssistant from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.typing import StateType @@ -34,6 +36,29 @@ SENSOR_TYPES: tuple[NYTGamesWordleSensorEntityDescription, ...] = ( native_unit_of_measurement="games", value_fn=lambda wordle: wordle.games_played, ), + NYTGamesWordleSensorEntityDescription( + key="wordles_won", + translation_key="wordles_won", + state_class=SensorStateClass.MEASUREMENT, + native_unit_of_measurement="games", + value_fn=lambda wordle: wordle.games_won, + ), + NYTGamesWordleSensorEntityDescription( + key="wordles_streak", + translation_key="wordles_streak", + state_class=SensorStateClass.TOTAL, + native_unit_of_measurement=UnitOfTime.DAYS, + device_class=SensorDeviceClass.DURATION, + value_fn=lambda wordle: wordle.current_streak, + ), + NYTGamesWordleSensorEntityDescription( + key="wordles_max_streak", + translation_key="wordles_max_streak", + state_class=SensorStateClass.TOTAL_INCREASING, + native_unit_of_measurement=UnitOfTime.DAYS, + device_class=SensorDeviceClass.DURATION, + value_fn=lambda wordle: wordle.max_streak, + ), ) diff --git a/homeassistant/components/nyt_games/strings.json b/homeassistant/components/nyt_games/strings.json index ff7b0297f22..152d523ec57 100644 --- a/homeassistant/components/nyt_games/strings.json +++ b/homeassistant/components/nyt_games/strings.json @@ -23,6 +23,15 @@ "sensor": { "wordles_played": { "name": "Wordles played" + }, + "wordles_won": { + "name": "Wordles won" + }, + "wordles_streak": { + "name": "Current Wordle streak" + }, + "wordles_max_streak": { + "name": "Highest Wordle streak" } } } diff --git a/tests/components/nyt_games/snapshots/test_sensor.ambr b/tests/components/nyt_games/snapshots/test_sensor.ambr index bb92d08f909..9f164f7da3b 100644 --- a/tests/components/nyt_games/snapshots/test_sensor.ambr +++ b/tests/components/nyt_games/snapshots/test_sensor.ambr @@ -1,4 +1,106 @@ # serializer version: 1 +# name: test_all_entities[sensor.nytgames_current_wordle_streak-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.nytgames_current_wordle_streak', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Current Wordle streak', + 'platform': 'nyt_games', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'wordles_streak', + 'unique_id': '218886794-wordles_streak', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.nytgames_current_wordle_streak-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'duration', + 'friendly_name': 'NYTGames Current Wordle streak', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.nytgames_current_wordle_streak', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '1', + }) +# --- +# name: test_all_entities[sensor.nytgames_highest_wordle_streak-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.nytgames_highest_wordle_streak', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Highest Wordle streak', + 'platform': 'nyt_games', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'wordles_max_streak', + 'unique_id': '218886794-wordles_max_streak', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.nytgames_highest_wordle_streak-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'duration', + 'friendly_name': 'NYTGames Highest Wordle streak', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.nytgames_highest_wordle_streak', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '5', + }) +# --- # name: test_all_entities[sensor.nytgames_wordles_played-entry] EntityRegistryEntrySnapshot({ 'aliases': set({ @@ -49,3 +151,53 @@ 'state': '33', }) # --- +# name: test_all_entities[sensor.nytgames_wordles_won-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.nytgames_wordles_won', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': None, + 'original_icon': None, + 'original_name': 'Wordles won', + 'platform': 'nyt_games', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'wordles_won', + 'unique_id': '218886794-wordles_won', + 'unit_of_measurement': 'games', + }) +# --- +# name: test_all_entities[sensor.nytgames_wordles_won-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'NYTGames Wordles won', + 'state_class': , + 'unit_of_measurement': 'games', + }), + 'context': , + 'entity_id': 'sensor.nytgames_wordles_won', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '26', + }) +# ---