示例#1
0
    def test_view_excel_file_sorted(self):
        semester = baker.make(Semester)
        course_type = baker.make(CourseType)
        degree = baker.make(Degree)
        evaluation1 = baker.make(
            Evaluation,
            state=Evaluation.State.PUBLISHED,
            course=baker.make(Course,
                              degrees=[degree],
                              type=course_type,
                              semester=semester,
                              name_de="A",
                              name_en="B"),
            name_de="Evaluation1",
            name_en="Evaluation1",
        )
        evaluation2 = baker.make(
            Evaluation,
            state=Evaluation.State.PUBLISHED,
            course=baker.make(Course,
                              degrees=[degree],
                              type=course_type,
                              semester=semester,
                              name_de="B",
                              name_en="A"),
            name_de="Evaluation2",
            name_en="Evaluation2",
        )

        cache_results(evaluation1)
        cache_results(evaluation2)

        content_de = BytesIO()
        with translation.override("de"):
            ResultsExporter().export(content_de, [semester],
                                     [([degree.id], [course_type.id])], True,
                                     True)

        content_en = BytesIO()
        with translation.override("en"):
            ResultsExporter().export(content_en, [semester],
                                     [([degree.id], [course_type.id])], True,
                                     True)

        content_de.seek(0)
        content_en.seek(0)

        # Load responses as Excel files and check for correct sorting
        workbook = xlrd.open_workbook(file_contents=content_de.read())
        self.assertEqual(workbook.sheets()[0].row_values(0)[1],
                         "A – Evaluation1\n")
        self.assertEqual(workbook.sheets()[0].row_values(0)[2],
                         "B – Evaluation2\n")

        workbook = xlrd.open_workbook(file_contents=content_en.read())
        self.assertEqual(workbook.sheets()[0].row_values(0)[1],
                         "A – Evaluation2\n")
        self.assertEqual(workbook.sheets()[0].row_values(0)[2],
                         "B – Evaluation1\n")
示例#2
0
    def test_course_type_ordering(self):
        degree = baker.make(Degree)
        course_type_1 = baker.make(CourseType, order=1)
        course_type_2 = baker.make(CourseType, order=2)
        semester = baker.make(Semester)
        evaluation_1 = baker.make(
            Evaluation,
            course=baker.make(Course, semester=semester, degrees=[degree], type=course_type_1),
            state=Evaluation.State.PUBLISHED,
            _participant_count=2,
            _voter_count=2,
        )
        evaluation_2 = baker.make(
            Evaluation,
            course=baker.make(Course, semester=semester, degrees=[degree], type=course_type_2),
            state=Evaluation.State.PUBLISHED,
            _participant_count=2,
            _voter_count=2,
        )

        cache_results(evaluation_1)
        cache_results(evaluation_2)

        questionnaire = baker.make(Questionnaire)
        question = baker.make(Question, type=Question.LIKERT, questionnaire=questionnaire)

        evaluation_1.general_contribution.questionnaires.set([questionnaire])
        make_rating_answer_counters(question, evaluation_1.general_contribution)

        evaluation_2.general_contribution.questionnaires.set([questionnaire])
        make_rating_answer_counters(question, evaluation_2.general_contribution)

        binary_content = BytesIO()
        ResultsExporter().export(
            binary_content, [semester], [([degree.id], [course_type_1.id, course_type_2.id])], True, True
        )
        binary_content.seek(0)
        workbook = xlrd.open_workbook(file_contents=binary_content.read())

        self.assertEqual(workbook.sheets()[0].row_values(0)[1], evaluation_1.full_name + "\n")
        self.assertEqual(workbook.sheets()[0].row_values(0)[2], evaluation_2.full_name + "\n")

        course_type_2.order = 0
        course_type_2.save()

        binary_content = BytesIO()
        ResultsExporter().export(
            binary_content, [semester], [([degree.id], [course_type_1.id, course_type_2.id])], True, True
        )
        binary_content.seek(0)
        workbook = xlrd.open_workbook(file_contents=binary_content.read())

        self.assertEqual(workbook.sheets()[0].row_values(0)[1], evaluation_2.full_name + "\n")
        self.assertEqual(workbook.sheets()[0].row_values(0)[2], evaluation_1.full_name + "\n")
示例#3
0
 def test_grade_color_calculation(self):
     exporter = ResultsExporter()
     self.assertEqual(exporter.STEP, 0.2)
     self.assertEqual(exporter.normalize_number(1.94999999999), 1.8)
     # self.assertEqual(exporter.normalize_number(1.95), 2.0)  # floats ftw
     self.assertEqual(exporter.normalize_number(1.95000000001), 2.0)
     self.assertEqual(exporter.normalize_number(1.99999999999), 2.0)
     self.assertEqual(exporter.normalize_number(2.0), 2.0)
     self.assertEqual(exporter.normalize_number(2.00000000001), 2.0)
     self.assertEqual(exporter.normalize_number(2.1), 2.0)
     self.assertEqual(exporter.normalize_number(2.149999999999), 2.0)
     # self.assertEqual(exporter.normalize_number(2.15), 2.2)  # floats again
     self.assertEqual(exporter.normalize_number(2.150000000001), 2.2)
     self.assertEqual(exporter.normalize_number(2.8), 2.8)
