import pytest from bonobo.util.testing import EnvironmentTestCase @pytest.fixture def env1(tmpdir): env_file = tmpdir.join(".env_one") env_file.write("\n".join(("SECRET=unknown", "PASSWORD=sweet", "PATH=first"))) return str(env_file) @pytest.fixture def env2(tmpdir): env_file = tmpdir.join(".env_two") env_file.write("\n".join(("PASSWORD=bitter", "PATH='second'"))) return str(env_file) class TestDefaultEnvFile(EnvironmentTestCase): def test_run_with_default_env_file(self, runner, target, env1): env = self.run_environ(runner, *target, "--default-env-file", env1) assert env.get("SECRET") == "unknown" assert env.get("PASSWORD") == "sweet" assert env.get("PATH") == "/usr/bin" def test_run_with_multiple_default_env_files(self, runner, target, env1, env2): env = self.run_environ(runner, *target, "--default-env-file", env1, "--default-env-file", env2) assert env.get("SECRET") == "unknown" assert env.get("PASSWORD") == "sweet" assert env.get("PATH") == "/usr/bin" env = self.run_environ(runner, *target, "--default-env-file", env2, "--default-env-file", env1) assert env.get("SECRET") == "unknown" assert env.get("PASSWORD") == "bitter" assert env.get("PATH") == "/usr/bin" class TestEnvFile(EnvironmentTestCase): def test_run_with_file(self, runner, target, env1): env = self.run_environ(runner, *target, "--env-file", env1) assert env.get("SECRET") == "unknown" assert env.get("PASSWORD") == "sweet" assert env.get("PATH") == "first" def test_run_with_multiple_files(self, runner, target, env1, env2): env = self.run_environ(runner, *target, "--env-file", env1, "--env-file", env2) assert env.get("SECRET") == "unknown" assert env.get("PASSWORD") == "bitter" assert env.get("PATH") == "second" env = self.run_environ(runner, *target, "--env-file", env2, "--env-file", env1) assert env.get("SECRET") == "unknown" assert env.get("PASSWORD") == "sweet" assert env.get("PATH") == "first" class TestEnvFileCombinations(EnvironmentTestCase): def test_run_with_both_env_files(self, runner, target, env1, env2): env = self.run_environ(runner, *target, "--default-env-file", env1, "--env-file", env2) assert env.get("SECRET") == "unknown" assert env.get("PASSWORD") == "bitter" assert env.get("PATH") == "second" def test_run_with_both_env_files_then_overrides(self, runner, target, env1, env2): env = self.run_environ( runner, *target, "--default-env-file", env1, "--env-file", env2, "--env", "PASSWORD=mine", "--env", "SECRET=s3cr3t" ) assert env.get("SECRET") == "s3cr3t" assert env.get("PASSWORD") == "mine" assert env.get("PATH") == "second" class TestEnvVars(EnvironmentTestCase): def test_run_no_env(self, runner, target): env = self.run_environ(runner, *target, environ={"USER": "romain"}) assert env.get("USER") == "romain" def test_run_env(self, runner, target): env = self.run_environ(runner, *target, "--env", "USER=serious", environ={"USER": "romain"}) assert env.get("USER") == "serious" def test_run_env_mixed(self, runner, target): env = self.run_environ(runner, *target, "--env", "ONE=1", "--env", 'TWO="2"', environ={"USER": "romain"}) assert env.get("USER") == "romain" assert env.get("ONE") == "1" assert env.get("TWO") == "2" def test_run_default_env(self, runner, target): env = self.run_environ(runner, *target, "--default-env", "USER=clown") assert env.get("USER") == "clown" env = self.run_environ(runner, *target, "--default-env", "USER=clown", environ={"USER": "romain"}) assert env.get("USER") == "romain" env = self.run_environ( runner, *target, "--env", "USER=serious", "--default-env", "USER=clown", environ={"USER": "romain"} ) assert env.get("USER") == "serious"