""" تست‌های سیستم نقش‌های چندگانه """ 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)