Skip to content

Commit b153150

Browse files
committedMar 17, 2025·
Rename tasks/mailer.py to tasks/email.py
1 parent bad4cb0 commit b153150

File tree

20 files changed

+128
-130
lines changed

20 files changed

+128
-130
lines changed
 

‎h/jinja_extensions/navbar_data_admin.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,10 @@ def navbar_data_admin(request):
6868
],
6969
},
7070
{
71-
"id": "mailer",
71+
"id": "email",
7272
"permission": Permission.AdminPage.LOW_RISK,
73-
"title": "Mailer",
74-
"route": "admin.mailer",
73+
"title": "Email",
74+
"route": "admin.email",
7575
},
7676
{
7777
"id": "nipsa",

‎h/routes.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,11 @@ def includeme(config): # noqa: PLR0915
5252
factory="h.traversal.GroupRequiredRoot",
5353
traverse="/{id}",
5454
)
55-
config.add_route("admin.mailer", "/admin/mailer")
56-
config.add_route("admin.mailer_test", "/admin/mailer/test")
55+
config.add_route("admin.email", "/admin/email")
56+
config.add_route("admin.email_test", "/admin/email/test")
5757
config.add_route(
58-
"admin.mailer.preview.mention_notification",
59-
"/admin/mailer/preview/mention-notification",
58+
"admin.email.preview.mention_notification",
59+
"/admin/email/preview/mention-notification",
6060
)
6161
config.add_route("admin.nipsa", "/admin/nipsa")
6262
config.add_route("admin.oauthclients", "/admin/oauthclients")

‎h/services/email.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,11 @@ def __init__(self, request: Request, mailer: IMailer) -> None:
4949
self._request = request
5050
self._mailer = mailer
5151

52-
def send(self, email: EmailData) -> None:
52+
def send(self, email_data: EmailData) -> None:
5353
if self._request.debug: # pragma: no cover
5454
logger.info("emailing in debug mode: check the `mail/` directory")
5555
try:
56-
self._mailer.send_immediately(email.message)
56+
self._mailer.send_immediately(email_data.message)
5757
except smtplib.SMTPRecipientsRefused as exc: # pragma: no cover
5858
logger.warning(
5959
"Recipient was refused when trying to send an email. Does the user have an invalid email address?",

‎h/services/user_signup.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from h.services import SubscriptionService
1010
from h.services.exceptions import ConflictError
1111
from h.services.user_password import UserPasswordService
12-
from h.tasks import mailer as tasks_mailer
12+
from h.tasks import email
1313

1414
log = logging.getLogger(__name__)
1515

@@ -124,13 +124,13 @@ def _require_activation(self, user):
124124
self.session.flush()
125125

126126
# Send the activation email
127-
email = signup.generate(
127+
email_data = signup.generate(
128128
request=self.request,
129129
user_id=user.id,
130130
email=user.email,
131131
activation_code=user.activation.code,
132132
)
133-
tasks_mailer.send.delay(asdict(email))
133+
email.send.delay(asdict(email_data))
134134

135135

136136
def user_signup_service_factory(_context, request):

‎h/subscribers.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from h.notification import mention, reply
1313
from h.services import NotificationService
1414
from h.services.annotation_read import AnnotationReadService
15-
from h.tasks import mailer
15+
from h.tasks import email
1616

1717
logger = logging.getLogger(__name__)
1818

@@ -108,9 +108,9 @@ def send_reply_notifications(event):
108108
logger.info("Skipping reply notification for %s", notification.parent_user)
109109
return
110110

111-
email = emails.reply_notification.generate(request, notification)
111+
email_data = emails.reply_notification.generate(request, notification)
112112
try:
113-
mailer.send.delay(asdict(email))
113+
email.send.delay(asdict(email_data))
114114
except OperationalError as err: # pragma: no cover
115115
# We could not connect to rabbit! So carry on
116116
report_exception(err)
@@ -146,9 +146,9 @@ def send_mention_notifications(event):
146146
)
147147
continue
148148

149-
email = emails.mention_notification.generate(request, notification)
149+
email_data = emails.mention_notification.generate(request, notification)
150150
try:
151-
mailer.send.delay(asdict(email))
151+
email.send.delay(asdict(email_data))
152152
except OperationalError as err: # pragma: no cover
153153
# We could not connect to rabbit! So carry on
154154
report_exception(err)

‎h/tasks/celery.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
"h.tasks.cleanup",
8282
"h.tasks.indexer",
8383
"h.tasks.job_queue",
84-
"h.tasks.mailer",
84+
"h.tasks.email",
8585
"h.tasks.url_migration",
8686
),
8787
task_routes={

‎h/tasks/mailer.py ‎h/tasks/email.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
A module for sending email.
33
44
This module defines a Celery task for sending emails in a worker process.
5-
"""
5+
""" # noqa: A005
66

77
from typing import Any
88

@@ -21,11 +21,11 @@
2121
max_retries=3,
2222
retry_jitter=False,
2323
)
24-
def send(self, email_data: dict[str, Any]) -> None: # noqa: ARG001
24+
def send(self, data: dict[str, Any]) -> None: # noqa: ARG001
2525
"""Send an email.
2626
27-
:param email_data: A dictionary containing email data compatible with EmailData class.
27+
:param data: A dictionary containing email data compatible with EmailData class.
2828
"""
2929
service: EmailService = celery.request.find_service(EmailService)
30-
email = EmailData(**email_data)
31-
service.send(email)
30+
email_data = EmailData(**data)
31+
service.send(email_data)

