Skip to content

Commit fa3e3ba

Browse files
authored
Merge pull request #3792 from CruGlobal/trackToolPrimaryAndParallel
GT-2314 Track language choices for favorited tools
2 parents ab1fd2b + c90c688 commit fa3e3ba

14 files changed

Lines changed: 919 additions & 26 deletions

File tree

app/src/main/kotlin/org/cru/godtools/ui/dashboard/home/AllFavoritesPresenter.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,10 @@ class AllFavoritesPresenter @AssistedInject constructor(
6060
ToolCard.Event.OpenTool -> {
6161
val intent = tool.createToolIntent(
6262
context = context,
63-
languages = listOfNotNull(state.translation?.languageCode),
63+
languages = listOfNotNull(
64+
tool.primaryLocale ?: state.translation?.languageCode,
65+
tool.parallelLocale
66+
),
6467
)
6568

6669
if (intent != null) {

app/src/main/kotlin/org/cru/godtools/ui/dashboard/home/HomePresenter.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,10 @@ class HomePresenter @AssistedInject constructor(
120120
ToolCard.Event.OpenTool -> {
121121
val intent = tool.createToolIntent(
122122
context = context,
123-
languages = listOfNotNull(state.translation?.languageCode),
123+
languages = listOfNotNull(
124+
tool.primaryLocale ?: state.translation?.languageCode,
125+
tool.parallelLocale
126+
),
124127
)
125128

126129
if (intent != null) {

app/src/testDebug/kotlin/org/cru/godtools/ui/dashboard/home/AllFavoritesPresenterTest.kt

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,10 @@ class AllFavoritesPresenterTest {
141141
coVerify { toolsRepository.storeToolOrder(listOf("tool1", "tool3", "tool2", "tool4")) }
142142
}
143143

144+
// region ToolCard.Event.Click
144145
@Test
145146
fun `ToolCard - Event - Click`() = runTest {
146-
val tool = randomTool("tool", Tool.Type.TRACT)
147+
val tool = randomTool("tool", Tool.Type.TRACT, primaryLocale = null, parallelLocale = null)
147148
toolsFlow.value = listOf(tool)
148149
everyComposable { toolCardPresenter.present(tool = tool, eventSink = any()) }.answers {
149150
ToolCard.State(
@@ -165,6 +166,31 @@ class AllFavoritesPresenterTest {
165166
verifyAll { eventBus.post(OpenAnalyticsActionEvent(ACTION_OPEN_TOOL, tool.code, SOURCE_FAVORITE)) }
166167
}
167168

169+
@Test
170+
fun `ToolCard - Event - Click - Saved Languages`() = runTest {
171+
val tool = randomTool("tool", Tool.Type.TRACT, primaryLocale = Locale.FRENCH, parallelLocale = Locale.GERMAN)
172+
toolsFlow.value = listOf(tool)
173+
everyComposable { toolCardPresenter.present(tool = tool, eventSink = any()) }.answers {
174+
ToolCard.State(
175+
toolCode = firstArg<Tool>().code,
176+
translation = randomTranslation(languageCode = Locale.ENGLISH),
177+
eventSink = arg(4)
178+
)
179+
}
180+
181+
presenter.test {
182+
expectMostRecentItem().tools[0].eventSink(ToolCard.Event.Click)
183+
184+
assertTrue {
185+
assertIs<IntentScreen>(navigator.awaitNextScreen()).intent
186+
.equalsIntent(tool.createToolIntent(context, languages = listOf(Locale.FRENCH, Locale.GERMAN)))
187+
}
188+
}
189+
190+
verifyAll { eventBus.post(OpenAnalyticsActionEvent(ACTION_OPEN_TOOL, tool.code, SOURCE_FAVORITE)) }
191+
}
192+
// endregion ToolCard.Event.Click
193+
168194
@Test
169195
fun `ToolCard - Event - OpenToolDetails`() = runTest {
170196
val tool = randomTool("tool", Tool.Type.TRACT)

app/src/testDebug/kotlin/org/cru/godtools/ui/dashboard/home/HomePresenterTest.kt

Lines changed: 46 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import kotlin.test.Test
1616
import kotlin.test.assertEquals
1717
import kotlin.test.assertFalse
1818
import kotlin.test.assertIs
19+
import kotlin.test.assertNotNull
1920
import kotlin.test.assertNull
2021
import kotlin.test.assertTrue
2122
import kotlinx.coroutines.flow.MutableSharedFlow
@@ -60,7 +61,11 @@ class HomePresenterTest {
6061
}
6162
private val toolCardPresenter: ToolCardPresenter = mockk {
6263
everyComposable { present(tool = any(), eventSink = any()) }.answers {
63-
ToolCard.State(toolCode = firstArg<Tool>().code, eventSink = arg(4))
64+
ToolCard.State(
65+
toolCode = firstArg<Tool>().code,
66+
translation = randomTranslation(languageCode = Locale.ENGLISH),
67+
eventSink = arg(4)
68+
)
6469
}
6570
}
6671

@@ -178,14 +183,6 @@ class HomePresenterTest {
178183
// endregion State.spotlightLessons
179184

180185
// region State.favoriteTools
181-
private val favoriteTool = randomTool(type = Tool.Type.TRACT, isHidden = false)
182-
private val favoriteToolTranslation = randomTranslation(favoriteTool.code, languageCode = Locale.FRENCH)
183-
init {
184-
everyComposable { toolCardPresenter.present(tool = favoriteTool, eventSink = any()) }.answers {
185-
ToolCard.State(toolCode = favoriteTool.code, translation = favoriteToolTranslation, eventSink = arg(4))
186-
}
187-
}
188-
189186
@Test
190187
fun `State - favoriteTools`() = runTest {
191188
val tools = List(3) { randomTool(type = Tool.Type.TRACT, isHidden = false) }
@@ -211,37 +208,64 @@ class HomePresenterTest {
211208

212209
@Test
213210
fun `State - favoriteTools - Event - Click`() = runTest {
214-
presenter.test {
215-
toolsFlow.emit(listOf(favoriteTool))
216-
expectMostRecentItem().favoriteTools[0].eventSink(ToolCard.Event.Click)
211+
val tool = randomTool(type = Tool.Type.TRACT, primaryLocale = null, parallelLocale = null)
217212

218-
assertIs<IntentScreen>(navigator.awaitNextScreen()).let {
219-
val expected = favoriteTool.createToolIntent(context, listOf(favoriteToolTranslation.languageCode))
220-
assertTrue(expected equalsIntent it.intent)
213+
presenter.test {
214+
toolsFlow.emit(listOf(tool))
215+
assertNotNull(expectMostRecentItem().favoriteTools[0]) { toolState ->
216+
toolState.eventSink(ToolCard.Event.Click)
217+
218+
assertIs<IntentScreen>(navigator.awaitNextScreen()).let { screen ->
219+
val expected = tool.createToolIntent(context, listOf(toolState.translation!!.languageCode))
220+
assertTrue(expected equalsIntent screen.intent)
221+
}
221222
}
222223
}
223224
}
224225

225226
@Test
226227
fun `State - favoriteTools - Event - OpenTool`() = runTest {
228+
val tool = randomTool(type = Tool.Type.TRACT, primaryLocale = null, parallelLocale = null)
229+
227230
presenter.test {
228-
toolsFlow.emit(listOf(favoriteTool))
229-
expectMostRecentItem().favoriteTools[0].eventSink(ToolCard.Event.OpenTool)
231+
toolsFlow.emit(listOf(tool))
232+
assertNotNull(expectMostRecentItem().favoriteTools[0]) { toolState ->
233+
toolState.eventSink(ToolCard.Event.OpenTool)
234+
235+
assertIs<IntentScreen>(navigator.awaitNextScreen()).let { screen ->
236+
val expected = tool.createToolIntent(context, listOf(toolState.translation!!.languageCode))
237+
assertTrue(expected equalsIntent screen.intent)
238+
}
239+
}
240+
}
241+
}
230242

231-
assertIs<IntentScreen>(navigator.awaitNextScreen()).let {
232-
val expected = favoriteTool.createToolIntent(context, listOf(favoriteToolTranslation.languageCode))
233-
assertTrue(expected equalsIntent it.intent)
243+
@Test
244+
fun `State - favoriteTools - Event - OpenTool - Saved Languages`() = runTest {
245+
val tool = randomTool(type = Tool.Type.TRACT, primaryLocale = Locale.GERMAN, parallelLocale = Locale.FRENCH)
246+
247+
presenter.test {
248+
toolsFlow.emit(listOf(tool))
249+
assertNotNull(expectMostRecentItem().favoriteTools[0]) { toolState ->
250+
toolState.eventSink(ToolCard.Event.OpenTool)
251+
252+
assertIs<IntentScreen>(navigator.awaitNextScreen()).let { screen ->
253+
val expected = tool.createToolIntent(context, listOf(Locale.GERMAN, Locale.FRENCH))
254+
assertTrue(expected equalsIntent screen.intent)
255+
}
234256
}
235257
}
236258
}
237259

238260
@Test
239261
fun `State - favoriteTools - Event - OpenToolDetails`() = runTest {
262+
val tool = randomTool(type = Tool.Type.TRACT)
263+
240264
presenter.test {
241-
toolsFlow.emit(listOf(favoriteTool))
265+
toolsFlow.emit(listOf(tool))
242266
expectMostRecentItem().favoriteTools[0].eventSink(ToolCard.Event.OpenToolDetails)
243267

244-
assertEquals(ToolDetailsScreen(favoriteTool.code!!), navigator.awaitNextScreen())
268+
assertEquals(ToolDetailsScreen(tool.code!!), navigator.awaitNextScreen())
245269
}
246270
}
247271
// endregion State.favoriteTools

0 commit comments

Comments
 (0)