summaryrefslogtreecommitdiff
path: root/yaksh
diff options
context:
space:
mode:
Diffstat (limited to 'yaksh')
-rw-r--r--yaksh/models.py29
-rw-r--r--yaksh/tests.py105
-rw-r--r--yaksh/views.py3
3 files changed, 106 insertions, 31 deletions
diff --git a/yaksh/models.py b/yaksh/models.py
index d6fe972..46fb9a3 100644
--- a/yaksh/models.py
+++ b/yaksh/models.py
@@ -62,6 +62,7 @@ def get_assignment_dir(instance, filename):
###############################################################################
class Course(models.Model):
+ """ Course for students"""
name = models.CharField(max_length=128)
enrollment = models.CharField(max_length=32, choices=enrollment_methods)
active = models.BooleanField(default=True)
@@ -77,17 +78,7 @@ class Course(models.Model):
def get_requests(self):
return self.requests.all()
- def reject(self, was_enrolled=False, *users):
- self.rejected.add(*users)
- if not was_enrolled:
- self.requests.remove(*users)
- else:
- self.students.remove(*users)
-
- def get_rejected(self):
- return self.rejected.all()
-
- def enroll(self, was_rejected=False, *users):
+ def enroll(self, was_rejected, *users):
self.students.add(*users)
if not was_rejected:
self.requests.remove(*users)
@@ -97,12 +88,25 @@ class Course(models.Model):
def get_enrolled(self):
return self.students.all()
+ def reject(self, was_enrolled, *users):
+ self.rejected.add(*users)
+ if not was_enrolled:
+ self.requests.remove(*users)
+ else:
+ self.students.remove(*users)
+
+ def get_rejected(self):
+ return self.rejected.all()
+
def is_enrolled(self, user_id):
return self.students.filter(id=user_id).exists()
def is_creator(self, user):
return self.creator == user
+ def is_self_enroll(self):
+ return True if self.enrollment == enrollment_methods[1][0] else False
+
def get_quizzes(self):
return self.quiz_set.all()
@@ -112,9 +116,6 @@ class Course(models.Model):
def deactivate(self):
self.active = False
- def is_self_enroll(self):
- return True if self.enrollment == 'open' else False
-
def __unicode__(self):
return self.name
diff --git a/yaksh/tests.py b/yaksh/tests.py
index 9c67c02..17e6130 100644
--- a/yaksh/tests.py
+++ b/yaksh/tests.py
@@ -1,8 +1,9 @@
from django.utils import unittest
from yaksh.models import User, Profile, Question, Quiz, QuestionPaper,\
- QuestionSet, AnswerPaper, Answer, TestCase
+ QuestionSet, AnswerPaper, Answer, TestCase, Course
import datetime, json
+
def setUpModule():
# create user profile
user = User.objects.create_user(username='demo_user',
@@ -13,6 +14,15 @@ def setUpModule():
email='demo@test.com')
Profile.objects.create(user=user, roll_number=1, institute='IIT',
department='Chemical', position='Student')
+ student = User.objects.create_user(username='demo_user3',
+ password='demo',
+ email='demo3@test.com')
+ Profile.objects.create(user=student, roll_number=3, institute='IIT',
+ department='Chemical', position='Student')
+
+ # create a course
+ course = Course.objects.create(name="Python Course",
+ enrollment="Enroll Request", creator=user)
# create 20 questions
for i in range(1, 21):
@@ -20,10 +30,11 @@ def setUpModule():
# create a quiz
Quiz.objects.create(start_date_time=datetime.datetime(2015, 10, 9, 10, 8, 15, 0),
- duration=30, active=False,
- attempts_allowed=-1, time_between_attempts=0,
- description='demo quiz', pass_criteria=40,
- language='Python', prerequisite=None)
+ duration=30, active=False,
+ attempts_allowed=-1, time_between_attempts=0,
+ description='demo quiz', pass_criteria=40,
+ language='Python', prerequisite=None,
+ course=course)
def tearDownModule():
@@ -62,14 +73,14 @@ class QuestionTestCases(unittest.TestCase):
func_name='def myfunc', kw_args='a=10,b=11',
pos_args='12,13', expected_answer='15')
answer_data = { "test": "",
- "user_answer": "demo_answer",
- "test_parameter": [{"func_name": "def myfunc",
- "expected_answer": "15",
- "test_id": self.testcase.id,
- "pos_args": ["12", "13"],
- "kw_args": {"a": "10",
+ "user_answer": "demo_answer",
+ "test_parameter": [{"func_name": "def myfunc",
+ "expected_answer": "15",
+ "test_id": self.testcase.id,
+ "pos_args": ["12", "13"],
+ "kw_args": {"a": "10",
"b": "11"}
- }],
+ }],
"id": self.question.id,
"ref_code_path": "",
}
@@ -93,10 +104,9 @@ class QuestionTestCases(unittest.TestCase):
def test_consolidate_answer_data(self):
""" Test consolidate_answer_data function """
- result = self.question.consolidate_answer_data([self.testcase],
+ result = self.question.consolidate_answer_data([self.testcase],
self.user_answer)
self.assertEqual(result, self.answer_data_json)
-
###############################################################################
@@ -107,7 +117,7 @@ class TestCaseTestCases(unittest.TestCase):
description='Write a function', points=1.0,
snippet='def myfunc()')
self.question.save()
- self.testcase = TestCase(question=self.question,
+ self.testcase = TestCase(question=self.question,
func_name='def myfunc', kw_args='a=10,b=11',
pos_args='12,13', expected_answer='15')
@@ -188,7 +198,7 @@ class QuestionPaperTestCases(unittest.TestCase):
def test_questionpaper(self):
""" Test question paper"""
self.assertEqual(self.question_paper.quiz.description, 'demo quiz')
- self.assertEqual(list(self.question_paper.fixed_questions.all()),
+ self.assertSequenceEqual(self.question_paper.fixed_questions.all(),
[self.questions[3], self.questions[5]])
self.assertTrue(self.question_paper.shuffle_questions)
@@ -350,3 +360,66 @@ class AnswerPaperTestCases(unittest.TestCase):
self.assertEqual(self.answerpaper.status, 'inprogress')
self.answerpaper.update_status('completed')
self.assertEqual(self.answerpaper.status, 'completed')
+
+
+###############################################################################
+class CourseTestCases(unittest.TestCase):
+ def setUp(self):
+ self.course = Course.objects.get(pk=1)
+ self.creator = User.objects.get(pk=1)
+ self.student1 = User.objects.get(pk=2)
+ self.student2 = User.objects.get(pk=3)
+ self.quiz = Quiz.objects.get(pk=1)
+
+ def test_is_creator(self):
+ """ Test is_creator method of Course"""
+ self.assertTrue(self.course.is_creator(self.creator))
+
+ def test_is_self_enroll(self):
+ """ Test is_self_enroll method of Course"""
+ self.assertFalse(self.course.is_self_enroll())
+
+ def test_deactivate(self):
+ """ Test deactivate method of Course"""
+ self.course.deactivate()
+ self.assertFalse(self.course.active)
+
+ def test_activate(self):
+ """ Test activate method of Course"""
+ self.course.activate()
+ self.assertTrue(self.course.active)
+
+ def test_request(self):
+ """ Test request and get_requests methods of Course"""
+ self.course.request(self.student1, self.student2)
+ self.assertSequenceEqual(self.course.get_requests(),
+ [self.student1, self.student2])
+
+ def test_enroll_reject(self):
+ """ Test enroll, reject, get_enrolled and get_rejected methods"""
+ self.assertSequenceEqual(self.course.get_enrolled(), [])
+ was_rejected = False
+ self.course.enroll(was_rejected, self.student1)
+ self.assertSequenceEqual(self.course.get_enrolled(), [self.student1])
+
+ self.assertSequenceEqual(self.course.get_rejected(), [])
+ was_enrolled = False
+ self.course.reject(was_enrolled, self.student2)
+ self.assertSequenceEqual(self.course.get_rejected(), [self.student2])
+
+ was_rejected = True
+ self.course.enroll(was_rejected, self.student2)
+ self.assertSequenceEqual(self.course.get_enrolled(),
+ [self.student1, self.student2])
+ self.assertSequenceEqual(self.course.get_rejected(), [])
+
+ was_enrolled = True
+ self.course.reject(was_enrolled, self.student2)
+ self.assertSequenceEqual(self.course.get_rejected(), [self.student2])
+ self.assertSequenceEqual(self.course.get_enrolled(), [self.student1])
+
+ self.assertTrue(self.course.is_enrolled(self.student1.id))
+
+ def test_get_quizzes(self):
+ """ Test get_quizzes method of Courses"""
+ self.assertSequenceEqual(self.course.get_quizzes(), [self.quiz])
diff --git a/yaksh/views.py b/yaksh/views.py
index 9540a06..ffe8d93 100644
--- a/yaksh/views.py
+++ b/yaksh/views.py
@@ -1206,7 +1206,8 @@ def self_enroll(request, course_id):
ci = RequestContext(request)
course = get_object_or_404(Course, pk=course_id)
if course.is_self_enroll():
- course.enroll(False, user)
+ was_rejected = False
+ course.enroll(was_rejected, user)
return my_redirect('/exam/manage/')