Projet

Général

Profil

0001-tests-use-new-mailoutbox-fixture-14046.patch

Serghei Mihai, 23 novembre 2016 12:31

Télécharger (5,3 ko)

Voir les différences:

Subject: [PATCH] tests: use new 'mailoutbox' fixture (#14046)

 tests/test_emailing.py | 45 +++++++++++++++++++++------------------------
 1 file changed, 21 insertions(+), 24 deletions(-)
tests/test_emailing.py
44 44
    return announces
45 45

  
46 46

  
47
def test_emailing_with_no_subscriptions(app, categories, announces):
47
def test_emailing_with_no_subscriptions(app, categories, announces, mailoutbox):
48 48
    for announce in announces:
49 49
        broadcast = Broadcast.objects.get(announce=announce)
50 50
        broadcast.send()
51 51
        assert not broadcast.result
52
    assert not mail.outbox
52
    assert not len(mailoutbox)
53 53

  
54 54

  
55
def test_send_email(app, categories, announces):
55
def test_send_email(app, categories, announces, mailoutbox):
56 56
    for category in categories:
57 57
        uuid = uuid4()
58 58
        Subscription.objects.create(category=category,
......
61 61
        broadcast = Broadcast.objects.get(announce=announce)
62 62
        broadcast.send()
63 63
        assert broadcast.result
64
        assert mail.outbox
64
        assert len(mailoutbox)
65 65

  
66 66

  
67
def test_check_inline_css(app, categories, announces):
68
    for announce in announces:
67
def test_check_inline_css(app, categories, announces, mailoutbox):
68
    for i, announce in enumerate(announces):
69 69
        announce.text = '<style type="text/css">h2 {color: #F00}</style>' + announce.text
70 70
        announce.save()
71 71
        uuid = uuid4()
......
74 74
        broadcast = Broadcast.objects.get(announce=announce)
75 75
        broadcast.send()
76 76
        assert broadcast.result
77
        assert mail.outbox
78
        assert 'h2 style="color:#F00"' in mail.outbox[0].html
79
        mail.outbox = []
77
        assert len(mailoutbox)
78
        assert 'h2 style="color:#F00"' in mailoutbox[i].html
80 79

  
81 80
@mock.patch('emails.utils.requests.get')
82
def test_check_inline_images(mocked_get, app, categories, announces):
81
def test_check_inline_images(mocked_get, app, categories, announces, mailoutbox):
83 82
    storage = DefaultStorage()
84 83
    media_path = os.path.join(os.path.dirname(__file__), 'media')
85 84
    image_name = 'logo.png'
86 85
    image_name = storage.save(image_name, file(os.path.join(media_path, image_name)))
87
    for announce in announces:
86
    for i, announce in enumerate(announces):
88 87
        img_src = "/media/%s" % image_name
89 88
        announce.text = announce.text + '<img src="%s" />' % img_src
90 89
        announce.save()
......
97 96
                                            content=storage.open(image_name).read())
98 97
        broadcast.send()
99 98
        assert broadcast.result
100
        assert mail.outbox
101
        attachments = [a['filename'] for a in mail.outbox[0].attachments.as_dict()]
99
        assert len(mailoutbox)
100
        attachments = [a['filename'] for a in mailoutbox[i].attachments.as_dict()]
102 101
        assert image_name in attachments
103
        assert 'cid:%s' % image_name in mail.outbox[0].html_body
104
        assert 'cid:%s' % image_name in mail.outbox[0].text_body
105
        mail.outbox = []
102
        assert 'cid:%s' % image_name in mailoutbox[i].html_body
103
        assert 'cid:%s' % image_name in mailoutbox[i].text_body
106 104
    storage.delete(image_name)
107 105

  
108 106

  
109
def test_unsubscription_link(app, categories, announces):
107
def test_unsubscription_link(app, categories, announces, mailoutbox):
110 108
    unsubscription_link_sentinel = ''
111 109
    for category in categories:
112 110
        uuid = uuid4()
113 111
        scheme = 'mailto:'
114 112
        uri = scheme + '%s@example.net' % uuid
115 113
        Subscription.objects.create(category=category, identifier=uri, uuid=str(uuid))
116
        for announce in announces:
114
        for i, announce in enumerate(announces):
117 115
            if announce.category != category:
118 116
                continue
119 117
            broadcast = Broadcast.objects.get(announce=announce)
120 118
            broadcast.send()
121 119
            assert broadcast.result
122
            assert mail.outbox
120
            assert len(mailoutbox)
123 121

  
124
            signature = urllib.unquote(re.findall('/unsubscribe/(.*)"', mail.outbox[0].html)[0])
122
            signature = urllib.unquote(re.findall('/unsubscribe/(.*)"', mailoutbox[i].html)[0])
125 123
            unsubscription_link = reverse('unsubscribe', kwargs={'unsubscription_token': signature})
126 124
            assert signing.loads(signature) == {
127 125
                'category': announce.category.pk, 'identifier': uri}
128
            assert mail.outbox[0].subject == announce.title
129
            assert unsubscription_link in mail.outbox[0].html
130
            assert unsubscription_link in mail.outbox[0].text
126
            assert mailoutbox[i].subject == announce.title
127
            assert unsubscription_link in mailoutbox[i].html
128
            assert unsubscription_link in mailoutbox[i].text
131 129
            assert unsubscription_link_sentinel != unsubscription_link
132
            mail.outbox = []
133 130
            # make sure the uri schema is not in the page
134 131
            resp = app.get(unsubscription_link)
135 132
            assert scheme not in resp.content
136
-