|
7 | 7 |
|
8 | 8 | from cosmos.constants import DBT_DEFAULT_PACKAGES_FOLDER, DBT_PROJECT_FILENAME, PACKAGE_LOCKFILE_YML |
9 | 9 | from cosmos.dbt.project import ( |
| 10 | + _resolve_env_var, |
10 | 11 | change_working_directory, |
11 | 12 | copy_dbt_packages, |
12 | 13 | copy_manifest_file_if_exists, |
@@ -78,6 +79,57 @@ def test_returns_custom_path_when_defined(tmpdir): |
78 | 79 | assert result == "custom_dbt_packages" |
79 | 80 |
|
80 | 81 |
|
| 82 | +@patch.dict(os.environ, {"MY_PATH": "custom_packages"}) |
| 83 | +def test_resolve_env_var_with_simple_env_var(): |
| 84 | + """Test _resolve_env_var with and without a simple env_var reference.""" |
| 85 | + |
| 86 | + result = _resolve_env_var("dbt_packages") |
| 87 | + assert result == "dbt_packages" |
| 88 | + |
| 89 | + result = _resolve_env_var('{{ env_var("MY_PATH") }}') |
| 90 | + assert result == "custom_packages" |
| 91 | + |
| 92 | + |
| 93 | +@patch.dict(os.environ, {}, clear=False) |
| 94 | +def test_resolve_env_var_with_default_value(): |
| 95 | + """Test _resolve_env_var with env_var default when variable is not set.""" |
| 96 | + # Ensure the variable is not set |
| 97 | + os.environ.pop("NONEXISTENT_VAR", None) |
| 98 | + result = _resolve_env_var('{{ env_var("NONEXISTENT_VAR", "default_path") }}') |
| 99 | + assert result == "default_path" |
| 100 | + |
| 101 | + |
| 102 | +@patch.dict(os.environ, {"dbt_packages_suffix": "test"}) |
| 103 | +def test_resolve_env_var_with_complex_template(): |
| 104 | + """Test _resolve_env_var with complex conditional templates.""" |
| 105 | + template = 'dbt_packages{{ "_" + env_var("dbt_packages_suffix","") if env_var("dbt_packages_suffix","")!="" }}' |
| 106 | + result = _resolve_env_var(template) |
| 107 | + assert result == "dbt_packages_test" |
| 108 | + |
| 109 | + os.environ.pop("dbt_packages_suffix", None) |
| 110 | + template = 'dbt_packages{{ "_" + env_var("dbt_packages_suffix","") if env_var("dbt_packages_suffix","")!="" }}' |
| 111 | + result = _resolve_env_var(template) |
| 112 | + assert result == "dbt_packages" |
| 113 | + |
| 114 | + |
| 115 | +@patch.dict(os.environ, {}, clear=False) |
| 116 | +def test_resolve_env_var_with_complex_template_unset_var(): |
| 117 | + """Test _resolve_env_var with a complex conditional template when variable is not set.""" |
| 118 | + if "dbt_packages_suffix" in os.environ: |
| 119 | + del os.environ["dbt_packages_suffix"] |
| 120 | + template = 'dbt_packages{{ "_" + env_var("dbt_packages_suffix","") if env_var("dbt_packages_suffix","")!="" }}' |
| 121 | + result = _resolve_env_var(template) |
| 122 | + assert result == "dbt_packages" |
| 123 | + |
| 124 | + |
| 125 | +@patch.dict(os.environ, {"ENV_SUFFIX": "prod"}) |
| 126 | +def test_get_dbt_packages_subpath_with_env_var_template(tmpdir): |
| 127 | + """Test get_dbt_packages_subpath with env_var in packages-install-path.""" |
| 128 | + write_dbt_project_yml(tmpdir, {"packages-install-path": 'dbt_packages_{{ env_var("ENV_SUFFIX") }}'}) |
| 129 | + result = get_dbt_packages_subpath(tmpdir) |
| 130 | + assert result == "dbt_packages_prod" |
| 131 | + |
| 132 | + |
81 | 133 | def test_create_symlinks(tmp_path): |
82 | 134 | """Tests that symlinks are created for expected files in the dbt project directory.""" |
83 | 135 | tmp_dir = tmp_path / "dbt-project" |
|
0 commit comments