Mercurial > p > roundup > code
diff test/test_mailgw.py @ 4965:a850f8bae536
Moved test_mailgw to email module and make message comparison sharper to flag differences in headers with the same name.
| author | Bernhard Reiter <bernhard@intevation.de> |
|---|---|
| date | Mon, 02 Mar 2015 17:08:40 +0100 |
| parents | 6e9b9743de89 |
| children | c355541aaae3 |
line wrap: on
line diff
--- a/test/test_mailgw.py Mon Feb 16 17:43:58 2015 +0100 +++ b/test/test_mailgw.py Mon Mar 02 17:08:40 2015 +0100 @@ -11,9 +11,9 @@ # TODO: test bcc -import unittest, tempfile, os, shutil, errno, imp, sys, difflib, rfc822, time +import email import gpgmelib -from email.parser import FeedParser +import unittest, tempfile, os, shutil, errno, imp, sys, difflib, time try: @@ -43,14 +43,13 @@ """ return lambda x: 0 -class Message(rfc822.Message): - """String-based Message class with equivalence test.""" - def __init__(self, s): - rfc822.Message.__init__(self, StringIO(s.strip())) - - def __eq__(self, other): - return (self.dict == other.dict and - self.fp.read() == other.fp.read()) + +def get_body(message): + if not message.is_multipart(): + return message.get_payload() + + return message.as_string().split('\n\n', 1)[-1] + class Tracker(object): def open(self, journaltag): @@ -59,7 +58,8 @@ class DiffHelper: def compareMessages(self, new, old): """Compare messages for semantic equivalence.""" - new, old = Message(new), Message(old) + new = email.message_from_string(new.strip()) + old = email.message_from_string(old.strip()) # all Roundup-generated messages have "Precedence: bulk" old['Precedence'] = 'bulk' @@ -86,11 +86,14 @@ oldmime = old.get(key, '').split('=',1)[-1].strip('"') replace ['--' + newmime] = '--' + oldmime replace ['--' + newmime + '--'] = '--' + oldmime + '--' - elif new.get(key, '') != old.get(key, ''): - res.append(' %s: %r != %r' % (key, old.get(key, ''), - new.get(key, ''))) - - body_diff = self.compareStrings(new.fp.read(), old.fp.read(), + elif new.get_all(key, '') != old.get_all(key, ''): + # check that all other headers are identical, including + # headers that appear more than once. + res.append(' %s: %r != %r' % (key, old.get_all(key, ''), + new.get_all(key, ''))) + + # TODO replace the string comparision with a mimepart comparison + body_diff = self.compareStrings(get_body(new), get_body(old), replace=replace) if body_diff: res.append('') @@ -3504,7 +3507,7 @@ # trap_exc=1: we want a bounce message: self._handle_mail(self.encrypted_msg, trap_exc=1) m = self._get_mail() - fp = FeedParser() + fp = email.parser.FeedParser() fp.feed(m) parts = fp.close().get_payload() self.assertEqual(len(parts),2) @@ -3515,7 +3518,7 @@ res = ctx.op_decrypt(crypt, plain) self.assertEqual(res, None) plain.seek(0,0) - fp = FeedParser() + fp = email.parser.FeedParser() fp.feed(plain.read()) parts = fp.close().get_payload() self.assertEqual(len(parts),2)
