aki_prj23_transparenzregister/tests/config/config_providers_test.py

130 lines
4.7 KiB
Python

"""Tests the config provers."""
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:
"""Tests the file not found error if an unknown filepath is given for the JsonFileConfigProvider."""
with pytest.raises(FileNotFoundError):
JsonFileConfigProvider("file-that-does-not-exist")
def test_json_provider_init_no_json() -> None:
"""Tests if a non json file throws the correct error."""
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:
"""Tests the JsonFileConfigProvider creation."""
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:
"""Tests if the config provider can return the postgre config string."""
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:
"""Tests the JsonConfigProvider for the mongo db."""
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"]