예제 #1
0
    def test_get_all_answers(self):
        q_graph = create_diamond_plus()
        session = SessionFactory.create(questionnaire__graph=q_graph)
        service = SessionService(session)
        service.question_graph_service.refresh_from_db()
        self.assertEqual(len(service.question_graph_service._questions_by_id),
                         7)

        for q in service.question_graph_service._questions:
            AnswerFactory.create(session=session, question=q, payload='answer')
        answers = service._get_all_answers(session)
        self.assertEqual(len(answers), 7)
예제 #2
0
    def test_get_reachable_questions_answers_graph_with_cycles(self):
        q_graph = create_cycle()
        session = SessionFactory.create(questionnaire__graph=q_graph)
        service = SessionService(session)
        service.question_graph_service.refresh_from_db()

        answers = service._get_all_answers(session)
        answers_by_question_id = {a.question.id: a for a in answers}

        with self.assertRaises(CycleDetected):
            service._get_reachable_questions_and_answers(
                service.question_graph_service._nx_graph,
                service.question_graph_service._q_graph.first_question,
                service.question_graph_service._questions_by_id,
                answers_by_question_id)
예제 #3
0
    def test_get_reachable_questions_answers_no_answers(self):
        q_graph = create_diamond_plus()
        session = SessionFactory.create(questionnaire__graph=q_graph)
        service = SessionService(session)
        service.question_graph_service.refresh_from_db()

        answers = service._get_all_answers(session)
        answers_by_question_id = {a.question.id: a for a in answers}

        questions_by_id, unanswered_by_id, answers_by_id, can_freeze = service._get_reachable_questions_and_answers(
            service.question_graph_service._nx_graph,
            service.question_graph_service._q_graph.first_question,
            service.question_graph_service._questions_by_id,
            answers_by_question_id)
        self.assertEqual(len(questions_by_id),
                         4)  # should only return questions on one branch
        self.assertEqual(len(unanswered_by_id),
                         4)  # should only return questions on one branch
        self.assertEqual(len(answers_by_id), 0)  # no answers yet
        self.assertFalse(can_freeze)
예제 #4
0
    def test_get_reachable_questions_answers_one_path(self):
        q_graph = create_diamond_plus()
        session = SessionFactory.create(questionnaire__graph=q_graph)
        service = SessionService(session)

        # get references to questions
        service.question_graph_service.refresh_from_db()
        q_by_analysis_key = {
            q.analysis_key: q
            for q in service.question_graph_service._questions
        }

        # Answer questions
        Answer.objects.create(session=session,
                              question=q_by_analysis_key['q1'],
                              payload='q1')
        Answer.objects.create(session=session,
                              question=q_by_analysis_key['q2'],
                              payload='q2')
        Answer.objects.create(session=session,
                              question=q_by_analysis_key['q4'],
                              payload='q4')
        Answer.objects.create(session=session,
                              question=q_by_analysis_key['q5'],
                              payload='q5')

        answers = service._get_all_answers(session)
        answers_by_question_id = {a.question.id: a for a in answers}

        questions_by_id, unanswered_by_id, answers_by_id, can_freeze = service._get_reachable_questions_and_answers(
            service.question_graph_service._nx_graph,
            service.question_graph_service._q_graph.first_question,
            service.question_graph_service._questions_by_id,
            answers_by_question_id)

        self.assertEqual(len(questions_by_id),
                         4)  # should only return questions on one branch
        self.assertEqual(len(unanswered_by_id), 0)
        self.assertEqual(len(answers_by_id), 4)  # all questions answered
        self.assertTrue(can_freeze)