Skip to content

Commit 55dd1da

Browse files
committed
Add testcases for custom templatetag filters
1 parent b3bb71b commit 55dd1da

File tree

6 files changed

+161
-7
lines changed

6 files changed

+161
-7
lines changed

.coveragerc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ omit =
1717
yaksh/pipeline/*
1818
yaksh/migrations/*
1919
yaksh/templatetags/__init__.py
20+
yaksh/templatetags/test_custom_filters.py
2021
yaksh/middleware/__init__.py
2122
setup.py
2223
tasks.py

yaksh/evaluator_tests/test_simple_question_types.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -602,7 +602,7 @@ def setUpClass(self):
602602
)
603603
self.question1.language = 'python'
604604
self.question1.type = "arrange"
605-
self.question1.description = "Arrange the alphabets in ascending order"
605+
self.question1.description = "Arrange alphabets in ascending order"
606606
self.question1.test_case_type = 'arrangetestcase'
607607
self.question1.save()
608608

yaksh/forms.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@
3636
("string", "Answer in String"),
3737
("float", "Answer in Float"),
3838
("arrange", "Arrange Options in Order"),
39-
40-
4139
)
4240

4341
test_case_types = (

yaksh/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1221,8 +1221,8 @@ def make_answerpaper(self, user, ip, attempt_num, course_id):
12211221
question_ids = []
12221222
for question in questions:
12231223
question_ids.append(str(question.id))
1224-
if self.shuffle_testcases and \
1225-
question.type in ["mcq", "mcc"]:
1224+
if (question.type == "arrange") or (self.shuffle_testcases
1225+
and question.type in ["mcq", "mcc"]):
12261226
testcases = question.get_test_cases()
12271227
random.shuffle(testcases)
12281228
testcases_ids = ",".join([str(tc.id) for tc in testcases]
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
import unittest
2+
from datetime import datetime, timedelta
3+
from django.utils import timezone
4+
import pytz
5+
6+
# local imports
7+
from yaksh.models import (User, Profile, Question, Quiz, QuestionPaper,
8+
QuestionSet, AnswerPaper, Answer, Course,
9+
IntegerTestCase, FloatTestCase,
10+
StringTestCase, McqTestCase, ArrangeTestCase,
11+
TestCaseOrder
12+
)
13+
14+
from yaksh.templatetags.custom_filters import (completed, inprogress,
15+
get_ordered_testcases,
16+
get_arrange_user_answer
17+
)
18+
19+
20+
def setUpModule():
21+
# Create user profile
22+
teacher = User.objects.create_user(username='teacher2000',
23+
password='demo',
24+
25+
Profile.objects.create(user=teacher, roll_number=2000, institute='IIT',
26+
department='Chemical', position='Teacher')
27+
# Create a course
28+
course = Course.objects.create(name="Python Course 2000",
29+
enrollment="Enroll Request",
30+
creator=teacher)
31+
# Create a quiz
32+
quiz = Quiz.objects.create(start_date_time=datetime(
33+
2015, 10, 9, 10, 8, 15, 0,
34+
tzinfo=pytz.utc),
35+
end_date_time=datetime(
36+
2199, 10, 9, 10, 8, 15, 0,
37+
tzinfo=pytz.utc),
38+
duration=30, active=True,
39+
attempts_allowed=1, time_between_attempts=0,
40+
description='demo quiz 2000',
41+
pass_criteria=0,
42+
instructions="Demo Instructions",
43+
creator=teacher
44+
)
45+
# Create a question paper
46+
question_paper = QuestionPaper.objects.create(quiz=quiz,
47+
total_marks=1.0)
48+
# Create an answer paper
49+
answerpaper = AnswerPaper.objects.create(user=teacher,
50+
user_ip='101.0.0.1',
51+
start_time=timezone.now(),
52+
question_paper=question_paper,
53+
end_time=timezone.now()
54+
+timedelta(minutes=5),
55+
attempt_number=1,
56+
course=course
57+
)
58+
def tearDownModule():
59+
User.objects.get(username="teacher2000").delete()
60+
61+
62+
class CustomFiltersTestCases(unittest.TestCase):
63+
64+
@classmethod
65+
def setUpClass(self):
66+
self.course = Course.objects.get(name="Python Course 2000")
67+
self.quiz = Quiz.objects.get(description="demo quiz 2000")
68+
self.question_paper = QuestionPaper.objects.get(quiz=self.quiz)
69+
self.user = User.objects.get(username='teacher2000')
70+
self.question1 = Question.objects.create(summary='int1', points=1,
71+
type='code', user=self.user)
72+
self.question1.language = 'python'
73+
self.question1.type = "arrange"
74+
self.question1.description = "Arrange alphabets in ascending order"
75+
self.question1.test_case_type = 'arrangetestcase'
76+
self.question1.save()
77+
self.question_paper.fixed_questions.add(self.question1)
78+
self.question_paper.save()
79+
#Creating answerpaper
80+
81+
self.answerpaper = AnswerPaper.objects.create(user=self.user,
82+
user_ip='101.0.0.1',
83+
start_time=timezone.now(),
84+
question_paper=self.question_paper,
85+
end_time=timezone.now()
86+
+timedelta(minutes=5),
87+
attempt_number=1,
88+
course=self.course
89+
)
90+
self.answerpaper.questions.add(self.question1)
91+
self.answerpaper.save()
92+
# For question
93+
self.arrange_testcase_1 = ArrangeTestCase(question=self.question1,
94+
options="A",
95+
type = 'arrangetestcase',
96+
)
97+
self.arrange_testcase_1.save()
98+
self.testcase_1_id = self.arrange_testcase_1.id
99+
self.arrange_testcase_2 = ArrangeTestCase(question=self.question1,
100+
options="B",
101+
type = 'arrangetestcase',
102+
)
103+
self.arrange_testcase_2.save()
104+
self.testcase_2_id = self.arrange_testcase_2.id
105+
self.arrange_testcase_3 = ArrangeTestCase(question=self.question1,
106+
options="C",
107+
type = 'arrangetestcase',
108+
)
109+
self.arrange_testcase_3.save()
110+
self.testcase_3_id = self.arrange_testcase_3.id
111+
112+
@classmethod
113+
def tearDownClass(self):
114+
self.question1.delete()
115+
self.answerpaper.delete()
116+
117+
def test_completed_inprogress(self):
118+
# Test in progress
119+
answerpaper = AnswerPaper.objects.filter(id=self.answerpaper.id)
120+
121+
self.assertEqual(inprogress(answerpaper), 1)
122+
self.assertEqual(completed(answerpaper), 0)
123+
# Test completed
124+
self.answerpaper.status='completed'
125+
self.answerpaper.save()
126+
self.assertEqual(inprogress(answerpaper), 0)
127+
self.assertEqual(completed(answerpaper), 1)
128+
129+
def test_get_arrange_user_answer(self):
130+
arrange_ans = [self.arrange_testcase_3,
131+
self.arrange_testcase_2,
132+
self.arrange_testcase_1,
133+
]
134+
arrange_ans_id = [tc.id for tc in arrange_ans]
135+
user_ans_order = get_arrange_user_answer(arrange_ans_id,
136+
self.question1
137+
)
138+
self.assertSequenceEqual(arrange_ans, user_ans_order)
139+
140+
def test_get_ordered_testcases(self):
141+
new_answerpaper = self.question_paper.make_answerpaper(self.user,
142+
"101.0.0.1",2,
143+
self.course.id
144+
)
145+
tc = TestCaseOrder.objects.get(answer_paper=new_answerpaper,
146+
question=self.question1
147+
)
148+
tc_list = [self.question1.get_test_case(id=ids)
149+
for ids in tc.order.split(",")
150+
]
151+
152+
ordered_testcases = get_ordered_testcases(self.question1,
153+
new_answerpaper
154+
)
155+
self.assertSequenceEqual(tc_list, ordered_testcases)
156+
157+
new_answerpaper.delete()

yaksh/views.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,8 +242,6 @@ def add_question(request, question_id=None):
242242
if qform.is_valid():
243243
question = qform.save(commit=False)
244244
question.user = user
245-
if question.type == "arrange":
246-
question.shuffle_testcases = True
247245
question.save()
248246
# many-to-many field save function used to save the tags
249247
qform.save_m2m()

0 commit comments

Comments
 (0)