def setUpClass(self): self.ip = '101.0.0.1' self.user = User.objects.get(id=1) self.profile = self.user.profile self.quiz = Quiz.objects.get(pk=1) self.question_paper = QuestionPaper(quiz=self.quiz, total_marks=3) self.question_paper.save() # create answerpaper self.answerpaper = AnswerPaper(user=self.user, questions='1|2|3', question_paper=self.question_paper, start_time='2014-06-13 12:20:19.791297', end_time='2014-06-13 12:50:19.791297', user_ip=self.ip) self.answerpaper.questions_answered = '1' self.attempted_papers = AnswerPaper.objects.filter( question_paper=self.question_paper, user=self.user) already_attempted = self.attempted_papers.count() self.answerpaper.attempt_number = already_attempted + 1 self.answerpaper.save() # answers for the Answer Paper self.answer_right = Answer(question=Question.objects.get(id=1), answer="Demo answer", correct=True, marks=1) self.answer_wrong = Answer(question=Question.objects.get(id=2), answer="My answer", correct=False, marks=0) self.answer_right.save() self.answer_wrong.save() self.answerpaper.answers.add(self.answer_right) self.answerpaper.answers.add(self.answer_wrong)
def test_float_incorrect_answer(self): # Given float_answer = 99.8 self.answer = Answer( question=self.question1, answer=float_answer, ) self.answer.save() self.answerpaper.answers.add(self.answer) # When json_data = None result = self.answerpaper.validate_answer(float_answer, self.question1, json_data) # Then self.assertFalse(result['success']) # Regrade # Given regrade_answer = Answer.objects.get(id=self.answer.id) regrade_answer.answer = 99.9 regrade_answer.save() # When details = self.answerpaper.regrade(self.question1.id) # Then self.answer = self.answerpaper.answers.filter( question=self.question1).last() self.assertEqual(self.answer, regrade_answer) self.assertTrue(details[0]) self.assertEqual(self.answer.marks, 1) self.assertTrue(self.answer.correct)
def test_case_sensitive_string_incorrect_answer(self): # Given string_answer = "hello, earth!" answer = Answer(question=self.question2, answer=string_answer) answer.save() self.answerpaper.answers.add(answer) # When json_data = None result = self.answerpaper.validate_answer(string_answer, self.question2, json_data) # Then self.assertFalse(result['success']) # Regrade # Given regrade_answer = Answer.objects.get(id=answer.id) regrade_answer.answer = "Hello, EARTH!" regrade_answer.save() # When details = self.answerpaper.regrade(self.question2.id) # Then answer = self.answerpaper.answers.filter( question=self.question2).last() self.assertEqual(answer, regrade_answer) self.assertTrue(details[0]) self.assertEqual(answer.marks, 1) self.assertTrue(answer.correct)
def test_validate_regrade_integer_correct_answer(self): # Given integer_answer = 25 self.answer = Answer(question=self.question1, answer=integer_answer, ) self.answer.save() self.answerpaper.answers.add(self.answer) self.answerpaper.save() # When json_data = None result = self.answerpaper.validate_answer(integer_answer, self.question1, json_data, ) # Then self.assertTrue(result['success']) # Regrade # Given self.answer.correct = True self.answer.marks = 1 self.answer.answer = 200 self.answer.save() # When details = self.answerpaper.regrade(self.question1.id) # Then self.answer = self.answerpaper.answers.filter(question=self.question1 ).last() self.assertTrue(details[0]) self.assertEqual(self.answer.marks, 0) self.assertFalse(self.answer.correct)
def test_validate_regrade_case_insensitive_string_incorrect_answer(self): # Given string_answer = "hello, mars!" answer = Answer(question=self.question1,answer=string_answer) answer.save() self.answerpaper.answers.add(answer) # When json_data = None result = self.answerpaper.validate_answer(string_answer, self.question1, json_data ) # Then self.assertFalse(result['success']) # Regrade # Given answer.correct = True answer.marks = 1 answer.answer = "hello, earth!" answer.save() # When details = self.answerpaper.regrade(self.question1.id) # Then answer = self.answerpaper.answers.filter(question=self.question1)\ .last() self.assertTrue(details[0]) self.assertEqual(answer.marks, 1) self.assertTrue(answer.correct)
def test_validate_regrade_arrange_correct_answer(self): # Given arrange_answer = [self.testcase_1_id, self.testcase_2_id, self.testcase_3_id, ] self.answer = Answer(question=self.question1, answer=arrange_answer, ) self.answer.save() self.answerpaper.answers.add(self.answer) # When json_data = None result = self.answerpaper.validate_answer(arrange_answer, self.question1, json_data, ) # Then self.assertTrue(result['success']) # Regrade with wrong answer # Given regrade_answer = Answer.objects.get(id=self.answer.id) # Try regrade with wrong data structure # When regrade_answer.answer = 1 regrade_answer.save() details = self.answerpaper.regrade(self.question1.id) err_msg = dedent("""\ User: {0}; Quiz: {1}; Question: {2}. {3} answer not a list.""".format( self.user.username, self.quiz.description, self.question1.summary, self.question1.type ) ) self.assertFalse(details[0]) self.assertEqual(details[1], err_msg) # Try regrade with incorrect answer # When regrade_answer.answer = [self.testcase_1_id, self.testcase_3_id, self.testcase_2_id, ] regrade_answer.save() # Then details = self.answerpaper.regrade(self.question1.id) self.answer = self.answerpaper.answers.filter(question=self.question1 ).last() self.assertEqual(self.answer, regrade_answer) self.assertTrue(details[0]) self.assertEqual(self.answer.marks, 0) self.assertFalse(self.answer.correct)
def test_validate_regrade_arrange_correct_answer(self): # Given arrange_answer = [ self.testcase_1_id, self.testcase_2_id, self.testcase_3_id, ] self.answer = Answer( question=self.question1, answer=arrange_answer, ) self.answer.save() self.answerpaper.answers.add(self.answer) # When json_data = None result = self.answerpaper.validate_answer( arrange_answer, self.question1, json_data, ) # Then self.assertTrue(result['success']) # Regrade with wrong answer # Given regrade_answer = Answer.objects.get(id=self.answer.id) # Try regrade with wrong data structure # When regrade_answer.answer = 1 regrade_answer.save() details = self.answerpaper.regrade(self.question1.id) self.assertFalse(details[0]) self.assertIn("arrange answer not a list", details[1]) # Try regrade with incorrect answer # When regrade_answer.answer = [ self.testcase_1_id, self.testcase_3_id, self.testcase_2_id, ] regrade_answer.save() # Then details = self.answerpaper.regrade(self.question1.id) self.answer = self.answerpaper.answers.filter( question=self.question1).last() self.assertEqual(self.answer, regrade_answer) self.assertTrue(details[0]) self.assertEqual(self.answer.marks, 0) self.assertFalse(self.answer.correct)
def test_case_sensitive_string_correct_answer(self): # Given string_answer = "Hello, EARTH!" answer = Answer(question=self.question2, answer=string_answer) answer.save() self.answerpaper.answers.add(answer) # When json_data = None result = self.answerpaper.validate_answer(string_answer, self.question2, json_data) # Then self.assertTrue(result['success'])
def setUpClass(self): self.ip = '101.0.0.1' self.user = User.objects.get(id=1) self.profile = self.user.profile self.quiz = Quiz.objects.get(pk=1) self.question_paper = QuestionPaper(quiz=self.quiz, total_marks=3) self.question_paper.save() self.questions = Question.objects.filter(id__in=[1, 2, 3]) self.start_time = timezone.now() self.end_time = self.start_time + timedelta(minutes=20) # create answerpaper self.answerpaper = AnswerPaper(user=self.user, question_paper=self.question_paper, start_time=self.start_time, end_time=self.end_time, user_ip=self.ip) self.attempted_papers = AnswerPaper.objects.filter( question_paper=self.question_paper, user=self.user) already_attempted = self.attempted_papers.count() self.answerpaper.attempt_number = already_attempted + 1 self.answerpaper.save() self.answerpaper.questions.add(*self.questions) self.answerpaper.questions_unanswered.add(*self.questions) self.answerpaper.save() # answers for the Answer Paper self.answer_right = Answer(question=Question.objects.get(id=1), answer="Demo answer", correct=True, marks=1) self.answer_wrong = Answer(question=Question.objects.get(id=2), answer="My answer", correct=False, marks=0) self.answer_right.save() self.answer_wrong.save() self.answerpaper.answers.add(self.answer_right) self.answerpaper.answers.add(self.answer_wrong)
def test_case_insensitive_string_incorrect_answer(self): # Given string_answer = "hello, mars!" answer = Answer(question=self.question1, answer=string_answer) answer.save() self.answerpaper.answers.add(answer) # When json_data = None result = self.answerpaper.validate_answer(string_answer, self.question1, json_data) # Then self.assertFalse(result['success'])
def test_mcc_incorrect_answer(self): # Given mcc_answer = ['b'] self.answer = Answer( question=self.question3, answer=mcc_answer, ) self.answer.save() self.answerpaper.answers.add(self.answer) # When json_data = None result = self.answerpaper.validate_answer(mcc_answer, self.question3, json_data) # Then self.assertFalse(result['success'])
def test_integer_incorrect_answer(self): # Given float_answer = 99.8 self.answer = Answer( question=self.question1, answer=float_answer, ) self.answer.save() self.answerpaper.answers.add(self.answer) # When json_data = None result = self.answerpaper.validate_answer(float_answer, self.question1, json_data) # Then self.assertFalse(result['success'])
def test_integer_correct_answer(self): # Given integer_answer = 25 self.answer = Answer( question=self.question1, answer=integer_answer, ) self.answer.save() self.answerpaper.answers.add(self.answer) # When json_data = None result = self.answerpaper.validate_answer( integer_answer, self.question1, json_data, ) # Then self.assertTrue(result['success'])
def test_validate_and_regrade_mcq_question(self): # Given mcq_answer = 'a' self.answer = Answer( question=self.question2, answer=mcq_answer, ) self.answer.save() self.answerpaper.answers.add(self.answer) # When json_data = None correct, result = self.answerpaper.validate_answer( mcq_answer, self.question2, json_data) # Then self.assertTrue(correct) self.assertTrue(result['success']) self.assertEqual(result['error'], 'Correct answer') self.answer.correct = True self.answer.marks = 1 # Given self.answer.correct = True self.answer.marks = 1 self.answer.answer = 'b' self.answer.save() # When details = self.answerpaper.regrade(self.question2.id) # Then self.answer = self.answerpaper.answers.filter( question=self.question2).last() self.assertTrue(details[0]) self.assertEqual(self.answer.marks, 0) self.assertFalse(self.answer.correct)
def test_validate_and_regrade_mcc_correct_answer(self): # Given mcc_answer = ['a'] self.answer = Answer( question=self.question3, answer=mcc_answer, ) self.answer.save() self.answerpaper.answers.add(self.answer) # When json_data = None result = self.answerpaper.validate_answer(mcc_answer, self.question3, json_data) # Then self.assertTrue(result['success']) self.assertEqual(result['error'], ['Correct answer']) self.answer.correct = True self.answer.marks = 1 # Given self.answer.correct = True self.answer.marks = 1 self.answer.answer = ['a', 'b'] self.answer.save() # When details = self.answerpaper.regrade(self.question3.id) # Then self.answer = self.answerpaper.answers.filter( question=self.question3).last() self.assertTrue(details[0]) self.assertEqual(self.answer.marks, 0) self.assertFalse(self.answer.correct)
def setUpClass(self): self.ip = '101.0.0.1' self.user = User.objects.get(id=1) self.profile = self.user.profile self.quiz = Quiz.objects.get(pk=1) self.question_paper = QuestionPaper(quiz=self.quiz, total_marks=3) self.question_paper.save() self.questions = Question.objects.filter(id__in=[1, 2, 3]) self.start_time = timezone.now() self.end_time = self.start_time + timedelta(minutes=20) self.question1 = self.questions.get(id=1) self.question2 = self.questions.get(id=2) self.question3 = self.questions.get(id=3) # create answerpaper self.answerpaper = AnswerPaper(user=self.user, question_paper=self.question_paper, start_time=self.start_time, end_time=self.end_time, user_ip=self.ip) self.attempted_papers = AnswerPaper.objects.filter( question_paper=self.question_paper, user=self.user) already_attempted = self.attempted_papers.count() self.answerpaper.attempt_number = already_attempted + 1 self.answerpaper.save() self.answerpaper.questions.add(*self.questions) self.answerpaper.questions_unanswered.add(*self.questions) self.answerpaper.save() # answers for the Answer Paper self.answer_right = Answer(question=Question.objects.get(id=1), answer="Demo answer", correct=True, marks=1, error=json.dumps([])) self.answer_wrong = Answer(question=Question.objects.get(id=2), answer="My answer", correct=False, marks=0, error=json.dumps(['error1', 'error2'])) self.answer_right.save() self.answer_wrong.save() self.answerpaper.answers.add(self.answer_right) self.answerpaper.answers.add(self.answer_wrong) self.question1.language = 'python' self.question1.test_case_type = 'standardtestcase' self.question1.save() self.question2.language = 'python' self.question2.type = 'mcq' self.question2.test_case_type = 'mcqtestcase' self.question2.save() self.question3.language = 'python' self.question3.type = 'mcc' self.question3.test_case_type = 'mcqtestcase' self.question3.save() self.assertion_testcase = StandardTestCase( question=self.question1, test_case='assert add(1, 3) == 4', type='standardtestcase') self.assertion_testcase.save() self.mcq_based_testcase = McqTestCase(options='a', question=self.question2, correct=True, type='mcqtestcase') self.mcq_based_testcase.save() self.mcc_based_testcase = McqTestCase(question=self.question3, options='a', correct=True, type='mcqtestcase') self.mcc_based_testcase.save()