Skip to content

Commit 15e1b57

Browse files
committedJun 1, 2022
backporting #165 to 1.1.0 latest
1 parent 9c26937 commit 15e1b57

File tree

2 files changed

+229
-0
lines changed

2 files changed

+229
-0
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import pytest
2+
from dbt.tests.fixtures.project import write_project_files
3+
4+
5+
models__view_2_sql = """
6+
{%- if target.type == 'bigquery' -%}
7+
{{ config(project=var('alternate_db')) }}
8+
{%- else -%}
9+
{{ config(database=var('alternate_db')) }}
10+
{%- endif -%}
11+
select * from {{ ref('seed') }}
12+
13+
"""
14+
15+
models__view_1_sql = """
16+
{#
17+
We are running against a database that must be quoted.
18+
These calls ensure that we trigger an error if we're failing to quote at parse-time
19+
#}
20+
{% do adapter.already_exists(this.schema, this.table) %}
21+
{% do adapter.get_relation(this.database, this.schema, this.table) %}
22+
select * from {{ ref('seed') }}
23+
24+
"""
25+
26+
models__subfolder__view_4_sql = """
27+
{{
28+
config(database=var('alternate_db'))
29+
}}
30+
31+
select * from {{ ref('seed') }}
32+
33+
"""
34+
35+
models__subfolder__view_3_sql = """
36+
select * from {{ ref('seed') }}
37+
38+
"""
39+
40+
seeds__seed_csv = """id,name
41+
1,a
42+
2,b
43+
3,c
44+
4,d
45+
5,e
46+
"""
47+
48+
@pytest.fixture(scope="class")
49+
def models():
50+
return {
51+
"view_2.sql": models__view_2_sql,
52+
"view_1.sql": models__view_1_sql,
53+
"subfolder":
54+
{
55+
"view_4.sql": models__subfolder__view_4_sql,
56+
"view_3.sql": models__subfolder__view_3_sql,
57+
},
58+
}
59+
60+
@pytest.fixture(scope="class")
61+
def seeds():
62+
return {
63+
"seed.csv": seeds__seed_csv
64+
}
65+
66+
@pytest.fixture(scope="class")
67+
def project_files(project_root, models, seeds,):
68+
write_project_files(project_root, "models", models)
69+
write_project_files(project_root, "seeds", seeds)
70+
71+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
import pytest
2+
from dbt.tests.util import run_dbt, check_relations_equal, check_relations_equal_with_relations
3+
from tests.functional.test_override_database.fixtures import (
4+
models,
5+
seeds,
6+
project_files
7+
)
8+
import os
9+
10+
11+
12+
13+
class BaseOverrideDatabase:
14+
@pytest.fixture(scope="class")
15+
def model_path(self):
16+
return "models"
17+
18+
@pytest.fixture(scope="class")
19+
def project_config_update(self):
20+
return {
21+
"config-version": 2,
22+
"seed-paths": ["seeds"],
23+
"vars": {
24+
"alternate_db": os.getenv("BIGQUERY_TEST_ALT_DATABASE"),
25+
},
26+
"quoting": {
27+
"database": True,
28+
},
29+
"seeds": {
30+
"quote_columns": False,
31+
}
32+
}
33+
34+
35+
class TestModelOverrideBigQuery(BaseOverrideDatabase):
36+
def run_database_override(self, project):
37+
run_dbt(["seed"])
38+
assert len(run_dbt(["run"])) == 4
39+
check_relations_equal_with_relations(project.adapter, [
40+
project.adapter.Relation.create(schema=project.test_schema, identifier="seed"),
41+
project.adapter.Relation.create(database=os.getenv("BIGQUERY_TEST_ALT_DATABASE"), schema=project.test_schema, identifier="view_2"),
42+
project.adapter.Relation.create(schema=project.test_schema, identifier="view_1"),
43+
project.adapter.Relation.create(schema=project.test_schema, identifier="view_3"),
44+
project.adapter.Relation.create(database=os.getenv("BIGQUERY_TEST_ALT_DATABASE"), schema=project.test_schema, identifier="view_4")
45+
])
46+
47+
48+
def test_bigquery_database_override(self, project):
49+
self.run_database_override(project)
50+
51+
52+
class BaseTestProjectModelOverrideBigQuery(BaseOverrideDatabase):
53+
54+
def run_database_override(self, project):
55+
run_dbt(["seed"])
56+
assert len(run_dbt(["run"])) == 4
57+
self.assertExpectedRelations(project)
58+
59+
def assertExpectedRelations(self, project):
60+
check_relations_equal_with_relations(project.adapter, [
61+
project.adapter.Relation.create(schema=project.test_schema, identifier="seed"),
62+
project.adapter.Relation.create(database=os.getenv("BIGQUERY_TEST_ALT_DATABASE"), schema=project.test_schema, identifier="view_2"),
63+
project.adapter.Relation.create(database=os.getenv("BIGQUERY_TEST_ALT_DATABASE"), schema=project.test_schema, identifier="view_1"),
64+
project.adapter.Relation.create(schema=project.test_schema, identifier="view_3"),
65+
project.adapter.Relation.create(database=os.getenv("BIGQUERY_TEST_ALT_DATABASE"), schema=project.test_schema, identifier="view_4")
66+
])
67+
68+
69+
class TestProjectModelOverrideBigQuery(BaseTestProjectModelOverrideBigQuery):
70+
@pytest.fixture(scope="class")
71+
def project_config_update(self):
72+
return {
73+
"config-version": 2,
74+
"vars": {
75+
"alternate_db": os.getenv("BIGQUERY_TEST_ALT_DATABASE"),
76+
},
77+
"models": {
78+
"database": os.getenv("BIGQUERY_TEST_ALT_DATABASE"),
79+
"test": {
80+
"subfolder": {
81+
"database": "{{ target.database }}"
82+
}
83+
}
84+
},
85+
"seed-paths": ["seeds"],
86+
"vars": {
87+
"alternate_db": os.getenv("BIGQUERY_TEST_ALT_DATABASE"),
88+
},
89+
"quoting": {
90+
"database": True,
91+
},
92+
"seeds": {
93+
"quote_columns": False,
94+
}
95+
}
96+
97+
def test_bigquery_database_override(self, project):
98+
self.run_database_override(project)
99+
100+
101+
class TestProjectModelAliasOverrideBigQuery(BaseTestProjectModelOverrideBigQuery):
102+
@pytest.fixture(scope="class")
103+
def project_config_update(self):
104+
return {
105+
"config-version": 2,
106+
"vars": {
107+
"alternate_db": os.getenv("BIGQUERY_TEST_ALT_DATABASE"),
108+
},
109+
"models": {
110+
"project": os.getenv("BIGQUERY_TEST_ALT_DATABASE"),
111+
"test": {
112+
"subfolder": {
113+
"project": "{{ target.database }}"
114+
}
115+
}
116+
},
117+
"seed-paths": ["seeds"],
118+
"vars": {
119+
"alternate_db": os.getenv("BIGQUERY_TEST_ALT_DATABASE"),
120+
},
121+
"quoting": {
122+
"database": True,
123+
},
124+
"seeds": {
125+
"quote_columns": False,
126+
}
127+
}
128+
129+
def test_bigquery_project_override(self, project):
130+
self.run_database_override(project)
131+
132+
133+
class TestProjectSeedOverrideBigQuery(BaseOverrideDatabase):
134+
@pytest.fixture(scope="class")
135+
def project_config_update(self):
136+
return {
137+
"config-version": 2,
138+
"seed-paths": ["seeds"],
139+
"vars": {
140+
"alternate_db": os.getenv("BIGQUERY_TEST_ALT_DATABASE"),
141+
},
142+
"seeds": {
143+
"database": os.getenv("BIGQUERY_TEST_ALT_DATABASE")
144+
}
145+
}
146+
def run_database_override(self, project):
147+
run_dbt(["seed"])
148+
assert len(run_dbt(["run"])) == 4
149+
check_relations_equal_with_relations(project.adapter, [
150+
project.adapter.Relation.create(database=os.getenv("BIGQUERY_TEST_ALT_DATABASE"), schema=project.test_schema, identifier="seed"),
151+
project.adapter.Relation.create(database=os.getenv("BIGQUERY_TEST_ALT_DATABASE"), schema=project.test_schema, identifier="view_2"),
152+
project.adapter.Relation.create(schema=project.test_schema, identifier="view_1"),
153+
project.adapter.Relation.create(schema=project.test_schema, identifier="view_3"),
154+
project.adapter.Relation.create(database=os.getenv("BIGQUERY_TEST_ALT_DATABASE"), schema=project.test_schema, identifier="view_4")
155+
])
156+
157+
def test_bigquery_database_override(self, project):
158+
self.run_database_override(project)

0 commit comments

Comments
 (0)