@@ -23,10 +23,12 @@ import kotlinx.coroutines.test.runTest
23
23
import org.junit.Assert
24
24
import org.junit.Before
25
25
import org.junit.Test
26
+ import java.io.File
26
27
27
28
class GalleryDetailViewModelTest : CoreViewModelTest <GalleryDetailViewModel >() {
28
29
29
30
private val stubBitmap = mockk<Bitmap >()
31
+ private val stubFile = mockk<File >()
30
32
private val stubGetGenerationResultUseCase = mockk<GetGenerationResultUseCase >()
31
33
private val stubGetLastResultFromCacheUseCase = mockk<GetLastResultFromCacheUseCase >()
32
34
private val stubDeleteGalleryItemUseCase = mockk<DeleteGalleryItemUseCase >()
@@ -103,7 +105,7 @@ class GalleryDetailViewModelTest : CoreViewModelTest<GalleryDetailViewModel>() {
103
105
}
104
106
105
107
@Test
106
- fun `given received Delete_Request intent, expected modal field in UI state is DeleteImageConfirm` () {
108
+ fun `given received Delete Request intent, expected modal field in UI state is DeleteImageConfirm` () {
107
109
viewModel.processIntent(GalleryDetailIntent .Delete .Request )
108
110
runTest {
109
111
val expected = Modal .DeleteImageConfirm
@@ -113,7 +115,7 @@ class GalleryDetailViewModelTest : CoreViewModelTest<GalleryDetailViewModel>() {
113
115
}
114
116
115
117
@Test
116
- fun `given received Delete_Confirm intent, expected modal field in UI state is None, deleteGalleryItemUseCase() method is called` () {
118
+ fun `given received Delete Confirm intent, expected modal field in UI state is None, deleteGalleryItemUseCase() method is called` () {
117
119
every {
118
120
stubDeleteGalleryItemUseCase(any())
119
121
} returns Completable .complete()
@@ -127,4 +129,71 @@ class GalleryDetailViewModelTest : CoreViewModelTest<GalleryDetailViewModel>() {
127
129
stubDeleteGalleryItemUseCase(5598L )
128
130
}
129
131
}
132
+
133
+ @Test
134
+ fun `given received Export Image intent, expected galleryDetailBitmapExporter() method is called, ShareImageFile effect delivered to effect collector` () {
135
+ every {
136
+ stubGalleryDetailBitmapExporter(any())
137
+ } returns Single .just(stubFile)
138
+ viewModel.processIntent(GalleryDetailIntent .Export .Image )
139
+ verify {
140
+ stubGalleryDetailBitmapExporter(stubBitmap)
141
+ }
142
+ runTest {
143
+ val expected = GalleryDetailEffect .ShareImageFile (stubFile)
144
+ val actual = viewModel.effect.firstOrNull()
145
+ Assert .assertEquals(expected, actual)
146
+ }
147
+ }
148
+
149
+ @Test
150
+ fun `given received Export Params intent, expected ShareGenerationParams effect delivered to effect collector` () {
151
+ viewModel.processIntent(GalleryDetailIntent .Export .Params )
152
+ runTest {
153
+ val expected = GalleryDetailEffect .ShareGenerationParams (viewModel.state.value)
154
+ val actual = viewModel.effect.firstOrNull()
155
+ Assert .assertEquals(expected, actual)
156
+ }
157
+ }
158
+
159
+ @Test
160
+ fun `given received NavigateBack intent, expected router navigateBack() method called` () {
161
+ every {
162
+ stubMainRouter.navigateBack()
163
+ } returns Unit
164
+ viewModel.processIntent(GalleryDetailIntent .NavigateBack )
165
+ verify {
166
+ stubMainRouter.navigateBack()
167
+ }
168
+ }
169
+
170
+ @Test
171
+ fun `given received SelectTab intent with IMAGE tab, expected expected selectedTab field in UI state is IMAGE` () {
172
+ viewModel.processIntent(GalleryDetailIntent .SelectTab (GalleryDetailState .Tab .IMAGE ))
173
+ runTest {
174
+ val expected = GalleryDetailState .Tab .IMAGE
175
+ val actual = viewModel.state.value.selectedTab
176
+ Assert .assertEquals(expected, actual)
177
+ }
178
+ }
179
+
180
+ @Test
181
+ fun `given received SelectTab intent with INFO tab, expected expected selectedTab field in UI state is INFO` () {
182
+ viewModel.processIntent(GalleryDetailIntent .SelectTab (GalleryDetailState .Tab .INFO ))
183
+ runTest {
184
+ val expected = GalleryDetailState .Tab .INFO
185
+ val actual = viewModel.state.value.selectedTab
186
+ Assert .assertEquals(expected, actual)
187
+ }
188
+ }
189
+
190
+ @Test
191
+ fun `given received SelectTab intent with ORIGINAL tab, expected expected selectedTab field in UI state is ORIGINAL` () {
192
+ viewModel.processIntent(GalleryDetailIntent .SelectTab (GalleryDetailState .Tab .ORIGINAL ))
193
+ runTest {
194
+ val expected = GalleryDetailState .Tab .ORIGINAL
195
+ val actual = viewModel.state.value.selectedTab
196
+ Assert .assertEquals(expected, actual)
197
+ }
198
+ }
130
199
}
0 commit comments