@@ -45,6 +45,49 @@ def _normalize_empty(val):
4545 return val if val not in (None , "" ) else None
4646
4747
48+ def assert_group_name_in_run_results_view (
49+ dbt_project , view_name , object_name , group_name
50+ ):
51+ """Assert that the view_run_results table has exactly one row for model_name and its group_name matches."""
52+ view_run_results = dbt_project .read_table (
53+ view_name , where = f"name = '{ object_name } '" , raise_if_empty = True
54+ )
55+
56+ assert (
57+ len (view_run_results ) == 1
58+ ), f"Expected 1 view run result, got { len (view_run_results )} "
59+ view_run_result_row = view_run_results [0 ]
60+ assert (
61+ view_run_result_row ["group_name" ] == group_name
62+ ), f"Expected group_name '{ group_name } ', got '{ view_run_result_row ['group_name' ]} '"
63+
64+
65+ def assert_group_name_in_run_results (dbt_project , model_name , group_name ):
66+ assert_group_name_in_run_results_view (
67+ dbt_project , "dbt_run_results" , model_name , group_name
68+ )
69+
70+
71+ def assert_group_name_in_model_run_results (dbt_project , model_name , group_name ):
72+ assert_group_name_in_run_results_view (
73+ dbt_project , "model_run_results" , model_name , group_name
74+ )
75+
76+
77+ def assert_group_row_in_db_groups (dbt_project , group_name , owner_name , owner_email ):
78+ """Assert that the group exists in dbt_groups and owner info matches."""
79+ group_row = _get_group_from_table (dbt_project , group_name )
80+ assert (
81+ group_row is not None
82+ ), f"Group { group_name } not found in dbt_groups artifact table."
83+ assert _normalize_empty (group_row .get ("owner_name" )) == _normalize_empty (
84+ owner_name
85+ ), f"Expected owner name '{ owner_name } ', got '{ group_row .get ('owner_name' )} '"
86+ assert _normalize_empty (group_row .get ("owner_email" )) == _normalize_empty (
87+ owner_email
88+ ), f"Expected owner email '{ owner_email } ', got '{ group_row .get ('owner_email' )} '"
89+
90+
4891def test_model_and_groups (dbt_project : DbtProject , tmp_path ):
4992 """
5093 Test that a model assigned to a group inherits the group attribute in the dbt_models artifact table.
@@ -93,6 +136,7 @@ def test_model_and_groups(dbt_project: DbtProject, tmp_path):
93136 dbt_model_path .write_text (model_sql )
94137 try :
95138 dbt_project .dbt_runner .vars ["disable_dbt_artifacts_autoupload" ] = False
139+ dbt_project .dbt_runner .vars ["disable_run_results" ] = False
96140 dbt_project .dbt_runner .run (select = model_name )
97141 dbt_project .assert_table_exists ("dbt_models" )
98142
@@ -105,17 +149,11 @@ def test_model_and_groups(dbt_project: DbtProject, tmp_path):
105149 model_row ["group_name" ] == group_name
106150 ), f"Expected group_name { group_name } , got { model_row ['group_name' ]} "
107151
108- # Assert group exists in dbt_groups table
109- group_row = _get_group_from_table (dbt_project , group_name )
110- assert (
111- group_row is not None
112- ), f"Group { group_name } not found in dbt_groups artifact table."
113- assert _normalize_empty (group_row .get ("owner_name" )) == _normalize_empty (
114- OWNER_NAME
115- ), f"Expected owner name '{ OWNER_NAME } ', got '{ group_row .get ('owner_name' )} '"
116- assert _normalize_empty (group_row .get ("owner_email" )) == _normalize_empty (
117- OWNER_EMAIL
118- ), f"Expected owner email '{ OWNER_EMAIL } ', got '{ group_row .get ('owner_email' )} '"
152+ assert_group_row_in_db_groups (
153+ dbt_project , group_name , OWNER_NAME , OWNER_EMAIL
154+ )
155+ assert_group_name_in_run_results (dbt_project , model_name , group_name )
156+ assert_group_name_in_model_run_results (dbt_project , model_name , group_name )
119157
120158 finally :
121159 if dbt_model_path .exists ():
@@ -188,40 +226,23 @@ def test_two_groups(dbt_project: DbtProject, tmp_path):
188226 dbt_model_path_2 .write_text (model_sql )
189227 try :
190228 dbt_project .dbt_runner .vars ["disable_dbt_artifacts_autoupload" ] = False
229+ dbt_project .dbt_runner .vars ["disable_run_results" ] = False
191230 dbt_project .dbt_runner .run (select = f"{ model_name_1 } { model_name_2 } " )
192231 dbt_project .assert_table_exists ("dbt_models" )
193232
194233 # Check both models and their groups/owners
195- for model_name , group_name , owner_name , owner_email in [
196- (model_name_1 , group_name_1 , None , owner_email_1 ),
197- (model_name_2 , group_name_2 , owner_name_2 , None ),
198- ]:
199- models = dbt_project .read_table (
200- "dbt_models" , where = f"name = '{ model_name } '" , raise_if_empty = True
201- )
202- assert (
203- len (models ) == 1
204- ), f"Expected 1 model for { model_name } , got { len (models )} "
205- model_row = models [0 ]
206- assert (
207- model_row ["group_name" ] == group_name
208- ), f"Expected group_name { group_name } , got { model_row ['group_name' ]} for model { model_name } "
209-
210- # Assert group exists in dbt_groups table and owner info is correct
211- group_row = _get_group_from_table (dbt_project , group_name )
212- assert (
213- group_row is not None
214- ), f"Group { group_name } not found in dbt_groups artifact table."
215- assert _normalize_empty (
216- group_row .get ("owner_name" )
217- ) == _normalize_empty (
218- owner_name
219- ), f"Expected owner name '{ owner_name } ', got '{ group_row .get ('owner_name' )} '"
220- assert _normalize_empty (
221- group_row .get ("owner_email" )
222- ) == _normalize_empty (
223- owner_email
224- ), f"Expected owner email '{ owner_email } ', got '{ group_row .get ('owner_email' )} '"
234+ assert_group_row_in_db_groups (
235+ dbt_project , group_name_1 , None , owner_email_1
236+ )
237+ assert_group_row_in_db_groups (dbt_project , group_name_2 , owner_name_2 , None )
238+ assert_group_name_in_run_results (dbt_project , model_name_1 , group_name_1 )
239+ assert_group_name_in_run_results (dbt_project , model_name_2 , group_name_2 )
240+ assert_group_name_in_model_run_results (
241+ dbt_project , model_name_1 , group_name_1
242+ )
243+ assert_group_name_in_model_run_results (
244+ dbt_project , model_name_2 , group_name_2
245+ )
225246
226247 finally :
227248 if dbt_model_path_1 .exists ():
@@ -407,6 +428,7 @@ def test_seed_group_attribute(dbt_project: DbtProject, tmp_path):
407428 dbt_seed_path .write_text (seed_csv )
408429 # Run dbt seed
409430 dbt_project .dbt_runner .vars ["disable_dbt_artifacts_autoupload" ] = False
431+ dbt_project .dbt_runner .vars ["disable_run_results" ] = False
410432 dbt_project .dbt_runner .seed (select = seed_name )
411433 dbt_project .assert_table_exists ("dbt_seeds" )
412434 seeds = dbt_project .read_table (
@@ -418,6 +440,11 @@ def test_seed_group_attribute(dbt_project: DbtProject, tmp_path):
418440 seed_row ["group_name" ] == group_name
419441 ), f"Expected group_name { group_name } , got { seed_row ['group_name' ]} "
420442
443+ assert_group_name_in_run_results (dbt_project , seed_name , group_name )
444+ assert_group_name_in_run_results_view (
445+ dbt_project , "seed_run_results" , seed_name , group_name
446+ )
447+
421448
422449def test_snapshot_group_attribute (dbt_project : DbtProject , tmp_path ):
423450 """
@@ -478,8 +505,10 @@ def test_snapshot_group_attribute(dbt_project: DbtProject, tmp_path):
478505 dbt_snapshot_path .write_text (snapshot_sql )
479506 # Run dbt snapshot (runs all snapshots, as selecting is not supported by the runner)
480507 dbt_project .dbt_runner .vars ["disable_dbt_artifacts_autoupload" ] = False
508+ dbt_project .dbt_runner .vars ["disable_run_results" ] = False
481509 dbt_project .dbt_runner .snapshot ()
482510 dbt_project .assert_table_exists ("dbt_snapshots" )
511+
483512 snapshots = dbt_project .read_table (
484513 "dbt_snapshots" , where = f"name = '{ snapshot_name } '" , raise_if_empty = False
485514 )
@@ -491,3 +520,8 @@ def test_snapshot_group_attribute(dbt_project: DbtProject, tmp_path):
491520 assert (
492521 snapshot_row ["group_name" ] == group_name
493522 ), f"Expected group_name { group_name } , got { snapshot_row ['group_name' ]} "
523+
524+ assert_group_name_in_run_results (dbt_project , snapshot_name , group_name )
525+ assert_group_name_in_run_results_view (
526+ dbt_project , "snapshot_run_results" , snapshot_name , group_name
527+ )
0 commit comments