duck-booking-tool/accounts/tests.py

118 lines
3.0 KiB
Python

# -*- coding: utf-8
"""
Account management module for the Duck Booking Tool backend
"""
from django.test import TestCase, Client
from django_webtest import WebTest
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class FrontTest(TestCase):
"""
Test front-end capabilities of the accounts module
"""
def setUp(self):
self.client = Client()
self.admin = User.objects.create_user(username='admin',
password='password')
def test_login_page(self):
"""
Test for the existence of the login page
"""
response = self.client.get('/accounts/login')
self.assertEqual(response.status_code, 200)
def test_login(self):
"""
Test login functionality
"""
response = self.client.post('/accounts/login', {
'next': '/',
'username': 'admin',
'password': 'password'})
self.assertRedirects(response, '/')
def test_logout(self):
"""
Test the logout page
"""
self.client.login(username='admin', password='aeou')
response = self.client.get('/accounts/logout')
self.assertRedirects(response, '/')
def test_registration_page(self):
"""
Test for existence of the registration page
"""
response = self.client.get('/accounts/register')
self.assertEqual(response.status_code, 200)
class RegFormTest(WebTest):
"""
Test case for the registration form
"""
def test_valid_data(self):
"""
Test valid registration without actual HTTP requests
"""
form_data = {
'username': 'test',
'password1': 'password',
'password2': 'password'
}
form = UserCreationForm(form_data)
self.assertTrue(form.is_valid())
user = form.save()
self.assertEqual(user.username, 'test')
# The password must be encrypted by now
self.assertNotEqual(user.password, 'password')
def test_empty(self):
"""
Test empty registration form
"""
form_data = {}
form = UserCreationForm(form_data)
self.assertFalse(form.is_valid())
self.assertEqual(form.errors, {
'username': ['This field is required.'],
'password1': ['This field is required.'],
'password2': ['This field is required.'],
})
def test_form_error(self):
"""
Test incomplete registration
"""
page = self.app.get('/accounts/register')
page = page.form.submit()
self.assertContains(page, "This field is required.")
def test_form_success(self):
"""
Test for successful registrations
"""
page = self.app.get('/accounts/register')
page.form['username'] = 'test'
page.form['password1'] = 'password'
page.form['password2'] = 'password'
page = page.form.submit()
self.assertRedirects(page, '/')