@@ -695,3 +695,44 @@ def test_data_diff_multiple_models(sushi_context_fixed_date, capsys, caplog):
695695 skip_grain_check = False ,
696696 )
697697 assert len (diffs ) == 0
698+
699+
700+ def test_data_diff_empty_tables ():
701+ engine_adapter = DuckDBConnectionConfig ().create_engine_adapter ()
702+
703+ columns_to_types_src = {
704+ "key" : exp .DataType .build ("int" ),
705+ "value" : exp .DataType .build ("varchar" ),
706+ }
707+ columns_to_types_target = {
708+ "key" : exp .DataType .build ("int" ),
709+ "value2" : exp .DataType .build ("varchar" ),
710+ }
711+
712+ engine_adapter .create_table ("table_diff_source" , columns_to_types_src )
713+ engine_adapter .create_table ("table_diff_target" , columns_to_types_target )
714+
715+ table_diff = TableDiff (
716+ adapter = engine_adapter ,
717+ source = "table_diff_source" ,
718+ target = "table_diff_target" ,
719+ source_alias = "dev" ,
720+ target_alias = "prod" ,
721+ on = ["key" ],
722+ )
723+
724+ # should show the schema diff
725+ schema_diff = table_diff .schema_diff ()
726+ assert len (schema_diff .added ) == 1
727+ assert schema_diff .added [0 ][0 ] == "value2"
728+ assert len (schema_diff .removed ) == 1
729+ assert schema_diff .removed [0 ][0 ] == "value"
730+
731+ # should not error on the row diff
732+ row_diff = table_diff .row_diff ()
733+ assert row_diff .empty
734+
735+ output = capture_console_output ("show_row_diff" , row_diff = row_diff )
736+ assert (
737+ strip_ansi_codes (output ) == "Neither the source nor the target table contained any records"
738+ )
0 commit comments