"""Tests for user admin configuration.""" from __future__ import annotations from django.contrib.admin.sites import AdminSite from django.contrib.messages.storage.fallback import FallbackStorage from django.core.files.uploadedfile import SimpleUploadedFile from django.test import RequestFactory, TestCase from apps.user.admin import ProfileAdmin, UserAdmin from apps.user.models import Profile, User from tests.utils.fixtures import fake 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="pass", ) 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="pass", is_verified=True ) unverified = User.objects.create_user( email=fake.email(), username=fake.user_name(), password="pass", 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="pass" ) 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) 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="pass" ) 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)))