Exemple #1
0
def UpdateScoreAndComments(token, assessment_item):
    domain = api.GetDomain(token.domain.url)
    requester = Requester(domain, token.token)
    sd = assessment_item.submission_datum
    shi = sd.submission_history_item
    quiz = Quiz.objects.get(assignment=shi.submission.assignment)
    attributes = {
        "course_id": quiz.assignment.course.course_id,
        "quiz_id": quiz.quiz_id,
        "id": shi.submission_history_id,
    }
    qs = QuizSubmission(requester, attributes)
    questions = {
        sd.quiz_question.question_id: {
            "score": assessment_item.score,
            "comment": assessment_item.comment,
        }
    }
    data = {
        "quiz_submissions": [{
            "attempt": 1,
            "questions": questions,
        }]
    }
    qs.update_score_and_comments(**data)
 def submit_quiz(quiz_submission: QuizSubmission, answers: List[dict]):
     """
     execute a quiz answers submission
     :param quiz_submission: a QuizSubmission object
     :param answers: calculated answers for all submission questions.
     """
     quiz_submission.answer_submission_questions(quiz_questions=answers)
     logger.info(
         f"successfully sent answers for quiz {str(quiz_submission)}")
Exemple #3
0
    def setUp(self):
        self.canvas = Canvas(settings.BASE_URL, settings.API_KEY)

        self.submission = QuizSubmission(
            self.canvas._Canvas__requester, {
                'id': 1,
                'quiz_id': 1,
                'user_id': 1,
                'course_id': 1,
                'submission_id': 1,
                'attempt': 3,
                'validation_token': 'this is a validation token',
                'manually_unlocked': None,
                'score': 7
            })
 def get_submission_questions(
     quiz_submission: QuizSubmission, ) -> List[QuizSubmissionQuestion]:
     """
     :param quiz_submission: an opened QuizSubmission object
     :return: a list of the quiz's questions
     """
     return quiz_submission.get_submission_questions()
Exemple #5
0
    def setUp(self):
        self.canvas = Canvas(settings.BASE_URL, settings.API_KEY)

        self.submission = QuizSubmission(
            self.canvas._Canvas__requester,
            {
                "id": 1,
                "quiz_id": 1,
                "user_id": 1,
                "course_id": 1,
                "submission_id": 1,
                "attempt": 3,
                "validation_token": "this is a validation token",
                "manually_unlocked": None,
                "score": 7,
            },
        )
Exemple #6
0
    def test_grade_change_quiz(self, prepare_canvas):
        submission = QuizSubmission(
            self.canvas._Canvas__requester,
            {
                "id": 1,
                "quiz_id": 34289,  # use week 1 quiz in course
                "user_id": self.USER_ID,
                "course_id": self.COURSE_ID,
                "submission_id": 1,
                "attempt": 3,
                "validation_token": "this is a validation token",
                "manually_unlocked": None,
                "score": 7,
            },
        )

        print(submission)

        returned_submission = submission.update_score_and_comments(
            quiz_submissions=[{
                "attempt": 1,
                "fudge_points": 1,
                "questions": {
                    "question id 1": {
                        "score": 1,
                        "comment": "question 1 comment"
                    },
                    "question id 2": {
                        "score": 2,
                        "comment": "question 2 comment"
                    },
                    "question id 3": {
                        "score": 3,
                        "comment": "question 3 comment"
                    },
                },
            }])

        assert isinstance(returned_submission, QuizSubmission)
