Beispiel #1
0
    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)
Beispiel #6
0
    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'])
Beispiel #9
0
    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'])
Beispiel #11
0
    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'])
Beispiel #14
0
    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)
Beispiel #15
0
    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)
Beispiel #16
0
    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()