Skip to content

Commit

Permalink
Unit test fixes.
Browse files Browse the repository at this point in the history
  • Loading branch information
amcgregor committed Jun 26, 2011
1 parent 15001b6 commit 6316f27
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 39 deletions.
7 changes: 5 additions & 2 deletions marrow/mailer/address.py
Expand Up @@ -83,12 +83,15 @@ def encode(self, encoding='utf-8'):




class AddressList(list): class AddressList(list):
def __init__(self, addresses=[]): def __init__(self, addresses=None):
list.__init__(self) list.__init__(self)


if isinstance(addresses, basestring): if isinstance(addresses, basestring):
addresses = addresses.split(',') addresses = addresses.split(',')


if isinstance(addresses, tuple):
addresses = self.append(Address(addresses))

if addresses is not None: if addresses is not None:
self.extend(addresses) self.extend(addresses)


Expand Down
2 changes: 1 addition & 1 deletion tests/test_addresses.py
Expand Up @@ -174,7 +174,7 @@ def test_bytes(self):
eq_(bytes(self.addresses), b'User1 <foo@xn--exmple-qta.test>, User2 <foo@xn--exmple-qta.test>') eq_(bytes(self.addresses), b'User1 <foo@xn--exmple-qta.test>, User2 <foo@xn--exmple-qta.test>')


def test_repr(self): def test_repr(self):
self.addresses = ('user1@example.com', 'user2@example.com') self.addresses = ['user1@example.com', 'user2@example.com']


eq_(repr(self.addresses), eq_(repr(self.addresses),
'AddressList("user1@example.com, user2@example.com")') 'AddressList("user1@example.com, user2@example.com")')
Expand Down
83 changes: 47 additions & 36 deletions tests/test_message.py
Expand Up @@ -65,18 +65,18 @@ def test_mime_generation(self):
mime = message.mime mime = message.mime


self.failUnless(message.mime is mime) self.failUnless(message.mime is mime)
self.message.subject = "Test message subject." message.subject = "Test message subject."
self.failIf(self.message.mime is mime) self.failIf(message.mime is mime)


def test_recipients_collection(self): def test_recipients_collection(self):
messagae = self.build_message() message = self.build_message()
message.cc.append("copied@example.com") message.cc.append("copied@example.com")
self.assertEqual(["recipient@example.com", "copied@example.com"], message.recipients.addresses) self.assertEqual(["recipient@example.com", "copied@example.com"], message.recipients.addresses)


def test_smtp_from_as_envelope(self): def test_smtp_from_as_envelope(self):
message = self.build_message() message = self.build_message()
message.smtp_from = 'devnull@example.com' message.smtp_from = 'devnull@example.com'
self.assertEqual('devnull@example.com', str(message.envelope_sender)) self.assertEqual('devnull@example.com', str(message.envelope))


def test_subject_with_umlaut(self): def test_subject_with_umlaut(self):
message = self.build_message() message = self.build_message()
Expand Down Expand Up @@ -120,8 +120,8 @@ def test_multiple_authors(self):
# message.authors = ['bar@example.com', 'baz@example.com'] # message.authors = ['bar@example.com', 'baz@example.com']
# self.assertRaises(ValueError, str, message) # self.assertRaises(ValueError, str, message)
# #
# self.message.sender = 'bar@example.com' # message.sender = 'bar@example.com'
# str(self.message) # str(message)


def test_permit_one_sender_at_most(self): def test_permit_one_sender_at_most(self):
message = self.build_message() message = self.build_message()
Expand All @@ -147,20 +147,22 @@ def test_add_custom_headers_tuple(self):
message = self.build_message() message = self.build_message()
message.headers = (('Precedence', 'bulk'), ('X-User', 'Alice')) message.headers = (('Precedence', 'bulk'), ('X-User', 'Alice'))


msg = email.message_from_string(str(self.message)) msg = email.message_from_string(str(message))
self.assertEqual('bulk', msg['Precedence']) self.assertEqual('bulk', msg['Precedence'])
self.assertEqual('Alice', msg['X-User']) self.assertEqual('Alice', msg['X-User'])


