view contact/tests/test_views.py @ 1179:55eb3620aa6c

Store page updates.
author Brian Neal <bgneal@gmail.com>
date Sat, 13 Apr 2019 15:01:42 -0500
parents b957e4829a03
children
line wrap: on
line source
"""
Unit tests for the contact application views.

"""
from mock import patch, Mock
from django.test import TestCase
from django.conf import settings
from django.core.urlresolvers import reverse
from django.core import mail


class BaseTestCase(TestCase):
    """Simple tests to ensure basic functionality."""

    def setUp(self):
        self.url = reverse('contact-form')

    @patch('contact.forms.requests.post')
    def test_usage(self, post_mock):
        post_response = Mock()
        post_response.json.return_value = {'success': True}
        post_mock.return_value = post_response

        response = self.client.get(self.url)
        self.assertEqual(response.status_code, 200)

        post_data = {
            'name': 'John Doe',
            'email': 'jdoe@example.com',
            'subject': 'Test message',
            'message': 'Testing contact form.',
            'g-recaptcha-response': 'crazy-google-string',
        }
        response = self.client.post(self.url, data=post_data, follow=True)
        self.assertRedirects(response, reverse('contact-thanks'))

        self.assertEqual(len(mail.outbox), 1)
        email = mail.outbox[0]
        self.assertEqual(len(email.recipients()), 1)
        self.assertEqual(email.extra_headers['Reply-To'], post_data['email'])
        self.assertEqual(email.from_email, 'no_reply@example.com')
        self.assertEqual(email.recipients()[0], 'admin@surfguitar101.com')
        self.assertTrue(post_data['subject'] in email.subject)
        msg = email.message().as_string()
        self.assertTrue(post_data['name'] in msg)
        self.assertTrue(post_data['email'] in msg)
        self.assertTrue(post_data['message'] in msg)

        post_mock.assert_called_once_with(settings.RECAPTCHA_URL, data={
            'secret': settings.RECAPTCHA_SECRET_KEY,
            'response': 'crazy-google-string',
            'remoteip': '127.0.0.1',
        })

    def test_honeypot(self):
        post_data = {
            'name': 'John Doe',
            'email': 'jdoe@example.com',
            'subject': 'Test message',
            'message': 'Testing contact form.',
            'honeypot': 'some spam',
        }
        response = self.client.post(self.url, data=post_data)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(mail.outbox), 0)

    def test_no_captcha_response(self):
        post_data = {
            'name': 'John Doe',
            'email': 'jdoe@example.com',
            'subject': 'Test message',
            'message': 'Testing contact form.',
        }
        response = self.client.post(self.url, data=post_data, follow=True)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(mail.outbox), 0)

    @patch('contact.forms.requests.post')
    def test_captcha_failure(self, post_mock):
        post_response = Mock()
        post_response.json.return_value = {'success': False}
        post_mock.return_value = post_response

        post_data = {
            'name': 'John Doe',
            'email': 'jdoe@example.com',
            'subject': 'Test message',
            'message': 'Testing contact form.',
            'g-recaptcha-response': 'crazy-google-string',
        }
        response = self.client.post(self.url, data=post_data, follow=True)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(len(mail.outbox), 0)