Skip to content

Commit 96ea438

Browse files
committed
add test for BigQuery get_columns_in_relation
1 parent f2e1ba8 commit 96ea438

File tree

1 file changed

+39
-1
lines changed

1 file changed

+39
-1
lines changed

tests/dbt/test_adapter.py

Lines changed: 39 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,44 @@ 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+
context.target = BigQueryConfig(name="test", schema="test", database="test")
81+
82+
adapter_mock = mocker.MagicMock()
83+
adapter_mock.default_catalog = "test"
84+
adapter_mock.dialect = "bigquery"
85+
table_schema = [
86+
SchemaField(name="id", field_type="STRING", mode="REQUIRED"),
87+
SchemaField(
88+
name="user_data",
89+
field_type="RECORD",
90+
mode="NULLABLE",
91+
fields=[
92+
SchemaField(name="id", field_type="STRING", mode="REQUIRED"),
93+
SchemaField(name="name", field_type="STRING", mode="REQUIRED"),
94+
SchemaField(name="address", field_type="STRING", mode="NULLABLE"),
95+
],
96+
),
97+
SchemaField(name="tags", field_type="STRING", mode="REPEATED"),
98+
SchemaField(name="score", field_type="NUMERIC", mode="NULLABLE"),
99+
SchemaField(name="created_at", field_type="TIMESTAMP", mode="NULLABLE"),
100+
]
101+
adapter_mock.get_bq_schema.return_value = table_schema
102+
renderer = runtime_renderer(context, engine_adapter=adapter_mock, dialect="bigquery")
103+
assert renderer(
104+
"{%- set relation = api.Relation.create(database='test', schema='test', identifier='test_table') -%}"
105+
"{{ adapter.get_columns_in_relation(relation) }}"
106+
) == str([BigQueryColumn.create_from_field(field) for field in table_schema])
107+
108+
71109
@pytest.mark.cicdonly
72110
def test_normalization(
73111
sushi_test_project: Project, runtime_renderer: t.Callable, mocker: MockerFixture

0 commit comments

Comments
 (0)