diff --git a/tests/integration/fixtures/host_mode_api_password.yaml b/tests/integration/fixtures/host_mode_api_password.yaml index cae7dd3a85..038b6871e0 100644 --- a/tests/integration/fixtures/host_mode_api_password.yaml +++ b/tests/integration/fixtures/host_mode_api_password.yaml @@ -1,27 +1,14 @@ esphome: - name: ${name} - build_path: ${build_path} - friendly_name: ESPHome Host Mode API Password Test - name_add_mac_suffix: no - area: Entryway - platformio_options: - build_flags: - - -std=gnu++17 - - -Wall - build_unflags: - - -std=gnu++11 - + name: host-mode-api-password +host: api: password: "test_password_123" - logger: level: DEBUG - # Test sensor to verify connection works sensor: - platform: template name: Test Sensor id: test_sensor - lambda: |- - return 42.0; - update_interval: 1s + lambda: return 42.0; + update_interval: 0.1s diff --git a/tests/integration/test_host_mode_api_password.py b/tests/integration/test_host_mode_api_password.py index d602dd56f9..098fc38142 100644 --- a/tests/integration/test_host_mode_api_password.py +++ b/tests/integration/test_host_mode_api_password.py @@ -18,12 +18,7 @@ async def test_host_mode_api_password( ) -> None: """Test API authentication with password.""" async with run_compiled(yaml_config): - # First, try to connect without password - should fail - with pytest.raises(APIConnectionError, match="Authentication"): - async with api_client_connected(password=""): - pass # Should not reach here - - # Now connect with correct password + # Connect with correct password async with api_client_connected(password="test_password_123") as client: # Verify we can get device info device_info = await client.device_info() @@ -32,20 +27,27 @@ async def test_host_mode_api_password( assert device_info.name == "host-mode-api-password" # Subscribe to states to ensure authenticated connection works + loop = asyncio.get_running_loop() + state_future: asyncio.Future[bool] = loop.create_future() states = {} def on_state(state): states[state.key] = state + if not state_future.done(): + state_future.set_result(True) - await client.subscribe_states(on_state) + client.subscribe_states(on_state) - # Wait a bit to receive the test sensor state - await asyncio.sleep(0.5) + # Wait for at least one state with timeout + try: + await asyncio.wait_for(state_future, timeout=5.0) + except asyncio.TimeoutError: + pytest.fail("No states received within timeout") # Should have received at least one state (the test sensor) assert len(states) > 0 # Test with wrong password - should fail - with pytest.raises(APIConnectionError, match="Authentication"): + with pytest.raises(APIConnectionError, match="Invalid password"): async with api_client_connected(password="wrong_password"): pass # Should not reach here