17
17
from unittest import mock
18
18
19
19
import pytest
20
+ import yaml
20
21
from snowflake .cli .api .identifiers import FQN
21
22
22
23
@@ -44,6 +45,8 @@ def dbt_project_path(self, tmp_path_factory):
44
45
source_path = tmp_path_factory .mktemp ("dbt_project" )
45
46
dbt_file = source_path / "dbt_project.yml"
46
47
dbt_file .touch ()
48
+ with dbt_file .open (mode = "w" ) as fd :
49
+ yaml .dump ({"version" : "1.2.3" }, fd )
47
50
yield source_path
48
51
49
52
@pytest .fixture
@@ -64,14 +67,35 @@ def test_deploys_project_from_source(
64
67
assert result .exit_code == 0 , result .output
65
68
assert (
66
69
mock_connect .mocked_ctx .get_query ()
67
- == "CREATE OR REPLACE DBT PROJECT TEST_PIPELINE FROM @MockDatabase.MockSchema.dbt_TEST_PIPELINE_stage"
70
+ == "CREATE OR REPLACE DBT PROJECT TEST_PIPELINE FROM @MockDatabase.MockSchema.dbt_TEST_PIPELINE_stage DBT_VERSION='1.2.3' "
68
71
)
69
72
stage_fqn = FQN .from_string (f"dbt_TEST_PIPELINE_stage" ).using_context ()
70
73
mock_create .assert_called_once_with (stage_fqn , temporary = True )
71
74
mock_put_recursive .assert_called_once_with (
72
75
dbt_project_path , "@MockDatabase.MockSchema.dbt_TEST_PIPELINE_stage"
73
76
)
74
77
78
+ @mock .patch ("snowflake.cli._plugins.dbt.manager.StageManager.put_recursive" )
79
+ @mock .patch ("snowflake.cli._plugins.dbt.manager.StageManager.create" )
80
+ def test_dbt_version_from_option_has_precedence_over_file (
81
+ self , _mock_create , _mock_put_recursive , mock_connect , runner , dbt_project_path
82
+ ):
83
+ result = runner .invoke (
84
+ [
85
+ "dbt" ,
86
+ "deploy" ,
87
+ "TEST_PIPELINE" ,
88
+ f"--source={ dbt_project_path } " ,
89
+ "--dbt-version=2.3.4" ,
90
+ ]
91
+ )
92
+
93
+ assert result .exit_code == 0 , result .output
94
+ assert (
95
+ mock_connect .mocked_ctx .get_query ()
96
+ == "CREATE OR REPLACE DBT PROJECT TEST_PIPELINE FROM @MockDatabase.MockSchema.dbt_TEST_PIPELINE_stage DBT_VERSION='2.3.4'"
97
+ )
98
+
75
99
def test_raises_when_dbt_project_is_not_available (
76
100
self , dbt_project_path , mock_connect , runner
77
101
):
@@ -86,6 +110,24 @@ def test_raises_when_dbt_project_is_not_available(
86
110
assert "dbt_project.yml does not exist in provided path." in result .output
87
111
assert mock_connect .mocked_ctx .get_query () == ""
88
112
113
+ def test_raises_when_dbt_project_version_is_not_specified (
114
+ self , dbt_project_path , mock_connect , runner
115
+ ):
116
+ dbt_file = dbt_project_path / "dbt_project.yml"
117
+ with dbt_file .open (mode = "w" ) as fd :
118
+ yaml .dump ({}, fd )
119
+
120
+ result = runner .invoke (
121
+ ["dbt" , "deploy" , "TEST_PIPELINE" , f"--source={ dbt_project_path } " ]
122
+ )
123
+
124
+ assert result .exit_code == 1 , result .output
125
+ assert (
126
+ "dbt-version was not provided and is not available in dbt_project.yml"
127
+ in result .output
128
+ )
129
+ assert mock_connect .mocked_ctx .get_query () == ""
130
+
89
131
90
132
class TestDBTExecute :
91
133
@pytest .mark .parametrize (
0 commit comments