Projet

Général

Profil

« Précédent | Suivant » 

Révision 048f0681

Ajouté par Serghei Mihai il y a plus de 7 ans

tests: use new 'mailoutbox' fixture (#14046)

Voir les différences:

tests/test_emailing.py
42 42
    return announces
43 43

  
44 44

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

  
52 52

  
53
def test_send_email(app, categories, announces):
53
def test_send_email(app, categories, announces, mailoutbox):
54 54
    for category in categories:
55 55
        uuid = uuid4()
56 56
        Subscription.objects.create(category=category,
57 57
                                    identifier='%s@example.net' % uuid, uuid=uuid)
58
    for announce in announces:
58
    for i, announce in enumerate(announces):
59 59
        broadcast = Broadcast.objects.get(announce=announce)
60 60
        broadcast.send()
61 61
        assert broadcast.result
62
        assert mail.outbox
62
        assert len(mailoutbox) == i+1
63 63

  
64 64

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

  
79 80

  
80
def test_check_inline_images(app, categories, announces):
81
@mock.patch('emails.utils.requests.get')
82
def test_check_inline_images(mocked_get, app, categories, announces, mailoutbox):
81 83
    storage = DefaultStorage()
82 84
    media_path = os.path.join(os.path.dirname(__file__), 'media')
83 85
    image_name = 'logo.png'
84 86
    image_name = storage.save(image_name, file(os.path.join(media_path, image_name)))
85
    for announce in announces:
87
    total_sent = 0
88
    for i, announce in enumerate(announces):
86 89
        img_src = "/media/%s" % image_name
87 90
        announce.text = announce.text + '<img src="%s" />' % img_src
88 91
        announce.save()
......
92 95
        broadcast = Broadcast.objects.get(announce=announce)
93 96
        broadcast.send()
94 97
        assert broadcast.result
95
        assert mail.outbox
96
        transformed_image_src = transform_image_src(img_src)
97
        assert transformed_image_src in mail.outbox[0].attachments.keys()
98
        assert 'cid:%s' % transformed_image_src in mail.outbox[0].html_body
99
        assert 'cid:%s' % transformed_image_src in mail.outbox[0].text_body
100
        mail.outbox = []
98

  
99
        assert len(mailoutbox) == total_sent + broadcast.result
100
        attachments = [a['filename'] for a in mailoutbox[i].attachments.as_dict()]
101
        assert image_name in attachments
102
        assert 'cid:%s' % image_name in mailoutbox[i].html_body
103
        assert 'cid:%s' % image_name in mailoutbox[i].text_body
104
        total_sent += broadcast.result
101 105
    storage.delete(image_name)
102 106

  
103 107

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

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

Formats disponibles : Unified diff