示例#4
0
    def test_heading_question_filtering(self):
        degree = baker.make(Degree)
        evaluation = baker.make(Evaluation,
                                course=baker.make(Course, degrees=[degree]),
                                state='published',
                                _participant_count=2,
                                _voter_count=2)
        contributor = baker.make(UserProfile)
        evaluation.general_contribution.questionnaires.set(
            [baker.make(Questionnaire)])

        questionnaire = baker.make(Questionnaire)
        baker.make(Question,
                   type=Question.HEADING,
                   questionnaire=questionnaire,
                   order=0)
        heading_question = baker.make(Question,
                                      type=Question.HEADING,
                                      questionnaire=questionnaire,
                                      order=1)
        likert_question = baker.make(Question,
                                     type=Question.LIKERT,
                                     questionnaire=questionnaire,
                                     order=2)
        baker.make(Question,
                   type=Question.HEADING,
                   questionnaire=questionnaire,
                   order=3)

        contribution = baker.make(Contribution,
                                  evaluation=evaluation,
                                  questionnaires=[questionnaire],
                                  contributor=contributor)
        baker.make(RatingAnswerCounter,
                   question=likert_question,
                   contribution=contribution,
                   answer=3,
                   count=100)

        cache_results(evaluation)

        binary_content = BytesIO()
        ResultsExporter().export(
            binary_content, [evaluation.course.semester], [([
                course_degree.id
                for course_degree in evaluation.course.degrees.all()
            ], [evaluation.course.type.id])], True, True)
        binary_content.seek(0)
        workbook = xlrd.open_workbook(file_contents=binary_content.read())

        self.assertEqual(workbook.sheets()[0].row_values(4)[0],
                         questionnaire.name)
        self.assertEqual(workbook.sheets()[0].row_values(5)[0],
                         heading_question.text)
        self.assertEqual(workbook.sheets()[0].row_values(6)[0],
                         likert_question.text)
        self.assertEqual(workbook.sheets()[0].row_values(7)[0], "")
示例#5
0
    def test_multiple_sheets(self):
        binary_content = BytesIO()
        semester = baker.make(Semester)
        ResultsExporter().export(binary_content, [semester], [([], []), ([], [])])

        binary_content.seek(0)
        workbook = xlrd.open_workbook(file_contents=binary_content.read())

        self.assertEqual(len(workbook.sheets()), 2)
示例#6
0
def export_contributor_results(contributor):
    filename = "Evaluation_{}.xls".format(contributor.full_name)
    response = FileResponse(filename, content_type="application/vnd.ms-excel")
    ResultsExporter().export(
        response,
        Semester.objects.all(),
        [(Degree.objects.all(), CourseType.objects.all())],
        include_not_enough_voters=True,
        include_unpublished=False,
        contributor=contributor)
    return response
示例#7
0
    def test_questionnaire_ordering(self):
        degree = baker.make(Degree)
        evaluation = baker.make(
            Evaluation,
            course__degrees=[degree],
            state=Evaluation.State.PUBLISHED,
            _participant_count=2,
            _voter_count=2,
        )

        questionnaire_1 = baker.make(Questionnaire, order=1, type=Questionnaire.Type.TOP)
        questionnaire_2 = baker.make(Questionnaire, order=4, type=Questionnaire.Type.TOP)
        questionnaire_3 = baker.make(Questionnaire, order=1, type=Questionnaire.Type.BOTTOM)
        questionnaire_4 = baker.make(Questionnaire, order=4, type=Questionnaire.Type.BOTTOM)

        question_1 = baker.make(Question, type=Question.LIKERT, questionnaire=questionnaire_1)
        question_2 = baker.make(Question, type=Question.LIKERT, questionnaire=questionnaire_2)
        question_3 = baker.make(Question, type=Question.LIKERT, questionnaire=questionnaire_3)
        question_4 = baker.make(Question, type=Question.LIKERT, questionnaire=questionnaire_4)

        evaluation.general_contribution.questionnaires.set(
            [questionnaire_1, questionnaire_2, questionnaire_3, questionnaire_4]
        )

        make_rating_answer_counters(question_1, evaluation.general_contribution)
        make_rating_answer_counters(question_2, evaluation.general_contribution)
        make_rating_answer_counters(question_3, evaluation.general_contribution)
        make_rating_answer_counters(question_4, evaluation.general_contribution)

        cache_results(evaluation)

        binary_content = BytesIO()
        ResultsExporter().export(
            binary_content,
            [evaluation.course.semester],
            [([course_degree.id for course_degree in evaluation.course.degrees.all()], [evaluation.course.type.id])],
            True,
            True,
        )
        binary_content.seek(0)
        workbook = xlrd.open_workbook(file_contents=binary_content.read())

        self.assertEqual(workbook.sheets()[0].row_values(4)[0], questionnaire_1.name)
        self.assertEqual(workbook.sheets()[0].row_values(5)[0], question_1.text)

        self.assertEqual(workbook.sheets()[0].row_values(7)[0], questionnaire_2.name)
        self.assertEqual(workbook.sheets()[0].row_values(8)[0], question_2.text)

        self.assertEqual(workbook.sheets()[0].row_values(10)[0], questionnaire_3.name)
        self.assertEqual(workbook.sheets()[0].row_values(11)[0], question_3.text)

        self.assertEqual(workbook.sheets()[0].row_values(13)[0], questionnaire_4.name)
        self.assertEqual(workbook.sheets()[0].row_values(14)[0], question_4.text)
示例#8
0
 def get_export_sheet(semester, degree, course_types, include_unpublished=True, include_not_enough_voters=True):
     binary_content = BytesIO()
     ResultsExporter().export(
         binary_content,
         [semester],
         [([degree.id], course_types)],
         include_unpublished=include_unpublished,
         include_not_enough_voters=include_not_enough_voters,
     )
     binary_content.seek(0)
     workbook = xlrd.open_workbook(file_contents=binary_content.read())
     return workbook.sheets()[0]
示例#9
0
 def test_no_degree_or_course_type(self):
     evaluation = baker.make(Evaluation)
     with self.assertRaises(AssertionError):
         ResultsExporter().export(BytesIO(), [evaluation.course.semester],
                                  [])