diff --git a/homeassistant/components/playstation_network/coordinator.py b/homeassistant/components/playstation_network/coordinator.py index 5d8b1ab2696c1f..14ffb1dd11afc4 100644 --- a/homeassistant/components/playstation_network/coordinator.py +++ b/homeassistant/components/playstation_network/coordinator.py @@ -256,6 +256,7 @@ def _update_data(self) -> PlaystationNetworkData: account_id=self.user.account_id, presence=self.user.get_presence(), profile=self.profile, + trophy_summary=self.user.trophy_summary(), ) except PSNAWPForbiddenError as error: raise UpdateFailed( diff --git a/homeassistant/components/playstation_network/sensor.py b/homeassistant/components/playstation_network/sensor.py index 16d1ff13906492..7e1c5ea6d57356 100644 --- a/homeassistant/components/playstation_network/sensor.py +++ b/homeassistant/components/playstation_network/sensor.py @@ -54,7 +54,7 @@ class PlaystationNetworkSensor(StrEnum): NOW_PLAYING = "now_playing" -SENSOR_DESCRIPTIONS_TROPHY: tuple[PlaystationNetworkSensorEntityDescription, ...] = ( +SENSOR_DESCRIPTIONS: tuple[PlaystationNetworkSensorEntityDescription, ...] = ( PlaystationNetworkSensorEntityDescription( key=PlaystationNetworkSensor.TROPHY_LEVEL, translation_key=PlaystationNetworkSensor.TROPHY_LEVEL, @@ -106,8 +106,6 @@ class PlaystationNetworkSensor(StrEnum): else None ), ), -) -SENSOR_DESCRIPTIONS_USER: tuple[PlaystationNetworkSensorEntityDescription, ...] = ( PlaystationNetworkSensorEntityDescription( key=PlaystationNetworkSensor.ONLINE_ID, translation_key=PlaystationNetworkSensor.ONLINE_ID, @@ -152,7 +150,7 @@ async def async_setup_entry( coordinator = config_entry.runtime_data.user_data async_add_entities( PlaystationNetworkSensorEntity(coordinator, description) - for description in SENSOR_DESCRIPTIONS_TROPHY + SENSOR_DESCRIPTIONS_USER + for description in SENSOR_DESCRIPTIONS ) for ( @@ -166,7 +164,7 @@ async def async_setup_entry( description, config_entry.subentries[subentry_id], ) - for description in SENSOR_DESCRIPTIONS_USER + for description in SENSOR_DESCRIPTIONS ], config_subentry_id=subentry_id, ) diff --git a/tests/components/playstation_network/conftest.py b/tests/components/playstation_network/conftest.py index f81f3842d806c9..7686876106422a 100644 --- a/tests/components/playstation_network/conftest.py +++ b/tests/components/playstation_network/conftest.py @@ -185,7 +185,9 @@ def mock_psnawpapi(mock_user: MagicMock) -> Generator[MagicMock]: spec=User, account_id="fren-psn-id", online_id="PublicUniversalFriend" ) fren.get_presence.return_value = mock_user.get_presence.return_value - + fren.trophy_summary.return_value = TrophySummary( + "fren-psn-id", 420, 20, 5, TrophySet(4782, 1245, 437, 96) + ) client.user.return_value.friends_list.return_value = [fren] yield client diff --git a/tests/components/playstation_network/snapshots/test_sensor.ambr b/tests/components/playstation_network/snapshots/test_sensor.ambr index 9d550e546b0402..9d582f2953aad6 100644 --- a/tests/components/playstation_network/snapshots/test_sensor.ambr +++ b/tests/components/playstation_network/snapshots/test_sensor.ambr @@ -1,4 +1,102 @@ # serializer version: 1 +# name: test_sensors[sensor.publicuniversalfriend_bronze_trophies-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.publicuniversalfriend_bronze_trophies', + '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': 'Bronze trophies', + 'platform': 'playstation_network', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': , + 'unique_id': 'fren-psn-id_earned_trophies_bronze', + 'unit_of_measurement': 'trophies', + }) +# --- +# name: test_sensors[sensor.publicuniversalfriend_bronze_trophies-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'PublicUniversalFriend Bronze trophies', + 'unit_of_measurement': 'trophies', + }), + 'context': , + 'entity_id': 'sensor.publicuniversalfriend_bronze_trophies', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '4782', + }) +# --- +# name: test_sensors[sensor.publicuniversalfriend_gold_trophies-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.publicuniversalfriend_gold_trophies', + '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': 'Gold trophies', + 'platform': 'playstation_network', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': , + 'unique_id': 'fren-psn-id_earned_trophies_gold', + 'unit_of_measurement': 'trophies', + }) +# --- +# name: test_sensors[sensor.publicuniversalfriend_gold_trophies-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'PublicUniversalFriend Gold trophies', + 'unit_of_measurement': 'trophies', + }), + 'context': , + 'entity_id': 'sensor.publicuniversalfriend_gold_trophies', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '437', + }) +# --- # name: test_sensors[sensor.publicuniversalfriend_last_online-entry] EntityRegistryEntrySnapshot({ 'aliases': set({ @@ -48,6 +146,55 @@ 'state': '2025-06-30T01:42:15+00:00', }) # --- +# name: test_sensors[sensor.publicuniversalfriend_next_level-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.publicuniversalfriend_next_level', + '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': 'Next level', + 'platform': 'playstation_network', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': , + 'unique_id': 'fren-psn-id_trophy_level_progress', + 'unit_of_measurement': '%', + }) +# --- +# name: test_sensors[sensor.publicuniversalfriend_next_level-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'PublicUniversalFriend Next level', + 'unit_of_measurement': '%', + }), + 'context': , + 'entity_id': 'sensor.publicuniversalfriend_next_level', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '20', + }) +# --- # name: test_sensors[sensor.publicuniversalfriend_now_playing-entry] EntityRegistryEntrySnapshot({ 'aliases': set({ @@ -206,6 +353,152 @@ 'state': 'availabletoplay', }) # --- +# name: test_sensors[sensor.publicuniversalfriend_platinum_trophies-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.publicuniversalfriend_platinum_trophies', + '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': 'Platinum trophies', + 'platform': 'playstation_network', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': , + 'unique_id': 'fren-psn-id_earned_trophies_platinum', + 'unit_of_measurement': 'trophies', + }) +# --- +# name: test_sensors[sensor.publicuniversalfriend_platinum_trophies-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'PublicUniversalFriend Platinum trophies', + 'unit_of_measurement': 'trophies', + }), + 'context': , + 'entity_id': 'sensor.publicuniversalfriend_platinum_trophies', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '96', + }) +# --- +# name: test_sensors[sensor.publicuniversalfriend_silver_trophies-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.publicuniversalfriend_silver_trophies', + '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': 'Silver trophies', + 'platform': 'playstation_network', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': , + 'unique_id': 'fren-psn-id_earned_trophies_silver', + 'unit_of_measurement': 'trophies', + }) +# --- +# name: test_sensors[sensor.publicuniversalfriend_silver_trophies-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'PublicUniversalFriend Silver trophies', + 'unit_of_measurement': 'trophies', + }), + 'context': , + 'entity_id': 'sensor.publicuniversalfriend_silver_trophies', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '1245', + }) +# --- +# name: test_sensors[sensor.publicuniversalfriend_trophy_level-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'config_subentry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.publicuniversalfriend_trophy_level', + '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': 'Trophy level', + 'platform': 'playstation_network', + 'previous_unique_id': None, + 'suggested_object_id': None, + 'supported_features': 0, + 'translation_key': , + 'unique_id': 'fren-psn-id_trophy_level', + 'unit_of_measurement': None, + }) +# --- +# name: test_sensors[sensor.publicuniversalfriend_trophy_level-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'friendly_name': 'PublicUniversalFriend Trophy level', + }), + 'context': , + 'entity_id': 'sensor.publicuniversalfriend_trophy_level', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '420', + }) +# --- # name: test_sensors[sensor.testuser_bronze_trophies-entry] EntityRegistryEntrySnapshot({ 'aliases': set({