You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

102 lines
4.1 KiB

"""
تست‌های سیستم نقش‌های چندگانه
"""
from django.test import TestCase
from django.contrib.auth.models import Group
from apps.account.models import User
class MultipleRolesTestCase(TestCase):
def setUp(self):
"""راه‌اندازی داده‌های تست"""
# ایجاد گروه‌ها
self.professor_group = Group.objects.create(name="Professor Group")
self.student_group = Group.objects.create(name="Student Group")
self.client_group = Group.objects.create(name="Client Group")
# ایجاد کاربر
self.user = User.objects.create_user(
email='test@example.com',
fullname='Test User',
password='testpass123'
)
# حذف language برای جلوگیری از خطای foreign key
self.user.language = None
self.user.save()
def test_user_can_have_multiple_roles(self):
"""تست اینکه کاربر می‌تواند چندین نقش داشته باشد"""
# اضافه کردن نقش professor
self.user.add_role('professor')
self.assertTrue(self.user.has_role('professor'))
self.assertEqual(self.user.primary_role, User.UserType.PROFESSOR)
# اضافه کردن نقش student
self.user.add_role('student')
self.assertTrue(self.user.has_role('student'))
self.assertTrue(self.user.has_role('professor')) # نقش قبلی حفظ شده
# نقش اصلی باید professor باشد (اولویت بالاتر)
self.assertEqual(self.user.primary_role, User.UserType.PROFESSOR)
# لیست تمام نقش‌ها
roles = self.user.get_all_roles()
self.assertIn('professor', roles)
self.assertIn('student', roles)
def test_remove_role(self):
"""تست حذف نقش"""
# اضافه کردن دو نقش
self.user.add_role('professor')
self.user.add_role('student')
# حذف نقش professor
self.user.remove_role('professor')
self.assertFalse(self.user.has_role('professor'))
self.assertTrue(self.user.has_role('student'))
# نقش اصلی باید student شود
self.assertEqual(self.user.primary_role, User.UserType.STUDENT)
def test_permissions(self):
"""تست دسترسی‌ها"""
# کاربر بدون نقش خاص
self.assertFalse(self.user.can_teach_course())
self.assertTrue(self.user.can_enroll_course())
# اضافه کردن نقش professor
self.user.add_role('professor')
self.assertTrue(self.user.can_teach_course())
self.assertTrue(self.user.can_enroll_course())
# حذف نقش professor
self.user.remove_role('professor')
self.assertFalse(self.user.can_teach_course())
self.assertTrue(self.user.can_enroll_course())
def test_user_type_based_on_groups_compatibility(self):
"""تست سازگاری با property قدیمی"""
# اضافه کردن نقش student
self.user.add_role('student')
self.user.refresh_from_db() # بروزرسانی از دیتابیس
self.assertEqual(self.user.user_type_based_on_groups, User.UserType.STUDENT)
# اضافه کردن نقش professor
self.user.add_role('professor')
self.user.refresh_from_db() # بروزرسانی از دیتابیس
# property قدیمی بر اساس اولویت کار می‌کند - student اول چک می‌شود
# پس باید student برگرداند نه professor
self.assertEqual(self.user.user_type_based_on_groups, User.UserType.STUDENT)
# حذف نقش student
self.user.remove_role('student')
self.user.refresh_from_db()
self.assertEqual(self.user.user_type_based_on_groups, User.UserType.PROFESSOR)
# حذف همه نقش‌ها
self.user.remove_role('professor')
self.user.refresh_from_db()
self.assertEqual(self.user.user_type_based_on_groups, User.UserType.CLIENT)