import datetime import freezegun from faker import Faker from fansifter_common.utils import timezone from email_campaigns.emails import tokens from email_campaigns.emails.enums import TokenDecryptionStatus from tests.unit.helpers import override_settings class TestTokens: def test_encrypt_and_decrypt_campaign_id(self, faker: Faker) -> None: campaign_id = faker.uuid4() token = tokens.encrypt_email_id(campaign_id) result = tokens.decrypt_token(token) assert result.status == TokenDecryptionStatus.VALID assert result.email_id == campaign_id def test_decrypt_invalid_token(self) -> None: result = tokens.decrypt_token("invalid_token") assert result.status == TokenDecryptionStatus.INVALID assert result.email_id is None @freezegun.freeze_time("2024-10-15 10:30:00") def test_decrypt_expired_token(self, faker: Faker) -> None: campaign_id = faker.uuid4() ttl_seconds = 60 with override_settings(email_public_preview_ttl_seconds=ttl_seconds): token = tokens.encrypt_email_id(campaign_id) with freezegun.freeze_time( timezone.now() + datetime.timedelta(seconds=ttl_seconds + 1) ): result = tokens.decrypt_token(token) assert result.status == TokenDecryptionStatus.EXPIRED assert result.email_id == campaign_id