def test_is_not_test_story_file_raises_if_file_does_not_exist(tmp_path: Path): path = str(tmp_path / "test_stories.yml") with pytest.raises(FileNotFoundException): YAMLStoryReader.is_test_stories_file(path)
def test_is_test_story_file(tmp_path: Path): path = str(tmp_path / "test_stories.yml") rasa.shared.utils.io.write_yaml({"stories": []}, path) assert YAMLStoryReader.is_test_stories_file(path)
def test_is_not_test_story_file_if_it_doesnt_contain_stories(tmp_path: Path): path = str(tmp_path / "test_stories.yml") rasa.shared.utils.io.write_yaml({"nlu": []}, path) assert not YAMLStoryReader.is_test_stories_file(path)
async def test_is_yaml_file(file: Text, is_yaml_file: bool): assert YAMLStoryReader.is_stories_file(file) == is_yaml_file
async def test_is_yaml_file(file: Text): assert YAMLStoryReader.is_stories_file(file) is True
def test_is_not_test_story_file_without_test_prefix(tmp_path: Path): path = str(tmp_path / "stories.yml") rasa.shared.utils.io.write_yaml({"stories": []}, path) assert not YAMLStoryReader.is_yaml_test_stories_file(path)
def test_is_not_test_story_file_if_empty(tmp_path: Path): path = str(tmp_path / "test_stories.yml") assert not YAMLStoryReader.is_yaml_test_stories_file(path)
def test_process_unpacks_attributes_from_single_message_and_fallsback_if_needed( confidence: Optional[Text], entities: Optional[Text], expected_confidence: float, expected_entities: Optional[List[Dict[Text, Any]]], should_warn: bool, ): # dummy intent expected_intent = "my-intent" # construct text according to pattern text = " \t " + INTENT_MESSAGE_PREFIX + expected_intent if confidence is not None: text += f"@{confidence}" if entities is not None: text += entities text += " \t " # create a message with some dummy attributes and features message = Message( data={ TEXT: text, INTENT: "extracted-from-the-pattern-text-via-nlu" }, features=[ Features( features=np.zeros((1, 1)), feature_type=FEATURE_TYPE_SENTENCE, attribute=TEXT, origin="nlu-pipeline", ) ], ) # construct domain from expected intent/entities domain_entities = [ item[ENTITY_ATTRIBUTE_TYPE] for item in expected_entities ] domain_intents = [expected_intent] if expected_intent is not None else [] domain = Domain( intents=domain_intents, entities=domain_entities, slots=[], responses={}, action_names=[], forms={}, data={}, ) # extract information if should_warn: with pytest.warns(UserWarning): unpacked_message = YAMLStoryReader.unpack_regex_message( message, domain) else: unpacked_message = YAMLStoryReader.unpack_regex_message( message, domain) assert not unpacked_message.features assert set(unpacked_message.data.keys()) == { TEXT, INTENT, INTENT_RANKING_KEY, ENTITIES, } assert unpacked_message.data[TEXT] == message.data[TEXT].strip() assert set(unpacked_message.data[INTENT].keys()) == { INTENT_NAME_KEY, PREDICTED_CONFIDENCE_KEY, } assert unpacked_message.data[INTENT][INTENT_NAME_KEY] == expected_intent assert (unpacked_message.data[INTENT][PREDICTED_CONFIDENCE_KEY] == expected_confidence) intent_ranking = unpacked_message.data[INTENT_RANKING_KEY] assert len(intent_ranking) == 1 assert intent_ranking[0] == { INTENT_NAME_KEY: expected_intent, PREDICTED_CONFIDENCE_KEY: expected_confidence, } if expected_entities: entity_data: List[Dict[Text, Any]] = unpacked_message.data[ENTITIES] assert all( set(item.keys()) == { ENTITY_ATTRIBUTE_VALUE, ENTITY_ATTRIBUTE_TYPE, ENTITY_ATTRIBUTE_START, ENTITY_ATTRIBUTE_END, } for item in entity_data) assert set( (item[ENTITY_ATTRIBUTE_TYPE], item[ENTITY_ATTRIBUTE_VALUE]) for item in expected_entities) == set( (item[ENTITY_ATTRIBUTE_TYPE], item[ENTITY_ATTRIBUTE_VALUE]) for item in entity_data) else: assert unpacked_message.data[ENTITIES] is not None assert len(unpacked_message.data[ENTITIES]) == 0
def test_is_not_test_story_file_raises_if_file_does_not_exist(tmp_path: Path): path = str(tmp_path / "test_stories.yml") with pytest.raises(ValueError): YAMLStoryReader.is_test_stories_file(path)
async def test_is_key_in_yaml(file: Text, keys: List[Text], expected_result: bool): assert YAMLStoryReader.is_key_in_yaml(file, *keys) == expected_result