import json from unittest.mock import patch 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 from tests import BaseTestCase, mock_for_user from tests.connectors.fixtures.connectors_fixtures import fixture user1 = mock_for_user( 1, "dev-marketing-user-1@example.com", "sme-dna|5cf0091d6c91d310fe6fcdc6", is_admin=True, labels=[1, ] ) user2 = mock_for_user( 2, "dev-marketing-user-2@example.com", "sme-dna|5cf0091d6c91d310fe6fcdc7", is_admin=True, labels=[2, 3] ) async def mocked_create_connector(*args, **kwargs): return mock_from_json(ConnectorResponse, "connectors/fixtures/connector_create_response.json") async def mocked_generate_card(*args, **kwargs): return "https://fivetran.com/login/" class TestConnectors(BaseTestCase): url = "/labels/{}/connectors" def setUp(self): super().setUp() FixtureLoader(models=models).import_as_sql(fixture) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1.jwt_decode) def test_get_connectors_non_admin_in_label(self): response = self.execute_get(self.url.format(1), headers=self.headers) self.assertEqual(200, response.status_code) connectors = response.json self.soft_assert_equal(len(connectors), 3) self.assert_all() @patch("auth.atlas.atlas_token_decoder.jwt.decode", user2.jwt_decode) def test_get_connectors_without_user_label(self): response = self.execute_get(self.url.format(1), headers=self.headers, query_string={}) self.assertEqual(403, response.status_code) @patch("auth.atlas.atlas_token_decoder.jwt.decode", user1.jwt_decode) @patch("external_api.base.clients.fivetran_client.FivetranClient.create_connector", new=mocked_create_connector) @patch("external_api.base.clients.fivetran_client.FivetranClient.generate_connect_card", new=mocked_generate_card) def test_create_new_connector_with_incomplete_generate_connect_card(self): data = {"platform": "google_ads"} response = self.execute_post(self.url.format(1), headers=self.headers, data=json.dumps(data)) self.assertEqual(201, response.status_code) connector = response.json self.soft_assert_equal(connector["id"], 40) self.soft_assert_equal(connector["name"], "google_ads_1") self.soft_assert_equal(connector["owner"]["id"], 1) self.soft_assert_equal(connector["status"], 0) self.soft_assert_equal(connector["platform"], "google_ads") self.soft_assert_equal(connector["externalId"], "aerial_drone") self.soft_assert_equal(connector["connectCardUri"], "https://fivetran.com/login/") self.assert_all() @patch("auth.atlas.atlas_token_decoder.jwt.decode", user2.jwt_decode) @patch("external_api.base.clients.fivetran_client.FivetranClient.create_connector", new=mocked_create_connector) @patch("external_api.base.clients.fivetran_client.FivetranClient.generate_connect_card", new=mocked_generate_card) def test_create_new_connector(self): data = {"platform": "facebook_ads"} response = self.execute_post(self.url.format(3), headers=self.headers, data=json.dumps(data)) self.assertEqual(201, response.status_code) connector = response.json self.soft_assert(self.assertIsNotNone, connector["id"]) self.soft_assert_equal(connector["name"].startswith("decibel_3_2_facebook_ads_"), True) self.soft_assert_equal(connector["owner"]["id"], 2) self.soft_assert_equal(connector["status"], 0) self.soft_assert_equal(connector["platform"], "facebook_ads") self.soft_assert_equal(connector["externalId"], "new_random_connector") self.soft_assert_equal(connector["connectCardUri"], "https://fivetran.com/login/") self.assert_all()