コード例 #1
0
ファイル: test_processor.py プロジェクト: attgua/Geco
async def test_reminder_cancelled_cancels_job_with_name_special_name(
        default_channel: CollectingOutputChannel,
        default_processor: MessageProcessor):
    sender_id = "][]][xy,,=+2f'[:/;  >]<0d]A[e_,02"
    name = "wkjbgr,34(,*&%^^&*(OP#LKMN V#NF# # #R"

    reminder = ReminderScheduled(intent="greet",
                                 trigger_date_time=datetime.datetime.now(),
                                 name=name)
    job_name = reminder.scheduled_job_name(sender_id)
    reminder_cancelled = ReminderCancelled(name)

    assert reminder_cancelled.cancels_job_with_name(job_name, sender_id)
    assert not reminder_cancelled.cancels_job_with_name(
        job_name.upper(), sender_id)
コード例 #2
0
async def test_reminder_scheduled(default_channel: CollectingOutputChannel,
                                  default_processor: MessageProcessor):
    sender_id = uuid.uuid4().hex

    reminder = ReminderScheduled("remind", datetime.datetime.now())
    tracker = default_processor.tracker_store.get_or_create_tracker(sender_id)

    tracker.update(UserUttered("test"))
    tracker.update(ActionExecuted("action_schedule_reminder"))
    tracker.update(reminder)

    default_processor.tracker_store.save(tracker)

    await default_processor.handle_reminder(reminder, sender_id,
                                            default_channel,
                                            default_processor.nlg)

    # retrieve the updated tracker
    t = default_processor.tracker_store.retrieve(sender_id)

    assert t.events[-5] == UserUttered("test")
    assert t.events[-4] == ActionExecuted("action_schedule_reminder")
    assert isinstance(t.events[-3], ReminderScheduled)
    assert t.events[-2] == UserUttered(
        f"{EXTERNAL_MESSAGE_PREFIX}remind",
        intent={
            INTENT_NAME_KEY: "remind",
            IS_EXTERNAL: True
        },
    )
    assert t.events[-1] == ActionExecuted("action_listen")
コード例 #3
0
ファイル: test_processor.py プロジェクト: alexlana/rasa-1
async def test_reminder_cancelled_multi_user(
        default_channel: CollectingOutputChannel,
        default_processor: MessageProcessor):
    sender_ids = [uuid.uuid4().hex, uuid.uuid4().hex]
    trackers = []
    for sender_id in sender_ids:
        tracker = default_processor.tracker_store.get_or_create_tracker(
            sender_id)

        tracker.update(UserUttered("test"))
        tracker.update(ActionExecuted("action_reminder_reminder"))
        tracker.update(
            ReminderScheduled("greet",
                              datetime.datetime.now(),
                              kill_on_user_message=True))
        trackers.append(tracker)

    # cancel all reminders (one) for the first user
    trackers[0].update(ReminderCancelled())

    for tracker in trackers:
        default_processor.tracker_store.save(tracker)
        await default_processor._schedule_reminders(
            tracker.events,
            tracker,
            default_channel,
        )
    # check that the jobs were added
    assert len((await jobs.scheduler()).get_jobs()) == 2

    for tracker in trackers:
        await default_processor._cancel_reminders(tracker.events, tracker)
    # check that only one job was removed
    assert len((await jobs.scheduler()).get_jobs()) == 1

    # execute the jobs
    await wait_until_all_jobs_were_executed(timeout_after_seconds=5.0)

    tracker_0 = default_processor.tracker_store.retrieve(sender_ids[0])
    # there should be no utter_greet action
    assert (UserUttered(
        f"{EXTERNAL_MESSAGE_PREFIX}greet",
        intent={
            INTENT_NAME_KEY: "greet",
            IS_EXTERNAL: True
        },
    ) not in tracker_0.events)

    tracker_1 = default_processor.tracker_store.retrieve(sender_ids[1])
    # there should be utter_greet action
    assert (UserUttered(
        f"{EXTERNAL_MESSAGE_PREFIX}greet",
        intent={
            INTENT_NAME_KEY: "greet",
            IS_EXTERNAL: True
        },
    ) in tracker_1.events)
コード例 #4
0
ファイル: test_events.py プロジェクト: sorumehta/rasa-server
def test_json_parse_reminder():
    evt = {
        "event": "reminder",
        "intent": "my_intent",
        "entities": {"entity1": "value1", "entity2": "value2"},
        "date_time": "2018-09-03T11:41:10.128172",
        "name": "my_reminder",
        "kill_on_user_msg": True,
    }
    assert Event.from_parameters(evt) == ReminderScheduled(
        "my_intent",
        parser.parse("2018-09-03T11:41:10.128172"),
        name="my_reminder",
        kill_on_user_message=True,
    )
コード例 #5
0
async def test_reminder_aborted(
    default_channel: CollectingOutputChannel, default_processor: MessageProcessor
):
    sender_id = uuid.uuid4().hex

    reminder = ReminderScheduled(
        "utter_greet", datetime.datetime.now(), kill_on_user_message=True
    )
    tracker = default_processor.tracker_store.get_or_create_tracker(sender_id)

    tracker.update(reminder)
    tracker.update(UserUttered("test"))  # cancels the reminder

    default_processor.tracker_store.save(tracker)
    await default_processor.handle_reminder(reminder, sender_id, default_channel)

    # retrieve the updated tracker
    t = default_processor.tracker_store.retrieve(sender_id)
    assert len(t.events) == 3  # nothing should have been executed
