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