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
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)
|
|
|