@@ -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 ]
@@ -527,14 +512,56 @@ def test_local_diff(self, mock_diff_tables):
527512 mock_connect .assert_any_call (connection , "." .join (prod_qualified_list ), tuple (expected_primary_keys ), threads )
528513 mock_diff .get_stats_string .assert_called_once ()
529514
515+ @patch ("data_diff.dbt.diff_tables" )
516+ def test_local_diff_types_differ (self , mock_diff_tables ):
517+ connection = {}
518+ mock_table1 = Mock ()
519+ mock_table2 = Mock ()
520+ table1_column_dictionary = {"col1" : ("col1" , "type" ), "col2" : ("col2" , "type" )}
521+ table2_column_dictionary = {"col1" : ("col1" , "type" ), "col2" : ("col2" , "differing_type" )}
522+ mock_table1 .get_schema .return_value = table1_column_dictionary
523+ mock_table2 .get_schema .return_value = table2_column_dictionary
524+ mock_diff = MagicMock ()
525+ mock_diff_tables .return_value = mock_diff
526+ mock_diff .__iter__ .return_value = [1 , 2 , 3 ]
527+ threads = None
528+ where = "a_string"
529+ dev_qualified_list = ["dev_db" , "dev_schema" , "dev_table" ]
530+ prod_qualified_list = ["prod_db" , "prod_schema" , "prod_table" ]
531+ expected_primary_keys = ["key" ]
532+ diff_vars = TDiffVars (
533+ dev_path = dev_qualified_list ,
534+ prod_path = prod_qualified_list ,
535+ primary_keys = expected_primary_keys ,
536+ connection = connection ,
537+ threads = threads ,
538+ where_filter = where ,
539+ include_columns = [],
540+ exclude_columns = [],
541+ )
542+ with patch ("data_diff.dbt.connect_to_table" , side_effect = [mock_table1 , mock_table2 ]) as mock_connect :
543+ _local_diff (diff_vars )
544+
545+ mock_diff_tables .assert_called_once_with (
546+ mock_table1 ,
547+ mock_table2 ,
548+ threaded = True ,
549+ algorithm = Algorithm .JOINDIFF ,
550+ extra_columns = ANY ,
551+ where = where ,
552+ )
553+ self .assertEqual (len (mock_diff_tables .call_args [1 ]["extra_columns" ]), 1 )
554+ self .assertEqual (mock_connect .call_count , 2 )
555+ mock_diff .get_stats_string .assert_called_once ()
556+
530557 @patch ("data_diff.dbt.diff_tables" )
531558 def test_local_diff_no_diffs (self , mock_diff_tables ):
532559 connection = {}
533- column_set = {"col1" , "col2" }
560+ column_dictionary = {"col1" : ( "col1" , "type" ), " col2": ( "col2" , "type" ) }
534561 mock_table1 = Mock ()
535- mock_table1 .get_schema .return_value = column_set
562+ mock_table1 .get_schema .return_value = column_dictionary
536563 mock_table2 = Mock ()
537- mock_table2 .get_schema .return_value = column_set
564+ mock_table2 .get_schema .return_value = column_dictionary
538565 mock_diff = MagicMock ()
539566 mock_diff_tables .return_value = mock_diff
540567 mock_diff .__iter__ .return_value = []
0 commit comments