~launchpad-pqm/launchpad/devel

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# Copyright 20010 Canonical Ltd.  This software is licensed under the
# GNU Affero General Public License version 3 (see the file LICENSE).
"""Test the lpheaders monekypatches"""

__metaclass__ = type
__all__ = []

from Mailman.Handlers import (
    Decorate,
    LaunchpadHeaders,
    )

from lp.services.mailman.testing import MailmanTestCase
from lp.testing.layers import DatabaseFunctionalLayer


class TestLaunchpadHeadersTestCase(MailmanTestCase):
    """Test lpheaders.

    Mailman process() methods quietly return. They may set msg_data key-values
    or raise an error to end processing. This group of tests tests often check
    for errors, but that does not mean there is an error condition, it only
    means message processing has reached a final decision. Messages that do
    not cause a final decision pass-through and the process() methods ends
    without a return.
    """

    layer = DatabaseFunctionalLayer

    def setUp(self):
        super(TestLaunchpadHeadersTestCase, self).setUp()
        self.team, self.mailing_list = self.factory.makeTeamAndMailingList(
            'team-1', 'team-1-owner')
        self.mm_list = self.makeMailmanList(self.mailing_list)
        self.lp_user_email = 'albatros@eg.dom'
        self.lp_user = self.factory.makePerson(
            name='albatros', email=self.lp_user_email)

    def tearDown(self):
        super(TestLaunchpadHeadersTestCase, self).tearDown()
        self.cleanMailmanList(self.mm_list)

    def test_message_launchpad_headers(self):
        # All messages get updated headers.
        message = self.makeMailmanMessage(
            self.mm_list, self.lp_user_email, 'subject', 'any content.')
        msg_data = {}
        silence = LaunchpadHeaders.process(self.mm_list, message, msg_data)
        self.assertEqual(None, silence)
        self.assertEqual(
            '<team-1.lists.launchpad.dev>', message['List-Id'])
        self.assertEqual(
            '<http://help.launchpad.dev/ListHelp>', message['List-Help'])
        self.assertEqual(
            '<http://launchpad.dev/~team-1>', message['List-Subscribe'])
        self.assertEqual(
            '<http://launchpad.dev/~team-1>', message['List-Unsubscribe'])
        self.assertEqual(
            '<mailto:team-1@lists.launchpad.dev>', message['List-Post'])
        self.assertEqual(
            '<http://lists.launchpad.dev/team-1>', message['List-Archive'])
        self.assertEqual(
            '<http://launchpad.dev/~team-1>', message['List-Owner'])

    def test_message_decoration_data(self):
        # The lpheaders process method provides decoration-data.
        message = self.makeMailmanMessage(
            self.mm_list, self.lp_user_email, 'subject', 'any content.')
        msg_data = {}
        silence = LaunchpadHeaders.process(self.mm_list, message, msg_data)
        self.assertEqual(None, silence)
        self.assertTrue('decoration-data' in msg_data)
        decoration_data = msg_data['decoration-data']
        self.assertEqual(
            'http://launchpad.dev/~team-1',
            decoration_data['list_owner'])
        self.assertEqual(
            'team-1@lists.launchpad.dev',
            decoration_data['list_post'])
        self.assertEqual(
            'http://launchpad.dev/~team-1',
            decoration_data['list_unsubscribe'])
        self.assertEqual(
            'http://help.launchpad.dev/ListHelp',
            decoration_data['list_help'])

    def test_message_decorate_footer(self):
        # The Decorate handler uses the lpheaders decoration-data.
        message = self.makeMailmanMessage(
            self.mm_list, self.lp_user_email, 'subject', 'any content.')
        msg_data = {}
        LaunchpadHeaders.process(self.mm_list, message, msg_data)
        self.assertTrue('decoration-data' in msg_data)
        silence = Decorate.process(self.mm_list, message, msg_data)
        self.assertEqual(None, silence)
        body, footer = message.get_payload()[1].get_payload().rsplit('-- ', 1)
        expected = (
            "\n"
            "Mailing list: http://launchpad.dev/~team-1\n"
            "Post to     : team-1@lists.launchpad.dev\n"
            "Unsubscribe : http://launchpad.dev/~team-1\n"
            "More help   : http://help.launchpad.dev/ListHelp\n")
        self.assertEqual(expected, footer)