Use custom user model in tests

This commit is contained in:
Karl Hobley 2014-06-27 16:31:47 +01:00
parent f9469b39a0
commit be6c040569
11 changed files with 103 additions and 44 deletions

View file

@ -102,6 +102,7 @@ if not settings.configured:
),
COMPRESS_ENABLED=False, # disable compression so that we can run tests on the content of the compress tag
WAGTAILSEARCH_BACKENDS=WAGTAILSEARCH_BACKENDS,
AUTH_USER_MODEL='tests.CustomUser',
WAGTAIL_SITE_NAME='Test Site',
LOGIN_REDIRECT_URL='wagtailadmin_home',
LOGIN_URL='wagtailadmin_login',

View file

@ -354,7 +354,7 @@
{
"pk": 1,
"model": "auth.user",
"model": "tests.customuser",
"fields": {
"username": "superuser",
"first_name": "",
@ -371,7 +371,7 @@
},
{
"pk": 2,
"model": "auth.user",
"model": "tests.customuser",
"fields": {
"username": "eventeditor",
"first_name": "",
@ -389,7 +389,7 @@
},
{
"pk": 3,
"model": "auth.user",
"model": "tests.customuser",
"fields": {
"username": "eventmoderator",
"first_name": "",
@ -407,7 +407,7 @@
},
{
"pk": 4,
"model": "auth.user",
"model": "tests.customuser",
"fields": {
"username": "inactiveuser",
"first_name": "",
@ -425,7 +425,7 @@
},
{
"pk": 5,
"model": "auth.user",
"model": "tests.customuser",
"fields": {
"username": "siteeditor",
"first_name": "",
@ -443,7 +443,7 @@
},
{
"pk": 6,
"model": "auth.user",
"model": "tests.customuser",
"fields": {
"username": "admin_only_user",
"first_name": "",

View file

@ -1,6 +1,9 @@
from django.db import models
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
from modelcluster.fields import ParentalKey
from wagtail.wagtailcore.models import Page, Orderable
from wagtail.wagtailcore.fields import RichTextField
from wagtail.wagtailadmin.edit_handlers import FieldPanel, MultiFieldPanel, InlinePanel, PageChooserPanel
@ -24,6 +27,50 @@ COMMON_PANELS = (
)
class CustomUserManager(BaseUserManager):
def _create_user(self, username, email, password,
is_staff, is_superuser, **extra_fields):
"""
Creates and saves a User with the given username, email and password.
"""
if not username:
raise ValueError('The given username must be set')
email = self.normalize_email(email)
user = self.model(username=username, email=email,
is_staff=is_staff, is_active=True,
is_superuser=is_superuser, **extra_fields)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, username, email=None, password=None, **extra_fields):
return self._create_user(username, email, password, False, False,
**extra_fields)
def create_superuser(self, username, email, password, **extra_fields):
return self._create_user(username, email, password, True, True,
**extra_fields)
class CustomUser(AbstractBaseUser, PermissionsMixin):
username = models.CharField(max_length=100, unique=True)
email = models.EmailField(max_length=255, blank=True)
is_staff = models.BooleanField(default=True)
is_active = models.BooleanField(default=True)
first_name = models.CharField(max_length=50, blank=True)
last_name = models.CharField(max_length=50, blank=True)
USERNAME_FIELD = 'username'
objects = CustomUserManager()
def get_full_name(self):
return self.first_name + ' ' + self.last_name
def get_short_name(self):
return self.first_name
# Link fields
class LinkFields(models.Model):

View file

@ -1,5 +1,5 @@
from django.test import TestCase
from django.contrib.auth.models import User
from django.contrib.auth import get_user_model
from django.utils.six.moves.urllib.parse import urlparse, ParseResult
from django.http import QueryDict
@ -18,7 +18,7 @@ except ImportError:
class WagtailTestUtils(object):
def login(self):
# Create a user
user = User.objects.create_superuser(username='test', email='test@email.com', password='password')
user = get_user_model().objects.create_superuser(username='test', email='test@email.com', password='password')
# Login
self.client.login(username='test', password='password')

View file

@ -1,6 +1,7 @@
from django.test import TestCase
from django.core.urlresolvers import reverse
from django.contrib.auth.models import User, Group, Permission
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group, Permission
from django.contrib.auth.tokens import PasswordResetTokenGenerator
from django.core import mail
@ -49,7 +50,7 @@ class TestAuthentication(TestCase, WagtailTestUtils):
# Check that the user was logged in
self.assertTrue('_auth_user_id' in self.client.session)
self.assertEqual(self.client.session['_auth_user_id'], User.objects.get(username='test').id)
self.assertEqual(self.client.session['_auth_user_id'], get_user_model().objects.get(username='test').id)
def test_already_logged_in_redirect(self):
"""
@ -155,7 +156,7 @@ class TestAccountSection(TestCase, WagtailTestUtils):
self.assertRedirects(response, reverse('wagtailadmin_account'))
# Check that the password was changed
self.assertTrue(User.objects.get(username='test').check_password('newpassword'))
self.assertTrue(get_user_model().objects.get(username='test').check_password('newpassword'))
def test_change_password_view_post_password_mismatch(self):
"""
@ -177,7 +178,7 @@ class TestAccountSection(TestCase, WagtailTestUtils):
self.assertTrue("The two password fields didn't match." in response.context['form'].errors['new_password2'])
# Check that the password was not changed
self.assertTrue(User.objects.get(username='test').check_password('password'))
self.assertTrue(get_user_model().objects.get(username='test').check_password('password'))
def test_notification_preferences_view(self):
"""
@ -207,7 +208,7 @@ class TestAccountSection(TestCase, WagtailTestUtils):
# Check that the user was redirected to the account page
self.assertRedirects(response, reverse('wagtailadmin_account'))
profile = UserProfile.get_for_user(User.objects.get(username='test'))
profile = UserProfile.get_for_user(get_user_model().objects.get(username='test'))
# Check that the notification preferences are as submitted
self.assertFalse(profile.submitted_notifications)
@ -221,7 +222,7 @@ class TestAccountManagementForNonModerator(TestCase, WagtailTestUtils):
"""
def setUp(self):
# Create a non-moderator user
self.submitter = User.objects.create_user('submitter', 'submitter@example.com', 'password')
self.submitter = get_user_model().objects.create_user('submitter', 'submitter@example.com', 'password')
self.submitter.groups.add(Group.objects.get(name='Editors'))
self.client.login(username=self.submitter.username, password='password')
@ -246,7 +247,7 @@ class TestAccountManagementForAdminOnlyUser(TestCase, WagtailTestUtils):
admin_only_group = Group.objects.create(name='Admin Only')
admin_only_group.permissions.add(Permission.objects.get(codename='access_admin'))
self.admin_only_user = User.objects.create_user('admin_only_user', 'admin_only_user@example.com', 'password')
self.admin_only_user = get_user_model().objects.create_user('admin_only_user', 'admin_only_user@example.com', 'password')
self.admin_only_user.groups.add(admin_only_group)
self.client.login(username=self.admin_only_user.username, password='password')
@ -277,7 +278,7 @@ class TestPasswordReset(TestCase, WagtailTestUtils):
"""
def setUp(self):
# Create a user
User.objects.create_superuser(username='test', email='test@email.com', password='password')
get_user_model().objects.create_superuser(username='test', email='test@email.com', password='password')
def test_password_reset_view(self):
"""
@ -354,7 +355,7 @@ class TestPasswordReset(TestCase, WagtailTestUtils):
from django.utils.http import urlsafe_base64_encode
# Get user
self.user = User.objects.get(username='test')
self.user = get_user_model().objects.get(username='test')
# Generate a password reset token
self.password_reset_token = PasswordResetTokenGenerator().make_token(self.user)
@ -396,7 +397,7 @@ class TestPasswordReset(TestCase, WagtailTestUtils):
self.assertRedirects(response, reverse('password_reset_complete'))
# Check that the password was changed
self.assertTrue(User.objects.get(username='test').check_password('newpassword'))
self.assertTrue(get_user_model().objects.get(username='test').check_password('newpassword'))
def test_password_reset_confirm_view_post_password_mismatch(self):
"""
@ -420,7 +421,7 @@ class TestPasswordReset(TestCase, WagtailTestUtils):
self.assertTrue("The two password fields didn't match." in response.context['form'].errors['new_password2'])
# Check that the password was not changed
self.assertTrue(User.objects.get(username='test').check_password('password'))
self.assertTrue(get_user_model().objects.get(username='test').check_password('password'))
def test_password_reset_done_view(self):
"""

View file

@ -1,6 +1,7 @@
from django.test import TestCase
from django.core.urlresolvers import reverse
from django.contrib.auth.models import User, Permission
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Permission
from django.core import mail
from django.core.paginator import Paginator
@ -189,7 +190,7 @@ class TestPageCreation(TestCase, WagtailTestUtils):
def test_create_simplepage_post_submit(self):
# Create a moderator user for testing email
moderator = User.objects.create_superuser('moderator', 'moderator@email.com', 'password')
moderator = get_user_model().objects.create_superuser('moderator', 'moderator@email.com', 'password')
# Submit
post_data = {
@ -349,7 +350,7 @@ class TestPageEdit(TestCase, WagtailTestUtils):
def test_page_edit_post_submit(self):
# Create a moderator user for testing email
moderator = User.objects.create_superuser('moderator', 'moderator@email.com', 'password')
moderator = get_user_model().objects.create_superuser('moderator', 'moderator@email.com', 'password')
# Tests submitting from edit page
post_data = {
@ -618,7 +619,7 @@ class TestPageUnpublish(TestCase, WagtailTestUtils):
class TestApproveRejectModeration(TestCase, WagtailTestUtils):
def setUp(self):
self.submitter = User.objects.create_superuser(
self.submitter = get_user_model().objects.create_superuser(
username='submitter',
email='submitter@email.com',
password='password',
@ -858,6 +859,7 @@ class TestNotificationPreferences(TestCase, WagtailTestUtils):
self.user = self.login()
# Create two moderator users for testing 'submitted' email
User = get_user_model()
self.moderator = User.objects.create_superuser('moderator', 'moderator@email.com', 'password')
self.moderator2 = User.objects.create_superuser('moderator2', 'moderator2@email.com', 'password')

View file

@ -2,7 +2,8 @@ from django.test import TestCase
from django.test.client import RequestFactory
from django.core.urlresolvers import reverse
from django.template import Template, Context
from django.contrib.auth.models import User, AnonymousUser
from django.contrib.auth import get_user_model
from django.contrib.auth.models import AnonymousUser
from wagtail.tests.utils import WagtailTestUtils
from wagtail.wagtailcore.models import Page
@ -10,7 +11,7 @@ from wagtail.wagtailcore.models import Page
class TestUserbarTag(TestCase):
def setUp(self):
self.user = User.objects.create_superuser(username='test', email='test@email.com', password='password')
self.user = get_user_model().objects.create_superuser(username='test', email='test@email.com', password='password')
self.homepage = Page.objects.get(id=2)
def dummy_request(self, user=None):

View file

@ -3,7 +3,7 @@ from StringIO import StringIO
from django.test import TestCase, Client
from django.http import HttpRequest, Http404
from django.core import management
from django.contrib.auth.models import User
from django.contrib.auth import get_user_model
from wagtail.wagtailcore.models import Page, Site, UserPagePermissionsProxy
from wagtail.tests.models import EventPage, EventIndex, SimplePage
@ -13,7 +13,7 @@ class TestPagePermission(TestCase):
fixtures = ['test.json']
def test_nonpublisher_page_permissions(self):
event_editor = User.objects.get(username='eventeditor')
event_editor = get_user_model().objects.get(username='eventeditor')
homepage = Page.objects.get(url_path='/home/')
christmas_page = EventPage.objects.get(url_path='/home/events/christmas/')
unpublished_event_page = EventPage.objects.get(url_path='/home/events/tentative-unpublished-event/')
@ -67,7 +67,7 @@ class TestPagePermission(TestCase):
def test_publisher_page_permissions(self):
event_moderator = User.objects.get(username='eventmoderator')
event_moderator = get_user_model().objects.get(username='eventmoderator')
homepage = Page.objects.get(url_path='/home/')
christmas_page = EventPage.objects.get(url_path='/home/events/christmas/')
unpublished_event_page = EventPage.objects.get(url_path='/home/events/tentative-unpublished-event/')
@ -114,7 +114,7 @@ class TestPagePermission(TestCase):
self.assertFalse(unpub_perms.can_move_to(unpublished_event_page)) # cannot make page a child of itself
def test_inactive_user_has_no_permissions(self):
user = User.objects.get(username='inactiveuser')
user = get_user_model().objects.get(username='inactiveuser')
christmas_page = EventPage.objects.get(url_path='/home/events/christmas/')
unpublished_event_page = EventPage.objects.get(url_path='/home/events/tentative-unpublished-event/')
@ -132,7 +132,7 @@ class TestPagePermission(TestCase):
self.assertFalse(unpub_perms.can_move_to(christmas_page))
def test_superuser_has_full_permissions(self):
user = User.objects.get(username='superuser')
user = get_user_model().objects.get(username='superuser')
homepage = Page.objects.get(url_path='/home/')
root = Page.objects.get(url_path='/')
unpublished_event_page = EventPage.objects.get(url_path='/home/events/tentative-unpublished-event/')
@ -170,7 +170,7 @@ class TestPagePermission(TestCase):
self.assertFalse(homepage_perms.can_move_to(unpublished_event_page))
def test_editable_pages_for_user_with_add_permission(self):
event_editor = User.objects.get(username='eventeditor')
event_editor = get_user_model().objects.get(username='eventeditor')
homepage = Page.objects.get(url_path='/home/')
christmas_page = EventPage.objects.get(url_path='/home/events/christmas/')
unpublished_event_page = EventPage.objects.get(url_path='/home/events/tentative-unpublished-event/')
@ -197,7 +197,7 @@ class TestPagePermission(TestCase):
self.assertFalse(can_publish_pages)
def test_editable_pages_for_user_with_edit_permission(self):
event_moderator = User.objects.get(username='eventmoderator')
event_moderator = get_user_model().objects.get(username='eventmoderator')
homepage = Page.objects.get(url_path='/home/')
christmas_page = EventPage.objects.get(url_path='/home/events/christmas/')
unpublished_event_page = EventPage.objects.get(url_path='/home/events/tentative-unpublished-event/')
@ -224,7 +224,7 @@ class TestPagePermission(TestCase):
self.assertTrue(can_publish_pages)
def test_editable_pages_for_inactive_user(self):
user = User.objects.get(username='inactiveuser')
user = get_user_model().objects.get(username='inactiveuser')
homepage = Page.objects.get(url_path='/home/')
christmas_page = EventPage.objects.get(url_path='/home/events/christmas/')
unpublished_event_page = EventPage.objects.get(url_path='/home/events/tentative-unpublished-event/')
@ -251,7 +251,7 @@ class TestPagePermission(TestCase):
self.assertFalse(can_publish_pages)
def test_editable_pages_for_superuser(self):
user = User.objects.get(username='superuser')
user = get_user_model().objects.get(username='superuser')
homepage = Page.objects.get(url_path='/home/')
christmas_page = EventPage.objects.get(url_path='/home/events/christmas/')
unpublished_event_page = EventPage.objects.get(url_path='/home/events/tentative-unpublished-event/')
@ -278,7 +278,7 @@ class TestPagePermission(TestCase):
self.assertTrue(can_publish_pages)
def test_editable_pages_for_non_editing_user(self):
user = User.objects.get(username='admin_only_user')
user = get_user_model().objects.get(username='admin_only_user')
homepage = Page.objects.get(url_path='/home/')
christmas_page = EventPage.objects.get(url_path='/home/events/christmas/')
unpublished_event_page = EventPage.objects.get(url_path='/home/events/tentative-unpublished-event/')

View file

@ -1,16 +1,20 @@
from django.test import TestCase
from wagtail.wagtaildocs import models
from wagtail.tests.utils import WagtailTestUtils
from django.contrib.auth.models import User, Group, Permission
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group, Permission
from django.core.urlresolvers import reverse
from django.core.files.base import ContentFile
from wagtail.tests.utils import WagtailTestUtils
from wagtail.wagtaildocs import models
# TODO: Test serve view
class TestDocumentPermissions(TestCase):
def setUp(self):
# Create some user accounts for testing permissions
User = get_user_model()
self.user = User.objects.create_user(username='user', email='user@email.com', password='password')
self.owner = User.objects.create_user(username='owner', email='owner@email.com', password='password')
self.editor = User.objects.create_user(username='editor', email='editor@email.com', password='password')

View file

@ -2,7 +2,8 @@ from mock import MagicMock
from django.test import TestCase
from django import template
from django.contrib.auth.models import User, Group, Permission
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group, Permission
from django.core.urlresolvers import reverse
from django.core.files.uploadedfile import SimpleUploadedFile
@ -17,6 +18,7 @@ from wagtail.wagtailimages.formats import (
from wagtail.wagtailimages.backends import get_image_backend
from wagtail.wagtailimages.backends.pillow import PillowBackend
def get_test_image_file():
from StringIO import StringIO
from PIL import Image
@ -49,6 +51,7 @@ class TestImage(TestCase):
class TestImagePermissions(TestCase):
def setUp(self):
# Create some user accounts for testing permissions
User = get_user_model()
self.user = User.objects.create_user(username='user', email='user@email.com', password='password')
self.owner = User.objects.create_user(username='owner', email='owner@email.com', password='password')
self.editor = User.objects.create_user(username='editor', email='editor@email.com', password='password')

View file

@ -1,6 +1,6 @@
from django.test import TestCase
from django.core.urlresolvers import reverse
from django.contrib.auth.models import User
from django.contrib.auth import get_user_model
from wagtail.tests.utils import WagtailTestUtils
from wagtail.wagtailusers.models import UserProfile
@ -59,7 +59,7 @@ class TestUserCreateView(TestCase, WagtailTestUtils):
self.assertRedirects(response, reverse('wagtailusers_index'))
# Check that the user was created
users = User.objects.filter(username='testuser')
users = get_user_model().objects.filter(username='testuser')
self.assertEqual(users.count(), 1)
self.assertEqual(users.first().email, 'test@user.com')
@ -67,7 +67,7 @@ class TestUserCreateView(TestCase, WagtailTestUtils):
class TestUserEditView(TestCase, WagtailTestUtils):
def setUp(self):
# Create a user to edit
self.test_user = User.objects.create_user(username='testuser', email='testuser@email.com', password='password')
self.test_user = get_user_model().objects.create_user(username='testuser', email='testuser@email.com', password='password')
# Login
self.login()
@ -100,7 +100,7 @@ class TestUserEditView(TestCase, WagtailTestUtils):
self.assertRedirects(response, reverse('wagtailusers_index'))
# Check that the user was edited
user = User.objects.get(id=self.test_user.id)
user = get_user_model().objects.get(id=self.test_user.id)
self.assertEqual(user.first_name, 'Edited')
def test_edit_validation_error(self):
@ -121,7 +121,7 @@ class TestUserEditView(TestCase, WagtailTestUtils):
class TestUserProfileCreation(TestCase, WagtailTestUtils):
def setUp(self):
# Create a user
self.test_user = User.objects.create_user(username='testuser', email='testuser@email.com', password='password')
self.test_user = get_user_model().objects.create_user(username='testuser', email='testuser@email.com', password='password')
def test_user_created_without_profile(self):
self.assertEqual(UserProfile.objects.filter(user=self.test_user).count(), 0)