|
31 | 31 | ) |
32 | 32 | from sqlmesh.core.model.kind import SCDType2ByColumnKind, SCDType2ByTimeKind |
33 | 33 | from sqlmesh.core.state_sync.db.snapshot import _snapshot_to_json |
34 | | -from sqlmesh.dbt.builtin import _relation_info_to_relation |
| 34 | +from sqlmesh.dbt.builtin import ( |
| 35 | + _relation_info_to_relation, |
| 36 | + dbt_model_id, |
| 37 | + clear_selected_resources, |
| 38 | + get_selected_resources, |
| 39 | +) |
35 | 40 | from sqlmesh.dbt.column import ( |
36 | 41 | ColumnConfig, |
37 | 42 | column_descriptions_to_sqlmesh, |
@@ -1694,3 +1699,68 @@ def test_on_run_start_end(): |
1694 | 1699 | "CREATE OR REPLACE TABLE schema_table_sushi__dev_nested_package AS SELECT 'sushi__dev' AS schema", |
1695 | 1700 | ] |
1696 | 1701 | ) |
| 1702 | + |
| 1703 | + |
| 1704 | +def test_selected_resources_with_selectors(): |
| 1705 | + sushi_context = Context(paths=["tests/fixtures/dbt/sushi_test"]) |
| 1706 | + |
| 1707 | + # A plan with a specific model selection |
| 1708 | + clear_selected_resources() |
| 1709 | + sushi_context.plan_builder(select_models=["sushi.customers"]) |
| 1710 | + |
| 1711 | + selected = get_selected_resources() |
| 1712 | + assert "model.memory.customers" in selected |
| 1713 | + assert len(selected) == 1 |
| 1714 | + |
| 1715 | + # Plan without model selections |
| 1716 | + clear_selected_resources() |
| 1717 | + sushi_context.plan_builder() |
| 1718 | + selected = get_selected_resources() |
| 1719 | + assert sorted( |
| 1720 | + [ |
| 1721 | + "model.memory.customer_revenue_by_day", |
| 1722 | + "model.memory.customers", |
| 1723 | + "model.memory.items", |
| 1724 | + "model.memory.items_check_snapshot", |
| 1725 | + "model.memory.items_no_hard_delete_snapshot", |
| 1726 | + "model.memory.items_snapshot", |
| 1727 | + "model.memory.order_items", |
| 1728 | + "model.memory.orders", |
| 1729 | + "model.memory.simple_model_a", |
| 1730 | + "model.memory.simple_model_b", |
| 1731 | + "model.memory.top_waiters", |
| 1732 | + "model.memory.waiter_as_customer_by_day", |
| 1733 | + "model.memory.waiter_names", |
| 1734 | + "model.memory.waiter_revenue_by_day_v1", |
| 1735 | + "model.memory.waiter_revenue_by_day_v2", |
| 1736 | + "model.memory.waiters", |
| 1737 | + ] |
| 1738 | + ) == sorted(selected) |
| 1739 | + |
| 1740 | + # Test with downstream models as well |
| 1741 | + clear_selected_resources() |
| 1742 | + sushi_context.plan_builder(select_models=["sushi.customers+"]) |
| 1743 | + selected = get_selected_resources() |
| 1744 | + assert sorted(["model.memory.customers", "model.memory.waiter_as_customer_by_day"]) == sorted( |
| 1745 | + selected |
| 1746 | + ) |
| 1747 | + |
| 1748 | + # Test wildcard selection |
| 1749 | + clear_selected_resources() |
| 1750 | + sushi_context.plan_builder(select_models=["sushi.waiter_*"]) |
| 1751 | + selected = get_selected_resources() |
| 1752 | + assert sorted( |
| 1753 | + [ |
| 1754 | + "model.memory.waiter_as_customer_by_day", |
| 1755 | + "model.memory.waiter_names", |
| 1756 | + "model.memory.waiter_revenue_by_day_v1", |
| 1757 | + "model.memory.waiter_revenue_by_day_v2", |
| 1758 | + ] |
| 1759 | + ) == sorted(selected) |
| 1760 | + clear_selected_resources() |
| 1761 | + |
| 1762 | + |
| 1763 | +def test_dbt_model_id_conversion(): |
| 1764 | + assert dbt_model_id("jaffle_shop.main.customers") == "model.jaffle_shop.customers" |
| 1765 | + assert dbt_model_id("jaffle_shop.main.orders") == "model.jaffle_shop.orders" |
| 1766 | + assert dbt_model_id('"jaffle_shop"."customers"') == "model.jaffle_shop.customers" |
0 commit comments