def test_add_custom_headers_list(self): def test_add_custom_headers_list(self):
"Test that a custom header (list type) can be attached." "Test that a custom header (list type) can be attached."
self.message.headers = [('Precedence', 'bulk'), ('X-User', 'Alice')] message = self.build_message()
message.headers = [('Precedence', 'bulk'), ('X-User', 'Alice')]


msg = email.message_from_string(str(self.message)) msg = email.message_from_string(str(message))
self.assertEqual('bulk', msg['Precedence']) self.assertEqual('bulk', msg['Precedence'])
self.assertEqual('Alice', msg['X-User']) self.assertEqual('Alice', msg['X-User'])


def test_no_sender_header_if_no_sender_required(self): def test_no_sender_header_if_no_sender_required(self):
msg = email.message_from_string(str(self.message)) message = self.build_message()
msg = email.message_from_string(str(message))
self.assertEqual(None, msg['Sender']) self.assertEqual(None, msg['Sender'])


def _date_header_to_utc_datetime(self, date_string): def _date_header_to_utc_datetime(self, date_string):
Expand All @@ -186,20 +188,23 @@ def _almost_now(self, date_string):
return (delta < timedelta(seconds=1)) return (delta < timedelta(seconds=1))


def test_date_header_added_even_if_date_not_set_explicitely(self): def test_date_header_added_even_if_date_not_set_explicitely(self):
msg = email.message_from_string(str(self.message)) message = self.build_message()
msg = email.message_from_string(str(message))
self.failUnless(self._almost_now(msg['Date'])) self.failUnless(self._almost_now(msg['Date']))


def test_date_can_be_set_as_string(self): def test_date_can_be_set_as_string(self):
message = self.build_message()
date_string = 'Fri, 26 Dec 2008 11:19:42 +0530' date_string = 'Fri, 26 Dec 2008 11:19:42 +0530'
self.message.date = date_string message.date = date_string
msg = email.message_from_string(str(self.message)) msg = email.message_from_string(str(message))
self.assertEqual(date_string, msg['Date']) self.assertEqual(date_string, msg['Date'])


def test_date_can_be_set_as_float(self): def test_date_can_be_set_as_float(self):
message = self.build_message()
expected_date = datetime(2008, 12, 26, 12, 55) expected_date = datetime(2008, 12, 26, 12, 55)
expected_time = time.mktime(expected_date.timetuple()) expected_time = time.mktime(expected_date.timetuple())
self.message.date = expected_time message.date = expected_time
msg = email.message_from_string(str(self.message)) msg = email.message_from_string(str(message))
header_string = msg['Date'] header_string = msg['Date']
header_date = self._date_header_to_utc_datetime(header_string) header_date = self._date_header_to_utc_datetime(header_string)
self.assertEqual(self.localdate_to_utc(expected_date), header_date) self.assertEqual(self.localdate_to_utc(expected_date), header_date)
Expand All @@ -212,51 +217,57 @@ def localdate_to_utc(self, localdate):
return self._date_header_to_utc_datetime(date_string) return self._date_header_to_utc_datetime(date_string)


def test_date_can_be_set_as_datetime(self): def test_date_can_be_set_as_datetime(self):
message = self.build_message()
expected_date = datetime(2008, 12, 26, 12, 55) expected_date = datetime(2008, 12, 26, 12, 55)
self.message.date = expected_date message.date = expected_date
msg = email.message_from_string(str(self.message)) msg = email.message_from_string(str(message))
header_date = self._date_header_to_utc_datetime(msg['Date']) header_date = self._date_header_to_utc_datetime(msg['Date'])
self.assertEqual(self.localdate_to_utc(expected_date), header_date) self.assertEqual(self.localdate_to_utc(expected_date), header_date)


def test_date_header_is_set_even_if_reset_to_none(self): def test_date_header_is_set_even_if_reset_to_none(self):
self.message.date = None message = self.build_message()
msg = email.message_from_string(str(self.message)) message.date = None
msg = email.message_from_string(str(message))
self.failUnless(self._almost_now(msg['Date'])) self.failUnless(self._almost_now(msg['Date']))


