Skip to content

Commit

Permalink
make graph_selection tests just checking selection (#5012)
Browse files Browse the repository at this point in the history
* make graph_selection tests just checking selection

* use util function
  • Loading branch information
ChenyuLInx authored Apr 8, 2022
1 parent 40e64b2 commit 6c277b5
Show file tree
Hide file tree
Showing 4 changed files with 250 additions and 390 deletions.
277 changes: 99 additions & 178 deletions tests/functional/graph_selection/test_graph_selection.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import json
import pytest

from dbt.tests.util import run_dbt, check_relations_equal
from dbt.tests.util import run_dbt, check_result_nodes_by_name
from tests.functional.graph_selection.fixtures import SelectionFixtures


Expand Down Expand Up @@ -32,41 +32,21 @@ def clear_schema(project):
project.run_sql("create schema {schema}")


@pytest.fixture
def run_seed(project):
clear_schema(project)
run_dbt(["seed"])


@pytest.mark.usefixtures("project", "run_seed")
class TestGraphSelection(SelectionFixtures):
# The tests here aiming to test whether the correct node is selected,
# we don't need the run to pass
@pytest.fixture(scope="class")
def selectors(self):
return selectors_yml

def test_specific_model(self, project):
run_dbt(["seed"])
results = run_dbt(["run", "--select", "users"])
assert len(results) == 1

check_relations_equal(project.adapter, ["seed", "users"])

created_tables = project.get_tables_in_schema()
assert "users_rollup" not in created_tables
assert "alternative.users" not in created_tables
assert "base_users" not in created_tables
assert "emails" not in created_tables
results = run_dbt(["run", "--select", "users"], expect_pass=False)
check_result_nodes_by_name(results, ["users"])
assert_correct_schemas(project)

def test_tags(self, project, project_root):
results = run_dbt(["run", "--selector", "bi_selector"])
assert len(results) == 2
created_tables = project.get_tables_in_schema()
assert not ("alternative.users" in created_tables)
assert not ("base_users" in created_tables)
assert not ("emails" in created_tables)
assert "users" in created_tables
assert "users_rollup" in created_tables
results = run_dbt(["run", "--selector", "bi_selector"], expect_pass=False)
check_result_nodes_by_name(results, ["users", "users_rollup"])
assert_correct_schemas(project)
manifest_path = project_root.join("target/manifest.json")
assert os.path.exists(manifest_path)
Expand All @@ -75,178 +55,122 @@ def test_tags(self, project, project_root):
assert "selectors" in manifest

def test_tags_and_children(self, project):
results = run_dbt(["run", "--select", "tag:base+"])
assert len(results) == 5
created_models = project.get_tables_in_schema()
assert not ("base_users" in created_models)
assert not ("emails" in created_models)
assert "emails_alt" in created_models
assert "users_rollup" in created_models
assert "users" in created_models
assert "alternative.users" in created_models
results = run_dbt(["run", "--select", "tag:base+"], expect_pass=False)
check_result_nodes_by_name(
results,
[
"emails_alt",
"users_rollup",
"users",
"alternative.users",
"users_rollup_dependency",
],
)
assert_correct_schemas(project)

def test_tags_and_children_limited(self, project):
results = run_dbt(["run", "--select", "tag:base+2"])
assert len(results) == 4
created_models = project.get_tables_in_schema()
assert not ("base_users" in created_models)
assert not ("emails" in created_models)
assert "emails_alt" in created_models
assert "users_rollup" in created_models
assert "users" in created_models
assert "alternative.users" in created_models
assert "users_rollup_dependency" not in created_models
results = run_dbt(["run", "--select", "tag:base+2"], expect_pass=False)
check_result_nodes_by_name(
results, ["emails_alt", "users_rollup", "users", "alternative.users"]
)
assert_correct_schemas(project)

def test_specific_model_and_children(self, project):
results = run_dbt(["run", "--select", "users+"])
assert len(results) == 4
check_relations_equal(project.adapter, ["seed", "users"])
check_relations_equal(project.adapter, ["summary_expected", "users_rollup"])

created_models = project.get_tables_in_schema()
assert "emails_alt" in created_models
assert "base_users" not in created_models
assert "alternative.users" not in created_models
assert "emails" not in created_models
results = run_dbt(["run", "--select", "users+"], expect_pass=False)
check_result_nodes_by_name(
results, ["users", "users_rollup", "emails_alt", "users_rollup_dependency"]
)
assert_correct_schemas(project)

def test_specific_model_and_children_limited(self, project):
results = run_dbt(["run", "--select", "users+1"])
assert len(results) == 3
check_relations_equal(project.adapter, ["seed", "users"])
check_relations_equal(project.adapter, ["summary_expected", "users_rollup"])

created_models = project.get_tables_in_schema()
assert "emails_alt" in created_models
assert "base_users" not in created_models
assert "emails" not in created_models
assert "users_rollup_dependency" not in created_models
results = run_dbt(["run", "--select", "users+1"], expect_pass=False)
check_result_nodes_by_name(results, ["users", "users_rollup", "emails_alt"])
assert_correct_schemas(project)

def test_specific_model_and_parents(self, project):
results = run_dbt(["run", "--select", "+users_rollup"])
assert len(results) == 2
check_relations_equal(project.adapter, ["seed", "users"])
check_relations_equal(project.adapter, ["summary_expected", "users_rollup"])

created_models = project.get_tables_in_schema()
assert not ("base_users" in created_models)
assert not ("emails" in created_models)
results = run_dbt(["run", "--select", "+users_rollup"], expect_pass=False)
check_result_nodes_by_name(results, ["users_rollup", "users"])
assert_correct_schemas(project)

def test_specific_model_and_parents_limited(self, project):
results = run_dbt(["run", "--select", "1+users_rollup"])
assert len(results) == 2
check_relations_equal(project.adapter, ["seed", "users"])
check_relations_equal(project.adapter, ["summary_expected", "users_rollup"])

created_models = project.get_tables_in_schema()
assert not ("base_users" in created_models)
assert not ("emails" in created_models)
results = run_dbt(["run", "--select", "1+users_rollup"], expect_pass=False)
check_result_nodes_by_name(results, ["users", "users_rollup"])
assert_correct_schemas(project)

def test_specific_model_with_exclusion(self, project):
results = run_dbt(
["run", "--select", "+users_rollup", "--exclude", "models/users_rollup.sql"]
[
"run",
"--select",
"+users_rollup",
"--exclude",
"models/users_rollup.sql",
],
expect_pass=False,
)
assert len(results) == 1

check_relations_equal(project.adapter, ["seed", "users"])

created_models = project.get_tables_in_schema()
assert not ("base_users" in created_models)
assert not ("users_rollup" in created_models)
assert not ("emails" in created_models)
check_result_nodes_by_name(results, ["users"])
assert_correct_schemas(project)

def test_locally_qualified_name(self, project):
results = run_dbt(["run", "--select", "test.subdir"])
assert len(results) == 2
created_models = project.get_tables_in_schema()
assert "users_rollup" not in created_models
assert "base_users" not in created_models
assert "emails" not in created_models
assert "subdir" in created_models
assert "nested_users" in created_models
check_result_nodes_by_name(results, ["nested_users", "subdir"])
assert_correct_schemas(project)

results = run_dbt(["run", "--select", "models/test/subdir*"])
assert len(results) == 2
created_models = project.get_tables_in_schema()
assert "users_rollup" not in created_models
assert "base_users" not in created_models
assert "emails" not in created_models
assert "subdir" in created_models
assert "nested_users" in created_models
check_result_nodes_by_name(results, ["nested_users", "subdir"])
assert_correct_schemas(project)

def test_locally_qualified_name_model_with_dots(self, project):
results = run_dbt(["run", "--select", "alternative.users"])
assert len(results) == 1
created_models = project.get_tables_in_schema()
assert "alternative.users" in created_models
results = run_dbt(["run", "--select", "alternative.users"], expect_pass=False)
check_result_nodes_by_name(results, ["alternative.users"])
assert_correct_schemas(project)

results = run_dbt(["run", "--select", "models/alternative.*"])
assert len(results) == 1
created_models = project.get_tables_in_schema()
assert "alternative.users" in created_models
results = run_dbt(["run", "--select", "models/alternative.*"], expect_pass=False)
check_result_nodes_by_name(results, ["alternative.users"])
assert_correct_schemas(project)

def test_childrens_parents(self, project):
results = run_dbt(["run", "--select", "@base_users"])
assert len(results) == 5
created_models = project.get_tables_in_schema()
assert "users_rollup" in created_models
assert "users" in created_models
assert "emails_alt" in created_models
assert "alternative.users" in created_models
assert "subdir" not in created_models
assert "nested_users" not in created_models

results = run_dbt(["test", "--select", "test_name:not_null"])
assert len(results) == 1
assert results[0].node.name == "not_null_emails_email"
results = run_dbt(["run", "--select", "@base_users"], expect_pass=False)
check_result_nodes_by_name(
results,
[
"alternative.users",
"users_rollup",
"users",
"emails_alt",
"users_rollup_dependency",
],
)

results = run_dbt(["test", "--select", "test_name:not_null"], expect_pass=False)
check_result_nodes_by_name(results, ["not_null_emails_email"])

def test_more_childrens_parents(self, project):
results = run_dbt(["run", "--select", "@users"])
assert len(results) == 4
created_models = project.get_tables_in_schema()
assert "users_rollup" in created_models
assert "users" in created_models
assert "emails_alt" in created_models
assert "subdir" not in created_models
assert "nested_users" not in created_models
results = run_dbt(["test", "--select", "test_name:unique"])
assert len(results) == 2
assert sorted([r.node.name for r in results]) == [
"unique_users_id",
"unique_users_rollup_gender",
]
results = run_dbt(["run", "--select", "@users"], expect_pass=False)
check_result_nodes_by_name(
results, ["users_rollup", "users", "emails_alt", "users_rollup_dependency"]
)

results = run_dbt(["test", "--select", "test_name:unique"], expect_pass=False)
check_result_nodes_by_name(results, ["unique_users_id", "unique_users_rollup_gender"])

def test_concat(self, project):
results = run_dbt(["run", "--select", "@emails_alt", "users_rollup"])
assert len(results) == 3
created_models = project.get_tables_in_schema()
assert "users_rollup" in created_models
assert "users" in created_models
assert "emails_alt" in created_models
assert "subdir" not in created_models
assert "nested_users" not in created_models
results = run_dbt(["run", "--select", "@emails_alt", "users_rollup"], expect_pass=False)
check_result_nodes_by_name(results, ["users_rollup", "users", "emails_alt"])

def test_concat_exclude(self, project):
results = run_dbt(
["run", "--select", "@emails_alt", "users_rollup", "--exclude", "emails_alt"]
[
"run",
"--select",
"@emails_alt",
"users_rollup",
"--exclude",
"emails_alt",
],
expect_pass=False,
)
assert len(results) == 2
created_models = project.get_tables_in_schema()
assert "users" in created_models
assert "users_rollup" in created_models
assert "emails_alt" not in created_models
assert "subdir" not in created_models
assert "nested_users" not in created_models
check_result_nodes_by_name(results, ["users_rollup", "users"])

def test_concat_exclude_concat(self, project):
results = run_dbt(
Expand All @@ -258,15 +182,11 @@ def test_concat_exclude_concat(self, project):
"--exclude",
"emails_alt",
"users_rollup",
]
],
expect_pass=False,
)
assert len(results) == 1
created_models = project.get_tables_in_schema()
assert "users" in created_models
assert "emails_alt" not in created_models
assert "users_rollup" not in created_models
assert "subdir" not in created_models
assert "nested_users" not in created_models
check_result_nodes_by_name(results, ["users"])

