예제 #1
0
    def test_can_freeze_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')

        service.refresh_from_db()
        self.assertTrue(service.can_freeze)
예제 #2
0
    def test_create_answer_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
        service.create_answer('q1', q_by_analysis_key['q1'])
        service.create_answer('q2', q_by_analysis_key['q2'])
        service.create_answer('q4', q_by_analysis_key['q4'])
        service.create_answer('q5', q_by_analysis_key['q5'])

        service.refresh_from_db()
        answers_by_analysis_key = service.answers_by_analysis_key

        self.assertEqual(len(answers_by_analysis_key), 4)
        for key in ['q1', 'q2', 'q4', 'q5']:
            self.assertEqual(answers_by_analysis_key[key].payload, key)

        # Test our is_accessible here:
        service.is_publicly_accessible()
예제 #3
0
    def test_get_extra_properties_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')

        service.refresh_from_db()
        extra_properties = service.get_extra_properties('URL')
        self.assertEqual(len(extra_properties), 4)
        self.assertEqual(extra_properties[0]['category_url'], 'URL')

        extra_properties_no_url = service.get_extra_properties()
        self.assertEqual(len(extra_properties_no_url), 4)
        self.assertNotIn('category_url', extra_properties_no_url[0])
예제 #4
0
    def test_answers_by_analysis_key_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')

        service.refresh_from_db()
        answers_by_analysis_key = service.answers_by_analysis_key

        self.assertEqual(len(answers_by_analysis_key), 4)
        for key in ['q1', 'q2', 'q4', 'q5']:
            self.assertEqual(answers_by_analysis_key[key].payload, key)
예제 #5
0
    def test_can_freeze_one_answer(self):
        q_graph = create_diamond_plus()
        session = SessionFactory.create(questionnaire__graph=q_graph)
        service = SessionService(session)

        # Answer questions
        Answer.objects.create(session=session,
                              question=q_graph.first_question,
                              payload='q1')
        service.refresh_from_db()
        self.assertFalse(service.can_freeze)
예제 #6
0
    def test_answers_by_analysis_key_one_answer(self):
        q_graph = create_diamond_plus()
        session = SessionFactory.create(questionnaire__graph=q_graph)
        service = SessionService(session)

        # Answer questions
        Answer.objects.create(session=session,
                              question=q_graph.first_question,
                              payload='q1')
        service.refresh_from_db()
        answers_by_analysis_key = service.answers_by_analysis_key

        self.assertEqual(len(answers_by_analysis_key), 1)
        self.assertIn('q1', answers_by_analysis_key)
        self.assertEqual(answers_by_analysis_key['q1'].payload, 'q1')
예제 #7
0
    def test_create_answer_session_expired(self):
        # expired session must not accept answers
        t_creation = datetime(2021, 1, 1, 0, 0, 0)
        t_now = datetime(2021, 6, 1, 0, 0, 0)

        q_graph = create_diamond_plus()
        session = SessionFactory.create(questionnaire__graph=q_graph,
                                        created_at=t_creation,
                                        submit_before=t_creation)
        service = SessionService(session)
        service.refresh_from_db()

        first_question = service.path_questions[0]
        with freeze_time(t_now):
            with self.assertRaises(SessionExpired):
                service.create_answer('TOO LATE', first_question)
예제 #8
0
    def test_get_extra_properties_one_answer(self):
        q_graph = create_diamond_plus()
        session = SessionFactory.create(questionnaire__graph=q_graph)
        service = SessionService(session)

        # Answer questions
        Answer.objects.create(session=session,
                              question=q_graph.first_question,
                              payload='q1')
        service.refresh_from_db()
        extra_properties = service.get_extra_properties('URL')

        self.assertEqual(len(extra_properties), 1)
        self.assertEqual(extra_properties[0]['category_url'], 'URL')
        self.assertEqual(extra_properties[0]['label'],
                         q_graph.first_question.short_label)

        extra_properties_no_url = service.get_extra_properties()

        self.assertEqual(len(extra_properties_no_url), 1)
        self.assertNotIn('category_url', extra_properties_no_url[0])