118 lines
3.0 KiB
Python
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, '/')
|