~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/services/messages/tests/test_message.py

  • Committer: Launchpad Patch Queue Manager
  • Date: 2011-08-16 13:38:39 UTC
  • mfrom: (13688.1.4 macintosh-encoding)
  • Revision ID: launchpad@pqm.canonical.com-20110816133839-67yl2w62sf0p9pl1
[r=benji][bug=820039] No oops on 'macintosh' encoding.

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
__metaclass__ = type
5
5
 
6
6
from cStringIO import StringIO
7
 
from email.Message import Message
8
 
from email.MIMEMultipart import MIMEMultipart
9
 
from email.MIMEText import MIMEText
10
 
from email.Utils import (
 
7
from email.header import Header
 
8
from email.message import Message
 
9
from email.mime.multipart import MIMEMultipart
 
10
from email.mime.text import MIMEText
 
11
from email.utils import (
11
12
    formatdate,
12
13
    make_msgid,
13
14
    )
14
 
import unittest
15
15
 
16
16
from sqlobject import SQLObjectNotFound
17
17
import transaction
29
29
    )
30
30
from lp.services.job.model.job import Job
31
31
from lp.services.mail.sendmail import MailController
32
 
from lp.testing import TestCaseWithFactory
 
32
from lp.testing import (
 
33
    TestCase,
 
34
    TestCaseWithFactory,
 
35
    )
33
36
from lp.testing.factory import LaunchpadObjectFactory
34
37
 
35
38
 
36
 
class TestMessageSet(unittest.TestCase):
 
39
class TestMessageSet(TestCase):
37
40
    """Test the methods of `MessageSet`."""
38
41
 
39
42
    layer = LaunchpadFunctionalLayer
40
43
 
 
44
    high_characters = ''.join(chr(c) for c in range(128, 256))
 
45
 
41
46
    def setUp(self):
42
 
        unittest.TestCase.setUp(self)
 
47
        super(TestMessageSet, self).setUp()
43
48
        # Testing behavior, not permissions here.
44
49
        login('foo.bar@canonical.com')
45
50
        self.factory = LaunchpadObjectFactory()
149
154
        dupe_message = MessageSet().fromEmail(email.as_string())
150
155
        self.assertNotEqual(orig_message.id, dupe_message.id)
151
156
 
 
157
    def makeEncodedEmail(self, encoding_name, actual_encoding):
 
158
        email = self.factory.makeEmailMessage(body=self.high_characters)
 
159
        email.set_type('text/plain')
 
160
        email.set_charset(encoding_name)
 
161
        macroman = Header(self.high_characters, actual_encoding).encode()
 
162
        new_subject = macroman.replace(actual_encoding, encoding_name)
 
163
        email.replace_header('Subject', new_subject)
 
164
        return email
 
165
 
 
166
    def test_fromEmail_decodes_macintosh_encoding(self):
 
167
        """"macintosh encoding is equivalent to MacRoman."""
 
168
        high_decoded = self.high_characters.decode('macroman')
 
169
        email = self.makeEncodedEmail('macintosh', 'macroman')
 
170
        message = MessageSet().fromEmail(email.as_string())
 
171
        self.assertEqual(high_decoded, message.subject)
 
172
        self.assertEqual(high_decoded, message.text_contents)
 
173
 
 
174
    def test_fromEmail_decodes_booga_encoding(self):
 
175
        """"'booga' encoding is decoded as latin-1."""
 
176
        high_decoded = self.high_characters.decode('latin-1')
 
177
        email = self.makeEncodedEmail('booga', 'latin-1')
 
178
        message = MessageSet().fromEmail(email.as_string())
 
179
        self.assertEqual(high_decoded, message.subject)
 
180
        self.assertEqual(high_decoded, message.text_contents)
 
181
 
 
182
    def test_decode_utf8(self):
 
183
        """Test decode with a known encoding."""
 
184
        result = MessageSet.decode(u'\u1234'.encode('utf-8'), 'utf-8')
 
185
        self.assertEqual(u'\u1234', result)
 
186
 
 
187
    def test_decode_macintosh(self):
 
188
        """Test decode with macintosh encoding."""
 
189
        result = MessageSet.decode(self.high_characters, 'macintosh')
 
190
        self.assertEqual(self.high_characters.decode('macroman'), result)
 
191
 
 
192
    def test_decode_unknown_ascii(self):
 
193
        """Test decode with ascii characters in an unknown encoding."""
 
194
        result = MessageSet.decode('abcde', 'booga')
 
195
        self.assertEqual(u'abcde', result)
 
196
 
 
197
    def test_decode_unknown_high_characters(self):
 
198
        """Test decode with non-ascii characters in an unknown encoding."""
 
199
        with self.expectedLog(
 
200
            'Treating unknown encoding "booga" as latin-1.'):
 
201
            result = MessageSet.decode(self.high_characters, 'booga')
 
202
        self.assertEqual(self.high_characters.decode('latin-1'), result)
 
203
 
152
204
 
153
205
class TestMessageJob(TestCaseWithFactory):
154
206
    """Tests for MessageJob."""