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 |
|
-
|