import pytest from email_campaigns.campaigns.models import EmailCampaign from email_campaigns.reporting.handlers import ( CreateEmailReportingReportHandler, CreateEmailReportingReportRequest, ) from tests.unit.types import CreateModel class TestCreateEmailReportingReportHandler: @pytest.mark.db def test_create_report( self, handler: CreateEmailReportingReportHandler, create_model: CreateModel, identity_id: str, ) -> None: campaign = create_model(EmailCampaign, name="Test Campaign", vendor_id=1) result = handler.handle( CreateEmailReportingReportRequest( identity_id=identity_id, name="My Report", email_ids=[campaign.id], ) ) assert result.identity_id == identity_id assert result.name == "My Report" assert result.email_ids == [campaign.id] @pytest.mark.db def test_create_report_with_no_emails( self, handler: CreateEmailReportingReportHandler, identity_id: str, ) -> None: result = handler.handle( CreateEmailReportingReportRequest( identity_id=identity_id, name="Empty Report", email_ids=[], ) ) assert result.identity_id == identity_id assert result.name == "Empty Report" assert result.email_ids == [] @pytest.mark.db def test_create_report_email_not_matching_filter( self, handler: CreateEmailReportingReportHandler, identity_id: str, ) -> None: result = handler.handle( CreateEmailReportingReportRequest( identity_id=identity_id, name="My Report", email_ids=["non-existent-email-id"], ) ) assert result.email_ids == [] @pytest.mark.db def test_create_report_filters_by_global_participant_id( self, handler: CreateEmailReportingReportHandler, create_model: CreateModel, identity_id: str, ) -> None: campaign = create_model( EmailCampaign, name="Matching Campaign", vendor_id=1, global_participant_id="artist-1", ) create_model( EmailCampaign, name="Other Campaign", vendor_id=1, global_participant_id="artist-2", ) result = handler.handle( CreateEmailReportingReportRequest( identity_id=identity_id, name="My Report", global_participant_id="artist-1", ) ) assert result.email_ids == [campaign.id] @pytest.mark.db def test_create_report_filters_by_vendor_id( self, handler: CreateEmailReportingReportHandler, create_model: CreateModel, identity_id: str, ) -> None: campaign = create_model(EmailCampaign, name="Test Campaign", vendor_id=1) create_model(EmailCampaign, name="Other Vendor Campaign", vendor_id=2) result = handler.handle( CreateEmailReportingReportRequest( identity_id=identity_id, name="My Report", vendor_id=1, ) ) assert result.email_ids == [campaign.id]