@@ -1415,6 +1415,13 @@ def test_dev_plan_depends_past(make_snapshot, mocker: MockerFixture):
14151415 '"a_child"' ,
14161416 '"b"' ,
14171417 ]
1418+ assert dev_plan_start_aligned .directly_modified == {
1419+ snapshot .snapshot_id ,
1420+ snapshot_child .snapshot_id ,
1421+ unrelated_snapshot .snapshot_id ,
1422+ }
1423+ assert dev_plan_start_aligned .indirectly_modified == {}
1424+
14181425 dev_plan_start_ahead_of_model = PlanBuilder (
14191426 context_diff , start = "2023-01-02" , end = "2023-01-10" , is_dev = True
14201427 ).build ()
@@ -1425,6 +1432,103 @@ def test_dev_plan_depends_past(make_snapshot, mocker: MockerFixture):
14251432 snapshot .snapshot_id ,
14261433 snapshot_child .snapshot_id ,
14271434 ]
1435+ assert dev_plan_start_ahead_of_model .directly_modified == {unrelated_snapshot .snapshot_id }
1436+ assert dev_plan_start_ahead_of_model .indirectly_modified == {}
1437+
1438+
1439+ def test_dev_plan_depends_past_non_deployable (make_snapshot , mocker : MockerFixture ):
1440+ snapshot = make_snapshot (
1441+ SqlModel (
1442+ name = "a" ,
1443+ # self reference query so it depends_on_past
1444+ query = parse_one ("select 1, ds FROM a" ),
1445+ start = "2023-01-01" ,
1446+ kind = IncrementalByTimeRangeKind (time_column = "ds" ),
1447+ ),
1448+ )
1449+ snapshot .categorize_as (SnapshotChangeCategory .BREAKING )
1450+
1451+ updated_snapshot = make_snapshot (
1452+ SqlModel (
1453+ ** {
1454+ ** snapshot .model .dict (),
1455+ "query" : parse_one ("select 1, ds, 2 FROM a" ),
1456+ }
1457+ ),
1458+ )
1459+ updated_snapshot .categorize_as (SnapshotChangeCategory .FORWARD_ONLY )
1460+
1461+ snapshot_child = make_snapshot (
1462+ SqlModel (
1463+ name = "a_child" ,
1464+ query = parse_one ("select 1, ds FROM a" ),
1465+ start = "2023-01-01" ,
1466+ kind = IncrementalByTimeRangeKind (time_column = "ds" ),
1467+ ),
1468+ nodes = {'"a"' : updated_snapshot .model },
1469+ )
1470+ snapshot_child .categorize_as (SnapshotChangeCategory .BREAKING )
1471+ unrelated_snapshot = make_snapshot (
1472+ SqlModel (
1473+ name = "b" ,
1474+ query = parse_one ("select 1, ds" ),
1475+ start = "2023-01-01" ,
1476+ kind = IncrementalByTimeRangeKind (time_column = "ds" ),
1477+ ),
1478+ )
1479+ unrelated_snapshot .categorize_as (SnapshotChangeCategory .BREAKING )
1480+
1481+ assert updated_snapshot .depends_on_past
1482+ assert not snapshot_child .depends_on_past
1483+ assert not unrelated_snapshot .depends_on_past
1484+ assert snapshot_child .model .depends_on == {'"a"' }
1485+ assert snapshot_child .parents == (updated_snapshot .snapshot_id ,)
1486+ assert unrelated_snapshot .model .depends_on == set ()
1487+
1488+ context_diff = ContextDiff (
1489+ environment = "test_environment" ,
1490+ is_new_environment = True ,
1491+ is_unfinalized_environment = False ,
1492+ create_from = "prod" ,
1493+ added = {snapshot_child .snapshot_id , unrelated_snapshot .snapshot_id },
1494+ removed_snapshots = {},
1495+ modified_snapshots = {snapshot .name : (updated_snapshot , snapshot )},
1496+ snapshots = {
1497+ updated_snapshot .snapshot_id : updated_snapshot ,
1498+ snapshot_child .snapshot_id : snapshot_child ,
1499+ unrelated_snapshot .snapshot_id : unrelated_snapshot ,
1500+ },
1501+ new_snapshots = {
1502+ updated_snapshot .snapshot_id : snapshot ,
1503+ snapshot_child .snapshot_id : snapshot_child ,
1504+ unrelated_snapshot .snapshot_id : unrelated_snapshot ,
1505+ },
1506+ previous_plan_id = None ,
1507+ previously_promoted_snapshot_ids = set (),
1508+ previous_finalized_snapshots = None ,
1509+ )
1510+
1511+ dev_plan_start_aligned = PlanBuilder (
1512+ context_diff , start = "2023-01-01" , end = "2023-01-10" , is_dev = True
1513+ ).build ()
1514+ assert len (dev_plan_start_aligned .new_snapshots ) == 3
1515+ assert sorted ([x .name for x in dev_plan_start_aligned .new_snapshots ]) == [
1516+ '"a"' ,
1517+ '"a_child"' ,
1518+ '"b"' ,
1519+ ]
1520+
1521+ # There should be no ignored snapshots because all changes are non-deployable.
1522+ dev_plan_start_ahead_of_model = PlanBuilder (
1523+ context_diff , start = "2023-01-02" , end = "2023-01-10" , is_dev = True
1524+ ).build ()
1525+ assert len (dev_plan_start_ahead_of_model .new_snapshots ) == 3
1526+ assert sorted ([x .name for x in dev_plan_start_aligned .new_snapshots ]) == [
1527+ '"a"' ,
1528+ '"a_child"' ,
1529+ '"b"' ,
1530+ ]
1531+ assert not dev_plan_start_ahead_of_model .ignored
14281532
14291533
14301534def test_restatement_intervals_after_updating_start (sushi_context : Context ):
0 commit comments