import pytest from email_campaigns.audiences.enums import AudienceTarget from email_campaigns.audiences.models import Audience from email_campaigns.campaigns.enums import EmailCampaignStatus from email_campaigns.campaigns.handlers.bulk_estimate_send_time import ( BulkEstimateSendTimeHandler, BulkEstimateSendTimeRequest, ) from email_campaigns.campaigns.models import DeliveryQuota, EmailCampaign from email_campaigns.emails.models import EmailDomain from tests.unit.types import CreateModel, CreatePgModel class TestBulkEstimateSendTimeHandler: @pytest.mark.db def test_bulk_estimate_filters_non_eligible_campaigns( self, handler: BulkEstimateSendTimeHandler, create_model: CreateModel, create_pg_model: CreatePgModel, identity_id: str, ) -> None: vendor_id = 1 subaccount_id = 0 audience1 = create_pg_model( Audience, target=AudienceTarget.EMAIL, fan_count=1000, recipients_count_by_email_provider={"google": 1000}, ) audience2 = create_pg_model( Audience, target=AudienceTarget.EMAIL, fan_count=2000, recipients_count_by_email_provider={"google": 2000}, ) audience3 = create_pg_model( Audience, target=AudienceTarget.EMAIL, fan_count=3000, recipients_count_by_email_provider={"google": 3000}, ) email_domain = create_model(EmailDomain) scheduled_campaign = create_model( EmailCampaign, status=EmailCampaignStatus.SCHEDULED, audience_id=audience1.id, email_domain=email_domain, vendor_id=vendor_id, subaccount_id=subaccount_id, ) in_progress_campaign = create_model( EmailCampaign, status=EmailCampaignStatus.IN_PROGRESS, audience_id=audience2.id, email_domain=email_domain, vendor_id=vendor_id, subaccount_id=subaccount_id, ) draft_campaign = create_model( EmailCampaign, status=EmailCampaignStatus.DRAFT, audience_id=audience3.id, email_domain=email_domain, vendor_id=vendor_id, subaccount_id=subaccount_id, ) create_model( DeliveryQuota, domain_id=email_domain.id, provider="google", last_hourly_quota=1000.0, ) result = handler.handle( BulkEstimateSendTimeRequest( identity_id=identity_id, campaign_ids=[ scheduled_campaign.id, in_progress_campaign.id, draft_campaign.id, ], ) ) assert len(result) == 2 result_ids = {r.campaign_id for r in result} assert scheduled_campaign.id in result_ids assert in_progress_campaign.id in result_ids assert draft_campaign.id not in result_ids