Skip to content

Commit 21b3c70

Browse files
committed
Unit Testing | Patch 24
1 parent cb1467f commit 21b3c70

File tree

2 files changed

+73
-4
lines changed

2 files changed

+73
-4
lines changed

presentation/src/main/java/com/shifthackz/aisdv1/presentation/modal/ModalRenderer.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ fun ModalRenderer(
171171
items = screenModal.models,
172172
onItemSelected = { selectedItem = it },
173173
)
174-
}
174+
},
175175
)
176176
}
177177

@@ -240,7 +240,7 @@ fun ModalRenderer(
240240
is Modal.Image.Crop -> CropImageModal(
241241
bitmap = screenModal.bitmap,
242242
onDismissRequest = dismiss,
243-
onResult = { processIntent(ImageToImageIntent.UpdateImage(it)) }
243+
onResult = { processIntent(ImageToImageIntent.UpdateImage(it)) },
244244
)
245245

246246
Modal.ConnectLocalHost -> DecisionInteractiveDialog(

presentation/src/test/java/com/shifthackz/aisdv1/presentation/screen/gallery/detail/GalleryDetailViewModelTest.kt

Lines changed: 71 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,12 @@ import kotlinx.coroutines.test.runTest
2323
import org.junit.Assert
2424
import org.junit.Before
2525
import org.junit.Test
26+
import java.io.File
2627

2728
class GalleryDetailViewModelTest : CoreViewModelTest<GalleryDetailViewModel>() {
2829

2930
private val stubBitmap = mockk<Bitmap>()
31+
private val stubFile = mockk<File>()
3032
private val stubGetGenerationResultUseCase = mockk<GetGenerationResultUseCase>()
3133
private val stubGetLastResultFromCacheUseCase = mockk<GetLastResultFromCacheUseCase>()
3234
private val stubDeleteGalleryItemUseCase = mockk<DeleteGalleryItemUseCase>()
@@ -103,7 +105,7 @@ class GalleryDetailViewModelTest : CoreViewModelTest<GalleryDetailViewModel>() {
103105
}
104106

105107
@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`() {
107109
viewModel.processIntent(GalleryDetailIntent.Delete.Request)
108110
runTest {
109111
val expected = Modal.DeleteImageConfirm
@@ -113,7 +115,7 @@ class GalleryDetailViewModelTest : CoreViewModelTest<GalleryDetailViewModel>() {
113115
}
114116

115117
@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`() {
117119
every {
118120
stubDeleteGalleryItemUseCase(any())
119121
} returns Completable.complete()
@@ -127,4 +129,71 @@ class GalleryDetailViewModelTest : CoreViewModelTest<GalleryDetailViewModel>() {
127129
stubDeleteGalleryItemUseCase(5598L)
128130
}
129131
}
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+
}
130199
}

0 commit comments

Comments
 (0)