Initial commit

This commit is contained in:
2024-08-27 20:33:44 +02:00
commit 1f1832267d
14794 changed files with 1599592 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
from .test_admin_views import (
CustomGroupViewSet,
CustomUserCreationForm,
CustomUserEditForm,
CustomUserViewSet,
)
__all__ = [
"CustomGroupViewSet",
"CustomUserViewSet",
"CustomUserCreationForm",
"CustomUserEditForm",
]

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,109 @@
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group
from django.http import HttpRequest, HttpResponse
from django.test import TestCase
from django.urls import reverse
from wagtail.test.utils import WagtailTestUtils
from wagtail.users.views.bulk_actions.user_bulk_action import UserBulkAction
User = get_user_model()
class TestUserToggleActivityView(WagtailTestUtils, TestCase):
def setUp(self):
# create a set of test users
self.test_users = [
self.create_user(
username=f"testuser-{i}",
email=f"testuser{i}@email.com",
password=f"password-{i}",
)
for i in range(1, 6)
]
self.new_group = Group.objects.create(name="group")
self.current_user = self.login()
self.url = (
reverse(
"wagtail_bulk_action",
args=(
User._meta.app_label,
User._meta.model_name,
"assign_role",
),
)
+ "?"
)
self.self_toggle_url = self.url + f"id={self.current_user.pk}"
for user in self.test_users:
self.url += f"id={user.pk}&"
self.post_data = {"role": self.new_group.pk}
def test_simple(self):
response = self.client.get(self.url)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response, "wagtailusers/bulk_actions/confirm_bulk_assign_role.html"
)
def test_bulk_toggle(self):
response = self.client.post(self.url, self.post_data)
# Should redirect back to index
self.assertEqual(response.status_code, 302)
# Check that the users were added to the new group
for user in self.test_users:
self.assertTrue(
User.objects.get(email=user.email)
.groups.filter(name=self.new_group)
.exists()
)
def test_before_toggle_user_hook_post(self):
def hook_func(request, action_type, users, action_class_instance):
self.assertEqual(action_type, "assign_role")
self.assertIsInstance(request, HttpRequest)
self.assertIsInstance(action_class_instance, UserBulkAction)
self.assertCountEqual(
[user.pk for user in self.test_users], [user.pk for user in users]
)
return HttpResponse("Overridden!")
with self.register_hook("before_bulk_action", hook_func):
response = self.client.post(self.url, self.post_data)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, b"Overridden!")
for user in self.test_users:
self.assertFalse(
User.objects.get(email=user.email)
.groups.filter(name=self.new_group)
.exists()
)
def test_after_toggle_user_hook(self):
def hook_func(request, action_type, users, action_class_instance):
self.assertEqual(action_type, "assign_role")
self.assertIsInstance(request, HttpRequest)
self.assertIsInstance(action_class_instance, UserBulkAction)
self.assertCountEqual(
[user.pk for user in self.test_users], [user.pk for user in users]
)
return HttpResponse("Overridden!")
with self.register_hook("after_bulk_action", hook_func):
response = self.client.post(self.url, self.post_data)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, b"Overridden!")
for user in self.test_users:
self.assertTrue(
User.objects.get(email=user.email)
.groups.filter(name=self.new_group)
.exists()
)

View File

@@ -0,0 +1,144 @@
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Permission
from django.http import HttpRequest, HttpResponse
from django.test import TestCase
from django.urls import reverse
from wagtail.test.utils import WagtailTestUtils
from wagtail.users.views.bulk_actions.user_bulk_action import UserBulkAction
User = get_user_model()
class TestUserDeleteView(WagtailTestUtils, TestCase):
def setUp(self):
# create a set of test users
self.test_users = [
self.create_user(
username=f"testuser-{i}",
email=f"testuser{i}@email.com",
password=f"password-{i}",
)
for i in range(1, 6)
]
# also create a superuser to delete
self.superuser = self.create_superuser(
username="testsuperuser",
email="testsuperuser@email.com",
password="password",
)
self.current_user = self.login()
self.url = (
reverse(
"wagtail_bulk_action",
args=(
User._meta.app_label,
User._meta.model_name,
"delete",
),
)
+ "?"
)
for user in self.test_users:
self.url += f"id={user.pk}&"
self.self_delete_url = self.url + f"id={self.current_user.pk}"
self.superuser_delete_url = self.url + f"id={self.superuser.pk}"
def test_simple(self):
response = self.client.get(self.url)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response, "wagtailusers/bulk_actions/confirm_bulk_delete.html"
)
def test_user_permissions_required(self):
# Log in with a user that doesn't have permission to delete users
user = self.create_user(username="editor", password="password")
admin_permission = Permission.objects.get(
content_type__app_label="wagtailadmin", codename="access_admin"
)
user.user_permissions.add(admin_permission)
self.login(username="editor", password="password")
response = self.client.get(self.url)
self.assertRedirects(response, "/admin/")
def test_bulk_delete(self):
response = self.client.post(self.url)
# Should redirect back to index
self.assertEqual(response.status_code, 302)
# Check that the users were deleted
for user in self.test_users:
self.assertFalse(User.objects.filter(email=user.email).exists())
def test_user_cannot_delete_self(self):
response = self.client.get(self.self_delete_url)
self.assertEqual(response.status_code, 200)
html = response.content.decode()
self.assertInHTML("<p>You don't have permission to delete this user</p>", html)
needle = "<ul>"
needle += f"<li>{self.current_user.email}</li>"
needle += "</ul>"
self.assertInHTML(needle, html)
self.client.post(self.self_delete_url)
# Check user was not deleted
self.assertTrue(User.objects.filter(pk=self.current_user.pk).exists())
def test_user_can_delete_other_superuser(self):
response = self.client.get(self.superuser_delete_url)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response, "wagtailusers/bulk_actions/confirm_bulk_delete.html"
)
response = self.client.post(self.superuser_delete_url)
# Should redirect back to index
self.assertEqual(response.status_code, 302)
# Check that the user was deleted
users = User.objects.filter(email=self.superuser.email)
self.assertEqual(users.count(), 0)
def test_before_delete_user_hook_post(self):
def hook_func(request, action_type, users, action_class_instance):
self.assertEqual(action_type, "delete")
self.assertIsInstance(request, HttpRequest)
self.assertIsInstance(action_class_instance, UserBulkAction)
self.assertCountEqual(
[user.pk for user in self.test_users], [user.pk for user in users]
)
return HttpResponse("Overridden!")
with self.register_hook("before_bulk_action", hook_func):
response = self.client.post(self.url)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, b"Overridden!")
for user in self.test_users:
self.assertTrue(User.objects.filter(email=user.email).exists())
def test_after_delete_user_hook(self):
def hook_func(request, action_type, users, action_class_instance):
self.assertEqual(action_type, "delete")
self.assertIsInstance(request, HttpRequest)
self.assertIsInstance(action_class_instance, UserBulkAction)
return HttpResponse("Overridden!")
with self.register_hook("after_bulk_action", hook_func):
response = self.client.post(self.url)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, b"Overridden!")
for user in self.test_users:
self.assertFalse(User.objects.filter(email=user.email).exists())

