from tempfile import NamedTemporaryFile import pytest from src.config import ( Config, FetchConfig, LoggingConfig, read_toml_config, ) from src.models import LoggingOutputConfig @pytest.mark.parametrize( "config_data, expected", [ ( '[main]\napi_token = "something"\n' 'format = "{owner}/{name}"\n' 'endpoint = "https://example.com"\n' 'out_dir = "/home/user/repositories"\n' "\n" "[fetch]\n" 'ssh_key = "/tmp/no_key"', Config( api_token="something", repository_format="{owner}/{name}", out_dir="/home/user/repositories", endpoint="https://example.com", fetch=FetchConfig(ssh_key="/tmp/no_key"), logging=LoggingConfig(), ), ), ( '[main]\napi_token = "something"\n' 'format = "{owner}/{name}"\n' 'endpoint = "https://example.com"\n' 'out_dir = "/home/user/repositories"\n' "\n" "[fetch]\n" 'user = "alex"\n' 'token = "repo-token"', Config( api_token="something", repository_format="{owner}/{name}", out_dir="/home/user/repositories", endpoint="https://example.com", fetch=FetchConfig(user="alex", token="repo-token"), logging=LoggingConfig(), ), ), ( '[main]\napi_token = "something"\n' 'format = "{owner}/{name}"\n' 'endpoint = "https://example.com"\n' 'out_dir = "/home/user/repositories"\n' "\n" "[fetch]\n" 'ssh_key = "/tmp/no_key"\n' "\n" "[logging]\n" 'level = "DEBUG"\n' "\n" "[[logging.outputs]]\n" 'type = "console"\n' 'format = "plain"\n' 'stream = "stdout"\n' "\n" "[[logging.outputs]]\n" 'type = "console"\n' 'format = "json"\n' 'stream = "stderr"\n' "\n" "[[logging.outputs]]\n" 'type = "file"\n' 'path = "/tmp/gitea-mirror.log"\n' 'format = "json"\n' "max_size = 1048576\n" "backup_count = 3", Config( api_token="something", repository_format="{owner}/{name}", out_dir="/home/user/repositories", endpoint="https://example.com", fetch=FetchConfig(ssh_key="/tmp/no_key"), logging=LoggingConfig( level="DEBUG", outputs=[ LoggingOutputConfig( type="console", format="plain", stream="stdout", ), LoggingOutputConfig( type="console", format="json", stream="stderr", ), LoggingOutputConfig( type="file", path="/tmp/gitea-mirror.log", format="json", max_size=1048576, backup_count=3, ), ], ), ), ), ("[main]", None), ( '[main]\napi_token = "something"\n' 'format = "{owner}/{name}"\n' 'endpoint = "https://example.com"\n' 'out_dir = "/home/user/repositories"\n' "\n" "[fetch]\n" 'ssh_key = "/tmp/no_key"\n' 'user = "alex"\n' 'token = "repo-token"', None, ), ( '[main]\napi_token = "something"\n' 'format = "{unknown}"\n' 'endpoint = "https://example.com"\n' 'out_dir = "/home/user/repositories"\n' "\n" "[fetch]\n" 'ssh_key = "/tmp/no_key"', None, ), ( '[main]\napi_token = "something"\n' 'format = "{owner}/{name}"\n' 'endpoint = "https://example.com"\n' 'out_dir = "/home/user/repositories"\n' "\n" "[fetch]\n" 'ssh_key = "/tmp/no_key"\n' "\n" "[logging]\n" 'level = "INF"', None, ), ("not valid toml", None), ], ) def test_toml_config(config_data, expected): with NamedTemporaryFile() as tf: if config_data: tf.write(config_data.encode("utf-8")) tf.flush() if expected: assert read_toml_config(tf.name) == expected else: with pytest.raises(RuntimeError): read_toml_config(tf.name) def test_toml_config_not_exists(): with pytest.raises(RuntimeError): read_toml_config("not_existing_file")