From 6e6e69e12f0a1277ed09b1760dfeac7357b0a535 Mon Sep 17 00:00:00 2001 From: dsprayberry <28106103+dsprayberry@users.noreply.github.com> Date: Mon, 25 Apr 2022 17:44:54 +0000 Subject: [PATCH 1/3] Handles case where state does not have currently_syncing --- tap_google_ads/sync.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tap_google_ads/sync.py b/tap_google_ads/sync.py index 983264e..3f2e81c 100644 --- a/tap_google_ads/sync.py +++ b/tap_google_ads/sync.py @@ -110,5 +110,5 @@ def do_sync(config, catalog, resource_schema, state): stream_obj.sync(sdk_client, customer, catalog_entry, config, state) - state.pop("currently_syncing") + state.pop("currently_syncing", None) singer.write_state(state) From 7b2c6f8631ebc70cb5e178eb5257922505d2b7d2 Mon Sep 17 00:00:00 2001 From: kspeer Date: Mon, 25 Apr 2022 19:48:01 +0000 Subject: [PATCH 2/3] tap-tester test added --- tests/test_google_ads_no_selection.py | 52 +++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 tests/test_google_ads_no_selection.py diff --git a/tests/test_google_ads_no_selection.py b/tests/test_google_ads_no_selection.py new file mode 100644 index 0000000..ef1b161 --- /dev/null +++ b/tests/test_google_ads_no_selection.py @@ -0,0 +1,52 @@ +"""Test tap can handle running a sync with no streams selected.""" +from datetime import datetime as dt +from datetime import timedelta +import random + +from tap_tester import menagerie, connections, runner, LOGGER + +from base import GoogleAdsBase + + +class NoStreamsSelected(GoogleAdsBase): + + @staticmethod + def name(): + return "tt_google_ads_no_streams" + + @staticmethod + def streams_to_test(): + """No streams are selected.""" + return set() + + def test_run(self): + """ + Verify tap can perform sync without Critical Error even if no streams are + selected for replication. + """ + + LOGGER.info( + "Field Exclusion Test with random field selection for tap-google-ads report streams.\n" + f"Streams Under Test: {self.streams_to_test}" + ) + + conn_id = connections.ensure_connection(self) + + # Run a discovery job + found_catalogs = self.run_and_verify_check_mode(conn_id) + + # Run a sync job using orchestrator WITHOUT selecting streams + sync_job_name = runner.run_sync_mode(self, conn_id) + + # Verify tap and target do not throw any errors + exit_status = menagerie.get_exit_status(conn_id, sync_job_name) + menagerie.verify_sync_exit_status(self, exit_status, sync_job_name) + + # Verify no records were replicated + sync_record_count = runner.examine_target_output_file( + self, conn_id, self.expected_streams(), self.expected_primary_keys()) + self.assertEqual(sum(sync_record_count.values()), 0) + + # Verify state is empty + state = menagerie.get_state(conn_id) + self.assertDictEqual(dict(), state) From 797a9168aa4b22c6617b4e1c92614ebf29d44d45 Mon Sep 17 00:00:00 2001 From: kspeer Date: Mon, 25 Apr 2022 19:53:30 +0000 Subject: [PATCH 3/3] takeout unused imports in test --- tests/test_google_ads_no_selection.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/test_google_ads_no_selection.py b/tests/test_google_ads_no_selection.py index ef1b161..3f536df 100644 --- a/tests/test_google_ads_no_selection.py +++ b/tests/test_google_ads_no_selection.py @@ -1,8 +1,4 @@ """Test tap can handle running a sync with no streams selected.""" -from datetime import datetime as dt -from datetime import timedelta -import random - from tap_tester import menagerie, connections, runner, LOGGER from base import GoogleAdsBase