Newer
Older
pydwiki / accounts / tests / tests_models_custom_user_manager.py
from typing import cast

from django.test import TestCase

from accounts.models import CustomUser
from accounts.models.custom_user_manager import CustomUserManager


class CustomUserManagerTestCase(TestCase):

    def setUp(self):
        self.user_manager: CustomUserManager = cast(CustomUserManager, CustomUser.objects)

    def test_create_user(self):
        user = self.user_manager.create_user(
            login_id="testuser", _email="test@example.com", password="password123"
        )
        self.assertIsInstance(user, CustomUser)
        self.assertTrue(user.emails.filter(email="test@example.com").exists())
        self.assertTrue(user.check_password("password123"))
        self.assertFalse(user.is_staff)
        self.assertFalse(user.is_superuser)

    def test_create_superuser(self):
        superuser = self.user_manager.create_superuser(
            login_id="admin", _email="admin@example.com", password="admin123"
        )
        self.assertIsInstance(superuser, CustomUser)
        self.assertTrue(superuser.emails.filter(email="admin@example.com").exists())
        self.assertTrue(superuser.check_password("admin123"))
        self.assertTrue(superuser.is_staff)
        self.assertTrue(superuser.is_superuser)

    def test_create_user_without_login_id(self):
        with self.assertRaises(ValueError):
            self.user_manager.create_user(
                login_id="", _email="user@example.com", password="password123"
            )

    def test_create_user_without_email(self):
        with self.assertRaises(ValueError):
            self.user_manager.create_user(login_id="user123", _email="", password="password123")

    def test_create_superuser_is_staff_false(self):
        with self.assertRaises(ValueError):
            self.user_manager.create_superuser(
                login_id="admin", _email="admin@example.com", password="password123", is_staff=False
            )

    def test_create_superuser_is_superuser_false(self):
        with self.assertRaises(ValueError):
            self.user_manager.create_superuser(
                login_id="admin",
                _email="admin@example.com",
                password="password123",
                is_superuser=False,
            )