from fansifter_common.identifiers.types import ( CRMProfileIdentifier, DoubleOptInIdentifier, FansifterProfileIdentifier, ) class TestFansifterProfileIdentifier: def test_string_email_campaign_id_sets_origin_fields(self) -> None: """Test that string email_campaign_id sets origin_id and origin_type.""" profile = FansifterProfileIdentifier( profileId="profile123", emailCampaignId="campaign456", ) assert profile.origin_id == "campaign456" assert profile.origin_type == "EMAIL_CAMPAIGN" assert profile.email_campaign_id == "campaign456" def test_int_email_campaign_id_does_not_set_origin_fields(self) -> None: """Test that int email_campaign_id does not trigger origin field setting.""" profile = FansifterProfileIdentifier( profileId="profile123", emailCampaignId=789, ) assert profile.origin_id is None assert profile.origin_type is None assert profile.email_campaign_id == 789 def test_none_email_campaign_id_does_not_set_origin_fields(self) -> None: """Test that None email_campaign_id does not trigger origin field setting.""" profile = FansifterProfileIdentifier( profileId="profile123", ) assert profile.origin_id is None assert profile.origin_type is None assert profile.email_campaign_id is None def test_string_email_campaign_id_respects_existing_origin_fields(self) -> None: """Test that string email_campaign_id does not override manually set origin fields.""" profile = FansifterProfileIdentifier( profileId="profile123", originId="original_id", originType="ORIGINAL_TYPE", emailCampaignId="campaign456", ) assert profile.origin_id == "original_id" assert profile.origin_type == "ORIGINAL_TYPE" def test_impersonated_by_defaults_to_none(self) -> None: profile = FansifterProfileIdentifier(profileId="profile123") assert profile.impersonated_by is None def test_impersonated_by_set_via_alias(self) -> None: profile = FansifterProfileIdentifier( profileId="profile123", impersonatedBy="admin-user-id", ) assert profile.impersonated_by == "admin-user-id" class TestCRMProfileIdentifier: def test_string_email_campaign_id_sets_origin_fields(self) -> None: """Test that string email_campaign_id sets origin_id and origin_type.""" profile = CRMProfileIdentifier( crmId="crm123", emailCampaignId="campaign456", ) assert profile.origin_id == "campaign456" assert profile.origin_type == "EMAIL_CAMPAIGN" assert profile.email_campaign_id == "campaign456" def test_int_email_campaign_id_does_not_set_origin_fields(self) -> None: """Test that int email_campaign_id does not trigger origin field setting.""" profile = CRMProfileIdentifier( crmId="crm123", emailCampaignId=789, ) assert profile.origin_id is None assert profile.origin_type is None assert profile.email_campaign_id == 789 def test_none_email_campaign_id_does_not_set_origin_fields(self) -> None: """Test that None email_campaign_id does not trigger origin field setting.""" profile = CRMProfileIdentifier( crmId="crm123", ) assert profile.origin_id is None assert profile.origin_type is None assert profile.email_campaign_id is None def test_string_email_campaign_id_respects_existing_origin_fields(self) -> None: """Test that string email_campaign_id does not override manually set origin fields.""" profile = CRMProfileIdentifier( crmId="crm123", originId="original_id", originType="ORIGINAL_TYPE", emailCampaignId="campaign456", ) assert profile.origin_id == "original_id" assert profile.origin_type == "ORIGINAL_TYPE" def test_impersonated_by_defaults_to_none(self) -> None: profile = CRMProfileIdentifier(crmId="crm123") assert profile.impersonated_by is None def test_impersonated_by_set_via_alias(self) -> None: profile = CRMProfileIdentifier( crmId="crm123", impersonatedBy="admin-user-id", ) assert profile.impersonated_by == "admin-user-id" class TestDoubleOptInIdentifier: def test_create_with_aliases(self) -> None: identifier = DoubleOptInIdentifier( eventRowId="row-123", emailId="email-456", automatedEmailTriggerId="trigger-789", iat=1700000000.0, ) assert identifier.event_row_id == "row-123" assert identifier.email_id == "email-456" assert identifier.automated_email_trigger_id == "trigger-789" assert identifier.iat == 1700000000.0 def test_create_with_model_construct(self) -> None: identifier = DoubleOptInIdentifier.model_construct( event_row_id="row-123", email_id="email-456", automated_email_trigger_id="trigger-789", iat=1700000000.0, ) assert identifier.event_row_id == "row-123" assert identifier.email_id == "email-456" def test_dump_json_uses_aliases(self) -> None: identifier = DoubleOptInIdentifier.model_construct( event_row_id="row-123", email_id="email-456", automated_email_trigger_id="trigger-789", iat=1700000000.0, ) json_str = identifier.model_dump_json(by_alias=True) assert '"eventRowId"' in json_str assert '"emailId"' in json_str assert '"automatedEmailTriggerId"' in json_str assert '"iat"' in json_str def test_validate_json_with_aliases(self) -> None: json_bytes = b'{"eventRowId":"row-123","emailId":"email-456","automatedEmailTriggerId":"trigger-789","iat":1700000000.0}' identifier = DoubleOptInIdentifier.model_validate_json(json_bytes) assert identifier.event_row_id == "row-123" assert identifier.email_id == "email-456" assert identifier.automated_email_trigger_id == "trigger-789" assert identifier.iat == 1700000000.0