import json from unittest.mock import patch from db import db from external_api.base.clients.fivetran_client import ConnectorResponse from tests.performance.utils import mock_from_json from tests.test_utils import FixtureLoader from models import models, Connector from tests import BaseTestCase from tests.connectors.fixtures.connectors_fixtures import fixture async def mocker_get_connector_valid(*args, **kwargs): return mock_from_json(ConnectorResponse, "connectors/fixtures/connector_get_valid.json") async def mocker_get_connector_invalid(*args, **kwargs): return mock_from_json(ConnectorResponse, "connectors/fixtures/connector_get_invalid.json") class TestConnectorsWebhook(BaseTestCase): url = "/connectors-webhook" def setUp(self): super().setUp() FixtureLoader(models=models).import_as_sql(fixture) @patch( "external_api.base.clients.fivetran_client.FivetranClient.get_connector_by_id", new=mocker_get_connector_valid ) def test_upd_status_of_existed_connector_in_success_case(self): data = { "event": "sync_end", "created": "2022-08-18T11:38:34.386Z", "connector_type": "google_ads", "connector_id": "aerial_drone", "destination_group_id": "test", "data": { "status": "SUCCESSFUL" } } response = self.execute_post(self.url, headers=self.headers, data=json.dumps(data)) conn = db.session.query(Connector).filter(Connector.external_id == data.get("connector_id")).one() self.assertEqual(200, response.status_code) self.soft_assert_equal(conn.status, 1) self.assert_all() @patch( "external_api.base.clients.fivetran_client.FivetranClient.get_connector_by_id", new=mocker_get_connector_invalid ) def test_not_do_anything_if_connector_not_from_decibel(self): data = { "event": "sync_end", "created": "2022-08-18T11:38:34.386Z", "connector_type": "google_ads", "connector_id": "non_decibel", "destination_group_id": "test", "data": { "status": "SUCCESSFUL" } } conn_count = db.session.query(Connector).count() response = self.execute_post(self.url, headers=self.headers, data=json.dumps(data)) conn_count_after = db.session.query(Connector).count() self.assertEqual(200, response.status_code) self.soft_assert_equal(conn_count, conn_count_after) self.assert_all() @patch("external_api.base.clients.fivetran_client.FivetranClient.get_connector_by_id", new=mocker_get_connector_valid) def test_failed_event_should_update_connector(self): data = { "event": "sync_end", "created": "2022-08-18T11:38:34.386Z", "connector_type": "google_ads", "connector_id": "aerial_drone", "destination_group_id": "test", "data": { "status": "FAILED" } } response = self.execute_post(self.url, headers=self.headers, data=json.dumps(data)) conn = db.session.query(Connector).filter(Connector.external_id == data.get("connector_id")).one() self.assertEqual(200, response.status_code) self.soft_assert_equal(conn.status, 3) self.assert_all()