16
16
17
17
package ai.tock.bot.engine.config
18
18
19
+ import ai.tock.bot.admin.answer.SimpleAnswer
20
+ import ai.tock.bot.admin.answer.SimpleAnswerConfiguration
19
21
import ai.tock.bot.admin.story.StoryDefinitionConfiguration
20
22
import ai.tock.bot.admin.story.StoryDefinitionConfigurationFeature
23
+ import ai.tock.bot.connector.ConnectorMessage
24
+ import ai.tock.bot.connector.ConnectorType
21
25
import ai.tock.bot.engine.BotBus
22
26
import ai.tock.bot.engine.BotDefinitionTest
23
27
import ai.tock.bot.engine.StepTest
24
28
import ai.tock.bot.engine.TestStoryDefinition
25
29
import ai.tock.bot.engine.TestStoryDefinition.test
30
+ import ai.tock.bot.engine.action.SendSentence
26
31
import ai.tock.bot.engine.dialog.Story
32
+ import ai.tock.bot.engine.message.ActionWrappedMessage
33
+ import ai.tock.bot.engine.message.MessagesList
34
+ import ai.tock.bot.engine.user.PlayerId
35
+ import ai.tock.translator.I18nLabel
36
+ import ai.tock.translator.I18nLabelValue
37
+ import ai.tock.translator.RawString
27
38
import io.mockk.every
28
39
import io.mockk.mockk
40
+ import io.mockk.slot
29
41
import io.mockk.verify
30
42
import org.junit.jupiter.api.Test
43
+ import org.litote.kmongo.toId
44
+ import kotlin.test.assertEquals
45
+ import kotlin.test.assertTrue
31
46
32
47
class ConfiguredStoryHandlerTest {
33
48
49
+ data class TestConnectorMessage (
50
+ val suggestions : List <CharSequence >,
51
+ override val connectorType : ConnectorType = ConnectorType .none
52
+ ) : ConnectorMessage
53
+
34
54
@Test
35
55
fun `switchStory switch story and reset step if same story def` () {
36
56
val feature: StoryDefinitionConfigurationFeature = mockk {
@@ -58,4 +78,73 @@ class ConfiguredStoryHandlerTest {
58
78
verify { bus.step = null }
59
79
verify { bus.handleAndSwitchStory(test, test.mainIntent()) }
60
80
}
81
+
82
+ @Test
83
+ fun `GIVEN simple answer configuration WHEN sending answer THEN translate suggestions` () {
84
+
85
+ // Given
86
+ val originalLabel = I18nLabel (
87
+ _id = " id" .toId(),
88
+ namespace = " namespace" ,
89
+ category = " category" ,
90
+ defaultLabel = " Not translated label" ,
91
+ i18n = LinkedHashSet ()
92
+ )
93
+ val simpleAnswerConfiguration = SimpleAnswerConfiguration (
94
+ answers = listOf (
95
+ SimpleAnswer (
96
+ key = I18nLabelValue (originalLabel),
97
+ delay = - 1
98
+ )
99
+ )
100
+ )
101
+
102
+ val messagesSlot = slot<MessagesList >()
103
+ val suggestionsSlot = slot<List <CharSequence >>()
104
+ val connectorMessageRetriever: BotBus .() -> ConnectorMessage ? = {
105
+ TestConnectorMessage (suggestionsSlot.captured)
106
+ }
107
+
108
+ val bus: BotBus = mockk {
109
+ every { botId } returns PlayerId (" botId" )
110
+ every { userId } returns PlayerId (" userId" )
111
+ every { applicationId } returns " appId"
112
+ every { currentAnswerIndex } returns 1
113
+ every { botDefinition } returns BotDefinitionTest ()
114
+ every { step } returns mockk()
115
+ every { translate(I18nLabelValue (originalLabel)) } returns RawString (" translated label" )
116
+ every { translate(RawString (" Step 1 not translated" )) } returns RawString (" Step 1 translated" )
117
+ every {
118
+ underlyingConnector.addSuggestions(
119
+ RawString (" translated label" ),
120
+ capture(suggestionsSlot)
121
+ )
122
+ } returns connectorMessageRetriever
123
+ every { end(messages = capture(messagesSlot), initialDelay = any()) } returns mockk()
124
+ }
125
+
126
+ val configuration: StoryDefinitionConfiguration = mockk {
127
+ every { findEnabledFeature(" appId" ) } returns null
128
+ every { mandatoryEntities } returns emptyList()
129
+ every { findCurrentAnswer() } returns simpleAnswerConfiguration
130
+
131
+ }
132
+
133
+ val nextStepTranslated = listOf (RawString (" Step 1 not translated" ))
134
+ every { configuration.findNextSteps(bus, configuration) } returns nextStepTranslated
135
+
136
+ // When
137
+ val handler = ConfiguredStoryHandler (configuration)
138
+ handler.handle(bus)
139
+
140
+ // Then
141
+ val capturedMessage = messagesSlot.captured.messages.first()
142
+ assertTrue(capturedMessage is ActionWrappedMessage )
143
+ val messageAction = capturedMessage.action
144
+ assertTrue(messageAction is SendSentence )
145
+ val connectorMessage = messageAction.messages.first()
146
+ assertTrue(connectorMessage is TestConnectorMessage )
147
+
148
+ assertEquals(" Step 1 translated" , connectorMessage.suggestions.first().toString())
149
+ }
61
150
}
0 commit comments