/
KittenStoreTest.kt
88 lines (64 loc) · 2.09 KB
/
KittenStoreTest.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package com.badoo.kmpmvi.shared.kittens.store
import com.badoo.kmpmvi.shared.kittens.store.KittenStore.Intent
import com.badoo.kmpmvi.shared.kittens.store.KittenStore.State
import com.badoo.reaktive.scheduler.overrideSchedulers
import com.badoo.reaktive.test.scheduler.TestScheduler
import kotlin.test.AfterTest
import kotlin.test.BeforeTest
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFalse
import kotlin.test.assertTrue
class KittenStoreTest {
private val parser = TestKittenStoreParser()
private val networkScheduler = TestScheduler()
private val network = TestKittenStoreNetwork(networkScheduler)
@BeforeTest
fun before() {
overrideSchedulers(main = { TestScheduler() })
}
@AfterTest
fun after() {
overrideSchedulers()
}
@Test
fun isLoading_true_WHEN_loading() {
networkScheduler.isManualProcessing = true
network.generateImages()
val store = store()
assertTrue(store.state.isLoading)
}
@Test
fun loads_images_WHEN_created() {
val images = network.generateImages()
val store = store()
assertEquals(State.Data.Images(urls = images), store.state.data)
}
@Test
fun isLoading_false_WHEN_images_loaded() {
network.generateImages()
val store = store()
assertFalse(store.state.isLoading)
}
@Test
fun error_state_WHEN_network_error() {
network.images = null
val store = store()
assertTrue(store.state.data is State.Data.Error)
}
@Test
fun error_state_WHEN_invalid_response_format() {
network.images = emptyList()
val store = store()
assertTrue(store.state.data is State.Data.Error)
}
@Test
fun reloads_images_WHEN_Intent_Reload() {
network.generateImages()
val store = store()
val newImages = network.generateImages()
store.onNext(Intent.Reload)
assertEquals(State.Data.Images(urls = newImages), store.state.data)
}
private fun store(): KittenStore = KittenStoreImpl(network, parser)
}