test: refactor course tests and add deletion test

This commit is contained in:
raizasafeel
2026-01-19 11:10:23 +05:30
parent 0f927071c0
commit 2abc243b88

View File

@@ -5,58 +5,63 @@ import unittest
import frappe
from .lms_course import LMSCourse
from lms.lms.api import delete_course
class TestLMSCourse(unittest.TestCase):
def test_new_course(self):
course = new_course("Test Course")
assert course.title == "Test Course"
def setUp(self):
self.cleanup_items = []
def tearDown(self):
if frappe.db.exists("User", "tester@example.com"):
frappe.delete_doc("User", "tester@example.com")
for item_type, item_name in reversed(self.cleanup_items):
if frappe.db.exists(item_type, item_name):
try:
frappe.delete_doc(item_type, item_name, force=True)
except Exception as e:
frappe.log_error(f"Failed to delete {item_type} {item_name}: {e}")
if frappe.db.exists("LMS Course", "test-course"):
frappe.db.delete("Batch Course", {"course": "test-course"})
frappe.db.delete("LMS Enrollment", {"course": "test-course"})
frappe.db.delete("Course Lesson", {"course": "test-course"})
frappe.db.delete("Course Chapter", {"course": "test-course"})
frappe.db.delete("LMS Course Mentor Mapping", {"course": "test-course"})
frappe.db.delete("Course Instructor", {"parent": "test-course"})
frappe.db.sql("delete from `tabCourse Instructor`")
frappe.delete_doc("LMS Course", "test-course")
def test_new_course(self):
course_name = f"Test Course {frappe.generate_hash()}"
course = self._create_course(course_name)
def new_user(name, email):
user = frappe.db.exists("User", email)
if user:
return frappe.get_doc("User", user)
else:
filters = {
"email": email,
"first_name": name,
"send_welcome_email": False,
}
self.assertEqual(course.title, course_name)
self.assertTrue(frappe.db.exists("LMS Course", course.name))
doc = frappe.new_doc("User")
doc.update(filters)
doc.save()
return doc
def test_delete_course(self):
course = self._create_course(f"Test Course {frappe.generate_hash()}")
chapter = self._create_chapter(f"Test Chapter {frappe.generate_hash()}", course.name)
lesson = self._create_lesson(f"Test Lesson {frappe.generate_hash()}", chapter.name)
self._create_lesson_reference(chapter.name, lesson.name)
self._create_chapter_reference(course.name, chapter.name)
def new_course(title, additional_filters=None):
course = frappe.db.exists("LMS Course", {"title": title})
if course:
return frappe.get_doc("LMS Course", course)
else:
create_evaluator()
user_email = f"test_{frappe.generate_hash()}@example.com"
self._create_user("Test Member", user_email)
enrollment = self._create_enrollment(user_email, course.name)
self._create_progress(user_email, course.name, lesson.name)
delete_course(course.name)
self.assertFalse(frappe.db.exists("LMS Course", course.name))
self.assertFalse(frappe.db.exists("Course Chapter", chapter.name))
self.assertFalse(frappe.db.exists("Course Lesson", lesson.name))
self.assertFalse(frappe.db.exists("LMS Enrollment", enrollment.name))
self.assertFalse(frappe.db.exists("LMS Course Progress", {"course": course.name}))
self.assertFalse(frappe.db.exists("Chapter Reference", {"parent": course.name}))
self.assertFalse(frappe.db.exists("Lesson Reference", {"parent": chapter.name}))
def _ensure_test_user(self):
self._create_evaluator()
user = frappe.db.get_value(
"User",
{
"user_type": "System User",
},
{"user_type": "System User"},
)
return user
def _create_course(self, title, additional_filters=None):
user = self._ensure_test_user()
filters = {
"title": title,
"short_introduction": title,
@@ -70,15 +75,111 @@ def new_course(title, additional_filters=None):
if additional_filters:
filters.update(additional_filters)
doc = frappe.new_doc("LMS Course")
doc.update(filters)
course = frappe.new_doc("LMS Course")
course.update(filters)
course.save()
self.cleanup_items.append(("LMS Course", course.name))
return course
def _create_chapter(self, title, course):
chapter = frappe.new_doc("Course Chapter")
chapter.update(
{
"title": title,
"course": course,
}
)
chapter.save()
self.cleanup_items.append(("Course Chapter", chapter.name))
return chapter
def _create_lesson(self, title, chapter):
lesson = frappe.new_doc("Course Lesson")
lesson.update(
{
"title": title,
"chapter": chapter,
}
)
lesson.save()
self.cleanup_items.append(("Course Lesson", lesson.name))
return lesson
def _create_lesson_reference(self, chapter, lesson):
lesson_ref = frappe.get_doc(
{
"doctype": "Lesson Reference",
"lesson": lesson,
"parent": chapter,
"parenttype": "Course Chapter",
"parentfield": "lessons",
"idx": 1,
}
)
lesson_ref.insert()
self.cleanup_items.append(("Lesson Reference", lesson_ref.name))
return lesson_ref
def _create_chapter_reference(self, course, chapter):
chapter_ref = frappe.get_doc(
{
"doctype": "Chapter Reference",
"chapter": chapter,
"parent": course,
"parenttype": "LMS Course",
"parentfield": "chapters",
"idx": 1,
}
)
chapter_ref.insert()
self.cleanup_items.append(("Chapter Reference", chapter_ref.name))
return chapter_ref
def _create_user(self, name, email):
user = frappe.db.exists("User", email)
if user:
return frappe.get_doc("User", user)
doc = frappe.new_doc("User")
doc.update(
{
"email": email,
"first_name": name,
"send_welcome_email": False,
}
)
doc.save()
self.cleanup_items.append(("User", doc.name))
return doc
def create_evaluator():
if not frappe.db.exists("Course Evaluator", "evaluator@example.com"):
new_user("Evaluator", "evaluator@example.com")
frappe.get_doc({"doctype": "Course Evaluator", "evaluator": "evaluator@example.com"}).save(
ignore_permissions=True
def _create_enrollment(self, member, course):
enrollment = frappe.new_doc("LMS Enrollment")
enrollment.update(
{
"member": member,
"course": course,
}
)
enrollment.insert()
self.cleanup_items.append(("LMS Enrollment", enrollment.name))
return enrollment
def _create_progress(self, member, course, lesson):
progress = frappe.new_doc("LMS Course Progress")
progress.update(
{
"member": member,
"course": course,
"lesson": lesson,
}
)
progress.insert()
self.cleanup_items.append(("LMS Course Progress", progress.name))
return progress
def _create_evaluator(self):
if not frappe.db.exists("Course Evaluator", "evaluator@example.com"):
self._create_user("Evaluator", "evaluator@example.com")
evaluator = frappe.get_doc({"doctype": "Course Evaluator", "evaluator": "evaluator@example.com"})
evaluator.save(ignore_permissions=True)
self.cleanup_items.append(("Course Evaluator", evaluator.name))