Skip to content
This repository was archived by the owner on May 17, 2024. It is now read-only.

Commit e864c0c

Browse files
authored
Merge pull request #392 from dlawin/issue_391
fix issue 391 incorrect raise, add tests
2 parents 91e1d98 + ea40362 commit e864c0c

File tree

2 files changed

+61
-2
lines changed

2 files changed

+61
-2
lines changed

data_diff/dbt.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,10 @@ def dbt_diff(
5454
if not is_cloud:
5555
dbt_parser.set_connection()
5656

57-
if config_prod_database is None or config_prod_schema is None:
58-
raise ValueError("Expected a value for prod_database: or prod_schema: under \nvars:\n data_diff: ")
57+
if config_prod_database is None:
58+
raise ValueError(
59+
"Expected a value for prod_database: OR prod_database: AND prod_schema: under \nvars:\n data_diff: "
60+
)
5961

6062
for model in models:
6163
diff_vars = _get_diff_vars(dbt_parser, config_prod_database, config_prod_schema, model, datasource_id)

tests/test_dbt.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -554,6 +554,63 @@ def test_diff_no_prod_configs(
554554
mock_local_diff.assert_not_called()
555555
mock_print.assert_not_called()
556556

557+
@patch("data_diff.dbt._get_diff_vars")
558+
@patch("data_diff.dbt._local_diff")
559+
@patch("data_diff.dbt._cloud_diff")
560+
@patch("data_diff.dbt.DbtParser.__new__")
561+
@patch("data_diff.dbt.rich.print")
562+
def test_diff_only_prod_db(self, mock_print, mock_dbt_parser, mock_cloud_diff, mock_local_diff, mock_get_diff_vars):
563+
mock_dbt_parser_inst = Mock()
564+
mock_dbt_parser.return_value = mock_dbt_parser_inst
565+
mock_model = Mock()
566+
expected_dbt_vars_dict = {
567+
"prod_database": "prod_db",
568+
"datasource_id": 1,
569+
}
570+
mock_dbt_parser_inst.get_models.return_value = [mock_model]
571+
mock_dbt_parser_inst.get_datadiff_variables.return_value = expected_dbt_vars_dict
572+
expected_diff_vars = DiffVars(["dev"], ["prod"], ["pks"], 123, None)
573+
mock_get_diff_vars.return_value = expected_diff_vars
574+
dbt_diff(is_cloud=False)
575+
576+
mock_dbt_parser_inst.get_models.assert_called_once()
577+
mock_dbt_parser_inst.set_project_dict.assert_called_once()
578+
mock_dbt_parser_inst.set_connection.assert_called_once()
579+
mock_cloud_diff.assert_not_called()
580+
mock_local_diff.assert_called_once_with(expected_diff_vars)
581+
mock_print.assert_called_once()
582+
583+
@patch("data_diff.dbt._get_diff_vars")
584+
@patch("data_diff.dbt._local_diff")
585+
@patch("data_diff.dbt._cloud_diff")
586+
@patch("data_diff.dbt.DbtParser.__new__")
587+
@patch("data_diff.dbt.rich.print")
588+
def test_diff_only_prod_schema(
589+
self, mock_print, mock_dbt_parser, mock_cloud_diff, mock_local_diff, mock_get_diff_vars
590+
):
591+
mock_dbt_parser_inst = Mock()
592+
mock_dbt_parser.return_value = mock_dbt_parser_inst
593+
mock_model = Mock()
594+
expected_dbt_vars_dict = {
595+
"datasource_id": 1,
596+
"prod_schema": "prod_schema",
597+
}
598+
599+
mock_dbt_parser_inst.get_models.return_value = [mock_model]
600+
mock_dbt_parser_inst.get_datadiff_variables.return_value = expected_dbt_vars_dict
601+
expected_diff_vars = DiffVars(["dev"], ["prod"], ["pks"], 123, None)
602+
mock_get_diff_vars.return_value = expected_diff_vars
603+
with self.assertRaises(ValueError):
604+
dbt_diff(is_cloud=False)
605+
606+
mock_dbt_parser_inst.get_models.assert_called_once()
607+
mock_dbt_parser_inst.set_project_dict.assert_called_once()
608+
mock_dbt_parser_inst.set_connection.assert_called_once()
609+
mock_dbt_parser_inst.get_primary_keys.assert_not_called()
610+
mock_cloud_diff.assert_not_called()
611+
mock_local_diff.assert_not_called()
612+
mock_print.assert_not_called()
613+
557614
@patch("data_diff.dbt._get_diff_vars")
558615
@patch("data_diff.dbt._local_diff")
559616
@patch("data_diff.dbt._cloud_diff")

0 commit comments

Comments
 (0)