async def test_create_app_server_no_ports(self) -> None: code = AuthCode() app = create_auth_code_app(code) port = unused_port() async with create_app_server_once(app, host="127.0.0.1", port=port): with pytest.raises(RuntimeError, match="No free ports."): async with create_app_server(app, ports=[port]): pass
async def test_create_app_server(self, client: ClientSession) -> None: code = AuthCode() app = create_auth_code_app(code) port = unused_port() async with create_app_server(app, host="127.0.0.1", ports=[port]) as url: assert url == URL(f"http://127.0.0.1:{port}") await self.assert_code_callback_success(code, client, url)
async def test_create_app_server_port_conflict( self, client: ClientSession) -> None: code = AuthCode() app = create_auth_code_app(code) outer_port = unused_port() inner_port = unused_port() async with create_app_server(app, ports=[outer_port, inner_port]) as url: assert url == URL(f"http://127.0.0.1:{outer_port}") async with create_app_server(app, ports=[outer_port, inner_port]) as url: assert url == URL(f"http://127.0.0.1:{inner_port}") await self.assert_code_callback_success(code, client, url)
async def test_create_app_server_redirect(self, client: ClientSession) -> None: code = AuthCode() redirect_url = URL("http://redirect.url") app = create_auth_code_app(code, redirect_url=redirect_url) port = unused_port() async with create_app_server_once(app, host="127.0.0.1", port=port) as url: assert url == URL(f"http://127.0.0.1:{port}") await self.assert_code_callback_success(code, client, url, redirect_url=redirect_url)
async def test_create_app_server_once_failure( self, client: ClientSession) -> None: code = AuthCode() app = create_auth_code_app(code) port = unused_port() async with create_app_server_once(app, host="127.0.0.1", port=port) as url: assert url == URL(f"http://127.0.0.1:{port}") async with client.get(url) as resp: assert resp.status == HTTPBadRequest.status_code text = await resp.text() assert text == "The 'code' query parameter is missing." with pytest.raises(AuthException, match="failed to get an authorization code"): await code.wait()
async def test_error_other(self, client: ClientSession) -> None: code = AuthCode() app = create_auth_code_app(code) port = unused_port() async with create_app_server_once(app, host="127.0.0.1", port=port) as url: assert url == URL(f"http://127.0.0.1:{port}") async with client.get(url, params={ "error": "other", "error_description": "Test Other" }) as resp: assert resp.status == HTTPBadRequest.status_code text = await resp.text() assert text == "Test Other" with pytest.raises(AuthException, match="Test Other"): await code.wait()