Пример #1
0
    def test_fallback_question_need_assessment(self, mock_protocol):
        mock_protocol.return_value.get_response = QuestionAnsweringResponseMock(
            return_value=NEED_ASSESSMENT_RESULT)

        tracker = self.create_tracker(active_form=False,
                                      intent="fallback",
                                      text=QUESTION)

        self.run_form(tracker, DOMAIN)

        self.assert_events([
            Form(FORM_NAME),
            SlotSet(QUESTION_SLOT, QUESTION),
            SlotSet(STATUS_SLOT, QuestionAnsweringStatus.NEED_ASSESSMENT),
            SlotSet(ANSWERS_SLOT, None),
            SlotSet(QUESTION_SLOT, None),
            SlotSet(FEEDBACK_SLOT, None),
            SlotSet(
                ASKED_QUESTION_SLOT,
                {
                    QUESTION_KEY: QUESTION,
                    STATUS_KEY: QuestionAnsweringStatus.NEED_ASSESSMENT,
                    ANSWERS_KEY: None,
                    FEEDBACK_KEY: None,
                },
            ),
            Form(None),
            SlotSet(REQUESTED_SLOT, None),
        ])

        self.assert_templates([])
    def _test_symptoms_mandatory_ci(
        self,
        symptoms: str,
        feel_worse: bool,
        preconditions: bool,
        age_over_65: bool,
        province: bool,
        recommendations: List[str],
    ):
        tracker = self.create_tracker(
            slots={
                AGE_OVER_65_SLOT: age_over_65,
                FEEL_WORSE_SLOT: feel_worse,
                PRECONDITIONS_SLOT: preconditions,
                SYMPTOMS_SLOT: symptoms,
                PROVINCE_SLOT: province,
            },
            active_form=False,
        )

        self.run_form(tracker, DOMAIN)

        self.assert_events(
            [Form(FORM_NAME), Form(None), SlotSet(REQUESTED_SLOT, None),]
        )

        self.assert_templates(
            [
                "utter_daily_ci__keep_or_cancel__feel_worse_keep_ci",
                "utter_daily_ci__keep_or_cancel__feel_worse_recommendation",
            ]
            + recommendations
        )
Пример #3
0
    def test_provide_feedback_not_given(self):
        tracker = self.create_tracker(
            slots={
                REQUESTED_SLOT: FEEDBACK_SLOT,
                QUESTION_SLOT: QUESTION,
                ANSWERS_SLOT: ANSWERS,
                STATUS_SLOT: QuestionAnsweringStatus.SUCCESS,
            },
            text="some text with",
            intent="another_intent",
            entities=[{
                "and": "entities"
            }],
        )

        self.run_form(tracker, DOMAIN)

        self.assert_events([
            SlotSet(FEEDBACK_SLOT, FEEDBACK_NOT_GIVEN),
            SlotSet(QUESTION_SLOT, None),
            SlotSet(FEEDBACK_SLOT, None),
            SlotSet(
                ASKED_QUESTION_SLOT,
                {
                    **FULL_RESULT_SUCCESS, FEEDBACK_KEY: FEEDBACK_NOT_GIVEN
                },
            ),
            Form(None),
            SlotSet(REQUESTED_SLOT, None),
            ActionExecuted("utter_ask_another_question"),
            ActionExecuted("action_listen"),
            UserUttered(
                "some text with",
                parse_data={
                    "text": "some text with",
                    "intent": {
                        "name": "another_intent"
                    },
                    "intent_ranking": [],
                    "entities": [{
                        "and": "entities"
                    }],
                },
            ),
            Form(None),
            SlotSet(REQUESTED_SLOT, None),
        ])

        self.assert_templates([])
Пример #4
0
    def _test_mild_symptoms_not_lives_alone(self, fever: bool, cough: bool):
        tracker = self.create_tracker(
            slots={
                REQUESTED_SLOT: LIVES_ALONE_SLOT,
                SEVERE_SYMPTOMS_SLOT: False,
                PROVINCE_SLOT: "qc",
                PROVINCIAL_811_SLOT: "811 qc",
                AGE_OVER_65_SLOT: False,
                HAS_FEVER_SLOT: fever,
                MODERATE_SYMPTOMS_SLOT: False,
                HAS_COUGH_SLOT: cough,
            },
            intent="deny",
        )

        self.run_form(tracker, DOMAIN)

        self.assert_events([
            SlotSet(LIVES_ALONE_SLOT, False),
            SlotSet(SYMPTOMS_SLOT, Symptoms.MILD),
            SlotSet(SELF_ASSESS_DONE_SLOT, True),
            Form(None),
            SlotSet(REQUESTED_SLOT, None),
        ])

        self.assert_templates([
            "utter_stay_separate_room",
            "utter_distance_clean_surfaces",
            "utter_wear_mask_same_room",
            "utter_self_isolation_link",
        ])