‎h/templates/admin/mailer.html.jinja2 ‎h/templates/admin/email.html.jinja2

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{% extends "h:templates/layouts/admin.html.jinja2" %}
22

3-
{% set page_id = 'mailer' %}
4-
{% set page_title = 'Mailer' %}
3+
{% set page_id = 'email' %}
4+
{% set page_title = 'Email' %}
55

66
{% block content %}
77

@@ -17,7 +17,7 @@
1717
<h3 class="card-title mb-0">Send a test email</h3>
1818
</div>
1919
<div class="card-body">
20-
<form method="POST" action="{{ request.route_path('admin.mailer_test') }}" class="form-inline">
20+
<form method="POST" action="{{ request.route_path('admin.email_test') }}" class="form-inline">
2121
<input type="hidden" name="csrf_token" value="{{ get_csrf_token() }}">
2222
<div class="form-group">
2323
<label for="recipient">Recipient</label>
@@ -35,7 +35,7 @@
3535
<iframe
3636
class="card-body p-0"
3737
style="height: 40em; border: none;"
38-
src="{{ request.route_url("admin.mailer.preview.mention_notification") }}"
38+
src="{{ request.route_url("admin.email.preview.mention_notification") }}"
3939
>
4040
</iframe>
4141
</div>

‎h/views/accounts.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
ResetPasswordSchema,
3131
)
3232
from h.services import SubscriptionService
33-
from h.tasks import mailer
33+
from h.tasks import email
3434
from h.util.view import json_view
3535

3636
_ = i18n.TranslationString
@@ -211,8 +211,8 @@ def _redirect_if_logged_in(self):
211211
raise httpexceptions.HTTPFound(self.request.route_path("index"))
212212

213213
def _send_forgot_password_email(self, user):
214-
email = reset_password.generate(self.request, user)
215-
mailer.send.delay(asdict(email))
214+
email_data = reset_password.generate(self.request, user)
215+
email.send.delay(asdict(email_data))
216216

217217

