import pytest from dirty_equals import IsList from dmp.app_connections.enums import AppConnectionStatus from dmp.meta.models import MetaAdAccount, MetaAdReportingConnection from dmp.meta.repositories import MetaAdReportingConnectionRepository from tests.unit.types import CreateModel class TestMetaAdReportingConnectionRepository: @pytest.mark.db def test_get_by_identity_id( self, repository: MetaAdReportingConnectionRepository, create_model: CreateModel, identity_id: str, ) -> None: ad_reporting_connection = create_model( MetaAdReportingConnection, identity_id=identity_id ) result = repository.get_by_identity_id(identity_id) assert result == ad_reporting_connection @pytest.mark.db def test_exists_by_identity_id( self, repository: MetaAdReportingConnectionRepository, create_model: CreateModel, identity_id: str, ) -> None: create_model(MetaAdReportingConnection, identity_id=identity_id) result = repository.exists_by_identity_id(identity_id) assert result @pytest.mark.db def test_get_by_fivetran_connection_id( self, repository: MetaAdReportingConnectionRepository, create_model: CreateModel ) -> None: ad_reporting_connection = create_model(MetaAdReportingConnection) result = repository.get_by_fivetran_connection_id( ad_reporting_connection.fivetran_connector_id ) assert result == ad_reporting_connection @pytest.mark.db def test_find_not_notified_connections( self, repository: MetaAdReportingConnectionRepository, create_model: CreateModel ) -> None: processing_ad_reporting_connection = create_model( MetaAdReportingConnection, status=AppConnectionStatus.WAITING_FOR_PROCESSING, initial_email_sent=False, ad_accounts=[create_model(MetaAdAccount), create_model(MetaAdAccount)], ) connected_ad_reporting_connection = create_model( MetaAdReportingConnection, status=AppConnectionStatus.CONNECTED, initial_email_sent=False, ad_accounts=[create_model(MetaAdAccount), create_model(MetaAdAccount)], ) create_model( MetaAdReportingConnection, status=AppConnectionStatus.WAITING_FOR_PROCESSING, initial_email_sent=True, ) result = repository.find_not_notified_connections() assert result assert result == IsList( processing_ad_reporting_connection, connected_ad_reporting_connection, check_order=False, ) assert len(result[0].ad_accounts) == 2 @pytest.mark.db def test_get_fivetran_connections_ids( self, repository: MetaAdReportingConnectionRepository, create_model: CreateModel, ) -> None: create_model( MetaAdReportingConnection, status=AppConnectionStatus.WAITING_FOR_PROCESSING, initial_email_sent=False, ad_accounts=[create_model(MetaAdAccount), create_model(MetaAdAccount)], ) connected_ad_reporting_connection = create_model( MetaAdReportingConnection, status=AppConnectionStatus.CONNECTED, initial_email_sent=False, ad_accounts=[create_model(MetaAdAccount), create_model(MetaAdAccount)], ) syncing_ad_reporting_connection = create_model( MetaAdReportingConnection, status=AppConnectionStatus.SYNCING, initial_email_sent=True, ad_accounts=[create_model(MetaAdAccount), create_model(MetaAdAccount)], ) result = repository.get_fivetran_connections_ids() assert result assert result == IsList( connected_ad_reporting_connection.fivetran_connector_id, syncing_ad_reporting_connection.fivetran_connector_id, check_order=False, )