|
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, |
@@ -2375,3 +2381,68 @@ def test_dynamic_var_names_in_macro(sushi_test_project: Project): |
2375 | 2381 | ) |
2376 | 2382 | converted_model = model_config.to_sqlmesh(context) |
2377 | 2383 | assert "dynamic_test_var" in converted_model.jinja_macros.global_objs["vars"] # type: ignore |
| 2384 | + |
| 2385 | + |
| 2386 | +def test_selected_resources_with_selectors(): |
| 2387 | + sushi_context = Context(paths=["tests/fixtures/dbt/sushi_test"]) |
| 2388 | + |
| 2389 | + # A plan with a specific model selection |
| 2390 | + clear_selected_resources() |
| 2391 | + sushi_context.plan_builder(select_models=["sushi.customers"]) |
| 2392 | + |
| 2393 | + selected = get_selected_resources() |
| 2394 | + assert "model.memory.customers" in selected |
| 2395 | + assert len(selected) == 1 |
| 2396 | + |
| 2397 | + # Plan without model selections |
| 2398 | + clear_selected_resources() |
| 2399 | + sushi_context.plan_builder() |
| 2400 | + selected = get_selected_resources() |
| 2401 | + assert sorted( |
| 2402 | + [ |
| 2403 | + "model.memory.customer_revenue_by_day", |
| 2404 | + "model.memory.customers", |
| 2405 | + "model.memory.items", |
| 2406 | + "model.memory.items_check_snapshot", |
| 2407 | + "model.memory.items_no_hard_delete_snapshot", |
| 2408 | + "model.memory.items_snapshot", |
| 2409 | + "model.memory.order_items", |
| 2410 | + "model.memory.orders", |
| 2411 | + "model.memory.simple_model_a", |
| 2412 | + "model.memory.simple_model_b", |
| 2413 | + "model.memory.top_waiters", |
| 2414 | + "model.memory.waiter_as_customer_by_day", |
| 2415 | + "model.memory.waiter_names", |
| 2416 | + "model.memory.waiter_revenue_by_day_v1", |
| 2417 | + "model.memory.waiter_revenue_by_day_v2", |
| 2418 | + "model.memory.waiters", |
| 2419 | + ] |
| 2420 | + ) == sorted(selected) |
| 2421 | + |
| 2422 | + # Test with downstream models as well |
| 2423 | + clear_selected_resources() |
| 2424 | + sushi_context.plan_builder(select_models=["sushi.customers+"]) |
| 2425 | + selected = get_selected_resources() |
| 2426 | + assert sorted(["model.memory.customers", "model.memory.waiter_as_customer_by_day"]) == sorted( |
| 2427 | + selected |
| 2428 | + ) |
| 2429 | + |
| 2430 | + # Test wildcard selection |
| 2431 | + clear_selected_resources() |
| 2432 | + sushi_context.plan_builder(select_models=["sushi.waiter_*"]) |
| 2433 | + selected = get_selected_resources() |
| 2434 | + assert sorted( |
| 2435 | + [ |
| 2436 | + "model.memory.waiter_as_customer_by_day", |
| 2437 | + "model.memory.waiter_names", |
| 2438 | + "model.memory.waiter_revenue_by_day_v1", |
| 2439 | + "model.memory.waiter_revenue_by_day_v2", |
| 2440 | + ] |
| 2441 | + ) == sorted(selected) |
| 2442 | + clear_selected_resources() |
| 2443 | + |
| 2444 | + |
| 2445 | +def test_dbt_model_id_conversion(): |
| 2446 | + assert dbt_model_id("jaffle_shop.main.customers") == "model.jaffle_shop.customers" |
| 2447 | + assert dbt_model_id("jaffle_shop.main.orders") == "model.jaffle_shop.orders" |
| 2448 | + assert dbt_model_id('"jaffle_shop"."customers"') == "model.jaffle_shop.customers" |
0 commit comments