From 1b5aa7adaafb268da65412e4f63a1841c7b06a68 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 21 Sep 2023 15:00:47 +0200 Subject: [PATCH] Test that permission is requested, instead of giving the permission directly. --- .../configureroom/ConfigureRoomPresenterTests.kt | 12 +++++++++++- .../editprofile/EditUserProfilePresenterTest.kt | 14 ++++++++++---- .../edit/RoomDetailsEditPresenterTest.kt | 14 ++++++++++---- 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenterTests.kt b/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenterTests.kt index b04a1b91a2..96935ed598 100644 --- a/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenterTests.kt +++ b/features/createroom/impl/src/test/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenterTests.kt @@ -57,6 +57,7 @@ import org.robolectric.RobolectricTestRunner import java.io.File private const val AN_URI_FROM_CAMERA = "content://uri_from_camera" +private const val AN_URI_FROM_CAMERA_2 = "content://uri_from_camera_2" private const val AN_URI_FROM_GALLERY = "content://uri_from_gallery" @RunWith(RobolectricTestRunner::class) @@ -186,13 +187,22 @@ class ConfigureRoomPresenterTests { val uriFromCamera = Uri.parse(AN_URI_FROM_CAMERA) fakePickerProvider.givenResult(uriFromCamera) assertThat(newState.cameraPermissionState.permissionGranted).isFalse() + newState.eventSink(ConfigureRoomEvents.HandleAvatarAction(AvatarAction.TakePhoto)) + newState = awaitItem() + assertThat(newState.cameraPermissionState.showDialog).isTrue() fakePermissionsPresenter.setPermissionGranted() newState = awaitItem() assertThat(newState.cameraPermissionState.permissionGranted).isTrue() - newState.eventSink(ConfigureRoomEvents.HandleAvatarAction(AvatarAction.TakePhoto)) newState = awaitItem() expectedConfig = expectedConfig.copy(avatarUri = uriFromCamera) assertThat(newState.config).isEqualTo(expectedConfig) + // Do it again, no permission is requested + val uriFromCamera2 = Uri.parse(AN_URI_FROM_CAMERA_2) + fakePickerProvider.givenResult(uriFromCamera2) + newState.eventSink(ConfigureRoomEvents.HandleAvatarAction(AvatarAction.TakePhoto)) + newState = awaitItem() + expectedConfig = expectedConfig.copy(avatarUri = uriFromCamera2) + assertThat(newState.config).isEqualTo(expectedConfig) // Remove newState.eventSink(ConfigureRoomEvents.HandleAvatarAction(AvatarAction.Remove)) newState = awaitItem() diff --git a/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfilePresenterTest.kt b/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfilePresenterTest.kt index c224d337af..8746670e03 100644 --- a/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfilePresenterTest.kt +++ b/features/preferences/impl/src/test/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfilePresenterTest.kt @@ -173,13 +173,19 @@ class EditUserProfilePresenterTest { val initialState = awaitItem() assertThat(initialState.userAvatarUrl).isEqualTo(userAvatarUri) assertThat(initialState.cameraPermissionState.permissionGranted).isFalse() + initialState.eventSink(EditUserProfileEvents.HandleAvatarAction(AvatarAction.TakePhoto)) + val stateWithAskingPermission = awaitItem() + assertThat(stateWithAskingPermission.cameraPermissionState.showDialog).isTrue() fakePermissionsPresenter.setPermissionGranted() val stateWithPermission = awaitItem() assertThat(stateWithPermission.cameraPermissionState.permissionGranted).isTrue() - stateWithPermission.eventSink(EditUserProfileEvents.HandleAvatarAction(AvatarAction.TakePhoto)) - awaitItem().apply { - assertThat(userAvatarUrl).isEqualTo(anotherAvatarUri) - } + val stateWithNewAvatar = awaitItem() + assertThat(stateWithNewAvatar.userAvatarUrl).isEqualTo(anotherAvatarUri) + // Do it again, no permission is requested + fakePickerProvider.givenResult(userAvatarUri) + stateWithNewAvatar.eventSink(EditUserProfileEvents.HandleAvatarAction(AvatarAction.TakePhoto)) + val stateWithNewAvatar2 = awaitItem() + assertThat(stateWithNewAvatar2.userAvatarUrl).isEqualTo(userAvatarUri) } } diff --git a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/edit/RoomDetailsEditPresenterTest.kt b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/edit/RoomDetailsEditPresenterTest.kt index f0dc288696..03a47026dd 100644 --- a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/edit/RoomDetailsEditPresenterTest.kt +++ b/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/edit/RoomDetailsEditPresenterTest.kt @@ -271,13 +271,19 @@ class RoomDetailsEditPresenterTest { val initialState = awaitItem() assertThat(initialState.roomAvatarUrl).isEqualTo(roomAvatarUri) assertThat(initialState.cameraPermissionState.permissionGranted).isFalse() + initialState.eventSink(RoomDetailsEditEvents.HandleAvatarAction(AvatarAction.TakePhoto)) + val stateWithAskingPermission = awaitItem() + assertThat(stateWithAskingPermission.cameraPermissionState.showDialog).isTrue() fakePermissionsPresenter.setPermissionGranted() val stateWithPermission = awaitItem() assertThat(stateWithPermission.cameraPermissionState.permissionGranted).isTrue() - stateWithPermission.eventSink(RoomDetailsEditEvents.HandleAvatarAction(AvatarAction.TakePhoto)) - awaitItem().apply { - assertThat(roomAvatarUrl).isEqualTo(anotherAvatarUri) - } + val stateWithNewAvatar = awaitItem() + assertThat(stateWithNewAvatar.roomAvatarUrl).isEqualTo(anotherAvatarUri) + // Do it again, no permission is requested + fakePickerProvider.givenResult(roomAvatarUri) + stateWithNewAvatar.eventSink(RoomDetailsEditEvents.HandleAvatarAction(AvatarAction.TakePhoto)) + val stateWithNewAvatar2 = awaitItem() + assertThat(stateWithNewAvatar2.roomAvatarUrl).isEqualTo(roomAvatarUri) } }