218218
@view_defaults(

‎h/views/admin/mailer.py ‎h/views/admin/email.py

+13-13
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,44 @@
1-
from dataclasses import asdict
1+
from dataclasses import asdict # noqa: A005
22

33
from pyramid.httpexceptions import HTTPSeeOther
44
from pyramid.view import view_config
55

66
from h.emails import test
77
from h.security import Permission
8-
from h.tasks import mailer
8+
from h.tasks import email
99

1010

1111
@view_config(
12-
route_name="admin.mailer",
12+
route_name="admin.email",
1313
request_method="GET",
14-
renderer="h:templates/admin/mailer.html.jinja2",
14+
renderer="h:templates/admin/email.html.jinja2",
1515
permission=Permission.AdminPage.LOW_RISK,
1616
)
17-
def mailer_index(request):
18-
"""Show the mailer test tools."""
17+
def email_index(request):
18+
"""Show the email test tools."""
1919
return {"taskid": request.params.get("taskid")}
2020

2121

2222
@view_config(
23-
route_name="admin.mailer_test",
23+
route_name="admin.email_test",
2424
request_method="POST",
2525
permission=Permission.AdminPage.LOW_RISK,
2626
require_csrf=True,
2727
)
28-
def mailer_test(request):
28+
def email_test(request):
2929
"""Send a test email."""
3030
if "recipient" not in request.params:
31-
index = request.route_path("admin.mailer")
31+
index = request.route_path("admin.email")
3232
return HTTPSeeOther(location=index)
3333

34-
email = test.generate(request, request.params["recipient"])
35-
result = mailer.send.delay(asdict(email))
36-
index = request.route_path("admin.mailer", _query={"taskid": result.task_id})
34+
email_data = test.generate(request, request.params["recipient"])
35+
result = email.send.delay(asdict(email_data))
36+
index = request.route_path("admin.email", _query={"taskid": result.task_id})
3737
return HTTPSeeOther(location=index)
3838

3939

4040
@view_config(
41-
route_name="admin.mailer.preview.mention_notification",
41+
route_name="admin.email.preview.mention_notification",
4242
request_method="GET",
4343
permission=Permission.AdminPage.LOW_RISK,
4444
renderer="h:templates/emails/mention_notification.html.jinja2",

‎h/views/api/flags.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from h.emails import flag_notification
77
from h.security import Permission
88
from h.security.permission_map import GROUP_MODERATE_PREDICATES
9-
from h.tasks import mailer
9+
from h.tasks import email
1010
from h.views.api.config import api_config
1111

1212

@@ -38,6 +38,6 @@ def _email_group_moderators(request, annotation):
3838
)
3939

4040
for membership in memberships:
41-
if email := membership.user.email:
42-
email = flag_notification.generate(request, email, incontext_link)
43-
mailer.send.delay(asdict(email))
41+
if user_email := membership.user.email:
42+
email_data = flag_notification.generate(request, user_email, incontext_link)
43+
email.send.delay(asdict(email_data))

‎tests/functional/h/views/admin/permissions_test.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ class TestAdminPermissions:
99
("/admin/badge", False),
1010
("/admin/features", False),
1111
("/admin/groups", True),
12-
("/admin/mailer", True),
12+
("/admin/email", True),
1313
("/admin/nipsa", False),
1414
("/admin/oauthclients", False),
1515
("/admin/organizations", True),

‎tests/unit/h/jinja2_extensions/navbar_data_admin_test.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from h.jinja_extensions import navbar_data_admin
66

7-
STAFF_TABS = ["index", "groups", "mailer", "organizations", "users"]
7+
STAFF_TABS = ["index", "groups", "email", "organizations", "users"]
88

99

1010
class TestNavbarDataAdmin:

‎tests/unit/h/routes_test.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,11 @@ def test_includeme():
5959
factory="h.traversal.GroupRequiredRoot",
6060
traverse="/{id}",
6161
),
62-
call("admin.mailer", "/admin/mailer"),
63-
call("admin.mailer_test", "/admin/mailer/test"),
62+
call("admin.email", "/admin/email"),
63+
call("admin.email_test", "/admin/email/test"),
6464
call(
65-
"admin.mailer.preview.mention_notification",
66-
"/admin/mailer/preview/mention-notification",
65+
"admin.email.preview.mention_notification",
66+
"/admin/email/preview/mention-notification",
6767
),
6868
call("admin.nipsa", "/admin/nipsa"),
6969
call("admin.oauthclients", "/admin/oauthclients"),

‎tests/unit/h/services/user_signup_test.py

