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 )
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([])
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", ])
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"])
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([])
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"])
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([])