From 440c18f4e0565e0824d432b01bc2be7b8847e122 Mon Sep 17 00:00:00 2001 From: adityacp Date: Thu, 8 Feb 2018 11:43:25 +0530 Subject: Change in forms.py, views.py and models.py - Add new attribute active in lesson and learningmodule model - Change learningmodule get_status method - Add condition in lesson, quiz and module views to check if module is active or not --- yaksh/forms.py | 2 +- yaksh/models.py | 15 ++++++++++----- yaksh/views.py | 20 +++++++++++++++++++- 3 files changed, 30 insertions(+), 7 deletions(-) (limited to 'yaksh') diff --git a/yaksh/forms.py b/yaksh/forms.py index 9fd2eaa..258a1ee 100644 --- a/yaksh/forms.py +++ b/yaksh/forms.py @@ -339,4 +339,4 @@ class LearningModuleForm(forms.ModelForm): class Meta: model = LearningModule - fields = ['name', 'description'] + fields = ['name', 'description', 'active'] diff --git a/yaksh/models.py b/yaksh/models.py index 1e45851..17ba624 100644 --- a/yaksh/models.py +++ b/yaksh/models.py @@ -155,6 +155,9 @@ class Lesson(models.Model): # Creator of the lesson creator = models.ForeignKey(User) + # Activate/Deactivate Lesson + active = models.BooleanField(default=True) + def __str__(self): return "{0}".format(self.name) @@ -414,6 +417,7 @@ class LearningModule(models.Model): creator = models.ForeignKey(User, related_name="module_creator") check_prerequisite = models.BooleanField(default=True) html_data = models.TextField(null=True, blank=True) + active = models.BooleanField(default=True) is_trial = models.BooleanField(default=False) def get_quiz_units(self): @@ -447,21 +451,22 @@ class LearningModule(models.Model): return ordered_units.get(id=ordered_units_ids[next_index]) def get_status(self, user, course): - """ Get module status if it completed, inprogress or not attempted""" + """ Get module status if completed, inprogress or not attempted""" learning_module = course.learning_module.prefetch_related( "learning_unit").get(id=self.id) ordered_units = learning_module.learning_unit.order_by("order") status_list = [unit.get_completion_status(user, course) - for unit in ordered_units] + for unit in ordered_units + if unit.has_prerequisite()] if not status_list: default_status = "no units" elif all([status == "completed" for status in status_list]): default_status = "completed" - elif "inprogress" in status_list: - default_status = "inprogress" - else: + elif all([status == "not attempted" for status in status_list]): default_status = "not attempted" + else: + default_status = "inprogress" return default_status def is_prerequisite_passed(self, user, course): diff --git a/yaksh/views.py b/yaksh/views.py index 2bc5dfe..27325c6 100644 --- a/yaksh/views.py +++ b/yaksh/views.py @@ -475,6 +475,10 @@ def start(request, questionpaper_id=None, attempt_num=None, course_id=None, learning_module = course.learning_module.get(id=module_id) learning_unit = learning_module.learning_unit.get(quiz=quest_paper.quiz.id) + # unit module active status + if not learning_module.active: + return view_module(request, module_id, course_id) + # unit module prerequiste check if learning_module.has_prerequisite(): if not learning_module.is_prerequisite_passed(user, course): @@ -1392,7 +1396,8 @@ def design_questionpaper(request, quiz_id, questionpaper_id=None, 'questions': questions, 'fixed_questions': fixed_questions, 'state': state, - 'random_sets': random_sets + 'random_sets': random_sets, + 'course_id': course_id } return my_render_to_response( 'yaksh/design_questionpaper.html', @@ -2348,6 +2353,14 @@ def show_lesson(request, lesson_id, module_id, course_id): learn_module = course.learning_module.get(id=module_id) learn_unit = learn_module.learning_unit.get(lesson_id=lesson_id) learning_units = learn_module.get_learning_units() + + # if learning module is active + if not learn_module.active: + return view_module(request, module_id, course_id) + # if lesson is active or not + if not learn_unit.lesson.active: + msg = "{0} is not active".format(learn_unit.lesson.name) + return view_module(request, module_id, course_id, msg) if learn_module.has_prerequisite(): if not learn_module.is_prerequisite_passed(user, course): msg = "You have not completed the module previous to {0}".format( @@ -2660,6 +2673,11 @@ def view_module(request, module_id, course_id, msg=None): msg = "{0} is either expired or not active".format(course.name) return course_modules(request, course_id, msg) learning_module = course.learning_module.get(id=module_id) + + # Check if module is active or not + if not learning_module.active: + msg = "{0} is not active".format(learning_module.name) + return course_modules(request, course_id, msg) all_modules = course.get_learning_modules() if learning_module.has_prerequisite(): if not learning_module.is_prerequisite_passed(user, course): -- cgit From e1f4ffc3ab43d02115e6c496bf08bea1e52af2ef Mon Sep 17 00:00:00 2001 From: adityacp Date: Thu, 8 Feb 2018 11:48:34 +0530 Subject: Change in templates - Show error messages properly in 404.html - Show Lesson and LearningModule active/deactive status in courses.html - Disable home button for student - Add proper redirections and form submissions to edit/view question paper --- yaksh/templates/404.html | 8 +++++++- yaksh/templates/yaksh/complete.html | 3 ++- yaksh/templates/yaksh/courses.html | 10 ++++++++++ yaksh/templates/yaksh/design_questionpaper.html | 9 +++++++-- 4 files changed, 26 insertions(+), 4 deletions(-) (limited to 'yaksh') diff --git a/yaksh/templates/404.html b/yaksh/templates/404.html index e9d99de..d4777f2 100644 --- a/yaksh/templates/404.html +++ b/yaksh/templates/404.html @@ -1,7 +1,13 @@ {% extends "base.html" %} +{% block pagetitle %}

