import json from unittest.mock import mock_open, patch import pytest from aki_prj23_transparenzregister.config.config_providers import ( EnvironmentConfigProvider, JsonFileConfigProvider, ) def test_json_provider_init_fail() -> None: with pytest.raises(FileNotFoundError): JsonFileConfigProvider("file-that-does-not-exist") def test_json_provider_init_no_json() -> None: with patch("os.path.isfile") as mock_isfile, patch( "builtins.open", mock_open(read_data="fhdaofhdoas") ): mock_isfile.return_value = True with pytest.raises(TypeError): JsonFileConfigProvider("non-json-file") def test_json_provider_init() -> None: data = {"hello": "world"} input_data = json.dumps(data) with patch("os.path.isfile") as mock_isfile: mock_isfile.return_value = True with patch("builtins.open", mock_open(read_data=input_data)): provider = JsonFileConfigProvider("someWhere") assert provider.__data__ == data def test_json_provider_get_postgres() -> None: data = { "postgres": { "username": "user", "password": "pass", "host": "locahost", "database": "postgres", "port": 420, } } input_data = json.dumps(data) with patch("os.path.isfile") as mock_isfile: mock_isfile.return_value = True with patch("builtins.open", mock_open(read_data=input_data)): config = JsonFileConfigProvider("someWhere").get_postgre_connection_string() assert config.username == data["postgres"]["username"] assert config.password == data["postgres"]["password"] assert config.host == data["postgres"]["host"] assert config.database == data["postgres"]["database"] assert config.port == data["postgres"]["port"] def test_json_provider_get_mongo() -> None: data = { "mongo": { "username": "user", "password": "pass", "host": "locahost", "database": "postgres", "port": 420, } } input_data = json.dumps(data) with patch("os.path.isfile") as mock_isfile: mock_isfile.return_value = True with patch("builtins.open", mock_open(read_data=input_data)): config = JsonFileConfigProvider("someWhere").get_mongo_connection_string() assert config.username == data["mongo"]["username"] assert config.password == data["mongo"]["password"] assert config.hostname == data["mongo"]["host"] assert config.database == data["mongo"]["database"] assert config.port == data["mongo"]["port"] def test_env_provider_constructor() -> None: with patch("aki_prj23_transparenzregister.config.config_providers.os") as mock_os: keys = {"PYTHON_TEST": "test", "NOT_PYTHON_TEST": ""} mock_os.environ = keys provider = EnvironmentConfigProvider() assert provider.__data__ == {"TEST": "test"} def test_env_provider_postgres() -> None: provider = EnvironmentConfigProvider() env_data = { "POSTGRES_USERNAME": "postgres", "POSTGRES_PASSWORD": "postgres", "POSTGRES_HOST": "localhost", "POSTGRES_DATABASE": "postgres", "POSTGRES_PORT": "5432", } provider.__data__ = env_data conn_string = provider.get_postgre_connection_string() assert conn_string.database == env_data["POSTGRES_DATABASE"] assert conn_string.host == env_data["POSTGRES_HOST"] assert conn_string.password == env_data["POSTGRES_PASSWORD"] assert conn_string.port == env_data["POSTGRES_PORT"] assert conn_string.username == env_data["POSTGRES_USERNAME"] def test_env_provider_mongodb() -> None: provider = EnvironmentConfigProvider() env_data = { "MONGO_USERNAME": "username", "MONGO_HOST": "localhost", "MONGO_PASSWORD": "password", "MONGO_PORT": 27017, "MONGO_DATABASE": "transparenzregister", } provider.__data__ = env_data conn_string = provider.get_mongo_connection_string() assert conn_string.database == env_data["MONGO_DATABASE"] assert conn_string.hostname == env_data["MONGO_HOST"] assert conn_string.password == env_data["MONGO_PASSWORD"] assert conn_string.port == env_data["MONGO_PORT"] assert conn_string.username == env_data["MONGO_USERNAME"]