From 647d4adbf445f9b72c1eaa8919c80c205929e8b0 Mon Sep 17 00:00:00 2001 From: dbagan Date: Tue, 24 Oct 2023 13:56:04 +0200 Subject: [PATCH] Add tests for environmental variables interpolation support --- tests/unit/credentials/test_reader.py | 44 +++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/tests/unit/credentials/test_reader.py b/tests/unit/credentials/test_reader.py index 6256f127..bd019dd7 100644 --- a/tests/unit/credentials/test_reader.py +++ b/tests/unit/credentials/test_reader.py @@ -31,6 +31,24 @@ def creds_yaml_bad_url(): """ +@pytest.fixture +def creds_yaml_env_variables(): + return """ +secrets: + local_ftp: ftp://${USER}:${PASSWORD}@local.com + remote_db: postgresql://${USER_DB}:${PASSWORD_DB}@db.com/database +""" + + +@pytest.fixture +def creds_yaml_bad_env_variables(): + return """ +secrets: + local_ftp: ftp://${FAKE_USER}:${FAKE_PASSWORD}@local.com + remote_db: postgresql://${FAKE_USER_DB}:${FAKE_PASSWORD_DB}@db.com/database +""" + + def test_bad_yaml(): with pytest.raises(TentaclioFileError): data = io.StringIO("sadfsaf") @@ -62,3 +80,29 @@ def test_credentials_bad_url(creds_yaml_bad_url): data = io.StringIO(creds_yaml_bad_url) with pytest.raises(Exception): reader.add_credentials_from_reader(injection.CredentialsInjector(), data) + + +@pytest.mark.parametrize( + "url, expected", + [ + ("ftp://local.com/file.txt", "ftp://user:password@local.com/file.txt"), + ("postgresql://db.com/database", "postgresql://user_db:password_db@db.com/database"), + ], +) +def test_credentials_env_variable(url, expected, creds_yaml_env_variables, monkeypatch): + monkeypatch.setenv('USER', 'user') + monkeypatch.setenv('USER_DB', 'user_db') + monkeypatch.setenv('PASSWORD', 'password') + monkeypatch.setenv('PASSWORD_DB', 'password_db') + + data = io.StringIO(creds_yaml_env_variables) + injector = reader.add_credentials_from_reader(injection.CredentialsInjector(), data) + + result = injector.inject(urls.URL(url)) + assert result == urls.URL(expected) + + +def test_credentials_bad_env_variable(creds_yaml_bad_env_variables): + data = io.StringIO(creds_yaml_bad_env_variables) + with pytest.raises(EnvironmentError): + reader.add_credentials_from_reader(injection.CredentialsInjector(), data)