@@ -438,12 +438,14 @@ def create_and_cleanup(name: str, dev_table_only: bool):
438438 return snapshot
439439
440440 snapshot = create_and_cleanup ("catalog.test_schema.test_model" , True )
441+ adapter_mock .get_data_object .assert_not_called ()
441442 adapter_mock .drop_table .assert_called_once_with (
442443 f"catalog.sqlmesh__test_schema.test_schema__test_model__{ snapshot .fingerprint .to_version ()} __dev"
443444 )
444445 adapter_mock .reset_mock ()
445446
446447 snapshot = create_and_cleanup ("test_schema.test_model" , False )
448+ adapter_mock .get_data_object .assert_not_called ()
447449 adapter_mock .drop_table .assert_has_calls (
448450 [
449451 call (
@@ -455,6 +457,7 @@ def create_and_cleanup(name: str, dev_table_only: bool):
455457 adapter_mock .reset_mock ()
456458
457459 snapshot = create_and_cleanup ("test_model" , False )
460+ adapter_mock .get_data_object .assert_not_called ()
458461 adapter_mock .drop_table .assert_has_calls (
459462 [
460463 call (f"sqlmesh__default.test_model__{ snapshot .fingerprint .to_version ()} __dev" ),
@@ -463,6 +466,59 @@ def create_and_cleanup(name: str, dev_table_only: bool):
463466 )
464467
465468
469+ def test_cleanup_fails (adapter_mock , make_snapshot ):
470+ adapter_mock .drop_table .side_effect = RuntimeError ("test_error" )
471+
472+ evaluator = SnapshotEvaluator (adapter_mock )
473+
474+ model = SqlModel (
475+ name = "catalog.test_schema.test_model" ,
476+ kind = IncrementalByTimeRangeKind (time_column = "a" ),
477+ storage_format = "parquet" ,
478+ query = parse_one ("SELECT a FROM tbl WHERE ds BETWEEN @start_ds and @end_ds" ),
479+ )
480+
481+ snapshot = make_snapshot (model )
482+ snapshot .categorize_as (SnapshotChangeCategory .BREAKING , forward_only = True )
483+ snapshot .version = "test_version"
484+
485+ evaluator .promote ([snapshot ], EnvironmentNamingInfo (name = "test_env" ))
486+ with pytest .raises (NodeExecutionFailedError ) as exc_info :
487+ evaluator .cleanup (
488+ [SnapshotTableCleanupTask (snapshot = snapshot .table_info , dev_table_only = True )]
489+ )
490+
491+ assert str (exc_info .value .__cause__ ) == "test_error"
492+
493+
494+ def test_cleanup_skip_missing_table (adapter_mock , make_snapshot ):
495+ adapter_mock .get_data_object .return_value = None
496+ adapter_mock .drop_table .side_effect = RuntimeError ("fail" )
497+
498+ evaluator = SnapshotEvaluator (adapter_mock )
499+
500+ model = SqlModel (
501+ name = "catalog.test_schema.test_model" ,
502+ kind = IncrementalByTimeRangeKind (time_column = "a" ),
503+ storage_format = "parquet" ,
504+ query = parse_one ("SELECT a FROM tbl WHERE ds BETWEEN @start_ds and @end_ds" ),
505+ )
506+
507+ snapshot = make_snapshot (model )
508+ snapshot .categorize_as (SnapshotChangeCategory .BREAKING , forward_only = True )
509+ snapshot .version = "test_version"
510+
511+ evaluator .promote ([snapshot ], EnvironmentNamingInfo (name = "test_env" ))
512+ evaluator .cleanup ([SnapshotTableCleanupTask (snapshot = snapshot .table_info , dev_table_only = True )])
513+
514+ adapter_mock .get_data_object .assert_called_once_with (
515+ f"catalog.sqlmesh__test_schema.test_schema__test_model__{ snapshot .fingerprint .to_version ()} __dev"
516+ )
517+ adapter_mock .drop_table .assert_called_once_with (
518+ f"catalog.sqlmesh__test_schema.test_schema__test_model__{ snapshot .fingerprint .to_version ()} __dev"
519+ )
520+
521+
466522def test_cleanup_external_model (mocker : MockerFixture , adapter_mock , make_snapshot ):
467523 evaluator = SnapshotEvaluator (adapter_mock )
468524
0 commit comments