from unittest import mock import pytest from dmp.adapters.fivetran.models import ConnectCard from dmp.meta.exceptions import MetaAdReportingConnectionNotFoundError from dmp.meta.handlers import ( ReconnectMetaAdReportingHandler, ReconnectMetaAdReportingRequest, ) from dmp.meta.models import MetaAdReportingConnection from dmp.meta.repositories import MetaAdReportingConnectionRepository from tests.unit.faker import FakerTyped from tests.unit.types import BuildModel, CreateModel class TestReconnectMetaAdReportingHandler: @pytest.mark.db def test_reconnect_ad_reporting_connection( self, handler: ReconnectMetaAdReportingHandler, fake: FakerTyped, build_model: BuildModel, create_model: CreateModel, fivetran_client_mock: mock.MagicMock, ad_reporting_connection_repository: MetaAdReportingConnectionRepository, identity_id: str, ) -> None: ad_reporting_connection = create_model( MetaAdReportingConnection, identity_id=identity_id, initial_email_sent=True, ) connect_card = build_model(ConnectCard) fivetran_client_mock.get_connect_card.return_value = connect_card response = handler.handle( ReconnectMetaAdReportingRequest( identity_id=identity_id, redirect_uri=fake.url(), ) ) assert response.connection_id == ad_reporting_connection.id assert response.connect_card_uri == connect_card.uri reconnected_connection = ad_reporting_connection_repository.first() assert reconnected_connection assert reconnected_connection.initial_email_sent is False @pytest.mark.db def test_reconnect_ad_reporting_connection_by_not_owner( self, handler: ReconnectMetaAdReportingHandler, fake: FakerTyped, create_model: CreateModel, identity_id: str, ) -> None: create_model(MetaAdReportingConnection, identity_id=identity_id) with pytest.raises(MetaAdReportingConnectionNotFoundError): handler.handle( ReconnectMetaAdReportingRequest( identity_id=fake.uuid4_string(), redirect_uri=fake.url(), ) )