def test_recipients_property_includes_cc_and_bcc(self): def test_recipients_property_includes_cc_and_bcc(self):
self.message.cc = 'cc@example.com' message = self.build_message()
self.message.bcc = 'bcc@example.com' message.cc = 'cc@example.com'
message.bcc = 'bcc@example.com'
expected_recipients = ['recipient@example.com', 'cc@example.com', expected_recipients = ['recipient@example.com', 'cc@example.com',
'bcc@example.com'] 'bcc@example.com']
recipients = map(str, list(self.message.recipients.addresses)) recipients = map(str, list(message.recipients.addresses))
self.assertEqual(expected_recipients, recipients) self.assertEqual(expected_recipients, recipients)


def test_can_set_encoding_for_message_explicitely(self): def test_can_set_encoding_for_message_explicitely(self):
self.failIf('iso-8859-1' in str(self.message).lower())
self.message.encoding = 'ISO-8859-1'
msg = email.message_from_string(str(self.message))
self.assertEqual('text/plain; charset="iso-8859-1"', msg['Content-Type'])
self.assertEqual('quoted-printable', msg['Content-Transfer-Encoding'])

def test_message_encoding_can_be_set_in_config_file(self):
interface.config['mail.message.encoding'] = 'ISO-8859-1'
message = self.build_message() message = self.build_message()
self.failIf('iso-8859-1' in str(message).lower())
message.encoding = 'ISO-8859-1'
msg = email.message_from_string(str(message)) msg = email.message_from_string(str(message))
self.assertEqual('text/plain; charset="iso-8859-1"', msg['Content-Type']) self.assertEqual('text/plain; charset="iso-8859-1"', msg['Content-Type'])
self.assertEqual('quoted-printable', msg['Content-Transfer-Encoding']) self.assertEqual('quoted-printable', msg['Content-Transfer-Encoding'])


# def test_message_encoding_can_be_set_in_config_file(self):
# interface.config['mail.message.encoding'] = 'ISO-8859-1'
# message = self.build_message()
# msg = email.message_from_string(str(message))
# self.assertEqual('text/plain; charset="iso-8859-1"', msg['Content-Type'])
# self.assertEqual('quoted-printable', msg['Content-Transfer-Encoding'])

def test_plain_utf8_encoding_uses_base64(self): def test_plain_utf8_encoding_uses_base64(self):
self.failIf('utf-8' in str(self.message).lower()) message = self.build_message()
self.message.encoding = 'UTF-8' self.failIf('utf-8' in str(message).lower())
msg = email.message_from_string(str(self.message)) message.encoding = 'UTF-8'
msg = email.message_from_string(str(message))
self.assertEqual('text/plain; charset="utf-8"', msg['Content-Type']) self.assertEqual('text/plain; charset="utf-8"', msg['Content-Type'])
self.assertEqual('base64', msg['Content-Transfer-Encoding']) self.assertEqual('base64', msg['Content-Transfer-Encoding'])


# def test_can_use_utf8qp_encoding_without_turbogears_extension(self): # def test_can_use_utf8qp_encoding_without_turbogears_extension(self):
# self.failIf('utf-8' in str(self.message).lower()) # message = self.build_message()
# self.failIf('utf-8' in str(message).lower())
# for encoding in ('utf8qp', 'utf-8-qp', 'UTF-8-QP', 'UtF-8-qP'): # for encoding in ('utf8qp', 'utf-8-qp', 'UTF-8-QP', 'UtF-8-qP'):
# self.message.encoding = encoding # message.encoding = encoding
# msg = email.message_from_string(str(self.message)) # msg = email.message_from_string(str(message))
# self.assertEqual('text/plain; charset="utf-8"', msg['Content-Type']) # self.assertEqual('text/plain; charset="utf-8"', msg['Content-Type'])
# self.assertEqual('quoted-printable', msg['Content-Transfer-Encoding']) # self.assertEqual('quoted-printable', msg['Content-Transfer-Encoding'])


Expand Down

0 comments on commit 6316f27

Please sign in to comment.