diff --git a/.changes/unreleased/Fixes-20240917-174446.yaml b/.changes/unreleased/Fixes-20240917-174446.yaml new file mode 100644 index 00000000000..89dd65e6f35 --- /dev/null +++ b/.changes/unreleased/Fixes-20240917-174446.yaml @@ -0,0 +1,6 @@ +kind: Fixes +body: Fix `--resource-type test` for `dbt list` and `dbt build` +time: 2024-09-17T17:44:46.121032-06:00 +custom: + Author: dbeatty10 + Issue: "10730" diff --git a/core/dbt/task/build.py b/core/dbt/task/build.py index bcaaf45622f..62d2ed28c7c 100644 --- a/core/dbt/task/build.py +++ b/core/dbt/task/build.py @@ -202,6 +202,7 @@ def get_node_selector(self, no_unit_tests=False) -> ResourceTypeSelector: graph=self.graph, manifest=self.manifest, previous_state=self.previous_state, + resource_types=resource_types, ) return ResourceTypeSelector( graph=self.graph, diff --git a/core/dbt/task/list.py b/core/dbt/task/list.py index a74a5bffec2..53fc0d80a13 100644 --- a/core/dbt/task/list.py +++ b/core/dbt/task/list.py @@ -205,6 +205,7 @@ def get_node_selector(self): graph=self.graph, manifest=self.manifest, previous_state=self.previous_state, + resource_types=self.resource_types, ) else: return ResourceTypeSelector( diff --git a/core/dbt/task/test.py b/core/dbt/task/test.py index dbcbbbb8ee3..f8b6b5964d7 100644 --- a/core/dbt/task/test.py +++ b/core/dbt/task/test.py @@ -376,12 +376,14 @@ def _render_daff_diff(self, daff_diff: daff.TableDiff) -> str: class TestSelector(ResourceTypeSelector): - def __init__(self, graph, manifest, previous_state) -> None: + def __init__( + self, graph, manifest, previous_state, resource_types=[NodeType.Test, NodeType.Unit] + ) -> None: super().__init__( graph=graph, manifest=manifest, previous_state=previous_state, - resource_types=[NodeType.Test, NodeType.Unit], + resource_types=resource_types, ) diff --git a/tests/functional/unit_testing/fixtures.py b/tests/functional/unit_testing/fixtures.py index e73351f89d8..83e98677f20 100644 --- a/tests/functional/unit_testing/fixtures.py +++ b/tests/functional/unit_testing/fixtures.py @@ -50,6 +50,18 @@ FROM {{ ref('my_model_a') }} """ +test_my_model_a_yml = """ +models: + - name: my_model_a + columns: + - name: a + tests: + - not_null + - name: id + tests: + - not_null +""" + test_my_model_yml = """ unit_tests: - name: test_my_model diff --git a/tests/functional/unit_testing/test_ut_resource_types.py b/tests/functional/unit_testing/test_ut_resource_types.py new file mode 100644 index 00000000000..85d198bb60a --- /dev/null +++ b/tests/functional/unit_testing/test_ut_resource_types.py @@ -0,0 +1,73 @@ +import pytest +from fixtures import ( # noqa: F401 + my_model_a_sql, + my_model_b_sql, + my_model_sql, + test_my_model_a_yml, + test_my_model_pass_yml, +) + +from dbt.tests.util import run_dbt + +EXPECTED_MODELS = [ + "test.my_model", + "test.my_model_a", + "test.my_model_b", +] + +EXPECTED_DATA_TESTS = [ + "test.not_null_my_model_a_a", + "test.not_null_my_model_a_id", +] + +EXPECTED_UNIT_TESTS = [ + "unit_test:test.test_my_model", +] + + +class TestUnitTestResourceTypes: + @pytest.fixture(scope="class") + def models(self): + return { + "my_model.sql": my_model_sql, + "my_model_a.sql": my_model_a_sql, + "my_model_b.sql": my_model_b_sql, + "test_my_model.yml": test_my_model_pass_yml, + "test_my_model_a.yml": test_my_model_a_yml, + } + + def test_unit_test_list(self, project): + results = run_dbt(["run"]) + + # unit tests + results = run_dbt(["list", "--resource-type", "unit_test"]) + assert sorted(results) == EXPECTED_UNIT_TESTS + + results = run_dbt(["list", "--exclude-resource-types", "model", "test"]) + assert sorted(results) == EXPECTED_UNIT_TESTS + + # data tests + results = run_dbt(["list", "--resource-type", "test"]) + assert sorted(results) == EXPECTED_DATA_TESTS + + results = run_dbt(["list", "--exclude-resource-types", "unit_test", "model"]) + assert sorted(results) == EXPECTED_DATA_TESTS + + results = run_dbt(["build", "--resource-type", "test"]) + assert len(results) == len(EXPECTED_DATA_TESTS) + + results = run_dbt(["build", "--exclude-resource-types", "unit_test", "model"]) + assert len(results) == len(EXPECTED_DATA_TESTS) + + # models + results = run_dbt(["list", "--resource-type", "model"]) + assert len(results) == len(EXPECTED_MODELS) + + results = run_dbt(["list", "--exclude-resource-type", "unit_test", "test"]) + assert sorted(results) == EXPECTED_MODELS + + results = run_dbt(["build", "--resource-type", "model"]) + assert len(results) == len(EXPECTED_MODELS) + + results = run_dbt(["build", "--exclude-resource-type", "unit_test", "test"]) + assert len(results) == len(EXPECTED_MODELS)