test: test sync between evaluator doc and role

This commit is contained in:
raizasafeel
2026-03-12 15:05:43 +05:30
parent 6a6b4e0139
commit 8458985c28
@@ -1,8 +1,10 @@
# Copyright (c) 2022, Frappe and Contributors
# See license.txt
import frappe
from frappe.utils import add_days, format_time, getdate
from lms.lms.api import save_role
from lms.lms.doctype.course_evaluator.course_evaluator import get_schedule, get_schedule_range_end_date
from lms.lms.test_helpers import BaseTestUtils
@@ -63,3 +65,59 @@ class TestCourseEvaluator(BaseTestUtils):
for row in schedule:
schedule_date = getdate(row.get("date"))
self.assertFalse(unavailable_from < schedule_date < unavailable_to)
class TestEvaluatorRoleCRUD(BaseTestUtils):
def setUp(self):
super().setUp()
self.admin = self._create_user(
"frappe@example.com", "Frappe", "Admin", ["Moderator", "Course Creator", "Batch Evaluator"]
)
self.test_user = self._create_user("eval_test@example.com", "Eval", "Tester", ["LMS Student"])
def _has_batch_evaluator_role(self, user):
return frappe.db.exists("Has Role", {"parent": user, "role": "Batch Evaluator"})
def _has_course_evaluator(self, user):
return frappe.db.exists("Course Evaluator", {"evaluator": user})
def test_add_evaluator_role_creates_both(self):
"""save_role with value=1 should create Has Role AND Course Evaluator."""
frappe.set_user("frappe@example.com")
save_role(self.test_user.email, "Batch Evaluator", 1)
frappe.set_user("Administrator")
self.assertTrue(self._has_batch_evaluator_role(self.test_user.email))
self.assertTrue(self._has_course_evaluator(self.test_user.email))
self.cleanup_items.append(("Course Evaluator", self.test_user.email))
def test_remove_evaluator_role_removes_both(self):
"""save_role with value=0 should remove Has Role AND Course Evaluator."""
frappe.set_user("frappe@example.com")
save_role(self.test_user.email, "Batch Evaluator", 1)
save_role(self.test_user.email, "Batch Evaluator", 0)
frappe.set_user("Administrator")
self.assertFalse(self._has_batch_evaluator_role(self.test_user.email))
self.assertFalse(self._has_course_evaluator(self.test_user.email))
def test_remove_evaluator_role_no_error_when_missing(self):
"""Removing role that doesn't exist should not raise an error."""
frappe.set_user("frappe@example.com")
save_role(self.test_user.email, "Batch Evaluator", 0)
frappe.set_user("Administrator")
self.assertFalse(self._has_batch_evaluator_role(self.test_user.email))
def test_reject_non_lms_role(self):
"""Assigning a role outside LMS_ROLES should raise PermissionError."""
frappe.set_user("frappe@example.com")
self.assertRaises(frappe.PermissionError, save_role, self.test_user.email, "System Manager", 1)
frappe.set_user("Administrator")
def test_non_moderator_cannot_save_role(self):
"""[A non-moderator user should not be able to assign roles.]"""
frappe.set_user(self.test_user.email)
self.assertRaises(frappe.PermissionError, save_role, self.test_user.email, "Course Creator", 1)
frappe.set_user("Administrator")