From 714eeb188c67a6b61dfd132f0869e7679d91c8bf Mon Sep 17 00:00:00 2001 From: maheshgudi Date: Thu, 12 Jul 2018 20:08:20 +0530 Subject: Fix multiple testcase error --- yaksh/models.py | 12 +++++++++--- yaksh/test_models.py | 18 +++++++++++++++++- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/yaksh/models.py b/yaksh/models.py index 5d17dba..12bada8 100644 --- a/yaksh/models.py +++ b/yaksh/models.py @@ -1360,9 +1360,12 @@ class QuestionPaper(models.Model): random.shuffle(testcases) testcases_ids = ",".join([str(tc.id) for tc in testcases] ) - TestCaseOrder.objects.create( - answer_paper=ans_paper, question=question, - order=testcases_ids) + if not TestCaseOrder.objects.filter( + answer_paper=ans_paper, question=question + ).exists(): + TestCaseOrder.objects.create( + answer_paper=ans_paper, question=question, + order=testcases_ids) ans_paper.questions_order = ",".join(question_ids) ans_paper.save() @@ -2200,4 +2203,7 @@ class TestCaseOrder(models.Model): order = models.TextField() + class Meta: + unique_together = ("answer_paper", "question", "order") + ############################################################################## diff --git a/yaksh/test_models.py b/yaksh/test_models.py index eaf5bbc..7bb7e52 100644 --- a/yaksh/test_models.py +++ b/yaksh/test_models.py @@ -2,7 +2,8 @@ import unittest from yaksh.models import User, Profile, Question, Quiz, QuestionPaper,\ QuestionSet, AnswerPaper, Answer, Course, StandardTestCase,\ StdIOBasedTestCase, FileUpload, McqTestCase, AssignmentUpload,\ - LearningModule, LearningUnit, Lesson, LessonFile, CourseStatus + LearningModule, LearningUnit, Lesson, LessonFile, CourseStatus, \ + TestCaseOrder from yaksh.code_server import ( ServerPool, get_result as get_result_from_code_server ) @@ -1270,6 +1271,21 @@ class AnswerPaperTestCases(unittest.TestCase): self.assertEqual(self.answer.marks, 0) self.assertFalse(self.answer.correct) + def test_testcase_order(self): + testcase_ids = ",".join([str(ids) for ids in + self.question2.get_test_cases() + ]) + testcase_order = TestCaseOrder.objects.create( + answer_paper=self.answerpaper, + question=self.question2, + order=testcase_ids) + with self.assertRaises(IntegrityError): + TestCaseOrder.objects.create(answer_paper=self.answerpaper, + question=self.question2, + order=testcase_ids + ) + testcase_order.delete() + def test_validate_and_regrade_mcq_correct_answer(self): # Given mcq_answer = str(self.mcq_based_testcase.id) -- cgit