from textwrap import dedent from typing import Optional from unittest import mock import mozunit import pytest from tryselect.lando import LandoAPI @mock.patch("tryselect.lando.Auth0Config") @pytest.mark.parametrize( "section,expected_instance_id", ( ("no_id", "no_id"), ("id", "id_present"), ("missing", None), ), ) def test_lando_api_from_lando_config_file( auth0_config: mock.Mock, section: str, expected_instance_id: Optional[str] ): mock_config_path = mock.MagicMock() mock_config_path.exists.return_value = True mock_config_path.read_text.return_value = dedent(""" [no_id] api_domain = no_id.lando.example.net # Lando production Auth0 configuration. auth0_domain = auth.example.net auth0_client_id = xXxX auth0_audience = https://no_id.lando.example.net auth0_scope = openid email profile lando https://sso.mozilla.com/claim/groups [id] instance_id = id_present api_domain = id.lando.example.net # Lando production Auth0 configuration. auth0_domain = auth.example.net auth0_client_id = XxXx auth0_audience = https://id.lando.example.net auth0_scope = openid email profile lando https://sso.mozilla.com/claim/groups """) if expected_instance_id is None: with pytest.raises( ValueError, match=f"Lando config file does not have a {section} section." ): lando_api = LandoAPI.from_lando_config_file(mock_config_path, section) else: lando_api = LandoAPI.from_lando_config_file(mock_config_path, section) assert lando_api.instance_id == expected_instance_id, ( "Unexpected LandoApi instance_id" ) if __name__ == "__main__": mozunit.main()