import pytest
from email_campaigns.emails.exceptions import (
EmailOptInButtonMissingError,
EmailPrivacyFooterMissingError,
)
from email_campaigns.emails.validators import EmailValidator
class TestValidatePrivacyFooterBlockPresence:
def test_success(self, validator: EmailValidator) -> None:
html = '
footer
'
validator.validate_privacy_footer_block_presence(html)
def test_missing_block(self, validator: EmailValidator) -> None:
html = "no footer
"
with pytest.raises(EmailPrivacyFooterMissingError):
validator.validate_privacy_footer_block_presence(html)
def test_none_content(self, validator: EmailValidator) -> None:
with pytest.raises(EmailPrivacyFooterMissingError):
validator.validate_privacy_footer_block_presence(None)
class TestValidateOptInButtonBlockPresence:
def test_success(self, validator: EmailValidator) -> None:
html = 'button
'
validator.validate_opt_in_button_block_presence(html)
def test_missing_block(self, validator: EmailValidator) -> None:
html = "no button
"
with pytest.raises(EmailOptInButtonMissingError):
validator.validate_opt_in_button_block_presence(html)
def test_none_content(self, validator: EmailValidator) -> None:
with pytest.raises(EmailOptInButtonMissingError):
validator.validate_opt_in_button_block_presence(None)
class TestValidateBlockPresence:
def test_multiple_checks_success(self, validator: EmailValidator) -> None:
html = (
""
'footer
'
'button
'
""
)
validator.validate_block_presence(
html,
[
(
EmailValidator.privacy_footer_class_name,
EmailPrivacyFooterMissingError,
),
(EmailValidator.opt_in_button_class_name, EmailOptInButtonMissingError),
],
)
def test_multiple_checks_first_missing(self, validator: EmailValidator) -> None:
html = 'button
'
with pytest.raises(EmailPrivacyFooterMissingError):
validator.validate_block_presence(
html,
[
(
EmailValidator.privacy_footer_class_name,
EmailPrivacyFooterMissingError,
),
(
EmailValidator.opt_in_button_class_name,
EmailOptInButtonMissingError,
),
],
)
def test_multiple_checks_second_missing(self, validator: EmailValidator) -> None:
html = 'footer
'
with pytest.raises(EmailOptInButtonMissingError):
validator.validate_block_presence(
html,
[
(
EmailValidator.privacy_footer_class_name,
EmailPrivacyFooterMissingError,
),
(
EmailValidator.opt_in_button_class_name,
EmailOptInButtonMissingError,
),
],
)
def test_none_content_raises_first_error(self, validator: EmailValidator) -> None:
with pytest.raises(EmailPrivacyFooterMissingError):
validator.validate_block_presence(
None,
[
(
EmailValidator.privacy_footer_class_name,
EmailPrivacyFooterMissingError,
),
(
EmailValidator.opt_in_button_class_name,
EmailOptInButtonMissingError,
),
],
)