Skip to content

Commit e611ee4

Browse files
committed
Merge branch '889-story_builder_suggestions_not_translated'
2 parents e38a01a + 6cf86d8 commit e611ee4

File tree

2 files changed

+90
-1
lines changed

2 files changed

+90
-1
lines changed

bot/engine/src/main/kotlin/engine/config/ConfiguredStoryHandler.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ internal class ConfiguredStoryHandler(private val configuration: StoryDefinition
143143

144144
private fun BotBus.send(container: StoryDefinitionAnswersContainer, answer: SimpleAnswer, end: Boolean = false) {
145145
val label = translate(answer.key)
146-
val suggestions = container.findNextSteps(this, configuration)
146+
val suggestions = container.findNextSteps(this, configuration).map { this.translate(it) }
147147
val connectorMessages =
148148
answer.mediaMessage
149149
?.takeIf { it.checkValidity() }

bot/engine/src/test/kotlin/engine/config/ConfiguredStoryHandlerTest.kt

+89
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,41 @@
1616

1717
package ai.tock.bot.engine.config
1818

19+
import ai.tock.bot.admin.answer.SimpleAnswer
20+
import ai.tock.bot.admin.answer.SimpleAnswerConfiguration
1921
import ai.tock.bot.admin.story.StoryDefinitionConfiguration
2022
import ai.tock.bot.admin.story.StoryDefinitionConfigurationFeature
23+
import ai.tock.bot.connector.ConnectorMessage
24+
import ai.tock.bot.connector.ConnectorType
2125
import ai.tock.bot.engine.BotBus
2226
import ai.tock.bot.engine.BotDefinitionTest
2327
import ai.tock.bot.engine.StepTest
2428
import ai.tock.bot.engine.TestStoryDefinition
2529
import ai.tock.bot.engine.TestStoryDefinition.test
30+
import ai.tock.bot.engine.action.SendSentence
2631
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
2738
import io.mockk.every
2839
import io.mockk.mockk
40+
import io.mockk.slot
2941
import io.mockk.verify
3042
import org.junit.jupiter.api.Test
43+
import org.litote.kmongo.toId
44+
import kotlin.test.assertEquals
45+
import kotlin.test.assertTrue
3146

3247
class ConfiguredStoryHandlerTest {
3348

49+
data class TestConnectorMessage(
50+
val suggestions: List<CharSequence>,
51+
override val connectorType: ConnectorType = ConnectorType.none
52+
) : ConnectorMessage
53+
3454
@Test
3555
fun `switchStory switch story and reset step if same story def`() {
3656
val feature: StoryDefinitionConfigurationFeature = mockk {
@@ -58,4 +78,73 @@ class ConfiguredStoryHandlerTest {
5878
verify { bus.step = null }
5979
verify { bus.handleAndSwitchStory(test, test.mainIntent()) }
6080
}
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+
}
61150
}

0 commit comments

Comments
 (0)