-
Notifications
You must be signed in to change notification settings - Fork 133
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
91 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
import os | ||
import unittest | ||
from email.utils import formataddr | ||
|
||
from django.test import SimpleTestCase, override_settings, tag | ||
|
||
from anymail.exceptions import AnymailAPIError | ||
from anymail.message import AnymailMessage | ||
|
||
from .utils import AnymailTestMixin | ||
|
||
ANYMAIL_TEST_RESEND_API_KEY = os.getenv("ANYMAIL_TEST_RESEND_API_KEY") | ||
ANYMAIL_TEST_RESEND_DOMAIN = os.getenv("ANYMAIL_TEST_RESEND_DOMAIN") | ||
|
||
|
||
@tag("resend", "live") | ||
@unittest.skipUnless( | ||
ANYMAIL_TEST_RESEND_API_KEY and ANYMAIL_TEST_RESEND_DOMAIN, | ||
"Set ANYMAIL_TEST_RESEND_API_KEY and ANYMAIL_TEST_RESEND_DOMAIN " | ||
"environment variables to run Resend integration tests", | ||
) | ||
@override_settings( | ||
ANYMAIL_RESEND_API_KEY=ANYMAIL_TEST_RESEND_API_KEY, | ||
EMAIL_BACKEND="anymail.backends.resend.EmailBackend", | ||
) | ||
class ResendBackendIntegrationTests(AnymailTestMixin, SimpleTestCase): | ||
"""Resend.com API integration tests | ||
Resend doesn't have sandbox so these tests run | ||
against the **live** Resend API, using the | ||
environment variable `ANYMAIL_TEST_RESEND_API_KEY` as the API key, | ||
and `ANYMAIL_TEST_RESEND_DOMAIN` to construct sender addresses. | ||
If those variables are not set, these tests won't run. | ||
""" | ||
|
||
def setUp(self): | ||
super().setUp() | ||
self.from_email = "from@%s" % ANYMAIL_TEST_RESEND_DOMAIN | ||
self.message = AnymailMessage( | ||
"Anymail Resend integration test", | ||
"Text content", | ||
self.from_email, | ||
["[email protected]"], | ||
) | ||
self.message.attach_alternative("<p>HTML content</p>", "text/html") | ||
|
||
def test_simple_send(self): | ||
# Example of getting the Resend message id from the message | ||
sent_count = self.message.send() | ||
self.assertEqual(sent_count, 1) | ||
|
||
anymail_status = self.message.anymail_status | ||
sent_status = anymail_status.recipients["[email protected]"].status | ||
message_id = anymail_status.recipients["[email protected]"].message_id | ||
|
||
self.assertEqual(sent_status, "queued") # Resend always queues | ||
self.assertGreater(len(message_id), 0) # non-empty string | ||
# set of all recipient statuses: | ||
self.assertEqual(anymail_status.status, {sent_status}) | ||
self.assertEqual(anymail_status.message_id, message_id) | ||
|
||
def test_all_options(self): | ||
message = AnymailMessage( | ||
subject="Anymail Resend all-options integration test", | ||
body="This is the text body", | ||
from_email=formataddr(("Test From, with comma", self.from_email)), | ||
to=["[email protected]", '"Recipient 2, OK?" <[email protected]>'], | ||
cc=["[email protected]", "Copy 2 <[email protected]>"], | ||
bcc=["[email protected]", "Blind Copy 2 <[email protected]>"], | ||
reply_to=['"Reply, with comma" <[email protected]>', "[email protected]"], | ||
headers={"X-Anymail-Test": "value", "X-Anymail-Count": 3}, | ||
metadata={"meta1": "simple string", "meta2": 2}, | ||
tags=["tag 1", "tag 2"], | ||
) | ||
message.attach_alternative("<p>HTML content</p>", "text/html") | ||
|
||
message.attach("attachment1.txt", "Here is some\ntext for you", "text/plain") | ||
message.attach("attachment2.csv", "ID,Name\n1,Amy Lina", "text/csv") | ||
|
||
message.send() | ||
# Resend always queues: | ||
self.assertEqual(message.anymail_status.status, {"queued"}) | ||
self.assertGreater( | ||
len(message.anymail_status.message_id), 0 | ||
) # non-empty string | ||
|
||
@override_settings(ANYMAIL_RESEND_API_KEY="Hey, that's not an API key!") | ||
def test_invalid_api_key(self): | ||
with self.assertRaisesMessage(AnymailAPIError, "API key is invalid"): | ||
self.message.send() |