Пример #5
0
    def _test_mild_symptoms_lives_alone(self, fever: bool, cough: bool):
        tracker = self.create_tracker(
            slots={
                REQUESTED_SLOT: LIVES_ALONE_SLOT,
                SEVERE_SYMPTOMS_SLOT: False,
                PROVINCE_SLOT: "qc",
                PROVINCIAL_811_SLOT: "811 qc",
                AGE_OVER_65_SLOT: False,
                HAS_FEVER_SLOT: fever,
                MODERATE_SYMPTOMS_SLOT: False,
                HAS_COUGH_SLOT: cough,
            },
            intent="affirm",
        )

        self.run_form(tracker, DOMAIN)

        self.assert_events([
            SlotSet(LIVES_ALONE_SLOT, True),
            SlotSet(SYMPTOMS_SLOT, Symptoms.MILD),
            SlotSet(SELF_ASSESS_DONE_SLOT, True),
            Form(None),
            SlotSet(REQUESTED_SLOT, None),
        ])

        self.assert_templates(
            ["utter_dont_leave_home", "utter_self_isolation_link"])
Пример #6
0
    def test_moderate_last_symptoms__is_symptom_free_afffirm(self):
        tracker = self.create_tracker(
            slots={
                LAST_SYMPTOMS_SLOT: Symptoms.MODERATE,
                REQUESTED_SLOT: IS_SYMPTOM_FREE_SLOT,
                HAS_FEVER_SLOT: False,
                HAS_COUGH_SLOT: False,
                HAS_DIFF_BREATHING_SLOT: False,
                HAS_OTHER_MILD_SYMPTOMS_SLOT: False,
                SYMPTOMS_SLOT: Symptoms.MILD,
            },
            intent="affirm",
        )

        self.run_form(tracker, DOMAIN)

        self.assert_events([
            SlotSet(IS_SYMPTOM_FREE_SLOT, True),
            SlotSet(SYMPTOMS_SLOT, Symptoms.NONE),
            SlotSet(SELF_ASSESS_DONE_SLOT, True),
            Form(None),
            SlotSet(REQUESTED_SLOT, None),
        ])

        self.assert_templates([])
Пример #7
0
    def test_provide_feedback_deny(self):
        tracker = self.create_tracker(
            slots={
                REQUESTED_SLOT: FEEDBACK_SLOT,
                QUESTION_SLOT: QUESTION,
                ANSWERS_SLOT: ANSWERS,
                STATUS_SLOT: QuestionAnsweringStatus.SUCCESS,
            },
            intent="deny",
        )

        self.run_form(tracker, DOMAIN)

        self.assert_events([
            SlotSet(FEEDBACK_SLOT, False),
            SlotSet(QUESTION_SLOT, None),
            SlotSet(FEEDBACK_SLOT, None),
            SlotSet(ASKED_QUESTION_SLOT, {
                **FULL_RESULT_SUCCESS, FEEDBACK_KEY: False
            }),
            Form(None),
            SlotSet(REQUESTED_SLOT, None),
        ])

        self.assert_templates(["utter_post_feedback"])
Пример #8
0
    def test_provide_question_out_of_distribution(self, mock_protocol):
        mock_protocol.return_value.get_response = QuestionAnsweringResponseMock(
            return_value=OUT_OF_DISTRIBUTION_RESULT)

        tracker = self.create_tracker(slots={REQUESTED_SLOT: QUESTION_SLOT},
                                      text=QUESTION)

        self.run_form(tracker, DOMAIN)

        self.assert_events([
            SlotSet(QUESTION_SLOT, QUESTION),
            SlotSet(STATUS_SLOT, QuestionAnsweringStatus.OUT_OF_DISTRIBUTION),
            SlotSet(ANSWERS_SLOT, None),
            SlotSet(QUESTION_SLOT, None),
            SlotSet(FEEDBACK_SLOT, None),
            SlotSet(
                ASKED_QUESTION_SLOT,
                {
                    QUESTION_KEY: QUESTION,
                    STATUS_KEY: QuestionAnsweringStatus.OUT_OF_DISTRIBUTION,
                    ANSWERS_KEY: None,
                    FEEDBACK_KEY: None,
                },
            ),
            Form(None),
            SlotSet(REQUESTED_SLOT, None),
        ])

        self.assert_templates([])