2
2
3
3
import pytest
4
4
5
+ from rasa .core .processor import MessageProcessor
5
6
from rasa .shared .constants import DEFAULT_NLU_FALLBACK_INTENT_NAME
6
7
from rasa .core .actions .two_stage_fallback import TwoStageFallbackAction
7
8
from rasa .core .channels import CollectingOutputChannel
8
9
from rasa .shared .core .domain import Domain
9
10
from rasa .shared .core .events import (
10
11
ActionExecuted ,
11
12
UserUttered ,
13
+ SlotSet ,
12
14
ActiveLoop ,
13
15
BotUttered ,
14
16
UserUtteranceReverted ,
@@ -45,10 +47,17 @@ def _two_stage_clarification_request() -> List[Event]:
45
47
return [ActionExecuted (ACTION_TWO_STAGE_FALLBACK_NAME ), BotUttered ("please affirm" )]
46
48
47
49
48
- async def test_ask_affirmation ():
49
- tracker = DialogueStateTracker .from_events (
50
- "some-sender" , evts = _message_requiring_fallback ()
51
- )
50
+ @pytest .mark .parametrize (
51
+ "events" ,
52
+ [
53
+ _message_requiring_fallback (),
54
+ _message_requiring_fallback ()
55
+ + [UserUtteranceReverted ()]
56
+ + _message_requiring_fallback (),
57
+ ],
58
+ )
59
+ async def test_ask_affirmation (events : List [Event ]):
60
+ tracker = DialogueStateTracker .from_events ("some-sender" , evts = events )
52
61
domain = Domain .empty ()
53
62
action = TwoStageFallbackAction ()
54
63
@@ -64,10 +73,13 @@ async def test_ask_affirmation():
64
73
assert isinstance (events [1 ], BotUttered )
65
74
66
75
67
- async def test_1st_affirmation_is_successful ():
76
+ async def test_1st_affirmation_is_successful (default_processor : MessageProcessor ):
68
77
tracker = DialogueStateTracker .from_events (
69
78
"some-sender" ,
70
79
evts = [
80
+ ActionExecuted (ACTION_LISTEN_NAME ),
81
+ UserUttered ("my name is John" , {"name" : "say_name" , "confidence" : 1.0 }),
82
+ SlotSet ("some_slot" , "example_value" ),
71
83
# User sends message with low NLU confidence
72
84
* _message_requiring_fallback (),
73
85
ActiveLoop (ACTION_TWO_STAGE_FALLBACK_NAME ),
@@ -81,18 +93,18 @@ async def test_1st_affirmation_is_successful():
81
93
domain = Domain .empty ()
82
94
action = TwoStageFallbackAction ()
83
95
84
- events = await action .run (
96
+ await default_processor ._run_action (
97
+ action ,
98
+ tracker ,
85
99
CollectingOutputChannel (),
86
100
TemplatedNaturalLanguageGenerator (domain .templates ),
87
- tracker ,
88
- domain ,
89
101
)
90
102
91
- for events in events :
92
- tracker .update (events , domain )
93
-
94
103
applied_events = tracker .applied_events ()
95
104
assert applied_events == [
105
+ ActionExecuted (ACTION_LISTEN_NAME ),
106
+ UserUttered ("my name is John" , {"name" : "say_name" , "confidence" : 1.0 }),
107
+ SlotSet ("some_slot" , "example_value" ),
96
108
ActionExecuted (ACTION_LISTEN_NAME ),
97
109
UserUttered ("hi" , {"name" : "greet" , "confidence" : 1.0 }),
98
110
]
@@ -164,10 +176,13 @@ async def test_ask_rephrase_after_failed_affirmation():
164
176
assert bot_utterance .text == rephrase_text
165
177
166
178
167
- async def test_ask_rephrasing_successful ():
179
+ async def test_ask_rephrasing_successful (default_processor : MessageProcessor ):
168
180
tracker = DialogueStateTracker .from_events (
169
181
"some-sender" ,
170
182
evts = [
183
+ ActionExecuted (ACTION_LISTEN_NAME ),
184
+ UserUttered ("my name is John" , {"name" : "say_name" , "confidence" : 1.0 }),
185
+ SlotSet ("some_slot" , "example_value" ),
171
186
# User sends message with low NLU confidence
172
187
* _message_requiring_fallback (),
173
188
ActiveLoop (ACTION_TWO_STAGE_FALLBACK_NAME ),
@@ -186,18 +201,18 @@ async def test_ask_rephrasing_successful():
186
201
domain = Domain .empty ()
187
202
action = TwoStageFallbackAction ()
188
203
189
- events = await action .run (
204
+ await default_processor ._run_action (
205
+ action ,
206
+ tracker ,
190
207
CollectingOutputChannel (),
191
208
TemplatedNaturalLanguageGenerator (domain .templates ),
192
- tracker ,
193
- domain ,
194
209
)
195
210
196
- for event in events :
197
- tracker .update (event )
198
-
199
211
applied_events = tracker .applied_events ()
200
212
assert applied_events == [
213
+ ActionExecuted (ACTION_LISTEN_NAME ),
214
+ UserUttered ("my name is John" , {"name" : "say_name" , "confidence" : 1.0 }),
215
+ SlotSet ("some_slot" , "example_value" ),
201
216
ActionExecuted (ACTION_LISTEN_NAME ),
202
217
UserUttered ("hi" , {"name" : "greet" }),
203
218
]
@@ -236,10 +251,13 @@ async def test_ask_affirm_after_rephrasing():
236
251
assert isinstance (events [0 ], BotUttered )
237
252
238
253
239
- async def test_2nd_affirm_successful ():
254
+ async def test_2nd_affirm_successful (default_processor : MessageProcessor ):
240
255
tracker = DialogueStateTracker .from_events (
241
256
"some-sender" ,
242
257
evts = [
258
+ ActionExecuted (ACTION_LISTEN_NAME ),
259
+ UserUttered ("my name is John" , {"name" : "say_name" , "confidence" : 1.0 }),
260
+ SlotSet ("some_slot" , "example_value" ),
243
261
# User sends message with low NLU confidence
244
262
* _message_requiring_fallback (),
245
263
ActiveLoop (ACTION_TWO_STAGE_FALLBACK_NAME ),
@@ -262,19 +280,19 @@ async def test_2nd_affirm_successful():
262
280
domain = Domain .empty ()
263
281
action = TwoStageFallbackAction ()
264
282
265
- events = await action .run (
283
+ await default_processor ._run_action (
284
+ action ,
285
+ tracker ,
266
286
CollectingOutputChannel (),
267
287
TemplatedNaturalLanguageGenerator (domain .templates ),
268
- tracker ,
269
- domain ,
270
288
)
271
289
272
- for event in events :
273
- tracker .update (event )
274
-
275
290
applied_events = tracker .applied_events ()
276
291
277
292
assert applied_events == [
293
+ ActionExecuted (ACTION_LISTEN_NAME ),
294
+ UserUttered ("my name is John" , {"name" : "say_name" , "confidence" : 1.0 }),
295
+ SlotSet ("some_slot" , "example_value" ),
278
296
ActionExecuted (ACTION_LISTEN_NAME ),
279
297
UserUttered ("hi" , {"name" : "greet" }),
280
298
]
0 commit comments