initial
This commit is contained in:
153
tests/core/test_accounts.py
Normal file
153
tests/core/test_accounts.py
Normal file
@@ -0,0 +1,153 @@
|
||||
from django.conf import settings as django_settings
|
||||
from django.contrib import auth
|
||||
from django.contrib.auth import authenticate
|
||||
from django.contrib.auth.models import AnonymousUser
|
||||
from django.shortcuts import resolve_url
|
||||
from wiki.conf import settings as wiki_settings
|
||||
from wiki.models import reverse
|
||||
|
||||
from ..base import ArticleWebTestUtils
|
||||
from ..base import DjangoClientTestBase
|
||||
from ..base import RequireRootArticleMixin
|
||||
from ..base import SUPERUSER1_PASSWORD
|
||||
from ..base import SUPERUSER1_USERNAME
|
||||
from ..base import TestBase
|
||||
from ..base import wiki_override_settings
|
||||
from ..testdata.models import CustomUser
|
||||
|
||||
|
||||
SIGNUP_TEST_USERNAME = "wiki"
|
||||
SIGNUP_TEST_PASSWORD = "wiki1234567"
|
||||
|
||||
|
||||
class AccountUpdateTest(
|
||||
RequireRootArticleMixin, ArticleWebTestUtils, DjangoClientTestBase
|
||||
):
|
||||
def test_password_change(self):
|
||||
"""
|
||||
Test that we can make a successful password change via the update form
|
||||
"""
|
||||
# Check out that it works as expected, notice that there is no referrer
|
||||
# on this GET request.
|
||||
self.client.get(
|
||||
resolve_url(
|
||||
"wiki:profile_update",
|
||||
)
|
||||
)
|
||||
|
||||
# Now check that we don't succeed with unmatching passwords
|
||||
example_data = {
|
||||
"password1": "abcdef",
|
||||
"password2": "abcdef123",
|
||||
"email": self.superuser1.email,
|
||||
}
|
||||
|
||||
# save a new revision
|
||||
response = self.client.post(
|
||||
resolve_url("wiki:profile_update"), example_data
|
||||
)
|
||||
self.assertContains(
|
||||
response, "Passwords don", status_code=200
|
||||
) # Django 2/3 output different escaped versions of single quote in don't
|
||||
|
||||
# Now check that we don't succeed with unmatching passwords
|
||||
example_data = {
|
||||
"password1": "abcdef",
|
||||
"password2": "abcdef",
|
||||
"email": self.superuser1.email,
|
||||
}
|
||||
|
||||
# save a new revision
|
||||
response = self.client.post(
|
||||
resolve_url("wiki:profile_update"), example_data
|
||||
)
|
||||
|
||||
# Need to force str() because of:
|
||||
# TypeError: coercing to Unicode: need string or buffer, __proxy__
|
||||
# found
|
||||
self.assertRedirects(response, str(django_settings.LOGIN_REDIRECT_URL))
|
||||
|
||||
self.assertEqual(
|
||||
self.superuser1,
|
||||
authenticate(
|
||||
username=self.superuser1.username,
|
||||
password=example_data["password1"],
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
class UpdateProfileViewTest(
|
||||
RequireRootArticleMixin, ArticleWebTestUtils, DjangoClientTestBase
|
||||
):
|
||||
def test_update_profile(self):
|
||||
self.client.post(
|
||||
resolve_url("wiki:profile_update"),
|
||||
{
|
||||
"email": "test@test.com",
|
||||
"password1": "newPass",
|
||||
"password2": "newPass",
|
||||
},
|
||||
follow=True,
|
||||
)
|
||||
|
||||
test_auth = authenticate(username="admin", password="newPass")
|
||||
|
||||
self.assertIsNotNone(test_auth)
|
||||
self.assertEqual(test_auth.email, "test@test.com")
|
||||
|
||||
|
||||
@wiki_override_settings(ACCOUNT_HANDLING=True)
|
||||
class LogoutViewTests(RequireRootArticleMixin, DjangoClientTestBase):
|
||||
def test_logout_account_handling(self):
|
||||
self.client.get(wiki_settings.LOGOUT_URL)
|
||||
user = auth.get_user(self.client)
|
||||
self.assertIs(auth.get_user(self.client).is_authenticated, False)
|
||||
self.assertIsInstance(user, AnonymousUser)
|
||||
|
||||
|
||||
@wiki_override_settings(ACCOUNT_HANDLING=True)
|
||||
class LoginTestViews(RequireRootArticleMixin, TestBase):
|
||||
def test_already_signed_in(self):
|
||||
self.client.force_login(self.superuser1)
|
||||
response = self.client.get(wiki_settings.LOGIN_URL)
|
||||
self.assertRedirects(response, reverse("wiki:root"))
|
||||
|
||||
def test_log_in(self):
|
||||
self.client.post(
|
||||
wiki_settings.LOGIN_URL,
|
||||
{"username": SUPERUSER1_USERNAME, "password": SUPERUSER1_PASSWORD},
|
||||
)
|
||||
self.assertIs(self.superuser1.is_authenticated, True)
|
||||
self.assertEqual(auth.get_user(self.client), self.superuser1)
|
||||
|
||||
|
||||
class SignupViewTests(RequireRootArticleMixin, TestBase):
|
||||
@wiki_override_settings(ACCOUNT_HANDLING=True, ACCOUNT_SIGNUP_ALLOWED=True)
|
||||
def test_signup(self):
|
||||
response = self.client.post(
|
||||
wiki_settings.SIGNUP_URL,
|
||||
data={
|
||||
"password1": SIGNUP_TEST_PASSWORD,
|
||||
"password2": SIGNUP_TEST_PASSWORD,
|
||||
"username": SIGNUP_TEST_USERNAME,
|
||||
"email": "wiki@wiki.com",
|
||||
},
|
||||
)
|
||||
self.assertIs(
|
||||
CustomUser.objects.filter(email="wiki@wiki.com").exists(), True
|
||||
)
|
||||
self.assertRedirects(response, reverse("wiki:login"))
|
||||
|
||||
# Test that signing up the same user again gives a validation error
|
||||
# Regression test: https://github.com/django-wiki/django-wiki/issues/1152
|
||||
response = self.client.post(
|
||||
wiki_settings.SIGNUP_URL,
|
||||
data={
|
||||
"password1": SIGNUP_TEST_PASSWORD,
|
||||
"password2": SIGNUP_TEST_PASSWORD,
|
||||
"username": SIGNUP_TEST_USERNAME,
|
||||
"email": "wiki@wiki.com",
|
||||
},
|
||||
)
|
||||
self.assertIs(response.status_code, 200)
|
||||
self.assertContains(response, "username already exists")
|
||||
Reference in New Issue
Block a user