66
77
88class ColumnTagsMixin (MaterializationV2Mixin ):
9+ @pytest .fixture (scope = "class" )
10+ def models (self ):
11+ return {
12+ "base_model.sql" : fixtures .base_model_sql ,
13+ "schema.yml" : fixtures .initial_column_tag_model .replace (
14+ "materialized: table" , f"materialized: { self .relation_type } "
15+ ),
16+ }
17+
918 def test_column_tags (self , project ):
1019 util .run_dbt (["run" ])
1120
12- # Check that column tags were applied
13- tags = project .run_sql (
14- f"""
21+ column_tags_query = f"""
1522 SELECT column_name, tag_name, tag_value
1623 FROM `system`.`information_schema`.`column_tags`
1724 WHERE catalog_name = '{ project .database } '
1825 AND schema_name = '{ project .test_schema } '
1926 AND table_name = 'base_model'
2027 ORDER BY column_name, tag_name
21- """ ,
22- fetch = "all" ,
23- )
28+ """
2429
30+ # Check that column tags were applied
31+ tags = project .run_sql (column_tags_query , fetch = "all" )
2532 expected_tags = {
2633 ("account_number" , "pii" , "true" ),
2734 ("account_number" , "sensitive" , "true" ),
2835 }
36+ actual_tags = {(row [0 ], row [1 ], row [2 ]) for row in tags }
37+ assert actual_tags == expected_tags
2938
39+ # Run a second time with an updated model
40+ util .write_file (
41+ fixtures .updated_column_tag_model .replace (
42+ "materialized: table" , f"materialized: { self .relation_type } "
43+ ),
44+ "models" ,
45+ "schema.yml" ,
46+ )
47+ util .run_dbt (["run" ])
48+
49+ # Check that column tags were updated
50+ tags = project .run_sql (column_tags_query , fetch = "all" )
51+ expected_tags = {
52+ ("id" , "pii" , "false" ),
53+ ("account_number" , "pii" , "true" ),
54+ ("account_number" , "sensitive" , "true" ),
55+ }
3056 actual_tags = {(row [0 ], row [1 ], row [2 ]) for row in tags }
3157 assert actual_tags == expected_tags
3258
3359
3460@pytest .mark .skip_profile ("databricks_cluster" )
3561class TestColumnTagsTable (ColumnTagsMixin ):
36- @pytest .fixture (scope = "class" )
37- def models (self ):
38- return {
39- "base_model.sql" : fixtures .base_model_sql ,
40- "schema.yml" : fixtures .model_with_column_tags ,
41- }
62+ relation_type = "table"
4263
4364
4465@pytest .mark .skip_profile ("databricks_cluster" )
4566class TestColumnTagsIncremental (ColumnTagsMixin ):
46- @pytest .fixture (scope = "class" )
47- def models (self ):
48- return {
49- "base_model.sql" : fixtures .base_model_sql ,
50- "schema.yml" : fixtures .model_with_column_tags .replace (
51- "materialized: table" , "materialized: incremental"
52- ),
53- }
67+ relation_type = "incremental"
5468
5569
5670@pytest .mark .skip_profile ("databricks_cluster" , "databricks_uc_cluster" )
5771class TestColumnTagsMaterializedView (ColumnTagsMixin ):
58- @pytest .fixture (scope = "class" )
59- def models (self ):
60- return {
61- "base_model.sql" : fixtures .base_model_sql ,
62- "schema.yml" : fixtures .model_with_column_tags .replace (
63- "materialized: table" , "materialized: materialized_view"
64- ),
65- }
72+ relation_type = "materialized_view"
6673
6774
6875@pytest .mark .skip_profile ("databricks_cluster" , "databricks_uc_cluster" )
6976class TestStreamingTableColumnTags (ColumnTagsMixin ):
77+ relation_type = "streaming_table"
78+
7079 @pytest .fixture (scope = "class" )
7180 def seeds (self ):
7281 return {
@@ -77,7 +86,7 @@ def seeds(self):
7786 def models (self ):
7887 return {
7988 "base_model.sql" : fixtures .base_model_streaming_table ,
80- "schema.yml" : fixtures .model_with_column_tags .replace (
89+ "schema.yml" : fixtures .initial_column_tag_model .replace (
8190 "materialized: table" , "materialized: streaming_table"
8291 ),
8392 }
@@ -88,16 +97,5 @@ def setup_streaming_table_seed(self, project):
8897
8998
9099@pytest .mark .skip_profile ("databricks_cluster" )
91- class TestViewColumnTagsFailure (MaterializationV2Mixin ):
92- @pytest .fixture (scope = "class" )
93- def models (self ):
94- return {
95- "base_model.sql" : fixtures .base_model_sql ,
96- "schema.yml" : fixtures .model_with_column_tags .replace (
97- "materialized: table" , "materialized: view"
98- ),
99- }
100-
101- def test_view_column_tags_failure (self , project ):
102- result = util .run_dbt (["run" ], expect_pass = False )
103- assert "Column tags are not supported" in result .results [0 ].message
100+ class TestColumnTagsView (ColumnTagsMixin ):
101+ relation_type = "view"
0 commit comments