Skip to content

Commit 24fd2d4

Browse files
committed
add test for BigQuery get_columns_in_relation
1 parent dc72420 commit 24fd2d4

File tree

1 file changed

+40
-1
lines changed

1 file changed

+40
-1
lines changed

tests/dbt/test_adapter.py

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from sqlmesh.dbt.adapter import ParsetimeAdapter
1818
from sqlmesh.dbt.project import Project
1919
from sqlmesh.dbt.relation import Policy
20-
from sqlmesh.dbt.target import SnowflakeConfig
20+
from sqlmesh.dbt.target import BigQueryConfig, SnowflakeConfig
2121
from sqlmesh.utils.errors import ConfigError
2222
from sqlmesh.utils.jinja import JinjaMacroRegistry
2323

@@ -68,6 +68,45 @@ def test_adapter_relation(sushi_test_project: Project, runtime_renderer: t.Calla
6868
)
6969

7070

71+
def test_bigquery_get_columns_in_relation(
72+
sushi_test_project: Project,
73+
runtime_renderer: t.Callable,
74+
mocker: MockerFixture,
75+
):
76+
from dbt.adapters.bigquery import BigQueryColumn
77+
from google.cloud.bigquery import SchemaField
78+
79+
context = sushi_test_project.context
80+
bq_config = BigQueryConfig(name="test_target", schema="test", database="test")
81+
context.target = bq_config
82+
83+
adapter_mock = mocker.MagicMock()
84+
adapter_mock.default_catalog = "test"
85+
adapter_mock.dialect = "bigquery"
86+
table_schema = [
87+
SchemaField(name="id", field_type="STRING", mode="REQUIRED"),
88+
SchemaField(
89+
name="user_data",
90+
field_type="RECORD",
91+
mode="NULLABLE",
92+
fields=[
93+
SchemaField(name="id", field_type="STRING", mode="REQUIRED"),
94+
SchemaField(name="name", field_type="STRING", mode="REQUIRED"),
95+
SchemaField(name="address", field_type="STRING", mode="NULLABLE"),
96+
],
97+
),
98+
SchemaField(name="tags", field_type="STRING", mode="REPEATED"),
99+
SchemaField(name="score", field_type="NUMERIC", mode="NULLABLE"),
100+
SchemaField(name="created_at", field_type="TIMESTAMP", mode="NULLABLE"),
101+
]
102+
adapter_mock.get_bq_schema.return_value = table_schema
103+
renderer = runtime_renderer(context, engine_adapter=adapter_mock, dialect="bigquery")
104+
assert renderer(
105+
"{%- set relation = api.Relation.create(database='test', schema='test', identifier='test_table') -%}"
106+
"{{ adapter.get_columns_in_relation(relation) }}"
107+
) == str([BigQueryColumn.create_from_field(field) for field in table_schema])
108+
109+
71110
@pytest.mark.cicdonly
72111
def test_normalization(
73112
sushi_test_project: Project, runtime_renderer: t.Callable, mocker: MockerFixture

0 commit comments

Comments
 (0)