|
45 | 45 | from sqlmesh.core.state_sync.db.snapshot import _snapshot_to_json |
46 | 46 | from sqlmesh.dbt.builtin import _relation_info_to_relation, Config |
47 | 47 | from sqlmesh.dbt.common import Dependencies |
| 48 | +from sqlmesh.dbt.builtin import ( |
| 49 | + _relation_info_to_relation, |
| 50 | + dbt_model_id, |
| 51 | + clear_selected_resources, |
| 52 | + get_selected_resources, |
| 53 | +) |
48 | 54 | from sqlmesh.dbt.column import ( |
49 | 55 | ColumnConfig, |
50 | 56 | column_descriptions_to_sqlmesh, |
@@ -2352,3 +2358,68 @@ def test_dynamic_var_names_in_macro(sushi_test_project: Project): |
2352 | 2358 | ) |
2353 | 2359 | converted_model = model_config.to_sqlmesh(context) |
2354 | 2360 | assert "dynamic_test_var" in converted_model.jinja_macros.global_objs["vars"] # type: ignore |
| 2361 | + |
| 2362 | + |
| 2363 | +def test_selected_resources_with_selectors(): |
| 2364 | + sushi_context = Context(paths=["tests/fixtures/dbt/sushi_test"]) |
| 2365 | + |
| 2366 | + # A plan with a specific model selection |
| 2367 | + clear_selected_resources() |
| 2368 | + sushi_context.plan_builder(select_models=["sushi.customers"]) |
| 2369 | + |
| 2370 | + selected = get_selected_resources() |
| 2371 | + assert "model.memory.customers" in selected |
| 2372 | + assert len(selected) == 1 |
| 2373 | + |
| 2374 | + # Plan without model selections |
| 2375 | + clear_selected_resources() |
| 2376 | + sushi_context.plan_builder() |
| 2377 | + selected = get_selected_resources() |
| 2378 | + assert sorted( |
| 2379 | + [ |
| 2380 | + "model.memory.customer_revenue_by_day", |
| 2381 | + "model.memory.customers", |
| 2382 | + "model.memory.items", |
| 2383 | + "model.memory.items_check_snapshot", |
| 2384 | + "model.memory.items_no_hard_delete_snapshot", |
| 2385 | + "model.memory.items_snapshot", |
| 2386 | + "model.memory.order_items", |
| 2387 | + "model.memory.orders", |
| 2388 | + "model.memory.simple_model_a", |
| 2389 | + "model.memory.simple_model_b", |
| 2390 | + "model.memory.top_waiters", |
| 2391 | + "model.memory.waiter_as_customer_by_day", |
| 2392 | + "model.memory.waiter_names", |
| 2393 | + "model.memory.waiter_revenue_by_day_v1", |
| 2394 | + "model.memory.waiter_revenue_by_day_v2", |
| 2395 | + "model.memory.waiters", |
| 2396 | + ] |
| 2397 | + ) == sorted(selected) |
| 2398 | + |
| 2399 | + # Test with downstream models as well |
| 2400 | + clear_selected_resources() |
| 2401 | + sushi_context.plan_builder(select_models=["sushi.customers+"]) |
| 2402 | + selected = get_selected_resources() |
| 2403 | + assert sorted(["model.memory.customers", "model.memory.waiter_as_customer_by_day"]) == sorted( |
| 2404 | + selected |
| 2405 | + ) |
| 2406 | + |
| 2407 | + # Test wildcard selection |
| 2408 | + clear_selected_resources() |
| 2409 | + sushi_context.plan_builder(select_models=["sushi.waiter_*"]) |
| 2410 | + selected = get_selected_resources() |
| 2411 | + assert sorted( |
| 2412 | + [ |
| 2413 | + "model.memory.waiter_as_customer_by_day", |
| 2414 | + "model.memory.waiter_names", |
| 2415 | + "model.memory.waiter_revenue_by_day_v1", |
| 2416 | + "model.memory.waiter_revenue_by_day_v2", |
| 2417 | + ] |
| 2418 | + ) == sorted(selected) |
| 2419 | + clear_selected_resources() |
| 2420 | + |
| 2421 | + |
| 2422 | +def test_dbt_model_id_conversion(): |
| 2423 | + assert dbt_model_id("jaffle_shop.main.customers") == "model.jaffle_shop.customers" |
| 2424 | + assert dbt_model_id("jaffle_shop.main.orders") == "model.jaffle_shop.orders" |
| 2425 | + assert dbt_model_id('"jaffle_shop"."customers"') == "model.jaffle_shop.customers" |
0 commit comments