View File

@@ -0,0 +1,111 @@
from django.contrib.auth import get_user_model
from django.http import HttpRequest, HttpResponse
from django.test import TestCase
from django.urls import reverse
from wagtail.test.utils import WagtailTestUtils
from wagtail.users.views.bulk_actions.user_bulk_action import UserBulkAction
User = get_user_model()
class TestUserSetActiveStateView(WagtailTestUtils, TestCase):
def setUp(self):
# create a set of test users
self.test_users = [
self.create_user(
username=f"testuser-{i}",
email=f"testuser{i}@email.com",
password=f"password-{i}",
)
for i in range(1, 6)
]
for i, user in enumerate(self.test_users):
user.is_active = i & 1 # odd numbered users will be active
user.save()
self.current_user = self.login()
self.url = (
reverse(
"wagtail_bulk_action",
args=(
User._meta.app_label,
User._meta.model_name,
"set_active_state",
),
)
+ "?"
)
self.self_toggle_url = self.url + f"id={self.current_user.pk}"
for user in self.test_users:
self.url += f"id={user.pk}&"
self.make_active_data = {"mark_as_active": True}
self.make_inactive_data = {"mark_as_active": False}
def test_simple(self):
response = self.client.get(self.url)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(
response, "wagtailusers/bulk_actions/confirm_bulk_set_active_state.html"
)
def test_bulk_toggle(self):
response = self.client.post(self.url, self.make_active_data)
# Should redirect back to index
self.assertEqual(response.status_code, 302)
# Check that the users were marked as active
for user in self.test_users:
self.assertTrue(User.objects.get(email=user.email).is_active)
def test_user_cannot_mark_self_as_inactive(self):
response = self.client.get(self.self_toggle_url)
self.assertEqual(response.status_code, 200)
html = response.content.decode()
self.assertInHTML("<p>You cannot change your own active status</p>", html)
needle = "<ul>"
needle += f"<li>{self.current_user.email}</li>"
needle += "</ul>"
self.assertInHTML(needle, html)
# Check user was not marked as inactive
self.assertTrue(User.objects.get(pk=self.current_user.pk).is_active)
def test_before_toggle_user_hook_post(self):
def hook_func(request, action_type, users, action_class_instance):
self.assertEqual(action_type, "set_active_state")
self.assertIsInstance(request, HttpRequest)
self.assertIsInstance(action_class_instance, UserBulkAction)
self.assertCountEqual(
[user.pk for user in self.test_users], [user.pk for user in users]
)
return HttpResponse("Overridden!")
with self.register_hook("before_bulk_action", hook_func):
response = self.client.post(self.url, self.make_active_data)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, b"Overridden!")
def test_after_toggle_user_hook(self):
def hook_func(request, action_type, users, action_class_instance):
self.assertEqual(action_type, "set_active_state")
self.assertIsInstance(request, HttpRequest)
self.assertIsInstance(action_class_instance, UserBulkAction)
self.assertCountEqual(
[user.pk for user in self.test_users], [user.pk for user in users]
)
return HttpResponse("Overridden!")
with self.register_hook("after_bulk_action", hook_func):
response = self.client.post(self.url, self.make_active_data)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.content, b"Overridden!")
for user in self.test_users:
self.assertTrue(User.objects.get(email=user.email).is_active)