Skip to content

Commit 2240d6b

Browse files
authored
Enable trophy sensors also for friends in PlayStation Network integration (home-assistant#156106)
1 parent d1536ee commit 2240d6b

File tree

4 files changed

+300
-6
lines changed

4 files changed

+300
-6
lines changed

homeassistant/components/playstation_network/coordinator.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ def _update_data(self) -> PlaystationNetworkData:
256256
account_id=self.user.account_id,
257257
presence=self.user.get_presence(),
258258
profile=self.profile,
259+
trophy_summary=self.user.trophy_summary(),
259260
)
260261
except PSNAWPForbiddenError as error:
261262
raise UpdateFailed(

homeassistant/components/playstation_network/sensor.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class PlaystationNetworkSensor(StrEnum):
5454
NOW_PLAYING = "now_playing"
5555

5656

57-
SENSOR_DESCRIPTIONS_TROPHY: tuple[PlaystationNetworkSensorEntityDescription, ...] = (
57+
SENSOR_DESCRIPTIONS: tuple[PlaystationNetworkSensorEntityDescription, ...] = (
5858
PlaystationNetworkSensorEntityDescription(
5959
key=PlaystationNetworkSensor.TROPHY_LEVEL,
6060
translation_key=PlaystationNetworkSensor.TROPHY_LEVEL,
@@ -106,8 +106,6 @@ class PlaystationNetworkSensor(StrEnum):
106106
else None
107107
),
108108
),
109-
)
110-
SENSOR_DESCRIPTIONS_USER: tuple[PlaystationNetworkSensorEntityDescription, ...] = (
111109
PlaystationNetworkSensorEntityDescription(
112110
key=PlaystationNetworkSensor.ONLINE_ID,
113111
translation_key=PlaystationNetworkSensor.ONLINE_ID,
@@ -152,7 +150,7 @@ async def async_setup_entry(
152150
coordinator = config_entry.runtime_data.user_data
153151
async_add_entities(
154152
PlaystationNetworkSensorEntity(coordinator, description)
155-
for description in SENSOR_DESCRIPTIONS_TROPHY + SENSOR_DESCRIPTIONS_USER
153+
for description in SENSOR_DESCRIPTIONS
156154
)
157155

158156
for (
@@ -166,7 +164,7 @@ async def async_setup_entry(
166164
description,
167165
config_entry.subentries[subentry_id],
168166
)
169-
for description in SENSOR_DESCRIPTIONS_USER
167+
for description in SENSOR_DESCRIPTIONS
170168
],
171169
config_subentry_id=subentry_id,
172170
)

tests/components/playstation_network/conftest.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,9 @@ def mock_psnawpapi(mock_user: MagicMock) -> Generator[MagicMock]:
185185
spec=User, account_id="fren-psn-id", online_id="PublicUniversalFriend"
186186
)
187187
fren.get_presence.return_value = mock_user.get_presence.return_value
188-
188+
fren.trophy_summary.return_value = TrophySummary(
189+
"fren-psn-id", 420, 20, 5, TrophySet(4782, 1245, 437, 96)
190+
)
189191
client.user.return_value.friends_list.return_value = [fren]
190192

191193
yield client

tests/components/playstation_network/snapshots/test_sensor.ambr

Lines changed: 293 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,102 @@
11
# serializer version: 1
2+
# name: test_sensors[sensor.publicuniversalfriend_bronze_trophies-entry]
3+
EntityRegistryEntrySnapshot({
4+
'aliases': set({
5+
}),
6+
'area_id': None,
7+
'capabilities': None,
8+
'config_entry_id': <ANY>,
9+
'config_subentry_id': <ANY>,
10+
'device_class': None,
11+
'device_id': <ANY>,
12+
'disabled_by': None,
13+
'domain': 'sensor',
14+
'entity_category': None,
15+
'entity_id': 'sensor.publicuniversalfriend_bronze_trophies',
16+
'has_entity_name': True,
17+
'hidden_by': None,
18+
'icon': None,
19+
'id': <ANY>,
20+
'labels': set({
21+
}),
22+
'name': None,
23+
'options': dict({
24+
}),
25+
'original_device_class': None,
26+
'original_icon': None,
27+
'original_name': 'Bronze trophies',
28+
'platform': 'playstation_network',
29+
'previous_unique_id': None,
30+
'suggested_object_id': None,
31+
'supported_features': 0,
32+
'translation_key': <PlaystationNetworkSensor.EARNED_TROPHIES_BRONZE: 'earned_trophies_bronze'>,
33+
'unique_id': 'fren-psn-id_earned_trophies_bronze',
34+
'unit_of_measurement': 'trophies',
35+
})
36+
# ---
37+
# name: test_sensors[sensor.publicuniversalfriend_bronze_trophies-state]
38+
StateSnapshot({
39+
'attributes': ReadOnlyDict({
40+
'friendly_name': 'PublicUniversalFriend Bronze trophies',
41+
'unit_of_measurement': 'trophies',
42+
}),
43+
'context': <ANY>,
44+
'entity_id': 'sensor.publicuniversalfriend_bronze_trophies',
45+
'last_changed': <ANY>,
46+
'last_reported': <ANY>,
47+
'last_updated': <ANY>,
48+
'state': '4782',
49+
})
50+
# ---
51+
# name: test_sensors[sensor.publicuniversalfriend_gold_trophies-entry]
52+
EntityRegistryEntrySnapshot({
53+
'aliases': set({
54+
}),
55+
'area_id': None,
56+
'capabilities': None,
57+
'config_entry_id': <ANY>,
58+
'config_subentry_id': <ANY>,
59+
'device_class': None,
60+
'device_id': <ANY>,
61+
'disabled_by': None,
62+
'domain': 'sensor',
63+
'entity_category': None,
64+
'entity_id': 'sensor.publicuniversalfriend_gold_trophies',
65+
'has_entity_name': True,
66+
'hidden_by': None,
67+
'icon': None,
68+
'id': <ANY>,
69+
'labels': set({
70+
}),
71+
'name': None,
72+
'options': dict({
73+
}),
74+
'original_device_class': None,
75+
'original_icon': None,
76+
'original_name': 'Gold trophies',
77+
'platform': 'playstation_network',
78+
'previous_unique_id': None,
79+
'suggested_object_id': None,
80+
'supported_features': 0,
81+
'translation_key': <PlaystationNetworkSensor.EARNED_TROPHIES_GOLD: 'earned_trophies_gold'>,
82+
'unique_id': 'fren-psn-id_earned_trophies_gold',
83+
'unit_of_measurement': 'trophies',
84+
})
85+
# ---
86+
# name: test_sensors[sensor.publicuniversalfriend_gold_trophies-state]
87+
StateSnapshot({
88+
'attributes': ReadOnlyDict({
89+
'friendly_name': 'PublicUniversalFriend Gold trophies',
90+
'unit_of_measurement': 'trophies',
91+
}),
92+
'context': <ANY>,
93+
'entity_id': 'sensor.publicuniversalfriend_gold_trophies',
94+
'last_changed': <ANY>,
95+
'last_reported': <ANY>,
96+
'last_updated': <ANY>,
97+
'state': '437',
98+
})
99+
# ---
2100
# name: test_sensors[sensor.publicuniversalfriend_last_online-entry]
3101
EntityRegistryEntrySnapshot({
4102
'aliases': set({
@@ -48,6 +146,55 @@
48146
'state': '2025-06-30T01:42:15+00:00',
49147
})
50148
# ---
149+
# name: test_sensors[sensor.publicuniversalfriend_next_level-entry]
150+
EntityRegistryEntrySnapshot({
151+
'aliases': set({
152+
}),
153+
'area_id': None,
154+
'capabilities': None,
155+
'config_entry_id': <ANY>,
156+
'config_subentry_id': <ANY>,
157+
'device_class': None,
158+
'device_id': <ANY>,
159+
'disabled_by': None,
160+
'domain': 'sensor',
161+
'entity_category': None,
162+
'entity_id': 'sensor.publicuniversalfriend_next_level',
163+
'has_entity_name': True,
164+
'hidden_by': None,
165+
'icon': None,
166+
'id': <ANY>,
167+
'labels': set({
168+
}),
169+
'name': None,
170+
'options': dict({
171+
}),
172+
'original_device_class': None,
173+
'original_icon': None,
174+
'original_name': 'Next level',
175+
'platform': 'playstation_network',
176+
'previous_unique_id': None,
177+
'suggested_object_id': None,
178+
'supported_features': 0,
179+
'translation_key': <PlaystationNetworkSensor.TROPHY_LEVEL_PROGRESS: 'trophy_level_progress'>,
180+
'unique_id': 'fren-psn-id_trophy_level_progress',
181+
'unit_of_measurement': '%',
182+
})
183+
# ---
184+
# name: test_sensors[sensor.publicuniversalfriend_next_level-state]
185+
StateSnapshot({
186+
'attributes': ReadOnlyDict({
187+
'friendly_name': 'PublicUniversalFriend Next level',
188+
'unit_of_measurement': '%',
189+
}),
190+
'context': <ANY>,
191+
'entity_id': 'sensor.publicuniversalfriend_next_level',
192+
'last_changed': <ANY>,
193+
'last_reported': <ANY>,
194+
'last_updated': <ANY>,
195+
'state': '20',
196+
})
197+
# ---
51198
# name: test_sensors[sensor.publicuniversalfriend_now_playing-entry]
52199
EntityRegistryEntrySnapshot({
53200
'aliases': set({
@@ -206,6 +353,152 @@
206353
'state': 'availabletoplay',
207354
})
208355
# ---
356+
# name: test_sensors[sensor.publicuniversalfriend_platinum_trophies-entry]
357+
EntityRegistryEntrySnapshot({
358+
'aliases': set({
359+
}),
360+
'area_id': None,
361+
'capabilities': None,
362+
'config_entry_id': <ANY>,
363+
'config_subentry_id': <ANY>,
364+
'device_class': None,
365+
'device_id': <ANY>,
366+
'disabled_by': None,
367+
'domain': 'sensor',
368+
'entity_category': None,
369+
'entity_id': 'sensor.publicuniversalfriend_platinum_trophies',
370+
'has_entity_name': True,
371+
'hidden_by': None,
372+
'icon': None,
373+
'id': <ANY>,
374+
'labels': set({
375+
}),
376+
'name': None,
377+
'options': dict({
378+
}),
379+
'original_device_class': None,
380+
'original_icon': None,
381+
'original_name': 'Platinum trophies',
382+
'platform': 'playstation_network',
383+
'previous_unique_id': None,
384+
'suggested_object_id': None,
385+
'supported_features': 0,
386+
'translation_key': <PlaystationNetworkSensor.EARNED_TROPHIES_PLATINUM: 'earned_trophies_platinum'>,
387+
'unique_id': 'fren-psn-id_earned_trophies_platinum',
388+
'unit_of_measurement': 'trophies',
389+
})
390+
# ---
391+
# name: test_sensors[sensor.publicuniversalfriend_platinum_trophies-state]
392+
StateSnapshot({
393+
'attributes': ReadOnlyDict({
394+
'friendly_name': 'PublicUniversalFriend Platinum trophies',
395+
'unit_of_measurement': 'trophies',
396+
}),
397+
'context': <ANY>,
398+
'entity_id': 'sensor.publicuniversalfriend_platinum_trophies',
399+
'last_changed': <ANY>,
400+
'last_reported': <ANY>,
401+
'last_updated': <ANY>,
402+
'state': '96',
403+
})
404+
# ---
405+
# name: test_sensors[sensor.publicuniversalfriend_silver_trophies-entry]
406+
EntityRegistryEntrySnapshot({
407+
'aliases': set({
408+
}),
409+
'area_id': None,
410+
'capabilities': None,
411+
'config_entry_id': <ANY>,
412+
'config_subentry_id': <ANY>,
413+
'device_class': None,
414+
'device_id': <ANY>,
415+
'disabled_by': None,
416+
'domain': 'sensor',
417+
'entity_category': None,
418+
'entity_id': 'sensor.publicuniversalfriend_silver_trophies',
419+
'has_entity_name': True,
420+
'hidden_by': None,
421+
'icon': None,
422+
'id': <ANY>,
423+
'labels': set({
424+
}),
425+
'name': None,
426+
'options': dict({
427+
}),
428+
'original_device_class': None,
429+
'original_icon': None,
430+
'original_name': 'Silver trophies',
431+
'platform': 'playstation_network',
432+
'previous_unique_id': None,
433+
'suggested_object_id': None,
434+
'supported_features': 0,
435+
'translation_key': <PlaystationNetworkSensor.EARNED_TROPHIES_SILVER: 'earned_trophies_silver'>,
436+
'unique_id': 'fren-psn-id_earned_trophies_silver',
437+
'unit_of_measurement': 'trophies',
438+
})
439+
# ---
440+
# name: test_sensors[sensor.publicuniversalfriend_silver_trophies-state]
441+
StateSnapshot({
442+
'attributes': ReadOnlyDict({
443+
'friendly_name': 'PublicUniversalFriend Silver trophies',
444+
'unit_of_measurement': 'trophies',
445+
}),
446+
'context': <ANY>,
447+
'entity_id': 'sensor.publicuniversalfriend_silver_trophies',
448+
'last_changed': <ANY>,
449+
'last_reported': <ANY>,
450+
'last_updated': <ANY>,
451+
'state': '1245',
452+
})
453+
# ---
454+
# name: test_sensors[sensor.publicuniversalfriend_trophy_level-entry]
455+
EntityRegistryEntrySnapshot({
456+
'aliases': set({
457+
}),
458+
'area_id': None,
459+
'capabilities': None,
460+
'config_entry_id': <ANY>,
461+
'config_subentry_id': <ANY>,
462+
'device_class': None,
463+
'device_id': <ANY>,
464+
'disabled_by': None,
465+
'domain': 'sensor',
466+
'entity_category': None,
467+
'entity_id': 'sensor.publicuniversalfriend_trophy_level',
468+
'has_entity_name': True,
469+
'hidden_by': None,
470+
'icon': None,
471+
'id': <ANY>,
472+
'labels': set({
473+
}),
474+
'name': None,
475+
'options': dict({
476+
}),
477+
'original_device_class': None,
478+
'original_icon': None,
479+
'original_name': 'Trophy level',
480+
'platform': 'playstation_network',
481+
'previous_unique_id': None,
482+
'suggested_object_id': None,
483+
'supported_features': 0,
484+
'translation_key': <PlaystationNetworkSensor.TROPHY_LEVEL: 'trophy_level'>,
485+
'unique_id': 'fren-psn-id_trophy_level',
486+
'unit_of_measurement': None,
487+
})
488+
# ---
489+
# name: test_sensors[sensor.publicuniversalfriend_trophy_level-state]
490+
StateSnapshot({
491+
'attributes': ReadOnlyDict({
492+
'friendly_name': 'PublicUniversalFriend Trophy level',
493+
}),
494+
'context': <ANY>,
495+
'entity_id': 'sensor.publicuniversalfriend_trophy_level',
496+
'last_changed': <ANY>,
497+
'last_reported': <ANY>,
498+
'last_updated': <ANY>,
499+
'state': '420',
500+
})
501+
# ---
209502
# name: test_sensors[sensor.testuser_bronze_trophies-entry]
210503
EntityRegistryEntrySnapshot({
211504
'aliases': set({

0 commit comments

Comments
 (0)