From be6c040569d340c45b9fab47933e6e1a2e7e52cc Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Fri, 27 Jun 2014 16:31:47 +0100 Subject: [PATCH] Use custom user model in tests --- runtests.py | 1 + wagtail/tests/fixtures/test.json | 12 ++--- wagtail/tests/models.py | 47 +++++++++++++++++++ wagtail/tests/utils.py | 4 +- .../tests/test_account_management.py | 23 ++++----- .../wagtailadmin/tests/test_pages_views.py | 10 ++-- wagtail/wagtailadmin/tests/test_userbar.py | 5 +- .../tests/test_page_permissions.py | 20 ++++---- wagtail/wagtaildocs/tests.py | 10 ++-- wagtail/wagtailimages/tests.py | 5 +- wagtail/wagtailusers/tests.py | 10 ++-- 11 files changed, 103 insertions(+), 44 deletions(-) diff --git a/runtests.py b/runtests.py index efa66910f..6902f7475 100755 --- a/runtests.py +++ b/runtests.py @@ -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', diff --git a/wagtail/tests/fixtures/test.json b/wagtail/tests/fixtures/test.json index 452f45d88..48b9be380 100644 --- a/wagtail/tests/fixtures/test.json +++ b/wagtail/tests/fixtures/test.json @@ -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": "", diff --git a/wagtail/tests/models.py b/wagtail/tests/models.py index ca6d411da..9c1d60c73 100644 --- a/wagtail/tests/models.py +++ b/wagtail/tests/models.py @@ -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): diff --git a/wagtail/tests/utils.py b/wagtail/tests/utils.py index 02327799b..9a7e70f80 100644 --- a/wagtail/tests/utils.py +++ b/wagtail/tests/utils.py @@ -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') diff --git a/wagtail/wagtailadmin/tests/test_account_management.py b/wagtail/wagtailadmin/tests/test_account_management.py index 7128f8885..e347b240b 100644 --- a/wagtail/wagtailadmin/tests/test_account_management.py +++ b/wagtail/wagtailadmin/tests/test_account_management.py @@ -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): """ diff --git a/wagtail/wagtailadmin/tests/test_pages_views.py b/wagtail/wagtailadmin/tests/test_pages_views.py index 65a614538..1c75da3a8 100644 --- a/wagtail/wagtailadmin/tests/test_pages_views.py +++ b/wagtail/wagtailadmin/tests/test_pages_views.py @@ -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') diff --git a/wagtail/wagtailadmin/tests/test_userbar.py b/wagtail/wagtailadmin/tests/test_userbar.py index acdb81690..c43a1bbc0 100644 --- a/wagtail/wagtailadmin/tests/test_userbar.py +++ b/wagtail/wagtailadmin/tests/test_userbar.py @@ -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): diff --git a/wagtail/wagtailcore/tests/test_page_permissions.py b/wagtail/wagtailcore/tests/test_page_permissions.py index 111b059e6..05421c862 100644 --- a/wagtail/wagtailcore/tests/test_page_permissions.py +++ b/wagtail/wagtailcore/tests/test_page_permissions.py @@ -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/') diff --git a/wagtail/wagtaildocs/tests.py b/wagtail/wagtaildocs/tests.py index a8420406b..d095d9c55 100644 --- a/wagtail/wagtaildocs/tests.py +++ b/wagtail/wagtaildocs/tests.py @@ -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') diff --git a/wagtail/wagtailimages/tests.py b/wagtail/wagtailimages/tests.py index 91ed2df6a..ab2780fc0 100644 --- a/wagtail/wagtailimages/tests.py +++ b/wagtail/wagtailimages/tests.py @@ -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') diff --git a/wagtail/wagtailusers/tests.py b/wagtail/wagtailusers/tests.py index d59b2e822..09f7d1383 100644 --- a/wagtail/wagtailusers/tests.py +++ b/wagtail/wagtailusers/tests.py @@ -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)