|
17 | 17 | from sqlmesh.dbt.adapter import ParsetimeAdapter |
18 | 18 | from sqlmesh.dbt.project import Project |
19 | 19 | from sqlmesh.dbt.relation import Policy |
20 | | -from sqlmesh.dbt.target import SnowflakeConfig |
| 20 | +from sqlmesh.dbt.target import BigQueryConfig, SnowflakeConfig |
21 | 21 | from sqlmesh.utils.errors import ConfigError |
22 | 22 | from sqlmesh.utils.jinja import JinjaMacroRegistry |
23 | 23 |
|
@@ -68,6 +68,45 @@ def test_adapter_relation(sushi_test_project: Project, runtime_renderer: t.Calla |
68 | 68 | ) |
69 | 69 |
|
70 | 70 |
|
| 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 | + |
71 | 110 | @pytest.mark.cicdonly |
72 | 111 | def test_normalization( |
73 | 112 | sushi_test_project: Project, runtime_renderer: t.Callable, mocker: MockerFixture |
|
0 commit comments