view contact/tests/test_views.py @ 1178:a584caef1576

Remove Catch a Wave Radio link. Google gives a big scary warning if you try to follow this link.
author Brian Neal <bgneal@gmail.com>
date Sat, 13 Apr 2019 14:38:40 -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)