1+ from contextlib import contextmanager
2+ from pathlib import Path
3+
14import pytest
25
36from dbt_project import DbtProject
47
58
6- @pytest .mark .skip_targets (["vertica" ])
7- @pytest .mark .skip_for_dbt_fusion
8- def test_microbatch_run_results_has_compiled_code (test_id : str , dbt_project : DbtProject ):
9- dbt_project .dbt_runner .vars ["disable_run_results" ] = False
10-
11- model_sql = """
9+ def _microbatch_model_sql () -> str :
10+ return """
1211{% set model_config = {
1312 "materialized": "incremental",
1413 "incremental_strategy": "microbatch",
@@ -28,15 +27,19 @@ def test_microbatch_run_results_has_compiled_code(test_id: str, dbt_project: Dbt
2827{{ config(**model_config) }}
2928
3029select
31- cast({{ elementary.escape_reserved_keywords("one") }} as int) as order_id,
30+ 1 as order_id,
3231 1 as customer_id,
3332 42 as amount,
3433 {{ dbt.current_timestamp() }} as order_date
3534from {{ ref('one') }}
3635"""
3736
37+
38+ def _run_microbatch_model_and_get_latest_success_result (
39+ dbt_project : DbtProject , test_id : str
40+ ):
3841 with dbt_project .create_temp_model_for_existing_table (
39- test_id , raw_code = model_sql
42+ test_id , raw_code = _microbatch_model_sql ()
4043 ) as model_path :
4144 dbt_project .dbt_runner .run (select = str (model_path ))
4245
@@ -47,7 +50,50 @@ def test_microbatch_run_results_has_compiled_code(test_id: str, dbt_project: Dbt
4750 order_by = "generated_at desc" ,
4851 limit = 1 ,
4952 )
53+ return run_results
54+
55+
56+ @contextmanager
57+ def _without_microbatch_override_macro (dbt_project : DbtProject ):
58+ macro_path = (
59+ dbt_project .project_dir_path / "macros" / "microbatch.sql"
60+ )
61+ backup_path = macro_path .with_suffix (".sql.bak" )
62+ if not macro_path .exists ():
63+ raise FileNotFoundError (f"Expected macro file at { macro_path } " )
64+
65+ macro_path .rename (backup_path )
66+ try :
67+ yield
68+ finally :
69+ if backup_path .exists ():
70+ backup_path .rename (macro_path )
71+
72+
73+ @pytest .mark .skip_targets (["vertica" ])
74+ @pytest .mark .skip_for_dbt_fusion
75+ def test_microbatch_run_results_has_compiled_code (test_id : str , dbt_project : DbtProject ):
76+ dbt_project .dbt_runner .vars ["disable_run_results" ] = False
77+
78+ run_results = _run_microbatch_model_and_get_latest_success_result (dbt_project , test_id )
5079 assert run_results , "Expected a successful run result row for microbatch model"
5180 assert run_results [0 ]["compiled_code" ], (
5281 "Expected compiled_code to be populated for successful microbatch model run result"
5382 )
83+
84+
85+ @pytest .mark .skip_targets (["vertica" ])
86+ @pytest .mark .skip_for_dbt_fusion
87+ def test_microbatch_run_results_without_override_has_empty_compiled_code (
88+ test_id : str , dbt_project : DbtProject
89+ ):
90+ dbt_project .dbt_runner .vars ["disable_run_results" ] = False
91+
92+ with _without_microbatch_override_macro (dbt_project ):
93+ run_results = _run_microbatch_model_and_get_latest_success_result (
94+ dbt_project , test_id
95+ )
96+ assert run_results , "Expected a successful run result row for microbatch model"
97+ assert not run_results [0 ]["compiled_code" ], (
98+ "Expected compiled_code to stay empty when microbatch override macro is absent"
99+ )
0 commit comments