Idea for using composition rather than inheritance
This commit is contained in:
@@ -1,44 +1,40 @@
|
||||
import pytest
|
||||
from atst.utils.mailer import Mailer, RedisMailer
|
||||
from atst.utils.mailer import Mailer, Mailer, MailConnection, RedisConnection
|
||||
|
||||
|
||||
class MockHost:
|
||||
class MockConnection(MailConnection):
|
||||
def __init__(self):
|
||||
self.messages = []
|
||||
self._messages = []
|
||||
|
||||
def __enter__(self):
|
||||
return self
|
||||
def send(self, message):
|
||||
self._messages.append(message)
|
||||
|
||||
def __exit__(self, *args):
|
||||
pass
|
||||
|
||||
def send_message(self, message):
|
||||
self.messages.append(message)
|
||||
@property
|
||||
def messages(self):
|
||||
return self._messages
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mail_host():
|
||||
return MockHost()
|
||||
def mailer():
|
||||
return Mailer(MockConnection(), "test@atat.com")
|
||||
|
||||
|
||||
def test_mailer_can_send_mail(monkeypatch, mail_host):
|
||||
monkeypatch.setattr("atst.utils.mailer.Mailer.connection", lambda *args: mail_host)
|
||||
mailer = Mailer("localhost", 456, "leia@rebellion.net", "droidsyourelookingfor")
|
||||
def test_mailer_can_send_mail(mailer):
|
||||
message_data = {
|
||||
"recipients": ["ben@tattoine.org"],
|
||||
"subject": "help",
|
||||
"body": "you're my only hope",
|
||||
}
|
||||
mailer.send(**message_data)
|
||||
assert len(mail_host.messages) == 1
|
||||
message = mail_host.messages[0]
|
||||
assert len(mailer.messages) == 1
|
||||
message = mailer.messages[0]
|
||||
assert message["To"] == message_data["recipients"][0]
|
||||
assert message["Subject"] == message_data["subject"]
|
||||
assert message.get_content().strip() == message_data["body"]
|
||||
|
||||
|
||||
def test_redis_mailer_can_save_messages(app):
|
||||
mailer = RedisMailer(app.redis, server=None, port=None, sender=None, password=None)
|
||||
mailer = Mailer(RedisConnection(app.redis), "test@atat.com")
|
||||
message_data = {
|
||||
"recipients": ["ben@tattoine.org"],
|
||||
"subject": "help",
|
||||
|
Reference in New Issue
Block a user