Use hass_client_no_auth test fixture in integrations s-x (#55585)

This commit is contained in:
Erik Montnemery 2021-09-02 14:50:10 +02:00 committed by GitHub
parent acdddabe1f
commit bfd799dc04
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 60 additions and 56 deletions

View file

@ -395,7 +395,7 @@ async def test_abort_cloud_flow_if_local_device_exists(hass):
async def test_full_user_flow( async def test_full_user_flow(
hass, aiohttp_client, aioclient_mock, current_request_with_host hass, hass_client_no_auth, aioclient_mock, current_request_with_host
): ):
"""Check full flow.""" """Check full flow."""
assert await setup.async_setup_component( assert await setup.async_setup_component(
@ -422,7 +422,7 @@ async def test_full_user_flow(
}, },
) )
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
resp = await client.get(f"/auth/external/callback?code=abcd&state={state}") resp = await client.get(f"/auth/external/callback?code=abcd&state={state}")
assert resp.status == 200 assert resp.status == 200
assert resp.headers["content-type"] == "text/html; charset=utf-8" assert resp.headers["content-type"] == "text/html; charset=utf-8"

View file

@ -34,7 +34,7 @@ async def test_abort_if_existing_entry(hass):
async def test_full_flow( async def test_full_flow(
hass, aiohttp_client, aioclient_mock, current_request_with_host hass, hass_client_no_auth, aioclient_mock, current_request_with_host
): ):
"""Check full flow.""" """Check full flow."""
assert await setup.async_setup_component( assert await setup.async_setup_component(
@ -67,7 +67,7 @@ async def test_full_flow(
f"&state={state}" f"&state={state}"
) )
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
resp = await client.get(f"/auth/external/callback?code=abcd&state={state}") resp = await client.get(f"/auth/external/callback?code=abcd&state={state}")
assert resp.status == 200 assert resp.status == 200
assert resp.headers["content-type"] == "text/html; charset=utf-8" assert resp.headers["content-type"] == "text/html; charset=utf-8"

View file

@ -42,7 +42,7 @@ async def test_zeroconf_abort_if_existing_entry(hass):
async def test_full_flow( async def test_full_flow(
hass, aiohttp_client, aioclient_mock, current_request_with_host hass, hass_client_no_auth, aioclient_mock, current_request_with_host
): ):
"""Check a full flow.""" """Check a full flow."""
assert await setup.async_setup_component( assert await setup.async_setup_component(
@ -78,7 +78,7 @@ async def test_full_flow(
"user-top-read,user-read-playback-position,user-read-recently-played,user-follow-read" "user-top-read,user-read-playback-position,user-read-recently-played,user-follow-read"
) )
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
resp = await client.get(f"/auth/external/callback?code=abcd&state={state}") resp = await client.get(f"/auth/external/callback?code=abcd&state={state}")
assert resp.status == 200 assert resp.status == 200
assert resp.headers["content-type"] == "text/html; charset=utf-8" assert resp.headers["content-type"] == "text/html; charset=utf-8"
@ -114,7 +114,7 @@ async def test_full_flow(
async def test_abort_if_spotify_error( async def test_abort_if_spotify_error(
hass, aiohttp_client, aioclient_mock, current_request_with_host hass, hass_client_no_auth, aioclient_mock, current_request_with_host
): ):
"""Check Spotify errors causes flow to abort.""" """Check Spotify errors causes flow to abort."""
await setup.async_setup_component( await setup.async_setup_component(
@ -138,7 +138,7 @@ async def test_abort_if_spotify_error(
"redirect_uri": "https://example.com/auth/external/callback", "redirect_uri": "https://example.com/auth/external/callback",
}, },
) )
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
await client.get(f"/auth/external/callback?code=abcd&state={state}") await client.get(f"/auth/external/callback?code=abcd&state={state}")
aioclient_mock.post( aioclient_mock.post(
@ -162,7 +162,7 @@ async def test_abort_if_spotify_error(
async def test_reauthentication( async def test_reauthentication(
hass, aiohttp_client, aioclient_mock, current_request_with_host hass, hass_client_no_auth, aioclient_mock, current_request_with_host
): ):
"""Test Spotify reauthentication.""" """Test Spotify reauthentication."""
await setup.async_setup_component( await setup.async_setup_component(
@ -199,7 +199,7 @@ async def test_reauthentication(
"redirect_uri": "https://example.com/auth/external/callback", "redirect_uri": "https://example.com/auth/external/callback",
}, },
) )
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
await client.get(f"/auth/external/callback?code=abcd&state={state}") await client.get(f"/auth/external/callback?code=abcd&state={state}")
aioclient_mock.post( aioclient_mock.post(
@ -229,7 +229,7 @@ async def test_reauthentication(
async def test_reauth_account_mismatch( async def test_reauth_account_mismatch(
hass, aiohttp_client, aioclient_mock, current_request_with_host hass, hass_client_no_auth, aioclient_mock, current_request_with_host
): ):
"""Test Spotify reauthentication with different account.""" """Test Spotify reauthentication with different account."""
await setup.async_setup_component( await setup.async_setup_component(
@ -264,7 +264,7 @@ async def test_reauth_account_mismatch(
"redirect_uri": "https://example.com/auth/external/callback", "redirect_uri": "https://example.com/auth/external/callback",
}, },
) )
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
await client.get(f"/auth/external/callback?code=abcd&state={state}") await client.get(f"/auth/external/callback?code=abcd&state={state}")
aioclient_mock.post( aioclient_mock.post(

View file

@ -41,7 +41,7 @@ async def test_abort_if_no_configuration(hass):
async def test_full_flow_implementation( async def test_full_flow_implementation(
hass, aiohttp_client, aioclient_mock, current_request_with_host hass, hass_client_no_auth, aioclient_mock, current_request_with_host
): ):
"""Test registering an integration and finishing flow works.""" """Test registering an integration and finishing flow works."""
await setup_component(hass) await setup_component(hass)
@ -75,7 +75,7 @@ async def test_full_flow_implementation(
"&tenant_id=eneco&issuer=identity.toon.eu" "&tenant_id=eneco&issuer=identity.toon.eu"
) )
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
resp = await client.get(f"/auth/external/callback?code=abcd&state={state}") resp = await client.get(f"/auth/external/callback?code=abcd&state={state}")
assert resp.status == 200 assert resp.status == 200
assert resp.headers["content-type"] == "text/html; charset=utf-8" assert resp.headers["content-type"] == "text/html; charset=utf-8"
@ -105,7 +105,7 @@ async def test_full_flow_implementation(
async def test_no_agreements( async def test_no_agreements(
hass, aiohttp_client, aioclient_mock, current_request_with_host hass, hass_client_no_auth, aioclient_mock, current_request_with_host
): ):
"""Test abort when there are no displays.""" """Test abort when there are no displays."""
await setup_component(hass) await setup_component(hass)
@ -125,7 +125,7 @@ async def test_no_agreements(
result["flow_id"], {"implementation": "eneco"} result["flow_id"], {"implementation": "eneco"}
) )
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
await client.get(f"/auth/external/callback?code=abcd&state={state}") await client.get(f"/auth/external/callback?code=abcd&state={state}")
aioclient_mock.post( aioclient_mock.post(
"https://api.toon.eu/token", "https://api.toon.eu/token",
@ -145,7 +145,7 @@ async def test_no_agreements(
async def test_multiple_agreements( async def test_multiple_agreements(
hass, aiohttp_client, aioclient_mock, current_request_with_host hass, hass_client_no_auth, aioclient_mock, current_request_with_host
): ):
"""Test abort when there are no displays.""" """Test abort when there are no displays."""
await setup_component(hass) await setup_component(hass)
@ -165,7 +165,7 @@ async def test_multiple_agreements(
result["flow_id"], {"implementation": "eneco"} result["flow_id"], {"implementation": "eneco"}
) )
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
await client.get(f"/auth/external/callback?code=abcd&state={state}") await client.get(f"/auth/external/callback?code=abcd&state={state}")
aioclient_mock.post( aioclient_mock.post(
@ -195,7 +195,7 @@ async def test_multiple_agreements(
async def test_agreement_already_set_up( async def test_agreement_already_set_up(
hass, aiohttp_client, aioclient_mock, current_request_with_host hass, hass_client_no_auth, aioclient_mock, current_request_with_host
): ):
"""Test showing display form again if display already exists.""" """Test showing display form again if display already exists."""
await setup_component(hass) await setup_component(hass)
@ -216,7 +216,7 @@ async def test_agreement_already_set_up(
result["flow_id"], {"implementation": "eneco"} result["flow_id"], {"implementation": "eneco"}
) )
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
await client.get(f"/auth/external/callback?code=abcd&state={state}") await client.get(f"/auth/external/callback?code=abcd&state={state}")
aioclient_mock.post( aioclient_mock.post(
"https://api.toon.eu/token", "https://api.toon.eu/token",
@ -236,7 +236,7 @@ async def test_agreement_already_set_up(
async def test_toon_abort( async def test_toon_abort(
hass, aiohttp_client, aioclient_mock, current_request_with_host hass, hass_client_no_auth, aioclient_mock, current_request_with_host
): ):
"""Test we abort on Toon error.""" """Test we abort on Toon error."""
await setup_component(hass) await setup_component(hass)
@ -255,7 +255,7 @@ async def test_toon_abort(
result["flow_id"], {"implementation": "eneco"} result["flow_id"], {"implementation": "eneco"}
) )
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
await client.get(f"/auth/external/callback?code=abcd&state={state}") await client.get(f"/auth/external/callback?code=abcd&state={state}")
aioclient_mock.post( aioclient_mock.post(
"https://api.toon.eu/token", "https://api.toon.eu/token",
@ -289,7 +289,7 @@ async def test_import(hass, current_request_with_host):
async def test_import_migration( async def test_import_migration(
hass, aiohttp_client, aioclient_mock, current_request_with_host hass, hass_client_no_auth, aioclient_mock, current_request_with_host
): ):
"""Test if importing step with migration works.""" """Test if importing step with migration works."""
old_entry = MockConfigEntry(domain=DOMAIN, unique_id=123, version=1) old_entry = MockConfigEntry(domain=DOMAIN, unique_id=123, version=1)
@ -317,7 +317,7 @@ async def test_import_migration(
flows[0]["flow_id"], {"implementation": "eneco"} flows[0]["flow_id"], {"implementation": "eneco"}
) )
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
await client.get(f"/auth/external/callback?code=abcd&state={state}") await client.get(f"/auth/external/callback?code=abcd&state={state}")
aioclient_mock.post( aioclient_mock.post(
"https://api.toon.eu/token", "https://api.toon.eu/token",

View file

@ -28,7 +28,7 @@ def mock_dev_track(mock_device_tracker_conf):
@pytest.fixture(name="client") @pytest.fixture(name="client")
async def traccar_client(loop, hass, aiohttp_client): async def traccar_client(loop, hass, hass_client_no_auth):
"""Mock client for Traccar (unauthenticated).""" """Mock client for Traccar (unauthenticated)."""
assert await async_setup_component(hass, "persistent_notification", {}) assert await async_setup_component(hass, "persistent_notification", {})
@ -37,7 +37,7 @@ async def traccar_client(loop, hass, aiohttp_client):
await hass.async_block_till_done() await hass.async_block_till_done()
with patch("homeassistant.components.device_tracker.legacy.update_config"): with patch("homeassistant.components.device_tracker.legacy.update_config"):
return await aiohttp_client(hass.http.app) return await hass_client_no_auth()
@pytest.fixture(autouse=True) @pytest.fixture(autouse=True)

View file

@ -5,7 +5,7 @@ from homeassistant.config import async_process_ha_core_config
from homeassistant.core import callback from homeassistant.core import callback
async def test_config_flow_registers_webhook(hass, aiohttp_client): async def test_config_flow_registers_webhook(hass, hass_client_no_auth):
"""Test setting up Twilio and sending webhook.""" """Test setting up Twilio and sending webhook."""
await async_process_ha_core_config( await async_process_ha_core_config(
hass, hass,
@ -29,7 +29,7 @@ async def test_config_flow_registers_webhook(hass, aiohttp_client):
hass.bus.async_listen(twilio.RECEIVED_DATA, handle_event) hass.bus.async_listen(twilio.RECEIVED_DATA, handle_event)
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
await client.post(f"/api/webhook/{webhook_id}", data={"hello": "twilio"}) await client.post(f"/api/webhook/{webhook_id}", data={"hello": "twilio"})
assert len(twilio_events) == 1 assert len(twilio_events) == 1

View file

@ -17,7 +17,7 @@ async def setup_http(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_webhook_json(hass, aiohttp_client): async def test_webhook_json(hass, hass_client_no_auth):
"""Test triggering with a JSON webhook.""" """Test triggering with a JSON webhook."""
events = [] events = []
@ -46,7 +46,7 @@ async def test_webhook_json(hass, aiohttp_client):
) )
await hass.async_block_till_done() await hass.async_block_till_done()
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
await client.post("/api/webhook/json_webhook", json={"hello": "world"}) await client.post("/api/webhook/json_webhook", json={"hello": "world"})
await hass.async_block_till_done() await hass.async_block_till_done()
@ -56,7 +56,7 @@ async def test_webhook_json(hass, aiohttp_client):
assert events[0].data["id"] == 0 assert events[0].data["id"] == 0
async def test_webhook_post(hass, aiohttp_client): async def test_webhook_post(hass, hass_client_no_auth):
"""Test triggering with a POST webhook.""" """Test triggering with a POST webhook."""
events = [] events = []
@ -82,7 +82,7 @@ async def test_webhook_post(hass, aiohttp_client):
) )
await hass.async_block_till_done() await hass.async_block_till_done()
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
await client.post("/api/webhook/post_webhook", data={"hello": "world"}) await client.post("/api/webhook/post_webhook", data={"hello": "world"})
await hass.async_block_till_done() await hass.async_block_till_done()
@ -91,7 +91,7 @@ async def test_webhook_post(hass, aiohttp_client):
assert events[0].data["hello"] == "yo world" assert events[0].data["hello"] == "yo world"
async def test_webhook_query(hass, aiohttp_client): async def test_webhook_query(hass, hass_client_no_auth):
"""Test triggering with a query POST webhook.""" """Test triggering with a query POST webhook."""
events = [] events = []
@ -117,7 +117,7 @@ async def test_webhook_query(hass, aiohttp_client):
) )
await hass.async_block_till_done() await hass.async_block_till_done()
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
await client.post("/api/webhook/query_webhook?hello=world") await client.post("/api/webhook/query_webhook?hello=world")
await hass.async_block_till_done() await hass.async_block_till_done()
@ -126,7 +126,7 @@ async def test_webhook_query(hass, aiohttp_client):
assert events[0].data["hello"] == "yo world" assert events[0].data["hello"] == "yo world"
async def test_webhook_reload(hass, aiohttp_client): async def test_webhook_reload(hass, hass_client_no_auth):
"""Test reloading a webhook.""" """Test reloading a webhook."""
events = [] events = []
@ -152,7 +152,7 @@ async def test_webhook_reload(hass, aiohttp_client):
) )
await hass.async_block_till_done() await hass.async_block_till_done()
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
await client.post("/api/webhook/post_webhook", data={"hello": "world"}) await client.post("/api/webhook/post_webhook", data={"hello": "world"})
await hass.async_block_till_done() await hass.async_block_till_done()

View file

@ -13,12 +13,12 @@ async def websocket_client(hass, hass_ws_client):
@pytest.fixture @pytest.fixture
async def no_auth_websocket_client(hass, aiohttp_client): async def no_auth_websocket_client(hass, hass_client_no_auth):
"""Websocket connection that requires authentication.""" """Websocket connection that requires authentication."""
assert await async_setup_component(hass, "websocket_api", {}) assert await async_setup_component(hass, "websocket_api", {})
await hass.async_block_till_done() await hass.async_block_till_done()
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
ws = await client.ws_connect(URL) ws = await client.ws_connect(URL)
auth_ok = await ws.receive_json() auth_ok = await ws.receive_json()

View file

@ -121,14 +121,14 @@ async def test_auth_active_with_token(
assert auth_msg["type"] == TYPE_AUTH_OK assert auth_msg["type"] == TYPE_AUTH_OK
async def test_auth_active_user_inactive(hass, aiohttp_client, hass_access_token): async def test_auth_active_user_inactive(hass, hass_client_no_auth, hass_access_token):
"""Test authenticating with a token.""" """Test authenticating with a token."""
refresh_token = await hass.auth.async_validate_access_token(hass_access_token) refresh_token = await hass.auth.async_validate_access_token(hass_access_token)
refresh_token.user.is_active = False refresh_token.user.is_active = False
assert await async_setup_component(hass, "websocket_api", {}) assert await async_setup_component(hass, "websocket_api", {})
await hass.async_block_till_done() await hass.async_block_till_done()
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
async with client.ws_connect(URL) as ws: async with client.ws_connect(URL) as ws:
auth_msg = await ws.receive_json() auth_msg = await ws.receive_json()
@ -140,12 +140,12 @@ async def test_auth_active_user_inactive(hass, aiohttp_client, hass_access_token
assert auth_msg["type"] == TYPE_AUTH_INVALID assert auth_msg["type"] == TYPE_AUTH_INVALID
async def test_auth_active_with_password_not_allow(hass, aiohttp_client): async def test_auth_active_with_password_not_allow(hass, hass_client_no_auth):
"""Test authenticating with a token.""" """Test authenticating with a token."""
assert await async_setup_component(hass, "websocket_api", {}) assert await async_setup_component(hass, "websocket_api", {})
await hass.async_block_till_done() await hass.async_block_till_done()
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
async with client.ws_connect(URL) as ws: async with client.ws_connect(URL) as ws:
auth_msg = await ws.receive_json() auth_msg = await ws.receive_json()
@ -157,12 +157,14 @@ async def test_auth_active_with_password_not_allow(hass, aiohttp_client):
assert auth_msg["type"] == TYPE_AUTH_INVALID assert auth_msg["type"] == TYPE_AUTH_INVALID
async def test_auth_legacy_support_with_password(hass, aiohttp_client, legacy_auth): async def test_auth_legacy_support_with_password(
hass, hass_client_no_auth, legacy_auth
):
"""Test authenticating with a token.""" """Test authenticating with a token."""
assert await async_setup_component(hass, "websocket_api", {}) assert await async_setup_component(hass, "websocket_api", {})
await hass.async_block_till_done() await hass.async_block_till_done()
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
async with client.ws_connect(URL) as ws: async with client.ws_connect(URL) as ws:
auth_msg = await ws.receive_json() auth_msg = await ws.receive_json()
@ -174,12 +176,12 @@ async def test_auth_legacy_support_with_password(hass, aiohttp_client, legacy_au
assert auth_msg["type"] == TYPE_AUTH_INVALID assert auth_msg["type"] == TYPE_AUTH_INVALID
async def test_auth_with_invalid_token(hass, aiohttp_client): async def test_auth_with_invalid_token(hass, hass_client_no_auth):
"""Test authenticating with a token.""" """Test authenticating with a token."""
assert await async_setup_component(hass, "websocket_api", {}) assert await async_setup_component(hass, "websocket_api", {})
await hass.async_block_till_done() await hass.async_block_till_done()
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
async with client.ws_connect(URL) as ws: async with client.ws_connect(URL) as ws:
auth_msg = await ws.receive_json() auth_msg = await ws.receive_json()

View file

@ -459,12 +459,14 @@ async def test_ping(websocket_client):
assert msg["type"] == "pong" assert msg["type"] == "pong"
async def test_call_service_context_with_user(hass, aiohttp_client, hass_access_token): async def test_call_service_context_with_user(
hass, hass_client_no_auth, hass_access_token
):
"""Test that the user is set in the service call context.""" """Test that the user is set in the service call context."""
assert await async_setup_component(hass, "websocket_api", {}) assert await async_setup_component(hass, "websocket_api", {})
calls = async_mock_service(hass, "domain_test", "test_service") calls = async_mock_service(hass, "domain_test", "test_service")
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
async with client.ws_connect(URL) as ws: async with client.ws_connect(URL) as ws:
auth_msg = await ws.receive_json() auth_msg = await ws.receive_json()

View file

@ -7,14 +7,14 @@ from homeassistant.components.websocket_api.http import URL
from .test_auth import test_auth_active_with_token from .test_auth import test_auth_active_with_token
async def test_websocket_api(hass, aiohttp_client, hass_access_token, legacy_auth): async def test_websocket_api(hass, hass_client_no_auth, hass_access_token, legacy_auth):
"""Test API streams.""" """Test API streams."""
await async_setup_component( await async_setup_component(
hass, "sensor", {"sensor": {"platform": "websocket_api"}} hass, "sensor", {"sensor": {"platform": "websocket_api"}}
) )
await hass.async_block_till_done() await hass.async_block_till_done()
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
ws = await client.ws_connect(URL) ws = await client.ws_connect(URL)
auth_ok = await ws.receive_json() auth_ok = await ws.receive_json()

View file

@ -23,7 +23,7 @@ async def test_abort_if_existing_entry(hass):
async def test_full_flow( async def test_full_flow(
hass, aiohttp_client, aioclient_mock, current_request_with_host hass, hass_client_no_auth, aioclient_mock, current_request_with_host
): ):
"""Check full flow.""" """Check full flow."""
assert await setup.async_setup_component( assert await setup.async_setup_component(
@ -54,7 +54,7 @@ async def test_full_flow(
f"&state={state}&scope={scope}" f"&state={state}&scope={scope}"
) )
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
resp = await client.get(f"/auth/external/callback?code=abcd&state={state}") resp = await client.get(f"/auth/external/callback?code=abcd&state={state}")
assert resp.status == 200 assert resp.status == 200
assert resp.headers["content-type"] == "text/html; charset=utf-8" assert resp.headers["content-type"] == "text/html; charset=utf-8"

View file

@ -154,7 +154,7 @@ async def test_abort_if_oauth_error(
hass, hass,
flow_handler, flow_handler,
local_impl, local_impl,
aiohttp_client, hass_client_no_auth,
aioclient_mock, aioclient_mock,
current_request_with_host, current_request_with_host,
): ):
@ -191,7 +191,7 @@ async def test_abort_if_oauth_error(
f"&state={state}&scope=read+write" f"&state={state}&scope=read+write"
) )
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
resp = await client.get(f"/auth/external/callback?code=abcd&state={state}") resp = await client.get(f"/auth/external/callback?code=abcd&state={state}")
assert resp.status == 200 assert resp.status == 200
assert resp.headers["content-type"] == "text/html; charset=utf-8" assert resp.headers["content-type"] == "text/html; charset=utf-8"
@ -274,7 +274,7 @@ async def test_full_flow(
hass, hass,
flow_handler, flow_handler,
local_impl, local_impl,
aiohttp_client, hass_client_no_auth,
aioclient_mock, aioclient_mock,
current_request_with_host, current_request_with_host,
): ):
@ -311,7 +311,7 @@ async def test_full_flow(
f"&state={state}&scope=read+write" f"&state={state}&scope=read+write"
) )
client = await aiohttp_client(hass.http.app) client = await hass_client_no_auth()
resp = await client.get(f"/auth/external/callback?code=abcd&state={state}") resp = await client.get(f"/auth/external/callback?code=abcd&state={state}")
assert resp.status == 200 assert resp.status == 200
assert resp.headers["content-type"] == "text/html; charset=utf-8" assert resp.headers["content-type"] == "text/html; charset=utf-8"