Exemple #7
0
class TestQuizSubmission(unittest.TestCase):
    def setUp(self):
        self.canvas = Canvas(settings.BASE_URL, settings.API_KEY)

        self.submission = QuizSubmission(
            self.canvas._Canvas__requester,
            {
                "id": 1,
                "quiz_id": 1,
                "user_id": 1,
                "course_id": 1,
                "submission_id": 1,
                "attempt": 3,
                "validation_token": "this is a validation token",
                "manually_unlocked": None,
                "score": 7,
            },
        )

    # __str__()
    def test__str__(self, m):
        string = str(self.submission)
        self.assertIsInstance(string, str)

    # complete
    def test_complete(self, m):
        register_uris({"submission": ["complete"]}, m)

        submission = self.submission.complete()

        self.assertIsInstance(submission, QuizSubmission)
        self.assertTrue(hasattr(submission, "id"))
        self.assertTrue(hasattr(submission, "quiz_id"))
        self.assertTrue(hasattr(submission, "attempt"))
        self.assertTrue(hasattr(submission, "validation_token"))

    def test_complete_no_validation_token(self, m):
        del self.submission.validation_token

        with self.assertRaises(RequiredFieldMissing):
            self.submission.complete()

    # get_times
    def test_get_times(self, m):
        register_uris({"submission": ["get_times"]}, m)

        submission = self.submission.get_times()

        self.assertIsInstance(submission, dict)
        self.assertIn("end_at", submission)
        self.assertIn("time_left", submission)
        self.assertIsInstance(submission["time_left"], int)
        self.assertIsInstance(submission["end_at"], text_type)

    # update_score_and_comments
    def test_update_score_and_comments(self, m):
        register_uris({"submission": ["update_score_and_comments"]}, m)

        submission = self.submission.update_score_and_comments(
            quiz_submissions=[{
                "attempt": 1,
                "fudge_points": 1,
                "questions": {
                    "question id 1": {
                        "score": 1,
                        "comment": "question 1 comment"
                    },
                    "question id 2": {
                        "score": 2,
                        "comment": "question 2 comment"
                    },
                    "question id 3": {
                        "score": 3,
                        "comment": "question 3 comment"
                    },
                },
            }])

        self.assertIsInstance(submission, QuizSubmission)
        self.assertTrue(hasattr(submission, "id"))
        self.assertTrue(hasattr(submission, "attempt"))
        self.assertTrue(hasattr(submission, "quiz_id"))
        self.assertTrue(hasattr(submission, "validation_token"))
        self.assertEqual(submission.score, 7)

    # get_submission_events
    def test_get_submission_events(self, m):
        register_uris({"quiz": ["get_submission_events"]}, m)

        events = self.submission.get_submission_events()
        self.assertIsInstance(events, list)
        self.assertIsInstance(events[0], QuizSubmissionEvent)
        self.assertIsInstance(events[1], QuizSubmissionEvent)
        self.assertEqual(str(events[0]), "page_blurred")
        self.assertEqual(str(events[1]), "page_focused")

    # get_submission_questions
    def test_get_submission_questions(self, m):
        register_uris({"submission": ["get_submission_questions"]}, m)

        questions = self.submission.get_submission_questions()

        self.assertIsInstance(questions, list)
        self.assertIsInstance(questions[0], QuizSubmissionQuestion)
        self.assertTrue(hasattr(questions[0], "id"))
        self.assertTrue(hasattr(questions[0], "flagged"))

    # answer_submission_questions
    def test_answer_submission_questions(self, m):
        register_uris({"submission": ["answer_submission_questions"]}, m)

        answered_questions = self.submission.answer_submission_questions()

        self.assertIsInstance(answered_questions, list)
        self.assertIsInstance(answered_questions[0], QuizSubmissionQuestion)
        self.assertTrue(hasattr(answered_questions[0], "id"))
        self.assertTrue(hasattr(answered_questions[0], "flagged"))

    def test_answer_submission_questions_manual_validation_token(self, m):
        register_uris({"submission": ["answer_submission_questions"]}, m)

        del self.submission.validation_token

        answered_questions = self.submission.answer_submission_questions(
            validation_token="new validation token")

        self.assertIsInstance(answered_questions, list)
        self.assertIsInstance(answered_questions[0], QuizSubmissionQuestion)
        self.assertTrue(hasattr(answered_questions[0], "id"))
        self.assertTrue(hasattr(answered_questions[0], "flagged"))

    def test_answer_submission_questions_no_validation_token(self, m):
        del self.submission.validation_token

        with self.assertRaises(RequiredFieldMissing):
            self.submission.answer_submission_questions()

    # submit_events()
    def test_submit_events(self, m):
        register_uris({"quiz": ["get_submission_events", "submit_events"]}, m)

        test_events = self.submission.get_submission_events()

        result = self.submission.submit_events(test_events)
        self.assertTrue(result)

    def test_submit_events_fail(self, m):
        with self.assertRaises(RequiredFieldMissing):
            self.submission.submit_events([{}])
Exemple #8
0
class TestQuizSubmission(unittest.TestCase):
    def setUp(self):
        self.canvas = Canvas(settings.BASE_URL, settings.API_KEY)

        self.submission = QuizSubmission(
            self.canvas._Canvas__requester, {
                'id': 1,
                'quiz_id': 1,
                'user_id': 1,
                'course_id': 1,
                'submission_id': 1,
                'attempt': 3,
                'validation_token': 'this is a validation token',
                'manually_unlocked': None,
                'score': 7
            })

    # __str__()
    def test__str__(self, m):
        string = str(self.submission)
        self.assertIsInstance(string, str)

    # complete
    def test_complete(self, m):
        register_uris({'submission': ['complete']}, m)

        submission = self.submission.complete()

        with self.assertRaises(ValueError):
            self.submission.complete(attempt=1)

        with self.assertRaises(ValueError):
            self.submission.complete(
                validation_token='should not pass validation token here')

        self.assertIsInstance(submission, QuizSubmission)
        self.assertTrue(hasattr(submission, 'id'))
        self.assertTrue(hasattr(submission, 'quiz_id'))
        self.assertTrue(hasattr(submission, 'attempt'))
        self.assertTrue(hasattr(submission, 'validation_token'))

    # get_times
    def test_get_times(self, m):
        register_uris({'submission': ['get_times']}, m)

        submission = self.submission.get_times()

        with self.assertRaises(ValueError):
            self.submission.get_times(attempt=1)

        self.assertIsInstance(submission, dict)
        self.assertIn('end_at', submission)
        self.assertIn('time_left', submission)
        self.assertIsInstance(submission['time_left'], int)
        self.assertIsInstance(submission['end_at'], text_type)

    # update_score_and_comments
    def test_update_score_and_comments(self, m):
        register_uris({'submission': ['update_score_and_comments']}, m)

        submission = self.submission.update_score_and_comments(
            quiz_submissions=[{
                "attempt": 1,
                "fudge_points": 1,
                "questions": {
                    "question id 1": {
                        "score": 1,
                        "comment": "question 1 comment"
                    },
                    "question id 2": {
                        "score": 2,
                        "comment": "question 2 comment"
                    },
                    "question id 3": {
                        "score": 3,
                        "comment": "question 3 comment"
                    }
                }
            }])

        self.assertIsInstance(submission, QuizSubmission)
        self.assertTrue(hasattr(submission, 'id'))
        self.assertTrue(hasattr(submission, 'attempt'))
        self.assertTrue(hasattr(submission, 'quiz_id'))
        self.assertTrue(hasattr(submission, 'validation_token'))
        self.assertEqual(submission.score, 7)