|
| 1 | +from django.urls import reverse |
| 2 | +from django.core.signing import Signer |
| 3 | + |
| 4 | +from unittest.mock import patch |
1 | 5 | from uuid import uuid4 |
2 | 6 | import requests |
| 7 | +from notifications.models import EmailTemplateIdentifier |
3 | 8 | from grants.tests.factories import GrantFactory |
4 | 9 | from grants.models import Grant |
5 | 10 | from visa.models import ( |
|
12 | 17 | notify_new_invitation_letter_request_on_slack, |
13 | 18 | process_invitation_letter_request, |
14 | 19 | process_invitation_letter_request_failed, |
| 20 | + send_invitation_letter_via_email, |
15 | 21 | ) |
16 | 22 | from visa.tests.factories import ( |
17 | 23 | InvitationLetterAssetFactory, |
@@ -375,3 +381,37 @@ def test_notify_new_invitation_letter_request_on_slack(mocker): |
375 | 381 | kwargs = mock_slack.mock_calls[0][2] |
376 | 382 | assert kwargs["oauth_token"] == "token123" |
377 | 383 | assert kwargs["channel_id"] == "S123" |
| 384 | + |
| 385 | + |
| 386 | +def test_send_invitation_letter_via_email(): |
| 387 | + invitation_letter_request = InvitationLetterRequestFactory() |
| 388 | + |
| 389 | + with patch("visa.tasks.EmailTemplate") as mock_email_template: |
| 390 | + send_invitation_letter_via_email( |
| 391 | + invitation_letter_request_id=invitation_letter_request.id |
| 392 | + ) |
| 393 | + |
| 394 | + mock_email_template.objects.for_conference.assert_called_once_with( |
| 395 | + invitation_letter_request.conference |
| 396 | + ) |
| 397 | + mock_email_template.objects.for_conference().get_by_identifier.assert_called_once_with( |
| 398 | + EmailTemplateIdentifier.visa_invitation_letter_download |
| 399 | + ) |
| 400 | + |
| 401 | + signer = Signer() |
| 402 | + url_path = reverse( |
| 403 | + "download-invitation-letter", args=[invitation_letter_request.id] |
| 404 | + ) |
| 405 | + signed_url = signer.sign(url_path) |
| 406 | + signature = signed_url.split(signer.sep)[-1] |
| 407 | + |
| 408 | + mock_email_template.objects.for_conference().get_by_identifier().send_email.assert_called_once_with( |
| 409 | + recipient_email=invitation_letter_request.email, |
| 410 | + placeholders={ |
| 411 | + "invitation_letter_download_url": f"https://admin.pycon.it{url_path}?sig={signature}", |
| 412 | + }, |
| 413 | + ) |
| 414 | + |
| 415 | + invitation_letter_request.refresh_from_db() |
| 416 | + |
| 417 | + assert invitation_letter_request.status == InvitationLetterRequestStatus.SENT |
0 commit comments