diff --git a/quantuminspire/util/configuration.py b/quantuminspire/util/configuration.py index 2910ba88..f7ed70db 100644 --- a/quantuminspire/util/configuration.py +++ b/quantuminspire/util/configuration.py @@ -148,7 +148,7 @@ async def fetch_suggested_auth_settings(self, host: Optional[Url] = None) -> Non host = self.default_host async with ApiClient(Configuration(host=host)) as api_client: auth_config = await AuthConfigApi(api_client).auth_config_auth_config_get() - self.auths[self.default_host] = AuthSettings( + self.auths[host] = AuthSettings( client_id=auth_config.client_id, audience=auth_config.audience, well_known_endpoint=auth_config.well_known_endpoint, diff --git a/tests/cli/test_command_list.py b/tests/cli/test_command_list.py index 5bf0789d..1339e96f 100644 --- a/tests/cli/test_command_list.py +++ b/tests/cli/test_command_list.py @@ -108,7 +108,6 @@ def test_results_get(mocker: MockerFixture) -> None: assert result.exit_code == 0 mock_remote_backend_inst.get_results.assert_called_once() - def test_results_get_no_results(mocker: MockerFixture) -> None: mock_remote_backend_inst = MagicMock() mock_remote_backend_inst.get_results.return_value = None @@ -141,11 +140,23 @@ def test_final_results_get_no_results(mocker: MockerFixture) -> None: mock_remote_backend_inst.get_final_results.assert_called_once() -def test_login(mocker: MockerFixture, mocked_config_file: MagicMock) -> None: +@pytest.mark.parametrize("use_local_auth_config", [ + True, + False +]) +def test_login(mocker: MockerFixture, mocked_config_file: MagicMock, use_local_auth_config: bool) -> None: device_session = mocker.patch("quantuminspire.cli.command_list.OauthDeviceSession")() webbrowser_open = mocker.patch("quantuminspire.cli.command_list.webbrowser.open") store_tokens = mocker.patch("quantuminspire.cli.command_list.Settings.store_tokens") - result = runner.invoke(app, ["login", "https://host"]) + fetch_auth = mocker.patch("quantuminspire.cli.command_list.Settings.fetch_suggested_auth_settings") + + if use_local_auth_config: + result = runner.invoke(app, ["login", "https://host", "--use-local-auth-config"]) + fetch_auth.assert_not_called() + else: + result = runner.invoke(app, ["login", "https://host"]) + fetch_auth.assert_called_once() + assert result.exit_code == 0, repr(result.exception) webbrowser_open.assert_called_once() device_session.initialize_authorization.assert_called_once() diff --git a/tests/util/test_configuration.py b/tests/util/test_configuration.py index 17528a13..b5e9be35 100644 --- a/tests/util/test_configuration.py +++ b/tests/util/test_configuration.py @@ -26,19 +26,7 @@ def test_force_file_into_existence_file_does_not_exist(mocked_config_file: Magic mocked_config_file.parent.mkdir.assert_called_once_with(parents=True, exist_ok=True) mocked_config_file.open.assert_called_once_with("w", encoding="utf-8") open_mock.write.assert_called_once_with( - """ -{ - "auths": { - "https://staging.qi2.quantum-inspire.com": { - "client_id": "Yz7ni9PUAyT43eUASZfmc1yqI66QxLUJ", - "well_known_endpoint": "https://quantum-inspire-staging.eu.auth0.com/.well-known/openid-configuration" - }, - "https://api.qi2.quantum-inspire.com": { - "well_known_endpoint": "https://auth.qi2.quantum-inspire.com/realms/oidc_production/.well-known/openid-configuration" - } - } -} -""" + configuration.DEFAULT_CONFIG ) @@ -145,3 +133,31 @@ def __init__(self, items_list: list[Member]) -> None: member_id = configuration.Settings.get_team_member_id(host="https://host", access_token="some token") assert member_id == expected_member_id assert mock_input.call_count == len(side_effect_user_input) + +@pytest.mark.parametrize( + "host", + [ + "https://test.host", + None + ], +) +async def test_fetch_suggested_auth_settings(mocked_config_file: MagicMock, mocker: MockerFixture, host: str) -> None: + settings = configuration.Settings() + api_client = MagicMock() + auth_config = MagicMock() + auth_config.client_id = "test_client_id" + auth_config.audience = "test_audience" + auth_config.well_known_endpoint = "https://test.endpoint/.well-known/config" + + auth_config_api = AsyncMock() + auth_config_api.auth_config_auth_config_get = AsyncMock(return_value=auth_config) + + mocker.patch("quantuminspire.util.configuration.ApiClient", return_value=api_client) + mocker.patch("quantuminspire.util.configuration.AuthConfigApi", return_value=auth_config_api) + + await settings.fetch_suggested_auth_settings(host) + auth_settings = settings.auths[settings.default_host] if host is None else settings.auths[host] + + assert auth_settings.client_id == "test_client_id" + assert auth_settings.audience == "test_audience" + assert auth_settings.well_known_endpoint == "https://test.endpoint/.well-known/config" \ No newline at end of file