コード例 #6
0
ファイル: conftest.py プロジェクト: ChenHuaYou/rasa
async def tracker_with_six_scheduled_reminders(
    default_processor: MessageProcessor, ) -> DialogueStateTracker:
    reminders = [
        ReminderScheduled("greet", datetime.now(), kill_on_user_message=False),
        ReminderScheduled(
            intent="greet",
            entities=[{
                "entity": "name",
                "value": "Jane Doe"
            }],
            trigger_date_time=datetime.now(),
            kill_on_user_message=False,
        ),
        ReminderScheduled(
            intent="default",
            entities=[{
                "entity": "name",
                "value": "Jane Doe"
            }],
            trigger_date_time=datetime.now(),
            kill_on_user_message=False,
        ),
        ReminderScheduled(
            intent="greet",
            entities=[{
                "entity": "name",
                "value": "Bruce Wayne"
            }],
            trigger_date_time=datetime.now(),
            kill_on_user_message=False,
        ),
        ReminderScheduled("default",
                          datetime.now(),
                          kill_on_user_message=False),
        ReminderScheduled("default",
                          datetime.now(),
                          kill_on_user_message=False,
                          name="special"),
    ]
    sender_id = uuid.uuid4().hex
    tracker = await default_processor.tracker_store.get_or_create_tracker(
        sender_id)
    for reminder in reminders:
        tracker.update(UserUttered("test"))
        tracker.update(ActionExecuted("action_reminder_reminder"))
        tracker.update(reminder)

    await default_processor.tracker_store.save(tracker)

    return tracker
コード例 #7
0
async def test_reminder_lock(
    default_channel: CollectingOutputChannel,
    default_processor: MessageProcessor,
    caplog: LogCaptureFixture,
):
    caplog.clear()
    with caplog.at_level(logging.DEBUG):
        sender_id = uuid.uuid4().hex

        reminder = ReminderScheduled("remind", datetime.datetime.now())
        tracker = default_processor.tracker_store.get_or_create_tracker(sender_id)

        tracker.update(UserUttered("test"))
        tracker.update(ActionExecuted("action_schedule_reminder"))
        tracker.update(reminder)

        default_processor.tracker_store.save(tracker)

        await default_processor.handle_reminder(reminder, sender_id, default_channel)

        assert f"Deleted lock for conversation '{sender_id}'." in caplog.text
コード例 #8
0
ファイル: test_events.py プロジェクト: sorumehta/rasa-server
        (StoryExported(), None),
        (ActionReverted(), None),
        (UserUtteranceReverted(), None),
        (SessionStarted(), None),
        (ActionExecuted("my_action"), ActionExecuted("my_other_action")),
        (FollowupAction("my_action"), FollowupAction("my_other_action")),
        (
            BotUttered("my_text", {"my_data": 1}),
            BotUttered("my_other_test", {"my_other_data": 1}),
        ),
        (
            AgentUttered("my_text", "my_data"),
            AgentUttered("my_other_test", "my_other_data"),
        ),
        (
            ReminderScheduled("my_intent", datetime.now()),
            ReminderScheduled("my_other_intent", datetime.now()),
        ),
    ],
)
def test_event_has_proper_implementation(one_event, another_event):
    # equals tests
    assert (
        one_event != another_event
    ), "Same events with different values need to be different"
    assert one_event == copy.deepcopy(one_event), "Event copies need to be the same"
    assert one_event != 42, "Events aren't equal to 42!"

    # hash test
    assert hash(one_event) == hash(
        copy.deepcopy(one_event)
コード例 #9
0
ファイル: test_events.py プロジェクト: praneethgb/rasa
        (StoryExported(), None),
        (ActionReverted(), None),
        (UserUtteranceReverted(), None),
        (SessionStarted(), None),
        (ActionExecuted("my_action"), ActionExecuted("my_other_action")),
        (FollowupAction("my_action"), FollowupAction("my_other_action")),
        (
            BotUttered("my_text", {"my_data": 1}),
            BotUttered("my_other_test", {"my_other_data": 1}),
        ),
        (
            AgentUttered("my_text", "my_data"),
            AgentUttered("my_other_test", "my_other_data"),
        ),
        (
            ReminderScheduled("my_intent", datetime.now()),
            ReminderScheduled("my_other_intent", datetime.now()),
        ),
    ],
)
def test_event_has_proper_implementation(one_event, another_event):
    # equals tests
    assert (one_event != another_event
            ), "Same events with different values need to be different"
    assert one_event == copy.deepcopy(
        one_event), "Event copies need to be the same"
    assert one_event != 42, "Events aren't equal to 42!"

    # hash test
    assert hash(one_event) == hash(
        copy.deepcopy(one_event)), "Same events should have the same hash"
コード例 #10
0
ファイル: test_actions.py プロジェクト: praneethgb/rasa
             "value": 1
         },
     ],
     timestamp=None,
 ),
 EntitiesAdded(entities=[]),
 EntitiesAdded(entities=[{
     "entity": "name",
     "value": "John",
     "role": "contact",
     "group": "test"
 }]),
 DefinePrevUserUtteredFeaturization(
     use_text_for_featurization=False, timestamp=None, metadata=None),
 ReminderCancelled(timestamp=1621590172.3872123),
 ReminderScheduled(
     timestamp=None, trigger_date_time=datetime.now(), intent="greet"),
 ActionExecutionRejected(action_name="my_action"),
 LegacyFormValidation(validate=True, timestamp=None),
 LoopInterrupted(timestamp=None, is_interrupted=False),
 ActiveLoop(name="loop"),
 LegacyForm(name="my_form"),
 AllSlotsReset(),
 SlotSet(key="my_slot", value={}),
 SlotSet(key="my slot", value=[]),
 SlotSet(key="test", value=1),
 SlotSet(key="test", value="text"),
 ConversationResumed(),
 ConversationPaused(),
 FollowupAction(name="test"),
 StoryExported(),
 Restarted(),