@@ -171,6 +171,15 @@ def test_websocket_get_config(websocket_client: WebsocketClient) -> None:
171171 assert config .get ("state" ) in {"RUNNING" , "NOT_RUNNING" }
172172
173173
174+ async def test_async_websocket_get_config (
175+ async_websocket_client : WebsocketClient ,
176+ ) -> None :
177+ """Tests the `"type": "get_config"` websocket command."""
178+ config = await async_websocket_client .async_get_config ()
179+ assert isinstance (config , dict )
180+ assert config .get ("state" ) in {"RUNNING" , "NOT_RUNNING" }
181+
182+
174183def test_websocket_get_state (websocket_client : WebsocketClient ) -> None :
175184 """Tests WebsocketClient.get_state with entity_id."""
176185 state = websocket_client .get_state (entity_id = "sun.sun" )
@@ -200,6 +209,53 @@ def test_websocket_get_entity_no_args(websocket_client: WebsocketClient) -> None
200209 websocket_client .get_entity ()
201210
202211
212+ async def test_async_websocket_get_state (
213+ async_websocket_client : WebsocketClient ,
214+ ) -> None :
215+ """Tests async WebsocketClient.async_get_state with entity_id."""
216+ state = await async_websocket_client .async_get_state (entity_id = "sun.sun" )
217+ assert state .entity_id == "sun.sun"
218+ assert state .state in {"above_horizon" , "below_horizon" }
219+
220+
221+ async def test_async_websocket_get_entity_by_group_slug (
222+ async_websocket_client : WebsocketClient ,
223+ ) -> None :
224+ """Tests async WebsocketClient.async_get_entity with group_id and slug."""
225+ entity = await async_websocket_client .async_get_entity (group_id = "sun" , slug = "sun" )
226+ assert entity is not None
227+ assert entity .entity_id == "sun.sun"
228+
229+
230+ async def test_async_websocket_get_entity_by_entity_id (
231+ async_websocket_client : WebsocketClient ,
232+ ) -> None :
233+ """Tests async WebsocketClient.async_get_entity with entity_id."""
234+ entity = await async_websocket_client .async_get_entity (entity_id = "sun.sun" )
235+ assert entity is not None
236+ assert entity .entity_id == "sun.sun"
237+
238+
239+ async def test_async_websocket_get_entity_no_args (
240+ async_websocket_client : WebsocketClient ,
241+ ) -> None :
242+ """Tests async WebsocketClient.async_get_entity raises ValueError with no arguments."""
243+ with pytest .raises (
244+ ValueError , match = "Neither group_id and slug or entity_id provided"
245+ ):
246+ await async_websocket_client .async_get_entity ()
247+
248+
249+ async def test_async_websocket_get_state_not_found (
250+ async_websocket_client : WebsocketClient ,
251+ ) -> None :
252+ """Tests async WebsocketClient.async_get_state raises ValueError for nonexistent entity."""
253+ with pytest .raises (ValueError , match = "not found" ):
254+ await async_websocket_client .async_get_state (
255+ entity_id = "fake.nonexistent_entity_12345"
256+ )
257+
258+
203259def test_websocket_get_state_not_found (websocket_client : WebsocketClient ) -> None :
204260 """Tests WebsocketClient.get_state raises ValueError for nonexistent entity."""
205261 with pytest .raises (ValueError , match = "not found" ):
@@ -283,6 +339,14 @@ def test_get_nonuser_flows_in_progress(websocket_client: WebsocketClient) -> Non
283339 assert not flows
284340
285341
342+ async def test_async_get_nonuser_flows_in_progress (
343+ async_websocket_client : WebsocketClient ,
344+ ) -> None :
345+ """Tests the `"type": "config_entries/flow/progress"` websocket command."""
346+ flows = await async_websocket_client .async_get_nonuser_flows_in_progress ()
347+ assert not flows
348+
349+
286350def test_disable_enable_config_entry (websocket_client : WebsocketClient ) -> None :
287351 """Tests the `"type": "config_entries/disable"` websocket command."""
288352 # Get sun entry
@@ -299,21 +363,42 @@ def test_disable_enable_config_entry(websocket_client: WebsocketClient) -> None:
299363 # Re-enable
300364 websocket_client .enable_config_entry (entry .entry_id )
301365
302- # Check that it was enable
366+ # Check that it was enabled
303367 enabled_entry = websocket_client .get_config_entries ()[0 ]
304368 assert enabled_entry .disabled_by is None
305369
306370
371+ async def test_async_disable_enable_config_entry (
372+ async_websocket_client : WebsocketClient ,
373+ ) -> None :
374+ """Tests the `"type": "config_entries/disable"` websocket command."""
375+ entry = (await async_websocket_client .async_get_config_entries ())[0 ]
376+ assert entry .disabled_by is None
377+
378+ await async_websocket_client .async_disable_config_entry (entry .entry_id )
379+
380+ disabled_entry = (await async_websocket_client .async_get_config_entries ())[0 ]
381+ assert disabled_entry .disabled_by is ConfigEntryDisabler .USER
382+
383+ await async_websocket_client .async_enable_config_entry (entry .entry_id )
384+
385+ enabled_entry = (await async_websocket_client .async_get_config_entries ())[0 ]
386+ assert enabled_entry .disabled_by is None
387+
388+
307389def test_ignore_config_flow (websocket_client : WebsocketClient ) -> None :
308390 """Tests the `"type": "config_entries/ignore_flow"` websocket command."""
309391 # Currently not able to test as no flows are in progress. Send invalid parameters and handle that error
310- try :
392+ with pytest . raises ( RequestError , match = "Config entry not found" ) :
311393 websocket_client .ignore_config_flow ("" , "" )
312- except RequestError as error :
313- assert (
314- error .__str__ ()
315- == "An error occurred while making the request to 'Config entry not found' with data: 'not_found'"
316- )
394+
395+
396+ async def test_async_ignore_config_flow (
397+ async_websocket_client : WebsocketClient ,
398+ ) -> None :
399+ """Tests the `"type": "config_entries/ignore_flow"` websocket command."""
400+ with pytest .raises (RequestError , match = "Config entry not found" ):
401+ await async_websocket_client .async_ignore_config_flow ("" , "" )
317402
318403
319404def test_get_config_entries (websocket_client : WebsocketClient ) -> None :
@@ -345,6 +430,20 @@ def test_get_config_entries(websocket_client: WebsocketClient) -> None:
345430 assert sun .num_subentries == 0
346431
347432
433+ async def test_async_get_config_entries (
434+ async_websocket_client : WebsocketClient ,
435+ ) -> None :
436+ """Tests the `"type": "config_entries/get"` websocket command."""
437+ entries = await async_websocket_client .async_get_config_entries ()
438+ assert len (entries ) == 4
439+
440+ sun = entries [0 ]
441+ assert sun .entry_id == "5f8426fa502435857743f302651753c9"
442+ assert sun .domain == "sun"
443+ assert sun .title == "Sun"
444+ assert sun .disabled_by is None
445+
446+
348447def test_get_entry_subentries (websocket_client : WebsocketClient ) -> None :
349448 """Tests the `"type": "config_entries/subentries/list"` websocket command."""
350449 # Currently not able to test as no entries with subentries available
@@ -356,16 +455,28 @@ def test_get_entry_subentries(websocket_client: WebsocketClient) -> None:
356455 assert not websocket_client .get_entry_subentries (sun .entry_id )
357456
358457
458+ async def test_async_get_entry_subentries (
459+ async_websocket_client : WebsocketClient ,
460+ ) -> None :
461+ """Tests the `"type": "config_entries/subentries/list"` websocket command."""
462+ sun = (await async_websocket_client .async_get_config_entries ())[0 ]
463+ assert sun
464+ assert not await async_websocket_client .async_get_entry_subentries (sun .entry_id )
465+
466+
359467def test_delete_entry_subentry (websocket_client : WebsocketClient ) -> None :
360468 """Tests the `"type": "config_entries/subentries/delete"` websocket command."""
361469 # Currently not able to test as no entries with subentries available. Send invalid parameters and handle that error
362- try :
470+ with pytest . raises ( RequestError , match = "Config entry not found" ) :
363471 websocket_client .delete_entry_subentry ("" , "" )
364- except RequestError as error :
365- assert (
366- error .__str__ ()
367- == "An error occurred while making the request to 'Config entry not found' with data: 'not_found'"
368- )
472+
473+
474+ async def test_async_delete_entry_subentry (
475+ async_websocket_client : WebsocketClient ,
476+ ) -> None :
477+ """Tests the `"type": "config_entries/subentries/delete"` websocket command."""
478+ with pytest .raises (RequestError , match = "Config entry not found" ):
479+ await async_websocket_client .async_delete_entry_subentry ("" , "" )
369480
370481
371482def test_trigger_service (cached_client : Client ) -> None :
@@ -473,7 +584,7 @@ async def test_async_websocket_trigger_service_with_response(
473584 """Tests the `"type": "trigger_service_with_response"` websocket command."""
474585 weather = await async_websocket_client .async_get_domain ("weather" )
475586 assert weather is not None
476- data = weather .get_forecasts (
587+ data = await weather .get_forecasts (
477588 entity_id = "weather.forecast_home" ,
478589 type = "hourly" ,
479590 )
0 commit comments