Projet

Général

Profil

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

Serghei Mihai, 23 novembre 2016 16:04

Télécharger (5,94 ko)

Voir les différences:

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

 tests/test_emailing.py | 51 +++++++++++++++++++++++++-------------------------
 tox.ini                |  4 ++--
 2 files changed, 28 insertions(+), 27 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,
59 59
                                    identifier='%s@example.net' % uuid, uuid=uuid)
60
    for announce in announces:
60
    for i, announce in enumerate(announces):
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) == i+1
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
    total_sent = 0
69
    for i, announce in enumerate(announces):
69 70
        announce.text = '<style type="text/css">h2 {color: #F00}</style>' + announce.text
70 71
        announce.save()
71 72
        uuid = uuid4()
......
74 75
        broadcast = Broadcast.objects.get(announce=announce)
75 76
        broadcast.send()
76 77
        assert broadcast.result
77
        assert mail.outbox
78
        assert 'h2 style="color:#F00"' in mail.outbox[0].html
79
        mail.outbox = []
78
        assert len(mailoutbox) == total_sent + broadcast.result
79
        total_sent += broadcast.result
80
        assert 'h2 style="color:#F00"' in mailoutbox[i].html
80 81

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

  
108 110

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

  
124
            signature = urllib.unquote(re.findall('/unsubscribe/(.*)"', mail.outbox[0].html)[0])
126
            signature = urllib.unquote(re.findall('/unsubscribe/(.*)"', mailoutbox[i].html)[0])
125 127
            unsubscription_link = reverse('unsubscribe', kwargs={'unsubscription_token': signature})
126 128
            assert signing.loads(signature) == {
127 129
                '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
130
            assert mailoutbox[i].subject == announce.title
131
            assert unsubscription_link in mailoutbox[i].html
132
            assert unsubscription_link in mailoutbox[i].text
131 133
            assert unsubscription_link_sentinel != unsubscription_link
132
            mail.outbox = []
133 134
            # make sure the uri schema is not in the page
134 135
            resp = app.get(unsubscription_link)
135 136
            assert scheme not in resp.content
tox.ini
11 11
  django17: django>1.7,<1.8
12 12
  django18: django>=1.8,<1.9
13 13
  pytest-cov
14
  pytest-django
15
  pytest
14
  pytest-django>=3.1.1
15
  pytest>=3.0.4
16 16
  pytest-capturelog
17 17
  django-webtest
18 18
  django-ckeditor<4.5.3
19
-