@@ -10,7 +10,9 @@ package io.element.android.libraries.mediaviewer.impl.gallery
10
10
import android.net.Uri
11
11
import app.cash.turbine.ReceiveTurbine
12
12
import com.google.common.truth.Truth.assertThat
13
+ import io.element.android.libraries.architecture.AsyncData
13
14
import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatcher
15
+ import io.element.android.libraries.designsystem.utils.snackbar.SnackbarMessage
14
16
import io.element.android.libraries.matrix.api.core.EventId
15
17
import io.element.android.libraries.matrix.api.room.JoinedRoom
16
18
import io.element.android.libraries.matrix.api.timeline.Timeline
@@ -29,6 +31,7 @@ import io.element.android.libraries.mediaviewer.impl.details.MediaBottomSheetSta
29
31
import io.element.android.libraries.mediaviewer.impl.model.aMediaItemImage
30
32
import io.element.android.libraries.mediaviewer.test.FakeLocalMediaActions
31
33
import io.element.android.libraries.mediaviewer.test.FakeLocalMediaFactory
34
+ import io.element.android.libraries.ui.strings.CommonStrings
32
35
import io.element.android.tests.testutils.WarmUpRule
33
36
import io.element.android.tests.testutils.lambda.lambdaRecorder
34
37
import io.element.android.tests.testutils.lambda.value
@@ -147,8 +150,8 @@ class MediaGalleryPresenterTest {
147
150
val presenter = createMediaGalleryPresenter(
148
151
room = FakeJoinedRoom (
149
152
baseRoom = FakeBaseRoom (
150
- sessionId = A_USER_ID ,
151
- initialRoomInfo = aRoomInfo(name = A_ROOM_NAME ),
153
+ sessionId = A_USER_ID ,
154
+ initialRoomInfo = aRoomInfo(name = A_ROOM_NAME ),
152
155
canRedactOtherResult = { Result .success(canDeleteOther) },
153
156
),
154
157
createTimelineResult = { Result .success(FakeTimeline ()) }
@@ -223,23 +226,122 @@ class MediaGalleryPresenterTest {
223
226
}
224
227
225
228
@Test
226
- fun `present - share item` () = runTest {
229
+ fun `present - share item - item not found ` () = runTest {
227
230
val presenter = createMediaGalleryPresenter()
228
231
presenter.test {
229
232
val initialState = awaitFirstItem()
230
233
initialState.eventSink(MediaGalleryEvents .Share (AN_EVENT_ID ))
231
234
}
232
- // TODO Add more test on this part
233
235
}
234
236
235
237
@Test
236
- fun `present - save on disk` () = runTest {
238
+ fun `present - share item - item found` () = runTest {
239
+ val mediaGalleryDataSource = FakeMediaGalleryDataSource (
240
+ startLambda = { },
241
+ )
242
+ mediaGalleryDataSource.emitGroupedMediaItems(
243
+ AsyncData .Success (
244
+ aGroupedMediaItems(
245
+ imageAndVideoItems = listOf (aMediaItemImage(eventId = AN_EVENT_ID )),
246
+ fileItems = emptyList(),
247
+ )
248
+ )
249
+ )
250
+ val presenter = createMediaGalleryPresenter(
251
+ mediaGalleryDataSource = mediaGalleryDataSource,
252
+ )
253
+ presenter.test {
254
+ val initialState = awaitFirstItem()
255
+ initialState.eventSink(MediaGalleryEvents .Share (AN_EVENT_ID ))
256
+ val finalState = awaitItem()
257
+ assertThat(finalState.snackbarMessage).isNull()
258
+ }
259
+ }
260
+
261
+ @Test
262
+ fun `present - share item - item found - download error` () = runTest {
263
+ val mediaGalleryDataSource = FakeMediaGalleryDataSource (
264
+ startLambda = { },
265
+ )
266
+ mediaGalleryDataSource.emitGroupedMediaItems(
267
+ AsyncData .Success (
268
+ aGroupedMediaItems(
269
+ imageAndVideoItems = listOf (aMediaItemImage(eventId = AN_EVENT_ID )),
270
+ fileItems = emptyList(),
271
+ )
272
+ )
273
+ )
274
+ val presenter = createMediaGalleryPresenter(
275
+ mediaGalleryDataSource = mediaGalleryDataSource,
276
+ matrixMediaLoader = FakeMatrixMediaLoader ().apply { shouldFail = true },
277
+ )
278
+ presenter.test {
279
+ val initialState = awaitFirstItem()
280
+ initialState.eventSink(MediaGalleryEvents .Share (AN_EVENT_ID ))
281
+ skipItems(1 )
282
+ val finalState = awaitItem()
283
+ assertThat(finalState.snackbarMessage).isInstanceOf(SnackbarMessage ::class .java)
284
+ }
285
+ }
286
+
287
+ @Test
288
+ fun `present - save on disk - item not found` () = runTest {
237
289
val presenter = createMediaGalleryPresenter()
238
290
presenter.test {
239
291
val initialState = awaitFirstItem()
240
292
initialState.eventSink(MediaGalleryEvents .SaveOnDisk (AN_EVENT_ID ))
241
293
}
242
- // TODO Add more test on this part
294
+ }
295
+
296
+ @Test
297
+ fun `present - save on disk - item found` () = runTest {
298
+ val mediaGalleryDataSource = FakeMediaGalleryDataSource (
299
+ startLambda = { },
300
+ )
301
+ mediaGalleryDataSource.emitGroupedMediaItems(
302
+ AsyncData .Success (
303
+ aGroupedMediaItems(
304
+ imageAndVideoItems = listOf (aMediaItemImage(eventId = AN_EVENT_ID )),
305
+ fileItems = emptyList(),
306
+ )
307
+ )
308
+ )
309
+ val presenter = createMediaGalleryPresenter(
310
+ mediaGalleryDataSource = mediaGalleryDataSource,
311
+ )
312
+ presenter.test {
313
+ val initialState = awaitFirstItem()
314
+ initialState.eventSink(MediaGalleryEvents .SaveOnDisk (AN_EVENT_ID ))
315
+ skipItems(1 )
316
+ val finalState = awaitItem()
317
+ assertThat(finalState.snackbarMessage?.messageResId).isEqualTo(CommonStrings .common_file_saved_on_disk_android)
318
+ }
319
+ }
320
+
321
+ @Test
322
+ fun `present - save on disk - item found - download error` () = runTest {
323
+ val mediaGalleryDataSource = FakeMediaGalleryDataSource (
324
+ startLambda = { },
325
+ )
326
+ mediaGalleryDataSource.emitGroupedMediaItems(
327
+ AsyncData .Success (
328
+ aGroupedMediaItems(
329
+ imageAndVideoItems = listOf (aMediaItemImage(eventId = AN_EVENT_ID )),
330
+ fileItems = emptyList(),
331
+ )
332
+ )
333
+ )
334
+ val presenter = createMediaGalleryPresenter(
335
+ mediaGalleryDataSource = mediaGalleryDataSource,
336
+ matrixMediaLoader = FakeMatrixMediaLoader ().apply { shouldFail = true },
337
+ )
338
+ presenter.test {
339
+ val initialState = awaitFirstItem()
340
+ initialState.eventSink(MediaGalleryEvents .SaveOnDisk (AN_EVENT_ID ))
341
+ skipItems(1 )
342
+ val finalState = awaitItem()
343
+ assertThat(finalState.snackbarMessage).isInstanceOf(SnackbarMessage ::class .java)
344
+ }
243
345
}
244
346
245
347
@Test
0 commit comments