1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
|
"""
Tests for the built-in form classes.
"""
# SPDX-License-Identifier: BSD-3-Clause
from django.conf import settings
from django.core import mail
from django.test import RequestFactory, TestCase
from django_contact_form.forms import ContactForm
class ContactFormTests(TestCase):
"""
Tests for the base ContactForm.
"""
valid_data = {"name": "Test", "email": "test@example.com", "body": "Test message"}
def request(self):
"""
Construct and return an HttpRequest object for test use.
"""
return RequestFactory().request()
def test_request_required(self):
"""
Can't instantiate without an HttpRequest.
"""
self.assertRaises(TypeError, ContactForm)
def test_valid_data_required(self):
"""
Can't try to build the message dict unless data is valid.
"""
data = {"name": "Test", "body": "Test message"}
form = ContactForm(request=self.request(), data=data)
self.assertRaises(ValueError, form.get_message_dict)
self.assertRaises(ValueError, form.get_message_context)
def test_send(self):
"""
Valid form can and does in fact send email.
"""
form = ContactForm(request=self.request(), data=self.valid_data)
assert form.is_valid()
form.save()
assert 1 == len(mail.outbox)
message = mail.outbox[0]
assert self.valid_data["body"] in message.body
assert settings.DEFAULT_FROM_EMAIL == message.from_email
assert form.recipient_list == message.recipients()
def test_no_sites(self):
"""
Sites integration works with or without installed
contrib.sites.
"""
with self.modify_settings(INSTALLED_APPS={"remove": ["django.contrib.sites"]}):
form = ContactForm(request=self.request(), data=self.valid_data)
assert form.is_valid()
form.save()
assert 1 == len(mail.outbox)
def test_recipient_list(self):
"""
Passing recipient_list when instantiating ContactForm properly
overrides the list of recipients.
"""
recipient_list = ["recipient_list@example.com"]
form = ContactForm(
request=self.request(), data=self.valid_data, recipient_list=recipient_list
)
assert form.is_valid()
form.save()
assert 1 == len(mail.outbox)
message = mail.outbox[0]
assert recipient_list == message.recipients()
def test_callable_template_name(self):
"""
When a template_name() method is defined, it is used and
preferred over a 'template_name' attribute.
"""
class CallableTemplateName(ContactForm):
"""
Form with a template_name() method instead of a template_name attribute.
"""
# pylint: disable=invalid-overridden-method
def template_name(self):
"""
Return the template name as a method rather than an attribute.
"""
return "django_contact_form/test_callable_template_name.html"
form = CallableTemplateName(request=self.request(), data=self.valid_data)
assert form.is_valid()
form.save()
assert 1 == len(mail.outbox)
message = mail.outbox[0]
assert "Callable template_name used." in message.body
def test_callable_message_parts(self):
"""
Message parts implemented as methods are called and preferred
over attributes.
"""
overridden_data = {
"from_email": "override@example.com",
"message": "Overridden message.",
"recipient_list": ["override_recpt@example.com"],
"subject": "Overridden subject",
}
class CallableMessageParts(ContactForm):
"""
Form with the message parts as methods rather than attributes.
"""
def from_email(self):
"""
Method returning the from_email.
"""
return overridden_data["from_email"]
def message(self):
"""
Method returning the message.
"""
return overridden_data["message"]
def recipient_list(self): # pylint: disable=method-hidden
"""
Method returning the recipient_list.
"""
return overridden_data["recipient_list"]
def subject(self):
"""
Method returning the subject.
"""
return overridden_data["subject"]
form = CallableMessageParts(request=self.request(), data=self.valid_data)
assert form.is_valid()
assert overridden_data == form.get_message_dict()
|