Yaksh

{% endblock %} + {% block content %} +
It seems that you have encountered an error -Type of Error - {{ exception }} +
Please contact your administrator +

+
Error Message:- {{exception}}
+
{% endblock %} diff --git a/yaksh/templates/yaksh/complete.html b/yaksh/templates/yaksh/complete.html index e4317fe..39f60c2 100644 --- a/yaksh/templates/yaksh/complete.html +++ b/yaksh/templates/yaksh/complete.html @@ -36,7 +36,6 @@ width="80" alt="YAKSH">{% endblock %} {% if not module_id %}

You may now close the browser.


{% endif %} - Home {% if module_id and not user == "moderator" %} {% if first_unit %} Next @@ -49,6 +48,8 @@ width="80" alt="YAKSH">{% endblock %} {% endif %} + {% else %} + Home {% endif %} {% endblock content %} diff --git a/yaksh/templates/yaksh/courses.html b/yaksh/templates/yaksh/courses.html index a1fd48a..bc96bf5 100644 --- a/yaksh/templates/yaksh/courses.html +++ b/yaksh/templates/yaksh/courses.html @@ -397,6 +397,11 @@ {% endfor %} @@ -431,6 +436,11 @@ {{ module.name }} + {% if module.active %} + Active + {% else %} + Closed + {% endif %} diff --git a/yaksh/templates/yaksh/design_questionpaper.html b/yaksh/templates/yaksh/design_questionpaper.html index 829e27f..1656e2b 100644 --- a/yaksh/templates/yaksh/design_questionpaper.html +++ b/yaksh/templates/yaksh/design_questionpaper.html @@ -23,8 +23,13 @@ select {% block content %} -
- +{% if course_id %} + + Cancel +{% else %} + + Cancel +{% endif %} {% csrf_token %}
Manual mode to design the {{lang}} Question Paper