+10-12
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,7 @@ def test_signup_sets_password_using_password_service(
9393

9494
user_password_service.update_password.assert_called_once_with(user, "wibble")
9595

96-
def test_signup_sends_email(
97-
self, svc, signup, tasks_mailer, pyramid_request, asdict
98-
):
96+
def test_signup_sends_email(self, svc, signup, email, pyramid_request, asdict):
9997
signup.generate.return_value = sentinel.email
10098
asdict.return_value = sentinel.email_data
10199

@@ -109,15 +107,15 @@ def test_signup_sends_email(
109107
)
110108

111109
asdict.assert_called_once_with(signup.generate.return_value)
112-
tasks_mailer.send.delay.assert_called_once_with(asdict.return_value)
110+
email.send.delay.assert_called_once_with(asdict.return_value)
113111

114112
def test_signup_does_not_send_email_when_activation_not_required(
115-
self, svc, signup, tasks_mailer
113+
self, svc, signup, email
116114
):
117115
svc.signup(require_activation=False, username="foo", email="foo@bar.com")
118116

119117
signup.generate.assert_not_called()
120-
tasks_mailer.send.delay.assert_not_called()
118+
email.send.delay.assert_not_called()
121119

122120
def test_signup_creates_subscriptions(self, svc, subscription_service, factories):
123121
subscription = factories.Subscriptions(active=False)
@@ -144,7 +142,7 @@ def test_signup_logs_conflict_error_when_account_with_email_already_exists(
144142
)
145143

146144
@pytest.mark.parametrize(
147-
"username,email",
145+
"username,user_email",
148146
[
149147
# In the real world these values would be identical to the first signup but
150148
# since we need to force one to error before the other, only the email or
@@ -157,16 +155,16 @@ def test_signup_logs_conflict_error_when_account_with_email_already_exists(
157155
],
158156
)
159157
def test_signup_raises_conflict_error_when_account_already_exists(
160-
self, svc, username, email
158+
self, svc, username, user_email
161159
):
162160
# This happens when two or more identical
163161
# concurrent signup requests race each other to the db.
164162
with pytest.raises( # noqa: PT012
165163
ConflictError,
166-
match=f"The email address {email} has already been registered.",
164+
match=f"The email address {user_email} has already been registered.",
167165
):
168166
svc.signup(username="foo", email="foo@bar.com")
169-
svc.signup(username=username, email=email)
167+
svc.signup(username=username, email=user_email)
170168

171169
@pytest.fixture
172170
def svc(self, pyramid_request, user_password_service, subscription_service):
@@ -178,8 +176,8 @@ def svc(self, pyramid_request, user_password_service, subscription_service):
178176
)
179177

180178
@pytest.fixture(autouse=True)
181-
def tasks_mailer(self, patch):
182-
return patch("h.services.user_signup.tasks_mailer")
179+
def email(self, patch):
180+
return patch("h.services.user_signup.email")
183181

184182
@pytest.fixture(autouse=True)
185183
def signup(self, patch):

‎tests/unit/h/subscribers_test.py

+24-24
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ def test_it_sends_emails(
120120
reply,
121121
mention,
122122
emails,
123-
mailer,
123+
email,
124124
asdict,
125125
):
126126
asdict.return_value = sentinel.email_data
@@ -151,32 +151,32 @@ def test_it_sends_emails(
151151
notification_service.allow_notifications.assert_called_once_with(
152152
annotation, notification.parent_user
153153
)
154-
email = emails.reply_notification.generate.return_value
155-
asdict.assert_called_once_with(email)
154+
email_data = emails.reply_notification.generate.return_value
155+
asdict.assert_called_once_with(email_data)
156156

157-
mailer.send.delay.assert_called_once_with(asdict.return_value)
157+
email.send.delay.assert_called_once_with(asdict.return_value)
158158

159159
notification_service.save_notification.assert_called_once_with(
160160
annotation=annotation,
161161
recipient=notification.parent_user,
162162
notification_type=NotificationType.REPLY,
163163
)
164164

165-
def test_it_does_nothing_if_no_notification_is_required(self, event, reply, mailer):
165+
def test_it_does_nothing_if_no_notification_is_required(self, event, reply, email):
166166
reply.get_notification.return_value = None
167167

168168
subscribers.send_reply_notifications(event)
169169

170-
mailer.send.delay.assert_not_called()
170+
email.send.delay.assert_not_called()
171171

172-
def test_it_fails_gracefully_if_the_task_does_not_queue(self, event, mailer):
173-
mailer.send.side_effect = OperationalError
172+
def test_it_fails_gracefully_if_the_task_does_not_queue(self, event, email):
173+
email.send.side_effect = OperationalError
174174

175175
# No explosions please
176176
subscribers.send_reply_notifications(event)
177177

178178
def test_it_does_nothing_if_the_reply_user_is_mentioned(
179-
self, event, reply, mailer, mention
179+
self, event, reply, email, mention
180180
):
181181
reply_notification = mock.MagicMock()
182182
reply.get_notification.return_value = reply_notification
@@ -187,16 +187,16 @@ def test_it_does_nothing_if_the_reply_user_is_mentioned(
187187

188188
subscribers.send_reply_notifications(event)
189189

190-
mailer.send.delay.assert_not_called()
190+
email.send.delay.assert_not_called()
191191

192192
def test_it_does_nothing_if_notifications_arent_allowed(
193-
self, event, mailer, notification_service
193+
self, event, email, notification_service
194194
):
195195
notification_service.allow_notifications.return_value = False
196196

197197
subscribers.send_reply_notifications(event)
198198

199-
mailer.send.delay.assert_not_called()
199+
email.send.delay.assert_not_called()
200200

201201
@pytest.fixture
202202
def event(self, pyramid_request):
@@ -218,7 +218,7 @@ def test_it_sends_emails(
218218
notification_service,
219219
mention,
220220
emails,
221-
mailer,
221+
email,
222222
asdict,
223223
):
224224
notifications = mention.get_notifications.return_value
@@ -244,9 +244,9 @@ def test_it_sends_emails(
244244
notification_service.allow_notifications.assert_called_once_with(
245245
annotation, notifications[0].mentioned_user
246246
)
247-
email = emails.mention_notification.generate.return_value
248-
asdict.assert_called_once_with(email)
249-
mailer.send.delay.assert_called_once_with(asdict.return_value)
247+
email_data = emails.mention_notification.generate.return_value
248+
asdict.assert_called_once_with(email_data)
249+
email.send.delay.assert_called_once_with(asdict.return_value)
250250

251251
notification_service.save_notification.assert_called_once_with(
252252
annotation=annotation,
@@ -255,28 +255,28 @@ def test_it_sends_emails(
255255
)
256256

257257
def test_it_does_nothing_if_no_notification_is_required(
258-
self, event, mention, mailer
258+
self, event, mention, email
259259
):
260260
mention.get_notifications.return_value = []
261261

262262
subscribers.send_mention_notifications(event)
263263

264-
mailer.send.delay.assert_not_called()
264+
email.send.delay.assert_not_called()
265265

266-
def test_it_fails_gracefully_if_the_task_does_not_queue(self, event, mailer):
267-
mailer.send.side_effect = OperationalError
266+
def test_it_fails_gracefully_if_the_task_does_not_queue(self, event, email):
267+
email.send.side_effect = OperationalError
268268

269269
# No explosions please
270270
subscribers.send_mention_notifications(event)
271271

272272
def test_it_does_nothing_if_notifications_arent_allowed(
273-
self, event, mailer, notification_service
273+
self, event, email, notification_service
274274
):
275275
notification_service.allow_notifications.return_value = False
276276

277277
subscribers.send_mention_notifications(event)
278278

279-
mailer.send.delay.assert_not_called()
279+
email.send.delay.assert_not_called()
280280

281281
@pytest.fixture
282282
def event(self, pyramid_request):
@@ -321,8 +321,8 @@ def mention(patch):
321321

322322

323323
@pytest.fixture(autouse=True)
324-
def mailer(patch):
325-
return patch("h.subscribers.mailer")
324+
def email(patch):
325+
return patch("h.subscribers.email")
326326

327327

328328
@pytest.fixture(autouse=True)

‎tests/unit/h/tasks/mailer_test.py ‎tests/unit/h/tasks/email_test.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,23 @@
33
import pytest
44

55
from h.services.email import EmailTag
6-
from h.tasks import mailer
6+
from h.tasks import email
77

88

99
def test_send_retries_if_mailing_fails(email_service):
1010
email_service.send.side_effect = Exception()
11-
mailer.send.retry = mock.Mock(wraps=mailer.send.retry)
11+
email.send.retry = mock.Mock(wraps=email.send.retry)
1212

13-
email_data = {
13+
data = {
1414
"recipients": ["foo@example.com"],
1515
"subject": "My email subject",
1616
"body": "Some text body",
1717
"tag": EmailTag.TEST,
1818
}
1919
with pytest.raises(Exception): # noqa: B017, PT011
20-
mailer.send(email_data)
20+
email.send(data)
2121

22-
assert mailer.send.retry.called
22+
assert email.send.retry.called
2323

2424

2525
@pytest.fixture
@@ -30,6 +30,6 @@ def pyramid_request(pyramid_request):
3030

3131
@pytest.fixture(autouse=True)
3232
def celery(patch, pyramid_request):
33-
celery = patch("h.tasks.mailer.celery")
33+
celery = patch("h.tasks.email.celery")
3434
celery.request = pyramid_request
3535
return celery

‎tests/unit/h/views/accounts_test.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ def routes(self, pyramid_config):
227227
pyramid_config.add_route("stream", "/stream")
228228

229229

230-
@pytest.mark.usefixtures("activation_model", "mailer", "reset_password_email", "routes")
230+
@pytest.mark.usefixtures("activation_model", "email", "reset_password_email", "routes")
231231
class TestForgotPasswordController:
232232
def test_post_returns_form_when_validation_fails(
233233
self, invalid_form, pyramid_request
@@ -269,7 +269,7 @@ def test_post_sends_mail(
269269
self,
270270
factories,
271271
form_validating_to,
272-
mailer,
272+
email,
273273
pyramid_request,
274274
):
275275
pyramid_request.registry.password_reset_serializer = FakeSerializer()
@@ -279,14 +279,14 @@ def test_post_sends_mail(
279279

280280
controller.post()
281281

282-
email = EmailData(
282+
email_data = EmailData(
283283
recipients=["giraffe@thezoo.org"],
284284
subject="Reset yer passwor!",
285285
body="Text output",
286286
tag=EmailTag.TEST,
287287
html="HTML output",
288288
)
289-
mailer.send.delay.assert_called_once_with(asdict(email))
289+
email.send.delay.assert_called_once_with(asdict(email_data))
290290

291291
def test_post_redirects_on_success(
292292
self, factories, form_validating_to, pyramid_request
@@ -1026,8 +1026,8 @@ def ActivationEvent(patch):
10261026

10271027

10281028
@pytest.fixture
1029-
def mailer(patch):
1030-
return patch("h.views.accounts.mailer")
1029+
def email(patch):
1030+
return patch("h.views.accounts.email")
10311031

10321032

10331033
@pytest.fixture(autouse=True)

‎tests/unit/h/views/admin/mailer_test.py ‎tests/unit/h/views/admin/email_test.py

+23-23
Original file line numberDiff line numberDiff line change
@@ -4,57 +4,57 @@
44
from pyramid.httpexceptions import HTTPSeeOther
55

66
from h.services.email import EmailData, EmailTag
7-
from h.views.admin.mailer import mailer_index, mailer_test, preview_mention_notification
7+
from h.views.admin.email import email_index, email_test, preview_mention_notification
88

99

10-
class TestMailerIndex:
10+
class TestEmailIndex:
1111
def test_when_no_taskid(self, pyramid_request):
12-
result = mailer_index(pyramid_request)
12+
result = email_index(pyramid_request)
1313

1414
assert result == {"taskid": None}
1515

1616
def test_with_taskid(self, pyramid_request):
1717
pyramid_request.params["taskid"] = "abcd1234"
1818

19-
result = mailer_index(pyramid_request)
19+
result = email_index(pyramid_request)
2020

2121
assert result == {"taskid": "abcd1234"}
2222

2323

24-
@pytest.mark.usefixtures("mailer", "testmail", "routes")
25-
class TestMailerTest:
26-
def test_doesnt_mail_when_no_recipient(self, mailer, pyramid_request):
27-
mailer_test(pyramid_request)
24+
@pytest.mark.usefixtures("email", "testmail", "routes")
25+
class TestEmailTest:
26+
def test_doesnt_mail_when_no_recipient(self, email, pyramid_request):
27+
email_test(pyramid_request)
2828

29-
assert not mailer.send.delay.called
29+
assert not email.send.delay.called
3030

3131
def test_redirects_when_no_recipient(self, pyramid_request):
32-
result = mailer_test(pyramid_request)
32+
result = email_test(pyramid_request)
3333

3434
assert isinstance(result, HTTPSeeOther)
35-
assert result.location == "/adm/mailer"
35+
assert result.location == "/adm/email"
3636

37-
def test_sends_mail(self, mailer, pyramid_request):
37+
def test_sends_mail(self, email, pyramid_request):
3838
pyramid_request.params["recipient"] = "meerkat@example.com"
3939

40-
mailer_test(pyramid_request)
40+
email_test(pyramid_request)
4141

42-
email = EmailData(
42+
email_data = EmailData(
4343
recipients=["meerkat@example.com"],
4444
subject="TEST",
4545
body="text",
4646
tag=EmailTag.TEST,
4747
html="html",
4848
)
49-
mailer.send.delay.assert_called_once_with(asdict(email))
49+
email.send.delay.assert_called_once_with(asdict(email_data))
5050

5151
def test_redirects(self, pyramid_request):
5252
pyramid_request.params["recipient"] = "meerkat@example.com"
5353

54-
result = mailer_test(pyramid_request)
54+
result = email_test(pyramid_request)
5555

5656
assert isinstance(result, HTTPSeeOther)
57-
assert result.location == "/adm/mailer?taskid=a1b2c3"
57+
assert result.location == "/adm/email?taskid=a1b2c3"
5858

5959

6060
class TestPreviewMentionNotification:
@@ -80,15 +80,15 @@ def __init__(self):
8080

8181

8282
@pytest.fixture
83-
def mailer(patch):
84-
mailer = patch("h.views.admin.mailer.mailer")
85-
mailer.send.delay.return_value = FakeResult()
86-
return mailer
83+
def email(patch):
84+
email = patch("h.views.admin.email.email")
85+
email.send.delay.return_value = FakeResult()
86+
return email
8787

8888

8989
@pytest.fixture
9090
def testmail(patch):
91-
test = patch("h.views.admin.mailer.test")
91+
test = patch("h.views.admin.email.test")
9292
test.generate.side_effect = lambda _, r: EmailData(
9393
recipients=[r], subject="TEST", body="text", tag=EmailTag.TEST, html="html"
9494
)
@@ -97,4 +97,4 @@ def testmail(patch):
9797

9898
@pytest.fixture
9999
def routes(pyramid_config):
100-
pyramid_config.add_route("admin.mailer", "/adm/mailer")
100+
pyramid_config.add_route("admin.email", "/adm/email")

‎tests/unit/h/views/api/flags_test.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def test_it(
1919
flag_service,
2020
links,
2121
group_members_service,
22-
mailer,
22+
email,
2323
flag_notification,
2424
moderators,
2525
):
@@ -39,7 +39,7 @@ def test_it(
3939
call(pyramid_request, user.email, links.incontext_link.return_value)
4040
for user in moderators
4141
]
42-
assert mailer.send.delay.call_args_list == [
42+
assert email.send.delay.call_args_list == [
4343
call(
4444
{
4545
"recipients": sentinel.email1,
@@ -82,14 +82,14 @@ def test_when_a_moderator_has_no_email(
8282
]
8383

8484
def test_when_there_are_no_moderators(
85-
self, context, pyramid_request, group_members_service, flag_notification, mailer
85+
self, context, pyramid_request, group_members_service, flag_notification, email
8686
):
8787
group_members_service.get_memberships.return_value = []
8888

8989
flags.create(context, pyramid_request)
9090

9191
flag_notification.generate.assert_not_called()
92-
mailer.send.delay.assert_not_called()
92+
email.send.delay.assert_not_called()
9393

9494
@pytest.fixture(autouse=True)
9595
def moderators(self, factories, group_members_service):
@@ -138,5 +138,5 @@ def flag_notification(mocker):
138138

139139

140140
@pytest.fixture(autouse=True)
141-
def mailer(mocker):
142-
return mocker.patch("h.views.api.flags.mailer", autospec=True)
141+
def email(mocker):
142+
return mocker.patch("h.views.api.flags.email", autospec=True)

0 commit comments

Comments
 (0)
Please sign in to comment.