@@ -442,21 +442,6 @@ def test_get_connection_no_type(self, mock_open, mock_profile_renderer, mock_yam
442442 _ , _ = DbtParser .get_connection_creds (mock_self )
443443
444444
445- EXAMPLE_DIFF_RESULTS = {
446- "pks" : {"exclusives" : [5 , 3 ]},
447- "values" : {
448- "rows_with_differences" : 2 ,
449- "total_rows" : 10 ,
450- "columns_diff_stats" : [
451- {"column_name" : "name" , "match" : 80.0 },
452- {"column_name" : "age" , "match" : 100.0 },
453- {"column_name" : "city" , "match" : 0.0 },
454- {"column_name" : "country" , "match" : 100.0 },
455- ],
456- },
457- }
458-
459-
460445class TestDbtDiffer (unittest .TestCase ):
461446 # Set DATA_DIFF_DBT_PROJ to use your own dbt project, otherwise uses the duckdb project in tests/dbt_artifacts
462447 def test_integration_basic_dbt (self ):
@@ -488,10 +473,10 @@ def test_integration_cloud_dbt(self):
488473 def test_local_diff (self , mock_diff_tables ):
489474 connection = {}
490475 mock_table1 = Mock ()
491- column_set = {"col1" , "col2" }
492- mock_table1 .get_schema .return_value = column_set
476+ column_dictionary = {"col1" : ( "col1" , "type" ), " col2": ( "col2" , "type" ) }
477+ mock_table1 .get_schema .return_value = column_dictionary
493478 mock_table2 = Mock ()
494- mock_table2 .get_schema .return_value = column_set
479+ mock_table2 .get_schema .return_value = column_dictionary
495480 mock_diff = MagicMock ()
496481 mock_diff_tables .return_value = mock_diff
497482 mock_diff .__iter__ .return_value = [1 , 2 , 3 ]
@@ -528,14 +513,56 @@ def test_local_diff(self, mock_diff_tables):
528513 mock_connect .assert_any_call (connection , "." .join (prod_qualified_list ), tuple (expected_primary_keys ), threads )
529514 mock_diff .get_stats_string .assert_called_once ()
530515
516+ @patch ("data_diff.dbt.diff_tables" )
517+ def test_local_diff_types_differ (self , mock_diff_tables ):
518+ connection = {}
519+ mock_table1 = Mock ()
520+ mock_table2 = Mock ()
521+ table1_column_dictionary = {"col1" : ("col1" , "type" ), "col2" : ("col2" , "type" )}
522+ table2_column_dictionary = {"col1" : ("col1" , "type" ), "col2" : ("col2" , "differing_type" )}
523+ mock_table1 .get_schema .return_value = table1_column_dictionary
524+ mock_table2 .get_schema .return_value = table2_column_dictionary
525+ mock_diff = MagicMock ()
526+ mock_diff_tables .return_value = mock_diff
527+ mock_diff .__iter__ .return_value = [1 , 2 , 3 ]
528+ threads = None
529+ where = "a_string"
530+ dev_qualified_list = ["dev_db" , "dev_schema" , "dev_table" ]
531+ prod_qualified_list = ["prod_db" , "prod_schema" , "prod_table" ]
532+ expected_primary_keys = ["key" ]
533+ diff_vars = TDiffVars (
534+ dev_path = dev_qualified_list ,
535+ prod_path = prod_qualified_list ,
536+ primary_keys = expected_primary_keys ,
537+ connection = connection ,
538+ threads = threads ,
539+ where_filter = where ,
540+ include_columns = [],
541+ exclude_columns = [],
542+ )
543+ with patch ("data_diff.dbt.connect_to_table" , side_effect = [mock_table1 , mock_table2 ]) as mock_connect :
544+ _local_diff (diff_vars )
545+
546+ mock_diff_tables .assert_called_once_with (
547+ mock_table1 ,
548+ mock_table2 ,
549+ threaded = True ,
550+ algorithm = Algorithm .JOINDIFF ,
551+ extra_columns = ANY ,
552+ where = where ,
553+ )
554+ self .assertEqual (len (mock_diff_tables .call_args [1 ]["extra_columns" ]), 1 )
555+ self .assertEqual (mock_connect .call_count , 2 )
556+ mock_diff .get_stats_string .assert_called_once ()
557+
531558 @patch ("data_diff.dbt.diff_tables" )
532559 def test_local_diff_no_diffs (self , mock_diff_tables ):
533560 connection = {}
534- column_set = {"col1" , "col2" }
561+ column_dictionary = {"col1" : ( "col1" , "type" ), " col2": ( "col2" , "type" ) }
535562 mock_table1 = Mock ()
536- mock_table1 .get_schema .return_value = column_set
563+ mock_table1 .get_schema .return_value = column_dictionary
537564 mock_table2 = Mock ()
538- mock_table2 .get_schema .return_value = column_set
565+ mock_table2 .get_schema .return_value = column_dictionary
539566 mock_diff = MagicMock ()
540567 mock_diff_tables .return_value = mock_diff
541568 mock_diff .__iter__ .return_value = []
0 commit comments