Skip to content

Commit 6ee71e7

Browse files
authored
Add TestMviLogger (#38)
* Add TestMviLogger * Use TestMviLogger in sample test
1 parent 8a29f34 commit 6ee71e7

File tree

4 files changed

+60
-7
lines changed

4 files changed

+60
-7
lines changed

gradle/libs.versions.toml

-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ ktlint-gradle = "12.1.0"
1717
android-library = "8.3.2"
1818
maven-publish = "0.29.0"
1919
ui = "1.7.1"
20-
mockk = "1.13.11"
2120
mvi-kotest = "0.0.2"
2221

2322
# its beeing used outside this file
@@ -43,7 +42,6 @@ koinAndroid = { module = "io.insert-koin:koin-android", version.ref = "koin-andr
4342
koinAnnotations = { module = "io.insert-koin:koin-annotations", version.ref = "koin-annotations" }
4443
koinKspCompiler = { module = "io.insert-koin:koin-ksp-compiler", version.ref = "koin-annotations" }
4544
koinCompose = { module = "io.insert-koin:koin-androidx-compose", version.ref = "koin-compose" }
46-
mockk = { module = "io.mockk:mockk", version.ref = "mockk" }
4745

4846
[plugins]
4947
kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.adidas.mvi.kotest
2+
3+
import com.adidas.mvi.Loggable
4+
import com.adidas.mvi.Logger
5+
6+
/**
7+
* A fake implementation of [Logger] that remembers all logged entries, for use in tests.
8+
*
9+
* You can access list of all logged entries from [loggedTranformations] and [loggedIntents].
10+
*/
11+
public class TestMviLogger : Logger {
12+
public val loggedTranformations: MutableList<LoggedTranformation> = ArrayList<LoggedTranformation>()
13+
public val loggedIntents: MutableList<LoggedIntent> = ArrayList<LoggedIntent>()
14+
15+
override fun logFailedIntent(
16+
intent: Loggable,
17+
throwable: Throwable,
18+
) {
19+
loggedIntents += LoggedIntent.Failure(intent, throwable)
20+
}
21+
22+
override fun logIntent(intent: Loggable) {
23+
loggedIntents += LoggedIntent.Success(intent)
24+
}
25+
26+
override fun logFailedTransformNewState(
27+
transform: Loggable,
28+
state: Loggable,
29+
throwable: Throwable,
30+
) {
31+
loggedTranformations += LoggedTranformation.Failure(transform, state, throwable)
32+
}
33+
34+
override fun logTransformedNewState(
35+
transform: Loggable,
36+
previousState: Loggable,
37+
newState: Loggable,
38+
) {
39+
loggedTranformations += LoggedTranformation.Success(transform, previousState, newState)
40+
}
41+
42+
public sealed class LoggedIntent() {
43+
public abstract val intent: Loggable
44+
45+
public data class Success(override val intent: Loggable) : LoggedIntent()
46+
public data class Failure(override val intent: Loggable, val throwable: Throwable) : LoggedIntent()
47+
}
48+
49+
public sealed class LoggedTranformation() {
50+
public abstract val transform: Loggable
51+
public abstract val previousState: Loggable
52+
53+
public data class Success(override val transform: Loggable, override val previousState: Loggable, val newState: Loggable) : LoggedTranformation()
54+
public data class Failure(override val transform: Loggable, override val previousState: Loggable, val throwable: Throwable) : LoggedTranformation()
55+
}
56+
}

mvi-sample/build.gradle.kts

+1-2
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,5 @@ dependencies {
8888
ksp(libs.koinKspCompiler)
8989

9090
testImplementation(libs.kotestRunner)
91-
testImplementation(libs.mockk)
92-
testImplementation(libs.mviKotest)
91+
testImplementation(project(":mvi-kotest"))
9392
}

mvi-sample/src/test/kotlin/com/adidas/mvi/sample/login/viewmodel/LoginViewModelTest.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.adidas.mvi.sample.login.viewmodel
22

33
import com.adidas.mvi.kotest.GivenViewModel
4+
import com.adidas.mvi.kotest.TestMviLogger
45
import io.kotest.core.spec.IsolationMode
56
import io.kotest.core.spec.style.BehaviorSpec
67
import io.kotest.matchers.shouldBe
7-
import io.mockk.mockk
88
import kotlinx.coroutines.ExperimentalCoroutinesApi
99
import kotlinx.coroutines.test.TestCoroutineScheduler
1010
import kotlinx.coroutines.test.UnconfinedTestDispatcher
@@ -19,7 +19,7 @@ class LoginViewModelTest : BehaviorSpec({
1919

2020
fun getViewModel(): LoginViewModel {
2121
return LoginViewModel(
22-
logger = mockk(relaxed = true),
22+
logger = TestMviLogger(),
2323
coroutineDispatcher = testCoroutineDispatcher
2424
)
2525
}
@@ -56,4 +56,4 @@ class LoginViewModelTest : BehaviorSpec({
5656

5757
}
5858

59-
})
59+
})

0 commit comments

Comments
 (0)