diff --git a/lms/lms/doctype/course_evaluator/course_evaluator.py b/lms/lms/doctype/course_evaluator/course_evaluator.py index 6c8af0a6..e567dfca 100644 --- a/lms/lms/doctype/course_evaluator/course_evaluator.py +++ b/lms/lms/doctype/course_evaluator/course_evaluator.py @@ -61,8 +61,7 @@ class CourseEvaluator(Document): def get_schedule(course, batch=None): evaluator = get_evaluator(course, batch) start_date = nowdate() - end_date = get_end_date(start_date, batch) - print(start_date, end_date) + end_date = get_schedule_range_end_date(start_date, batch) all_slots = get_all_slots(evaluator, start_date, end_date) booked_slots = get_booked_slots(evaluator, start_date, end_date) all_slots = remove_booked_slots(all_slots, booked_slots) @@ -173,7 +172,7 @@ def get_unavailable_dates(evaluator): return unavailable_dates -def get_end_date(start_date, batch=None): +def get_schedule_range_end_date(start_date, batch=None): end_date = add_days(start_date, 60) if batch: batch_end_date = frappe.db.get_value("LMS Batch", batch, "evaluation_end_date") diff --git a/lms/lms/doctype/course_evaluator/test_course_evaluator.py b/lms/lms/doctype/course_evaluator/test_course_evaluator.py index 9b798a98..40fea11a 100644 --- a/lms/lms/doctype/course_evaluator/test_course_evaluator.py +++ b/lms/lms/doctype/course_evaluator/test_course_evaluator.py @@ -3,7 +3,33 @@ # import frappe from frappe.tests import UnitTestCase +from frappe.utils import format_time + +from lms.lms.doctype.course_evaluator.course_evaluator import get_schedule +from lms.lms.test_utils import TestUtils class TestCourseEvaluator(UnitTestCase): - pass + def setUp(self): + self.admin = TestUtils.create_user( + self, "frappe@example.com", "Frappe", "Admin", ["Moderator", "Course Creator", "Batch Evaluator"] + ) + self.course = TestUtils.create_a_course(self) + + self.evaluator = TestUtils.create_evaluator(self) + self.batch = TestUtils.create_a_batch(self) + + def test_schedule(self): + schedule = get_schedule(self.batch.courses[0].course, self.batch.name) + days = ["Monday", "Wednesday"] + self.assertGreaterEqual(len(schedule), 16) + for row in schedule: + self.assertIn(row.get("day"), days) + if row.get("day") == "Monday": + for slot in row.get("slots"): + self.assertEqual(format_time(slot.get("start_time"), "HH:mm:ss"), "10:00:00") + self.assertEqual(format_time(slot.get("end_time"), "HH:mm:ss"), "12:00:00") + if row.get("day") == "Wednesday": + for slot in row.get("slots"): + self.assertEqual(format_time(slot.get("start_time"), "HH:mm:ss"), "14:00:00") + self.assertEqual(format_time(slot.get("end_time"), "HH:mm:ss"), "16:00:00") diff --git a/lms/lms/test_utils.py b/lms/lms/test_utils.py index 399c64f5..815b1f92 100644 --- a/lms/lms/test_utils.py +++ b/lms/lms/test_utils.py @@ -1,12 +1,14 @@ import unittest import frappe +from frappe.utils import add_days, nowdate from lms.lms.doctype.lms_certificate.lms_certificate import get_default_certificate_template, is_certified from .utils import ( get_average_rating, get_chapters, + get_evaluator, get_instructors, get_lesson_index, get_lesson_url, @@ -31,7 +33,7 @@ class TestUtils(unittest.TestCase): "frappe@example.com", "Frappe", "Admin", ["Moderator", "Course Creator", "Batch Evaluator"] ) - self.create_a_course() + self.course = self.create_a_course() self.add_chapters() self.add_lessons() @@ -43,7 +45,14 @@ class TestUtils(unittest.TestCase): self.create_certificate(self.course.name, self.student1.email) + self.evaluator = self.create_evaluator() + self.batch = self.create_a_batch() + def create_a_course(self): + existing_course = frappe.db.exists("LMS Course", {"title": "Utility Course"}) + if existing_course: + return frappe.get_doc("LMS Course", existing_course) + course = frappe.new_doc("LMS Course") course.title = "Utility Course" course.short_introduction = "A course to test utilities of Frappe Learning" @@ -52,7 +61,7 @@ class TestUtils(unittest.TestCase): course.published = 1 course.append("instructors", {"instructor": "frappe@example.com"}) course.save() - self.course = course + return course def add_chapters(self): chapters = [] @@ -66,7 +75,6 @@ class TestUtils(unittest.TestCase): self.course.reload() for chapter in chapters: self.course.append("chapters", {"chapter": chapter.name}) - self.course.save() def add_lessons(self): @@ -87,8 +95,41 @@ class TestUtils(unittest.TestCase): chapterDoc.append("lessons", {"lesson": lesson.name}) chapterDoc.save() + def create_evaluator(self): + if frappe.db.exists("Course Evaluator", "frappe@example.com"): + return frappe.get_doc("Course Evaluator", "frappe@example.com") + + evaluator = frappe.new_doc("Course Evaluator") + evaluator.evaluator = "frappe@example.com" + evaluator.append("schedule", {"day": "Monday", "start_time": "10:00", "end_time": "12:00"}) + evaluator.append("schedule", {"day": "Wednesday", "start_time": "14:00", "end_time": "16:00"}) + evaluator.save() + return evaluator + + def create_a_batch(self): + existing_batch = frappe.db.exists("LMS Batch", {"title": "Utility Training"}) + if existing_batch: + return frappe.get_doc("LMS Batch", existing_batch) + + batch = frappe.new_doc("LMS Batch") + batch.title = "Utility Training" + batch.start_date = nowdate() + batch.end_date = add_days(batch.start_date, 10) + batch.start_time = "09:00:00" + batch.end_time = "11:00:00" + batch.timezone = "Asia/Kolkata" + batch.description = "Batch for Utility Course Training" + batch.batch_details = "This batch is created to test utility functions." + batch.evaluation_end_date = add_days(nowdate(), 120) + batch.append("instructors", {"instructor": "frappe@example.com"}) + batch.append("courses", {"course": self.course.name, "evaluator": "frappe@example.com"}) + batch.save() + return batch + def create_user(self, email, first_name, last_name, roles): - if not frappe.db.exists("User", email): + if frappe.db.exists("User", email): + return frappe.get_doc("User", email) + else: user = frappe.new_doc("User") user.email = email user.first_name = first_name @@ -98,8 +139,6 @@ class TestUtils(unittest.TestCase): user.append("roles", {"role": role}) user.save() return user - else: - return frappe.get_doc("User", email) def create_certificate(self, course_name, member): certificate = frappe.new_doc("LMS Certificate") @@ -232,7 +271,14 @@ class TestUtils(unittest.TestCase): frappe.session.user = "Administrator" frappe.delete_doc("User", student3.email) + def test_get_evaluator(self): + evaluator_email = get_evaluator(self.course.name, self.batch.name) + self.assertEqual(evaluator_email, self.evaluator.evaluator) + def tearDown(self): + if frappe.db.exists("LMS Batch", self.batch.name): + frappe.delete_doc("LMS Batch", self.batch.name) + if frappe.db.exists("LMS Course", self.course.name): frappe.db.delete("LMS Certificate", {"course": self.course.name}) frappe.db.delete("LMS Enrollment", {"course": self.course.name}) @@ -242,6 +288,7 @@ class TestUtils(unittest.TestCase): frappe.db.delete("Course Instructor", {"parent": self.course.name}) frappe.delete_doc("LMS Course", self.course.name) + frappe.delete_doc("Course Evaluator", self.evaluator.name) frappe.delete_doc("User", "student1@example.com") frappe.delete_doc("User", "student2@example.com") frappe.delete_doc("User", "frappe@example.com")