Skip to content

Commit 6b6608f

Browse files
committed
update test
1 parent 8b69f84 commit 6b6608f

File tree

8 files changed

+1320
-0
lines changed

8 files changed

+1320
-0
lines changed
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
package com.nativeapptemplate.nativeapptemplatefree.ui.scan
2+
3+
import androidx.lifecycle.SavedStateHandle
4+
import androidx.navigation.testing.invoke
5+
import com.nativeapptemplate.nativeapptemplatefree.testing.repository.TestLoginRepository
6+
import com.nativeapptemplate.nativeapptemplatefree.testing.repository.emptyUserData
7+
import com.nativeapptemplate.nativeapptemplatefree.testing.util.MainDispatcherRule
8+
import com.nativeapptemplate.nativeapptemplatefree.ui.scan.navigation.DoScanRoute
9+
import kotlinx.coroutines.flow.first
10+
import kotlinx.coroutines.test.runTest
11+
import org.junit.Assert.assertEquals
12+
import org.junit.Assert.assertFalse
13+
import org.junit.Assert.assertTrue
14+
import org.junit.Before
15+
import org.junit.Rule
16+
import org.junit.Test
17+
import org.junit.runner.RunWith
18+
import org.robolectric.RobolectricTestRunner
19+
20+
/**
21+
* These tests use Robolectric because the subject under test (the ViewModel) uses
22+
* `SavedStateHandle.toRoute` which has a dependency on `android.os.Bundle`.
23+
*
24+
* TODO: Remove Robolectric if/when AndroidX Navigation API is updated to remove Android dependency.
25+
* * See b/340966212.
26+
*/
27+
@RunWith(RobolectricTestRunner::class)
28+
class DoScanViewModelTestIsTestTrue {
29+
@get:Rule
30+
val dispatcherRule = MainDispatcherRule()
31+
32+
private val loginRepository = TestLoginRepository()
33+
34+
private lateinit var viewModel: DoScanViewModel
35+
36+
@Before
37+
fun setUp() {
38+
viewModel = DoScanViewModel(
39+
savedStateHandle = SavedStateHandle(
40+
route = DoScanRoute(isTest = true),
41+
),
42+
loginRepository = loginRepository,
43+
)
44+
}
45+
46+
@Test
47+
fun stateIsInitiallyLoading() = runTest {
48+
assertFalse(viewModel.uiState.value.isLoading)
49+
}
50+
51+
@Test
52+
fun stateIsScanned_updated() = runTest {
53+
loginRepository.sendUserData(emptyUserData)
54+
55+
viewModel.updateIsScanned(true)
56+
57+
assertTrue(viewModel.uiState.value.isScanned)
58+
}
59+
60+
@Test
61+
fun scanViewSelectedTabIndex_isSavedInPreference() = runTest {
62+
loginRepository.sendUserData(emptyUserData)
63+
64+
viewModel.updateScanViewSelectedTabIndex()
65+
66+
assertEquals(loginRepository.userData.first().scanViewSelectedTabIndex, 1)
67+
}
68+
69+
@Test
70+
fun shouldFetchItemTagForShowTagInfoScan_isSavedInPreference() = runTest {
71+
loginRepository.sendUserData(emptyUserData)
72+
73+
viewModel.updateExecFlagAfterScanning(true)
74+
75+
assertTrue(loginRepository.userData.first().shouldFetchItemTagForShowTagInfoScan)
76+
}
77+
}
78+
79+
/**
80+
* These tests use Robolectric because the subject under test (the ViewModel) uses
81+
* `SavedStateHandle.toRoute` which has a dependency on `android.os.Bundle`.
82+
*
83+
* TODO: Remove Robolectric if/when AndroidX Navigation API is updated to remove Android dependency.
84+
* * See b/340966212.
85+
*/
86+
@RunWith(RobolectricTestRunner::class)
87+
class DoScanViewModelTestIsTestFalse {
88+
@get:Rule
89+
val dispatcherRule = MainDispatcherRule()
90+
91+
private val loginRepository = TestLoginRepository()
92+
93+
private lateinit var viewModel: DoScanViewModel
94+
95+
@Before
96+
fun setUp() {
97+
viewModel = DoScanViewModel(
98+
savedStateHandle = SavedStateHandle(
99+
route = DoScanRoute(isTest = false),
100+
),
101+
loginRepository = loginRepository,
102+
)
103+
}
104+
105+
@Test
106+
fun scanViewSelectedTabIndex_isSavedInPreference() = runTest {
107+
loginRepository.sendUserData(emptyUserData)
108+
109+
viewModel.updateScanViewSelectedTabIndex()
110+
111+
assertEquals(loginRepository.userData.first().scanViewSelectedTabIndex, 0)
112+
}
113+
114+
@Test
115+
fun shouldCompleteItemTagForCompleteScan_isSavedInPreference() = runTest {
116+
loginRepository.sendUserData(emptyUserData)
117+
118+
viewModel.updateExecFlagAfterScanning(true)
119+
120+
assertTrue(loginRepository.userData.first().shouldCompleteItemTagForCompleteScan)
121+
}
122+
}

0 commit comments

Comments
 (0)