-- cgit From e1b60921ba995148e0741637011651eb21eb49be Mon Sep 17 00:00:00 2001 From: adityacp Date: Thu, 8 Feb 2018 11:56:11 +0530 Subject: Change in test_views and test_models - Add views test to check active status for lesson and learning module - Change models test for module get_status method --- yaksh/test_models.py | 35 +++++++++++++++++++++++++++-------- yaksh/test_views.py | 24 ++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 8 deletions(-) (limited to 'yaksh') diff --git a/yaksh/test_models.py b/yaksh/test_models.py index 7086a1e..d6fac96 100644 --- a/yaksh/test_models.py +++ b/yaksh/test_models.py @@ -99,6 +99,7 @@ def setUpModule(): course.students.add(course_user) course.save() LessonFile.objects.create(lesson=lesson) + CourseStatus.objects.create(course=course, user=course_user) def tearDownModule(): @@ -136,6 +137,8 @@ class LearningModuleTestCases(unittest.TestCase): self.quiz = Quiz.objects.get(description='demo quiz 1') self.lesson = Lesson.objects.get(name='L1') self.course = Course.objects.get(name='Python Course') + self.course_status = CourseStatus.objects.get( + course=self.course, user=self.student) def test_learning_module(self): self.assertEqual(self.learning_module.description, 'module one') @@ -204,6 +207,29 @@ class LearningModuleTestCases(unittest.TestCase): # Then self.assertEqual(status, module_status) + # Module in progress + + # Given + self.course_status.completed_units.add(self.learning_unit_one) + # When + status = self.learning_module.get_status(self.student, self.course) + # Then + self.assertEqual("inprogress", status) + + # Module is completed + + # Given + self.course_status.completed_units.add(self.learning_unit_two) + # When + status = self.learning_module.get_status(self.student, self.course) + # Then + self.assertEqual("completed", status) + + # Module with no units + self.course.learning_module.add(self.learning_module_two) + status = self.learning_module_two.get_status(self.student, self.course) + self.assertEqual("no units", status) + def test_module_completion_percent(self): # for module without learning units percent = self.learning_module_two.get_module_complete_percent( @@ -212,17 +238,10 @@ class LearningModuleTestCases(unittest.TestCase): self.assertEqual(percent, 0) # for module with learning units - lesson = Lesson.objects.get(name='L1') - self.completed_unit = LearningUnit.objects.get(lesson=lesson) - - course_status = CourseStatus.objects.create( - course=self.course, user=self.student) - course_status.completed_units.add(self.completed_unit) - percent = self.learning_module.get_module_complete_percent( self.course, self.student ) - self.assertEqual(percent, 50) + self.assertEqual(percent, 100) class LearningUnitTestCases(unittest.TestCase): diff --git a/yaksh/test_views.py b/yaksh/test_views.py index 9be8d13..3b27338 100644 --- a/yaksh/test_views.py +++ b/yaksh/test_views.py @@ -5079,6 +5079,30 @@ class TestLessons(TestCase): self.assertEqual(response.status_code, 200) self.assertEqual(response.context["msg"], err_msg) + # Check if lesson is active + self.lesson.active = False + self.lesson.save() + response = self.client.get( + reverse('yaksh:show_lesson', + kwargs={"lesson_id": self.lesson.id, + "module_id": self.learning_module.id, + "course_id": self.course.id})) + err_msg = "{0} is not active".format(self.lesson.name) + self.assertEqual(response.status_code, 200) + self.assertEqual(response.context["msg"], err_msg) + + # Check if module is active + self.learning_module2.active = False + self.learning_module2.save() + response = self.client.get( + reverse('yaksh:show_lesson', + kwargs={"lesson_id": self.lesson2.id, + "module_id": self.learning_module2.id, + "course_id": self.course.id})) + err_msg = "{0} is not active".format(self.learning_module2.name) + self.assertEqual(response.status_code, 200) + self.assertEqual(response.context["msg"], err_msg) + def test_show_all_lessons(self): """ Moderator should be able to see all created lessons""" self.client.login( -- cgit From 93c4469db46ca0df19dbcf33eb7e8f6fad4f5b7b Mon Sep 17 00:00:00 2001 From: adityacp Date: Thu, 8 Feb 2018 12:19:37 +0530 Subject: Change Selenium tests --- yaksh/live_server_tests/selenium_test.py | 2 +- yaksh/templates/yaksh/complete.html | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'yaksh') diff --git a/yaksh/live_server_tests/selenium_test.py b/yaksh/live_server_tests/selenium_test.py index 5635add..6351f9e 100644 --- a/yaksh/live_server_tests/selenium_test.py +++ b/yaksh/live_server_tests/selenium_test.py @@ -152,7 +152,7 @@ class SeleniumTest(): def close_quiz(self): quit_link_elem = WebDriverWait(self.driver, 5).until( - EC.presence_of_element_located((By.ID, "home")) + EC.presence_of_element_located((By.ID, "Next")) ) quit_link_elem.click() diff --git a/yaksh/templates/yaksh/complete.html b/yaksh/templates/yaksh/complete.html index 39f60c2..3d6cadc 100644 --- a/yaksh/templates/yaksh/complete.html +++ b/yaksh/templates/yaksh/complete.html @@ -38,12 +38,12 @@ width="80" alt="YAKSH">{% endblock %} {% endif %} {% if module_id and not user == "moderator" %} {% if first_unit %} - Next + {% else %} - Next + -- cgit From 617d09ca9b05185d9a2310c106360091ed8a1b1a Mon Sep 17 00:00:00 2001 From: adityacp Date: Fri, 9 Feb 2018 14:56:02 +0530 Subject: Change in models, test_models and views - Change learning module test to remove units from course status after successful test run - Remove unnecessary comments from views - Remove unnecessary condition from module get_status method --- yaksh/models.py | 3 +-- yaksh/test_models.py | 9 ++++++++- yaksh/views.py | 4 +--- 3 files changed, 10 insertions(+), 6 deletions(-) (limited to 'yaksh') diff --git a/yaksh/models.py b/yaksh/models.py index 17ba624..fd4ae3f 100644 --- a/yaksh/models.py +++ b/yaksh/models.py @@ -456,8 +456,7 @@ class LearningModule(models.Model): "learning_unit").get(id=self.id) ordered_units = learning_module.learning_unit.order_by("order") status_list = [unit.get_completion_status(user, course) - for unit in ordered_units - if unit.has_prerequisite()] + for unit in ordered_units] if not status_list: default_status = "no units" diff --git a/yaksh/test_models.py b/yaksh/test_models.py index d6fac96..8205b88 100644 --- a/yaksh/test_models.py +++ b/yaksh/test_models.py @@ -140,6 +140,11 @@ class LearningModuleTestCases(unittest.TestCase): self.course_status = CourseStatus.objects.get( course=self.course, user=self.student) + def tearDown(self): + # Remove unit from course status completed units + self.course_status.completed_units.remove(self.learning_unit_one) + self.course_status.completed_units.remove(self.learning_unit_two) + def test_learning_module(self): self.assertEqual(self.learning_module.description, 'module one') self.assertEqual(self.learning_module.creator, self.creator) @@ -199,7 +204,7 @@ class LearningModuleTestCases(unittest.TestCase): # Then self.assertEqual(unit, next_unit) - def test_get_status(self): + def test_get_module_status(self): # Given module_status = 'not attempted' # When @@ -238,6 +243,8 @@ class LearningModuleTestCases(unittest.TestCase): self.assertEqual(percent, 0) # for module with learning units + self.course_status.completed_units.add(self.learning_unit_one) + self.course_status.completed_units.add(self.learning_unit_two) percent = self.learning_module.get_module_complete_percent( self.course, self.student ) diff --git a/yaksh/views.py b/yaksh/views.py index 27325c6..011b417 100644 --- a/yaksh/views.py +++ b/yaksh/views.py @@ -2354,10 +2354,9 @@ def show_lesson(request, lesson_id, module_id, course_id): learn_unit = learn_module.learning_unit.get(lesson_id=lesson_id) learning_units = learn_module.get_learning_units() - # if learning module is active if not learn_module.active: return view_module(request, module_id, course_id) - # if lesson is active or not + if not learn_unit.lesson.active: msg = "{0} is not active".format(learn_unit.lesson.name) return view_module(request, module_id, course_id, msg) @@ -2674,7 +2673,6 @@ def view_module(request, module_id, course_id, msg=None): return course_modules(request, course_id, msg) learning_module = course.learning_module.get(id=module_id) - # Check if module is active or not if not learning_module.active: msg = "{0} is not active".format(learning_module.name) return course_modules(request, course_id, msg) -- cgit