115 lines
4.0 KiB
Python
115 lines
4.0 KiB
Python
"""Tests for user admin configuration."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from apps.user.admin import ProfileAdmin, UserAdmin
|
|
from apps.user.models import Profile, User
|
|
from django.contrib.admin.sites import AdminSite
|
|
from django.contrib.admin.utils import flatten_fieldsets
|
|
from django.contrib.messages.storage.fallback import FallbackStorage
|
|
from django.core.files.uploadedfile import SimpleUploadedFile
|
|
from django.test import RequestFactory, TestCase
|
|
|
|
from tests.utils.fixtures import fake
|
|
|
|
|
|
def _password() -> str:
|
|
return fake.password(length=12, special_chars=False)
|
|
|
|
|
|
class UserAdminTest(TestCase):
|
|
def setUp(self):
|
|
self.site = AdminSite()
|
|
self.admin = UserAdmin(User, self.site)
|
|
self.factory = RequestFactory()
|
|
|
|
def _request(self):
|
|
request = self.factory.get("/")
|
|
request.user = User.objects.create_superuser(
|
|
email=fake.email(),
|
|
username=fake.user_name(),
|
|
password=_password(),
|
|
)
|
|
request.session = {}
|
|
request._messages = FallbackStorage(request)
|
|
return request
|
|
|
|
def test_badges(self):
|
|
verified = User.objects.create_user(
|
|
email=fake.email(),
|
|
username=fake.user_name(),
|
|
password=_password(),
|
|
is_verified=True,
|
|
)
|
|
unverified = User.objects.create_user(
|
|
email=fake.email(),
|
|
username=fake.user_name(),
|
|
password=_password(),
|
|
is_verified=False,
|
|
)
|
|
self.assertIn("span", str(self.admin.is_verified_badge(verified)))
|
|
self.assertIn("span", str(self.admin.is_verified_badge(unverified)))
|
|
|
|
verified.is_active = True
|
|
unverified.is_active = False
|
|
self.assertIn("span", str(self.admin.is_active_badge(verified)))
|
|
self.assertIn("span", str(self.admin.is_active_badge(unverified)))
|
|
|
|
def test_actions(self):
|
|
users = [
|
|
User.objects.create_user(
|
|
email=fake.email(), username=fake.user_name(), password=_password()
|
|
)
|
|
for _ in range(2)
|
|
]
|
|
request = self._request()
|
|
qs = User.objects.filter(id__in=[u.id for u in users])
|
|
|
|
self.admin.verify_users(request, qs)
|
|
self.assertTrue(User.objects.filter(is_verified=True).count() >= 2)
|
|
|
|
self.admin.unverify_users(request, qs)
|
|
self.assertEqual(User.objects.filter(is_verified=True).count(), 0)
|
|
|
|
self.admin.deactivate_users(request, qs)
|
|
self.assertEqual(User.objects.filter(is_active=True).count(), 1) # admin user
|
|
|
|
self.admin.activate_users(request, qs)
|
|
self.assertTrue(User.objects.filter(is_active=True).count() >= 3)
|
|
|
|
def test_add_form_includes_staff_and_superuser_flags(self):
|
|
add_fields = flatten_fieldsets(self.admin.add_fieldsets)
|
|
|
|
self.assertIn("is_staff", add_fields)
|
|
self.assertIn("is_superuser", add_fields)
|
|
|
|
def test_permissions_fieldset_is_visible_with_staff_and_superuser_flags(self):
|
|
permissions_section = next(
|
|
section
|
|
for section in self.admin.fieldsets
|
|
if "is_staff" in section[1]["fields"]
|
|
and "is_superuser" in section[1]["fields"]
|
|
)
|
|
|
|
self.assertIn("is_staff", permissions_section[1]["fields"])
|
|
self.assertIn("is_superuser", permissions_section[1]["fields"])
|
|
self.assertNotIn("classes", permissions_section[1])
|
|
|
|
|
|
class ProfileAdminTest(TestCase):
|
|
def setUp(self):
|
|
self.site = AdminSite()
|
|
self.admin = ProfileAdmin(Profile, self.site)
|
|
|
|
def test_has_avatar_badge(self):
|
|
user = User.objects.create_user(
|
|
email=fake.email(), username=fake.user_name(), password=_password()
|
|
)
|
|
profile = user.profile
|
|
self.assertIn("span", str(self.admin.has_avatar(profile)))
|
|
|
|
avatar = SimpleUploadedFile("avatar.png", b"img", content_type="image/png")
|
|
profile.avatar = avatar
|
|
profile.save(update_fields=["avatar"])
|
|
self.assertIn("span", str(self.admin.has_avatar(profile)))
|