Skip to content

Commit

Permalink
chore: add tests for :core:navigation (#481)
Browse files Browse the repository at this point in the history
* fix: mute videos by default

* update build scripts

* refactor: wrap adapter around navigator in NavigationCoordinator

* add test for NavigationCoordinator

* add test for DrawerCoordinator
  • Loading branch information
AkesiSeli authored Nov 11, 2024
1 parent 5aea71b commit da75cad
Show file tree
Hide file tree
Showing 9 changed files with 328 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import com.livefast.eattrash.raccoonforfriendica.core.appearance.theme.AppTheme
import com.livefast.eattrash.raccoonforfriendica.core.l10n.di.getL10nManager
import com.livefast.eattrash.raccoonforfriendica.core.l10n.messages.ProvideStrings
import com.livefast.eattrash.raccoonforfriendica.core.navigation.DrawerEvent
import com.livefast.eattrash.raccoonforfriendica.core.navigation.VoyagerNavigator
import com.livefast.eattrash.raccoonforfriendica.core.navigation.di.getDrawerCoordinator
import com.livefast.eattrash.raccoonforfriendica.core.navigation.di.getNavigationCoordinator
import com.livefast.eattrash.raccoonforfriendica.core.utils.di.getCrashReportManager
Expand Down Expand Up @@ -160,7 +161,8 @@ fun App(onLoadingFinished: (() -> Unit)? = null) {
},
) { navigator ->
LaunchedEffect(navigationCoordinator) {
navigationCoordinator.setRootNavigator(navigator)
val adapter = VoyagerNavigator(navigator)
navigationCoordinator.setRootNavigator(adapter)
}

CurrentScreen()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ internal class SharedResources : CoreResources {
override fun getPlayerConfig(contentScale: ContentScale): PlayerConfig =
PlayerConfig(
isFullScreenEnabled = false,
isMute = true,
videoFitMode =
if (contentScale == ContentScale.Fit) {
ScreenResize.FIT
Expand Down
10 changes: 10 additions & 0 deletions core/navigation/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.jetbrains.compose)
alias(libs.plugins.compose.compiler)
alias(libs.plugins.mokkery)
}

@OptIn(ExperimentalKotlinGradlePluginApi::class)
Expand Down Expand Up @@ -42,6 +43,15 @@ kotlin {

implementation(projects.domain.content.data)
}
val commonTest by getting {
dependencies {
dependencies {
implementation(kotlin("test"))
implementation(libs.kotlinx.coroutines.test)
implementation(libs.turbine)
}
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package com.livefast.eattrash.raccoonforfriendica.core.navigation

import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
import cafe.adriel.voyager.core.screen.Screen
import cafe.adriel.voyager.navigator.Navigator
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
Expand All @@ -21,7 +20,7 @@ internal class DefaultNavigationCoordinator(
override val canPop = MutableStateFlow(false)
override val exitMessageVisible = MutableStateFlow(false)

private var rootNavigator: Navigator? = null
private var rootNavigator: NavigatorAdapter? = null
private var bottomBarScrollConnection: NestedScrollConnection? = null
private var canGoBackCallback: (() -> Boolean)? = null
private val scope: CoroutineScope = CoroutineScope(SupervisorJob() + dispatcher)
Expand All @@ -37,7 +36,7 @@ internal class DefaultNavigationCoordinator(
}
}

override fun setRootNavigator(navigator: Navigator) {
override fun setRootNavigator(navigator: NavigatorAdapter) {
rootNavigator = navigator
canPop.update { navigator.canPop }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package com.livefast.eattrash.raccoonforfriendica.core.navigation
import androidx.compose.runtime.Stable
import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
import cafe.adriel.voyager.core.screen.Screen
import cafe.adriel.voyager.navigator.Navigator
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.StateFlow

Expand All @@ -26,7 +25,7 @@ interface NavigationCoordinator {

fun setExitMessageVisible(value: Boolean)

fun setRootNavigator(navigator: Navigator)
fun setRootNavigator(navigator: NavigatorAdapter)

fun replace(screen: Screen)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.livefast.eattrash.raccoonforfriendica.core.navigation

import cafe.adriel.voyager.core.screen.Screen

interface NavigatorAdapter {
val canPop: Boolean

fun push(screen: Screen)

fun pop()

fun popUntilRoot()

fun replace(screen: Screen)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.livefast.eattrash.raccoonforfriendica.core.navigation

import cafe.adriel.voyager.core.screen.Screen
import cafe.adriel.voyager.navigator.Navigator

data class VoyagerNavigator(
val adaptee: Navigator,
) : NavigatorAdapter {
override val canPop: Boolean
get() = adaptee.canPop

override fun push(screen: Screen) {
adaptee.push(screen)
}

override fun pop() {
adaptee.pop()
}

override fun popUntilRoot() {
adaptee.popUntilRoot()
}

override fun replace(screen: Screen) {
adaptee.replace(screen)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package com.livefast.eattrash.raccoonforfriendica.core.navigation

import app.cash.turbine.test
import kotlinx.coroutines.launch
import kotlinx.coroutines.test.runTest
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFalse
import kotlin.test.assertTrue

class DefaultDrawerCoordinatorTest {
private val sut = DefaultDrawerCoordinator()

@Test
fun `when toggleDrawer then event is emitted`() =
runTest {
launch {
sut.toggleDrawer()
}

sut.events.test {
val evt = awaitItem()
assertEquals(DrawerEvent.Toggle, evt)
}
}

@Test
fun `when closeDrawer then event is emitted`() =
runTest {
launch {
sut.closeDrawer()
}

sut.events.test {
val evt = awaitItem()
assertEquals(DrawerEvent.Close, evt)
}
}

@Test
fun `when setGesturesEnabled then state is updated`() =
runTest {
val initial = sut.gesturesEnabled.value
assertTrue(initial)

sut.setGesturesEnabled(false)

val value = sut.gesturesEnabled.value
assertFalse(value)
}

@Test
fun `when sendEvent then event is emitted`() =
runTest {
launch {
sut.sendEvent(DrawerEvent.Toggle)
}
sut.events.test {
val evt = awaitItem()
assertEquals(DrawerEvent.Toggle, evt)
}
}
}
Loading

0 comments on commit da75cad

Please sign in to comment.