154 lines
5.1 KiB
Python
154 lines
5.1 KiB
Python
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")
|