results = run_dbt(
[
"test",
Expand All @@ -276,29 +196,30 @@ def test_concat_exclude_concat(self, project):
"--exclude",
"emails_alt",
"users_rollup",
]
],
expect_pass=False,
)
assert len(results) == 1
assert results[0].node.name == "unique_users_id"
check_result_nodes_by_name(results, ["unique_users_id"])

def test_exposure_parents(self, project):
results = run_dbt(["ls", "--select", "+exposure:seed_ml_exposure"])
assert len(results) == 2
assert sorted(results) == ["exposure:test.seed_ml_exposure", "source:test.raw.seed"]
assert sorted(results) == [
"exposure:test.seed_ml_exposure",
"source:test.raw.seed",
]
results = run_dbt(["ls", "--select", "1+exposure:user_exposure"])
assert len(results) == 5
assert sorted(results) == [
"exposure:test.user_exposure",
"test.unique_users_id",
"test.unique_users_rollup_gender",
"test.users",
"test.users_rollup",
]
results = run_dbt(["run", "-m", "+exposure:user_exposure"])
assert len(results) == 2
created_models = project.get_tables_in_schema()
assert "users_rollup" in created_models
assert "users" in created_models
assert "emails_alt" not in created_models
assert "subdir" not in created_models
assert "nested_users" not in created_models
results = run_dbt(["run", "-m", "+exposure:user_exposure"], expect_pass=False)
check_result_nodes_by_name(
results,
[
"users_rollup",
"users",
],
)
Loading

0 comments on commit 6c277b5

Please sign in to comment.