from unittest import mock import faker import pytest from fansifter_common.auth.account import Account, AccountAccess from email_campaigns.campaigns.enums import EmailCampaignStatus from email_campaigns.campaigns.handlers import ( GetCampaignLiveStatusHandler, GetCampaignLiveStatusRequest, ) from email_campaigns.campaigns.models import CampaignBatch, EmailCampaign from tests.unit.types import CreateModel class TestGetCampaignLiveStatusHandler: @pytest.mark.db def test_get_campaign_live_status( self, handler: GetCampaignLiveStatusHandler, create_model: CreateModel, auth_service_mock: mock.MagicMock, faker: faker.Faker, identity_id: str, ) -> None: vendor_id = faker.pyint() campaign = create_model( EmailCampaign, name="Test Campaign", vendor_id=vendor_id, subaccount_id=0, status=EmailCampaignStatus.IN_PROGRESS, ) auth_service_mock.authorize_for_permission = mock.Mock( return_value=AccountAccess( accounts=[Account(vendor_id=vendor_id, subaccount_id=0)], ) ) batch = create_model( CampaignBatch, campaign_id=campaign.id, domain_id="domain-1", provider="google", batch_size=10, batch_offset=5, ) response = handler.handle( GetCampaignLiveStatusRequest( identity_id=identity_id, campaign_id=campaign.id, ) ) assert response.status == campaign.status assert response.emails_to_send == batch.batch_size assert response.sent_emails == batch.batch_offset @pytest.mark.db def test_get_campaign_live_status_no_email_queue_records( self, handler: GetCampaignLiveStatusHandler, create_model: CreateModel, auth_service_mock: mock.MagicMock, identity_id: str, faker: faker.Faker, ) -> None: vendor_id = faker.pyint() campaign = create_model( EmailCampaign, name="Test Campaign", vendor_id=vendor_id, subaccount_id=0, status=EmailCampaignStatus.IN_PROGRESS, ) auth_service_mock.authorize_for_permission = mock.Mock( return_value=AccountAccess( accounts=[Account(vendor_id=vendor_id, subaccount_id=0)], ) ) response = handler.handle( GetCampaignLiveStatusRequest( identity_id=identity_id, campaign_id=campaign.id, ) ) assert response.status == campaign.status assert response.emails_to_send == campaign.recipients_count assert response.sent_emails == 0