Tests - minor refactor
This commit is contained in:
		
							
								
								
									
										0
									
								
								fittrackee/tests/email/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								fittrackee/tests/email/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										102
									
								
								fittrackee/tests/email/test_email.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								fittrackee/tests/email/test_email.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,102 @@
 | 
			
		||||
from unittest.mock import patch
 | 
			
		||||
 | 
			
		||||
from fittrackee import email_service
 | 
			
		||||
from fittrackee.email.email import EmailMessage
 | 
			
		||||
 | 
			
		||||
from ..template_results.password_reset_request import expected_en_text_body
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestEmailMessage:
 | 
			
		||||
    def test_it_generate_email_data(self):
 | 
			
		||||
        message = EmailMessage(
 | 
			
		||||
            sender='fittrackee@example.com',
 | 
			
		||||
            recipient='test@test.com',
 | 
			
		||||
            subject='Fittrackee - test email',
 | 
			
		||||
            html="""\
 | 
			
		||||
<html>
 | 
			
		||||
  <body>
 | 
			
		||||
    <p>Hello !</p>
 | 
			
		||||
  </body>
 | 
			
		||||
</html>
 | 
			
		||||
            """,
 | 
			
		||||
            text='Hello !',
 | 
			
		||||
        )
 | 
			
		||||
        message_data = message.generate_message()
 | 
			
		||||
        assert message_data.get('From') == 'fittrackee@example.com'
 | 
			
		||||
        assert message_data.get('To') == 'test@test.com'
 | 
			
		||||
        assert message_data.get('Subject') == 'Fittrackee - test email'
 | 
			
		||||
        message_string = message_data.as_string()
 | 
			
		||||
        assert 'Hello !' in message_string
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestEmailSending:
 | 
			
		||||
 | 
			
		||||
    email_data = {
 | 
			
		||||
        'expiration_delay': '3 seconds',
 | 
			
		||||
        'username': 'test',
 | 
			
		||||
        'password_reset_url': 'http://localhost/password-reset?token=xxx',
 | 
			
		||||
        'operating_system': 'Linux',
 | 
			
		||||
        'browser_name': 'Firefox',
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @staticmethod
 | 
			
		||||
    def get_args(call_args):
 | 
			
		||||
        if len(call_args) == 2:
 | 
			
		||||
            args, _ = call_args
 | 
			
		||||
        else:
 | 
			
		||||
            _, args, _ = call_args
 | 
			
		||||
        return args
 | 
			
		||||
 | 
			
		||||
    def assert_smtp(self, smtp):
 | 
			
		||||
        assert smtp.sendmail.call_count == 1
 | 
			
		||||
        call_args = self.get_args(smtp.sendmail.call_args)
 | 
			
		||||
        assert call_args[0] == 'fittrackee@example.com'
 | 
			
		||||
        assert call_args[1] == 'test@test.com'
 | 
			
		||||
        assert expected_en_text_body in call_args[2]
 | 
			
		||||
 | 
			
		||||
    @patch('smtplib.SMTP_SSL')
 | 
			
		||||
    @patch('smtplib.SMTP')
 | 
			
		||||
    def test_it_sends_message(self, mock_smtp, mock_smtp_ssl, app):
 | 
			
		||||
 | 
			
		||||
        email_service.send(
 | 
			
		||||
            template='password_reset_request',
 | 
			
		||||
            lang='en',
 | 
			
		||||
            recipient='test@test.com',
 | 
			
		||||
            data=self.email_data,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        smtp = mock_smtp.return_value.__enter__.return_value
 | 
			
		||||
        assert smtp.starttls.not_called
 | 
			
		||||
        self.assert_smtp(smtp)
 | 
			
		||||
 | 
			
		||||
    @patch('smtplib.SMTP_SSL')
 | 
			
		||||
    @patch('smtplib.SMTP')
 | 
			
		||||
    def test_it_sends_message_with_ssl(
 | 
			
		||||
        self, mock_smtp, mock_smtp_ssl, app_ssl
 | 
			
		||||
    ):
 | 
			
		||||
        email_service.send(
 | 
			
		||||
            template='password_reset_request',
 | 
			
		||||
            lang='en',
 | 
			
		||||
            recipient='test@test.com',
 | 
			
		||||
            data=self.email_data,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        smtp = mock_smtp_ssl.return_value.__enter__.return_value
 | 
			
		||||
        assert smtp.starttls.not_called
 | 
			
		||||
        self.assert_smtp(smtp)
 | 
			
		||||
 | 
			
		||||
    @patch('smtplib.SMTP_SSL')
 | 
			
		||||
    @patch('smtplib.SMTP')
 | 
			
		||||
    def test_it_sends_message_with_tls(
 | 
			
		||||
        self, mock_smtp, mock_smtp_ssl, app_tls
 | 
			
		||||
    ):
 | 
			
		||||
        email_service.send(
 | 
			
		||||
            template='password_reset_request',
 | 
			
		||||
            lang='en',
 | 
			
		||||
            recipient='test@test.com',
 | 
			
		||||
            data=self.email_data,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        smtp = mock_smtp.return_value.__enter__.return_value
 | 
			
		||||
        assert smtp.starttls.call_count == 1
 | 
			
		||||
        self.assert_smtp(smtp)
 | 
			
		||||
@@ -0,0 +1,79 @@
 | 
			
		||||
import pytest
 | 
			
		||||
from fittrackee.email.email import EmailTemplate
 | 
			
		||||
 | 
			
		||||
from ..template_results.password_reset_request import (
 | 
			
		||||
    expected_en_html_body,
 | 
			
		||||
    expected_en_text_body,
 | 
			
		||||
    expected_fr_html_body,
 | 
			
		||||
    expected_fr_text_body,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestEmailTemplateForPasswordRequest:
 | 
			
		||||
    @pytest.mark.parametrize(
 | 
			
		||||
        'lang, expected_subject',
 | 
			
		||||
        [
 | 
			
		||||
            ('en', 'FitTrackee - Password reset request'),
 | 
			
		||||
            ('fr', 'FitTrackee - Réinitialiser votre mot de passe'),
 | 
			
		||||
        ],
 | 
			
		||||
    )
 | 
			
		||||
    def test_it_gets_subject(self, app, lang, expected_subject):
 | 
			
		||||
        email_template = EmailTemplate(app.config.get('TEMPLATES_FOLDER'))
 | 
			
		||||
 | 
			
		||||
        subject = email_template.get_content(
 | 
			
		||||
            'password_reset_request', lang, 'subject.txt', {}
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        assert subject == expected_subject
 | 
			
		||||
 | 
			
		||||
    @pytest.mark.parametrize(
 | 
			
		||||
        'lang, expected_text_body',
 | 
			
		||||
        [('en', expected_en_text_body), ('fr', expected_fr_text_body)],
 | 
			
		||||
    )
 | 
			
		||||
    def test_it_gets_text_body(self, app, lang, expected_text_body):
 | 
			
		||||
        email_template = EmailTemplate(app.config.get('TEMPLATES_FOLDER'))
 | 
			
		||||
        email_data = {
 | 
			
		||||
            'expiration_delay': '3 seconds' if lang == 'en' else '3 secondes',
 | 
			
		||||
            'username': 'test',
 | 
			
		||||
            'password_reset_url': 'http://localhost/password-reset?token=xxx',
 | 
			
		||||
            'operating_system': 'Linux',
 | 
			
		||||
            'browser_name': 'Firefox',
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        text_body = email_template.get_content(
 | 
			
		||||
            'password_reset_request', lang, 'body.txt', email_data
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        assert text_body == expected_text_body
 | 
			
		||||
 | 
			
		||||
    def test_it_gets_en_html_body(self, app):
 | 
			
		||||
        email_template = EmailTemplate(app.config.get('TEMPLATES_FOLDER'))
 | 
			
		||||
        email_data = {
 | 
			
		||||
            'expiration_delay': '3 seconds',
 | 
			
		||||
            'username': 'test',
 | 
			
		||||
            'password_reset_url': 'http://localhost/password-reset?token=xxx',
 | 
			
		||||
            'operating_system': 'Linux',
 | 
			
		||||
            'browser_name': 'Firefox',
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        text_body = email_template.get_content(
 | 
			
		||||
            'password_reset_request', 'en', 'body.html', email_data
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        assert expected_en_html_body in text_body
 | 
			
		||||
 | 
			
		||||
    def test_it_gets_fr_html_body(self, app):
 | 
			
		||||
        email_template = EmailTemplate(app.config.get('TEMPLATES_FOLDER'))
 | 
			
		||||
        email_data = {
 | 
			
		||||
            'expiration_delay': '3 secondes',
 | 
			
		||||
            'username': 'test',
 | 
			
		||||
            'password_reset_url': 'http://localhost/password-reset?token=xxx',
 | 
			
		||||
            'operating_system': 'Linux',
 | 
			
		||||
            'browser_name': 'Firefox',
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        text_body = email_template.get_content(
 | 
			
		||||
            'password_reset_request', 'fr', 'body.html', email_data
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        assert expected_fr_html_body in text_body
 | 
			
		||||
							
								
								
									
										39
									
								
								fittrackee/tests/email/test_email_utils.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								fittrackee/tests/email/test_email_utils.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
import pytest
 | 
			
		||||
from fittrackee.email.utils_email import InvalidEmailUrlScheme, parse_email_url
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TestEmailUrlParser:
 | 
			
		||||
    def test_it_raises_error_if_url_scheme_is_invalid(self):
 | 
			
		||||
        url = 'stmp://username:password@localhost:587'
 | 
			
		||||
        with pytest.raises(InvalidEmailUrlScheme):
 | 
			
		||||
            parse_email_url(url)
 | 
			
		||||
 | 
			
		||||
    def test_it_parses_email_url(self):
 | 
			
		||||
        url = 'smtp://test@example.com:12345678@localhost:25'
 | 
			
		||||
        parsed_email = parse_email_url(url)
 | 
			
		||||
        assert parsed_email['username'] == 'test@example.com'
 | 
			
		||||
        assert parsed_email['password'] == '12345678'
 | 
			
		||||
        assert parsed_email['host'] == 'localhost'
 | 
			
		||||
        assert parsed_email['port'] == 25
 | 
			
		||||
        assert parsed_email['use_tls'] is False
 | 
			
		||||
        assert parsed_email['use_ssl'] is False
 | 
			
		||||
 | 
			
		||||
    def test_it_parses_email_url_with_tls(self):
 | 
			
		||||
        url = 'smtp://test@example.com:12345678@localhost:587?tls=True'
 | 
			
		||||
        parsed_email = parse_email_url(url)
 | 
			
		||||
        assert parsed_email['username'] == 'test@example.com'
 | 
			
		||||
        assert parsed_email['password'] == '12345678'
 | 
			
		||||
        assert parsed_email['host'] == 'localhost'
 | 
			
		||||
        assert parsed_email['port'] == 587
 | 
			
		||||
        assert parsed_email['use_tls'] is True
 | 
			
		||||
        assert parsed_email['use_ssl'] is False
 | 
			
		||||
 | 
			
		||||
    def test_it_parses_email_url_with_ssl(self):
 | 
			
		||||
        url = 'smtp://test@example.com:12345678@localhost:465?ssl=True'
 | 
			
		||||
        parsed_email = parse_email_url(url)
 | 
			
		||||
        assert parsed_email['username'] == 'test@example.com'
 | 
			
		||||
        assert parsed_email['password'] == '12345678'
 | 
			
		||||
        assert parsed_email['host'] == 'localhost'
 | 
			
		||||
        assert parsed_email['port'] == 465
 | 
			
		||||
        assert parsed_email['use_tls'] is False
 | 
			
		||||
        assert parsed_email['use_ssl'] is True
 | 
			
		||||
		Reference in New Issue
	
	Block a user