diff --git a/tests/test_config.py b/tests/test_config.py index 62aea03fb5ad47d3891eafbd811cb42e21de0dfd..465468b5403dea9025287f6916fe8c606e242681 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -17,8 +17,37 @@ import contextlib import os +import pytest + +from . import testutil + from conservancy_beancount import config as config_mod +RT_ENV_KEYS = ( + 'RTSERVER', + 'RTUSER', + 'RTPASSWD', + 'RTAUTH', +) + +RT_ENV_CREDS = ( + 'https://example.org/envrt', + 'envuser', + 'env password', + 'gssapi', +) + +RT_FILE_CREDS = ( + 'https://example.org/filert', + 'fileuser', + 'file password', + 'basic', +) + +@pytest.fixture +def rt_environ(): + return dict(zip(RT_ENV_KEYS, RT_ENV_CREDS)) + def _update_environ(updates): for key, value in updates.items(): if value is None: @@ -41,3 +70,42 @@ def test_repository_from_environment(): def test_no_repository(): config = config_mod.Config() assert config.repository_path() is None + +def test_no_rt_credentials(): + with update_environ(HOME=testutil.TESTS_DIR): + config = config_mod.Config() + rt_credentials = config.rt_credentials() + assert rt_credentials.server is None + assert rt_credentials.user is None + assert rt_credentials.passwd is None + assert rt_credentials.auth == 'rt' + +def test_rt_credentials_from_file(): + config = config_mod.Config() + rt_credentials = config.rt_credentials() + assert rt_credentials == RT_FILE_CREDS + +def test_rt_credentials_from_environment(rt_environ): + with update_environ(**rt_environ): + config = config_mod.Config() + rt_credentials = config.rt_credentials() + assert rt_credentials == RT_ENV_CREDS + +@pytest.mark.parametrize('index,drop_key', enumerate(RT_ENV_KEYS)) +def test_rt_credentials_from_file_and_environment_mixed(rt_environ, index, drop_key): + del rt_environ[drop_key] + with update_environ(**rt_environ): + config = config_mod.Config() + rt_credentials = config.rt_credentials() + expected = list(RT_ENV_CREDS) + expected[index] = RT_FILE_CREDS[index] + assert rt_credentials == tuple(expected) + +def test_rt_credentials_from_all_sources_mixed(tmp_path): + server = 'https://example.org/mixedrt' + with (tmp_path / '.rtrc').open('w') as rtrc_file: + print('user basemix', 'passwd mixed up', file=rtrc_file, sep='\n') + with update_environ(HOME=tmp_path, RTSERVER=server, RTUSER='mixedup'): + config = config_mod.Config() + rt_credentials = config.rt_credentials() + assert rt_credentials == (server, 'mixedup', 'mixed up', 'rt')