|
12 | 12 | SnapshotFingerprint, |
13 | 13 | ) |
14 | 14 | from sqlmesh.utils.dag import DAG |
15 | | -from sqlmesh.utils.date import to_datetime |
| 15 | +from sqlmesh.utils.date import to_datetime, to_timestamp |
16 | 16 | from sqlmesh.utils.errors import PlanError |
17 | 17 |
|
18 | 18 |
|
@@ -326,3 +326,32 @@ def test_forward_only_plan_seed_models(make_snapshot, mocker: MockerFixture): |
326 | 326 | Plan(context_diff_mock, dag, state_reader_mock, forward_only=True) |
327 | 327 | assert snapshot_a_updated.version == snapshot_a_updated.fingerprint.to_version() |
328 | 328 | assert snapshot_a_updated.change_category == SnapshotChangeCategory.NON_BREAKING |
| 329 | + |
| 330 | + |
| 331 | +def test_start_inference(make_snapshot, mocker: MockerFixture): |
| 332 | + snapshot_a = make_snapshot( |
| 333 | + SqlModel(name="a", query=parse_one("select 1, ds"), start="2022-01-01") |
| 334 | + ) |
| 335 | + snapshot_a.set_version() |
| 336 | + |
| 337 | + snapshot_b = make_snapshot(SqlModel(name="b", query=parse_one("select 2, ds"))) |
| 338 | + snapshot_b.set_version() |
| 339 | + |
| 340 | + dag = DAG[str]({"a": set(), "b": set()}) |
| 341 | + |
| 342 | + context_diff_mock = mocker.Mock() |
| 343 | + context_diff_mock.snapshots = {"a": snapshot_a, "b": snapshot_b} |
| 344 | + context_diff_mock.added = set() |
| 345 | + context_diff_mock.modified_snapshots = {} |
| 346 | + context_diff_mock.new_snapshots = {snapshot_b.snapshot_id: snapshot_b} |
| 347 | + |
| 348 | + state_reader_mock = mocker.Mock() |
| 349 | + state_reader_mock.missing_intervals.return_value = { |
| 350 | + snapshot_b: [(to_timestamp("2022-01-01"), to_timestamp("2023-01-01"))] |
| 351 | + } |
| 352 | + |
| 353 | + plan = Plan(context_diff_mock, dag, state_reader_mock) |
| 354 | + assert len(plan._missing_intervals) == 1 |
| 355 | + assert snapshot_b.version_get_or_generate() in plan._missing_intervals |
| 356 | + |
| 357 | + assert plan.start == to_timestamp("2022-01-01") |
0 commit comments