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 = '' 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 = ( "" '' '
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 = '' 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, ), ], )