|
42 | 42 | OnAdditiveChange, |
43 | 43 | ) |
44 | 44 | from sqlmesh.core.state_sync.db.snapshot import _snapshot_to_json |
45 | | -from sqlmesh.dbt.builtin import _relation_info_to_relation |
46 | 45 | from sqlmesh.dbt.common import Dependencies |
| 46 | +from sqlmesh.dbt.builtin import ( |
| 47 | + _relation_info_to_relation, |
| 48 | + dbt_model_id, |
| 49 | + clear_selected_resources, |
| 50 | + get_selected_resources, |
| 51 | +) |
47 | 52 | from sqlmesh.dbt.column import ( |
48 | 53 | ColumnConfig, |
49 | 54 | column_descriptions_to_sqlmesh, |
@@ -2034,3 +2039,68 @@ def test_dynamic_var_names_in_macro(sushi_test_project: Project): |
2034 | 2039 | ) |
2035 | 2040 | converted_model = model_config.to_sqlmesh(context) |
2036 | 2041 | assert "dynamic_test_var" in converted_model.jinja_macros.global_objs["vars"] # type: ignore |
| 2042 | + |
| 2043 | + |
| 2044 | +def test_selected_resources_with_selectors(): |
| 2045 | + sushi_context = Context(paths=["tests/fixtures/dbt/sushi_test"]) |
| 2046 | + |
| 2047 | + # A plan with a specific model selection |
| 2048 | + clear_selected_resources() |
| 2049 | + sushi_context.plan_builder(select_models=["sushi.customers"]) |
| 2050 | + |
| 2051 | + selected = get_selected_resources() |
| 2052 | + assert "model.memory.customers" in selected |
| 2053 | + assert len(selected) == 1 |
| 2054 | + |
| 2055 | + # Plan without model selections |
| 2056 | + clear_selected_resources() |
| 2057 | + sushi_context.plan_builder() |
| 2058 | + selected = get_selected_resources() |
| 2059 | + assert sorted( |
| 2060 | + [ |
| 2061 | + "model.memory.customer_revenue_by_day", |
| 2062 | + "model.memory.customers", |
| 2063 | + "model.memory.items", |
| 2064 | + "model.memory.items_check_snapshot", |
| 2065 | + "model.memory.items_no_hard_delete_snapshot", |
| 2066 | + "model.memory.items_snapshot", |
| 2067 | + "model.memory.order_items", |
| 2068 | + "model.memory.orders", |
| 2069 | + "model.memory.simple_model_a", |
| 2070 | + "model.memory.simple_model_b", |
| 2071 | + "model.memory.top_waiters", |
| 2072 | + "model.memory.waiter_as_customer_by_day", |
| 2073 | + "model.memory.waiter_names", |
| 2074 | + "model.memory.waiter_revenue_by_day_v1", |
| 2075 | + "model.memory.waiter_revenue_by_day_v2", |
| 2076 | + "model.memory.waiters", |
| 2077 | + ] |
| 2078 | + ) == sorted(selected) |
| 2079 | + |
| 2080 | + # Test with downstream models as well |
| 2081 | + clear_selected_resources() |
| 2082 | + sushi_context.plan_builder(select_models=["sushi.customers+"]) |
| 2083 | + selected = get_selected_resources() |
| 2084 | + assert sorted(["model.memory.customers", "model.memory.waiter_as_customer_by_day"]) == sorted( |
| 2085 | + selected |
| 2086 | + ) |
| 2087 | + |
| 2088 | + # Test wildcard selection |
| 2089 | + clear_selected_resources() |
| 2090 | + sushi_context.plan_builder(select_models=["sushi.waiter_*"]) |
| 2091 | + selected = get_selected_resources() |
| 2092 | + assert sorted( |
| 2093 | + [ |
| 2094 | + "model.memory.waiter_as_customer_by_day", |
| 2095 | + "model.memory.waiter_names", |
| 2096 | + "model.memory.waiter_revenue_by_day_v1", |
| 2097 | + "model.memory.waiter_revenue_by_day_v2", |
| 2098 | + ] |
| 2099 | + ) == sorted(selected) |
| 2100 | + clear_selected_resources() |
| 2101 | + |
| 2102 | + |
| 2103 | +def test_dbt_model_id_conversion(): |
| 2104 | + assert dbt_model_id("jaffle_shop.main.customers") == "model.jaffle_shop.customers" |
| 2105 | + assert dbt_model_id("jaffle_shop.main.orders") == "model.jaffle_shop.orders" |
| 2106 | + assert dbt_model_id('"jaffle_shop"."customers"') == "model.jaffle_shop.customers" |
0 commit comments