diff --git a/.changes/unreleased/Fixes-20240925-154514.yaml b/.changes/unreleased/Fixes-20240925-154514.yaml new file mode 100644 index 00000000000..8db05cc6a0e --- /dev/null +++ b/.changes/unreleased/Fixes-20240925-154514.yaml @@ -0,0 +1,6 @@ +kind: Fixes +body: Pass test user config to adapter pre_hook by explicitly adding test builder config to node +time: 2024-09-25T15:45:14.459598-07:00 +custom: + Author: colin-rogers-dbt + Issue: "10484" diff --git a/core/dbt/context/context_config.py b/core/dbt/context/context_config.py index a5b38bb415e..b1aace475c7 100644 --- a/core/dbt/context/context_config.py +++ b/core/dbt/context/context_config.py @@ -6,10 +6,12 @@ from dbt.adapters.factory import get_config_class_by_name from dbt.config import IsFQNResource, Project, RuntimeConfig from dbt.contracts.graph.model_config import get_config_for +from dbt.exceptions import SchemaConfigError from dbt.flags import get_flags from dbt.node_types import NodeType from dbt.utils import fqn_search from dbt_common.contracts.config.base import BaseConfig, merge_config_dicts +from dbt_common.dataclass_schema import ValidationError from dbt_common.exceptions import DbtInternalError @@ -237,8 +239,12 @@ def calculate_node_config_dict( base=base, patch_config_dict=patch_config_dict, ) - finalized = config.finalize_and_validate() - return finalized.to_dict(omit_none=True) + try: + finalized = config.finalize_and_validate() + return finalized.to_dict(omit_none=True) + except ValidationError as exc: + # we got a ValidationError - probably bad types in config() + raise SchemaConfigError(exc, node=config) from exc class UnrenderedConfigGenerator(BaseContextConfigGenerator[Dict[str, Any]]): diff --git a/core/dbt/parser/schema_generic_tests.py b/core/dbt/parser/schema_generic_tests.py index 14e2dbc862a..01211183afc 100644 --- a/core/dbt/parser/schema_generic_tests.py +++ b/core/dbt/parser/schema_generic_tests.py @@ -200,7 +200,7 @@ def parse_generic_test( # this is the ContextConfig that is used in render_update config: ContextConfig = self.initial_config(fqn) - + config.add_config_call(builder.config) # builder.args contains keyword args for the test macro, # not configs which have been separated out in the builder. # The keyword args are not completely rendered until compilation. diff --git a/tests/functional/schema_tests/data_test_config.py b/tests/functional/schema_tests/data_test_config.py index 377f14aac04..99a2dacdca6 100644 --- a/tests/functional/schema_tests/data_test_config.py +++ b/tests/functional/schema_tests/data_test_config.py @@ -35,9 +35,10 @@ def models(self): return {"table.sql": table_sql, "custom_config.yml": custom_config_yml} def test_custom_config(self, project): - run_dbt(["parse"]) - manifest = get_manifest(project.project_root) + run_dbt(["run"]) + run_dbt(["test"], expect_pass=False) + manifest = get_manifest(project.project_root) # Pattern to match the test_id without the specific suffix pattern = re.compile(r"test\.test\.accepted_values_table_color__blue__red\.\d+") diff --git a/tests/functional/schema_tests/fixtures.py b/tests/functional/schema_tests/fixtures.py index bf16148e0c7..f07ba1b7ca6 100644 --- a/tests/functional/schema_tests/fixtures.py +++ b/tests/functional/schema_tests/fixtures.py @@ -1327,7 +1327,7 @@ 8,green,80 9,yellow,90 10,blue,100 -""" +""".strip() table_sql = """ -- content of the table.sql