Skip to content
test_inline.py 31.8 KiB
Newer Older
Dong Zhuang's avatar
Dong Zhuang committed

    def test_answers_naming_error(self):
        markdown = INLINE_MULTI_MARKDOWN_ANSWERS_NAMING_ERROR
        resp = self.get_page_sandbox_preview_response(markdown)
        self.assertEqual(resp.status_code, 200)
        self.assertSandboxNotHasValidPage(resp)
        self.assertResponseContextContains(
            resp, PAGE_ERRORS,
            "invalid answers name '2choice'. A valid name should start "
            "with letters. Alphanumeric with underscores. Do not use "
            "spaces.")

    def test_embedded_naming_duplicated(self):
        markdown = INLINE_MULTI_MARKDOWN_EMBEDDED_NAMING_DUPLICATED
        resp = self.get_page_sandbox_preview_response(markdown)
        self.assertEqual(resp.status_code, 200)
        self.assertSandboxNotHasValidPage(resp)
        self.assertResponseContextContains(
            resp, PAGE_ERRORS,
            "embedded question name 'blank1', 'choice1' not unique.")

    def test_has_unpaired_wrapper(self):
        markdown = INLINE_MULTI_MARKDOWN_HAS_UNPAIRED_WRAPPER
        resp = self.get_page_sandbox_preview_response(markdown)
        self.assertEqual(resp.status_code, 200)
        self.assertSandboxNotHasValidPage(resp)
        self.assertResponseContextContains(
            resp, PAGE_ERRORS,
            "question has unpaired '[['.")

    def test_redundant(self):
        markdown = INLINE_MULTI_MARKDOWN_REDUNDANT
        resp = self.get_page_sandbox_preview_response(markdown)
        self.assertEqual(resp.status_code, 200)
        self.assertSandboxHasValidPage(resp)
        self.assertSandboxWarningTextContain(
            resp,
            "redundant answers 'blank_2' provided for non-existing "
            "question(s).")

        resp = self.get_page_sandbox_submit_answer_response(
            markdown,
            answer_data={"blank1": "Bar"})
Dong Zhuang's avatar
Dong Zhuang committed
        self.assertEqual(resp.status_code, 200)
        self.assertContains(resp, "This is an explanation.")
        self.assertResponseContextAnswerFeedbackCorrectnessEquals(resp, 1)

    def test_embedded_question_with_markdown(self):
Dong Zhuang's avatar
Dong Zhuang committed

        commit_sha = "b3cca1b997b24f526196a11c7e34098313a8950b"
Dong Zhuang's avatar
Dong Zhuang committed
        self.post_update_course_content(
            commit_sha=commit_sha.encode())
Dong Zhuang's avatar
Dong Zhuang committed

Dong Zhuang's avatar
Dong Zhuang committed
        markdown = INLINE_MULTI_EMBEDDED_WITH_MARKDOWN
        resp = self.get_page_sandbox_preview_response(markdown)
        self.assertEqual(resp.status_code, 200)
        self.assertSandboxHasValidPage(resp)
        self.assertContains(
            resp, f'<img src="/course/test-course/media/{commit_sha}'
                  '/images/classroom.jpeg">', html=True)
Josh Asplund's avatar
Josh Asplund committed
@pytest.mark.slow
Dong Zhuang's avatar
Dong Zhuang committed
class InlineMultiPageUpdateTest(SingleCourseQuizPageTestMixin, TestCase):
    page_id = "inlinemulti"
Dong Zhuang's avatar
Dong Zhuang committed

    def setUp(self):
Dong Zhuang's avatar
Dong Zhuang committed

    def test_quiz_inline_not_show_correctness(self):
        self.start_flow(self.flow_id)

        with mock.patch("course.flow.get_page_behavior") as mock_get_bhv:
            mock_get_bhv.side_effect = (
                get_page_behavior_not_show_correctness_side_effect)
Dong Zhuang's avatar
Dong Zhuang committed

            submit_answer_response, _ = (
                self.submit_page_answer_by_page_id_and_test(
                    self.page_id, do_grading=False))
            self.assertEqual(submit_answer_response.status_code, 200)
Dong Zhuang's avatar
Dong Zhuang committed

            # 7 answer
Dong Zhuang's avatar
Dong Zhuang committed
            self.assertContains(submit_answer_response, 'correctness="1"', count=0)
            self.assertContains(submit_answer_response, 'correctness="0"', count=0)

            self.end_flow()
            self.assertSessionScoreEqual(10)
Dong Zhuang's avatar
Dong Zhuang committed

    # {{{ Test bug fix in https://github.com/inducer/relate/pull/262

    def test_add_new_question(self):
        """Test bug fix in https://github.com/inducer/relate/pull/262
        """
        with mock.patch("course.content.get_repo_blob") as mock_get_repo_blob:
            mock_get_repo_blob.side_effect = get_repo_blob_side_effect

            self.post_update_course_content(
                commit_sha=b"ec41a2de73a99e6022060518cb5c5c162b88cdf5")

            self.start_flow(self.flow_id)
            resp = self.client.get(
Dong Zhuang's avatar
Dong Zhuang committed
                self.get_page_url_by_page_id(page_id=self.page_id))
Dong Zhuang's avatar
Dong Zhuang committed

            self.assertEqual(resp.status_code, 200)
            self.assertContains(resp, "(old version)")

            answer_data = {
                "blank1": "Bar", "blank_2": "0.2", "blank3": "1",
                "blank4": "5", "choice2": "0", "choice_a": "0"}
Dong Zhuang's avatar
Dong Zhuang committed
            submit_answer_response, _ = (
                self.submit_page_answer_by_page_id_and_test(
                    self.page_id, answer_data=answer_data, expected_grades=10))
Dong Zhuang's avatar
Dong Zhuang committed

            # 6 correct answer
Dong Zhuang's avatar
Dong Zhuang committed
            self.assertContains(submit_answer_response,
                                'correctness="1"', count=6)
Dong Zhuang's avatar
Dong Zhuang committed

        self.post_update_course_content(
            commit_sha=b"4124e0c23e369d6709a670398167cb9c2fe52d35")
        resp = self.client.get(
Dong Zhuang's avatar
Dong Zhuang committed
            self.get_page_url_by_page_id(page_id=self.page_id))
Dong Zhuang's avatar
Dong Zhuang committed

        self.assertEqual(resp.status_code, 200)

        # 7 answer
        self.assertContains(resp, 'correctness="1"', count=7)

Dong Zhuang's avatar
Dong Zhuang committed
# vim: fdm=marker