Update tests.
This commit is contained in:
parent
53fe12bdda
commit
dc05388cca
7 changed files with 119 additions and 5 deletions
|
|
@ -13,6 +13,7 @@ import io.element.android.libraries.matrix.api.permalink.PermalinkData
|
|||
import io.element.android.tests.testutils.lambda.lambdaError
|
||||
|
||||
class FakeJoinedRoomLoadedFlowNodeCallback : JoinedRoomLoadedFlowNode.Callback {
|
||||
override fun onDone() = lambdaError()
|
||||
override fun navigateToRoom(roomId: RoomId, serverNames: List<String>, clearBackStack: Boolean) = lambdaError()
|
||||
override fun handlePermalinkClick(data: PermalinkData, pushToBackstack: Boolean) = lambdaError()
|
||||
override fun navigateToGlobalNotificationSettings() = lambdaError()
|
||||
|
|
|
|||
|
|
@ -70,6 +70,7 @@ dependencies {
|
|||
testImplementation(projects.libraries.mediaviewer.test)
|
||||
testImplementation(projects.libraries.permissions.test)
|
||||
testImplementation(projects.libraries.preferences.test)
|
||||
testImplementation(projects.libraries.push.test)
|
||||
testImplementation(projects.libraries.usersearch.test)
|
||||
testImplementation(projects.libraries.featureflag.test)
|
||||
testImplementation(projects.features.call.test)
|
||||
|
|
|
|||
|
|
@ -287,8 +287,6 @@ class RoomDetailsPresenter(
|
|||
room.setUnreadFlag(isUnread = true)
|
||||
.onSuccess {
|
||||
analyticsService.captureInteraction(name = Interaction.Name.MobileRoomListRoomContextMenuUnreadToggle)
|
||||
}
|
||||
.onSuccess {
|
||||
navigator.onDone()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -68,6 +68,7 @@ class DefaultRoomDetailsEntryPointTest {
|
|||
)
|
||||
}
|
||||
val callback = object : RoomDetailsEntryPoint.Callback {
|
||||
override fun onDone() = lambdaError()
|
||||
override fun navigateToGlobalNotificationSettings() = lambdaError()
|
||||
override fun navigateToDeveloperSettings() = lambdaError()
|
||||
override fun navigateToRoom(roomId: RoomId, serverNames: List<String>, clearBackStack: Boolean) = lambdaError()
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
/*
|
||||
* Copyright (c) 2026 Element Creations Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.features.roomdetails.impl
|
||||
|
||||
import io.element.android.tests.testutils.lambda.lambdaError
|
||||
|
||||
class FakeRoomDetailsNavigator(
|
||||
private val onDoneResult: () -> Unit = { lambdaError() }
|
||||
) : RoomDetailsNavigator {
|
||||
override fun onDone() = onDoneResult()
|
||||
}
|
||||
|
|
@ -15,6 +15,7 @@ import io.element.android.libraries.matrix.api.core.UserId
|
|||
import io.element.android.libraries.matrix.api.room.RoomMember
|
||||
import io.element.android.libraries.matrix.api.room.join.JoinRule
|
||||
import io.element.android.libraries.matrix.api.room.powerlevels.RoomPermissions
|
||||
import io.element.android.libraries.matrix.api.timeline.ReceiptType
|
||||
import io.element.android.libraries.matrix.test.AN_AVATAR_URL
|
||||
import io.element.android.libraries.matrix.test.A_ROOM_ALIAS
|
||||
import io.element.android.libraries.matrix.test.A_ROOM_ID
|
||||
|
|
@ -28,7 +29,7 @@ import io.element.android.libraries.matrix.test.room.aRoomInfo
|
|||
import io.element.android.libraries.matrix.test.room.powerlevels.FakeRoomPermissions
|
||||
import io.element.android.tests.testutils.lambda.lambdaError
|
||||
|
||||
fun aRoom(
|
||||
fun aFakeBaseRoom(
|
||||
sessionId: SessionId = A_SESSION_ID,
|
||||
roomId: RoomId = A_ROOM_ID,
|
||||
displayName: String = A_ROOM_NAME,
|
||||
|
|
@ -49,6 +50,7 @@ fun aRoom(
|
|||
getUpdatedMemberResult: (UserId) -> Result<RoomMember> = { lambdaError() },
|
||||
userRoleResult: () -> Result<RoomMember.Role> = { lambdaError() },
|
||||
setIsFavoriteResult: (Boolean) -> Result<Unit> = { lambdaError() },
|
||||
markAsReadResult: (ReceiptType) -> Result<Unit> = { lambdaError() },
|
||||
) = FakeBaseRoom(
|
||||
sessionId = sessionId,
|
||||
roomId = roomId,
|
||||
|
|
@ -57,6 +59,7 @@ fun aRoom(
|
|||
getUpdatedMemberResult = getUpdatedMemberResult,
|
||||
userRoleResult = userRoleResult,
|
||||
setIsFavoriteResult = setIsFavoriteResult,
|
||||
markAsReadResult = markAsReadResult,
|
||||
roomPermissions = roomPermissions,
|
||||
initialRoomInfo = aRoomInfo(
|
||||
name = displayName,
|
||||
|
|
@ -106,6 +109,7 @@ fun aJoinedRoom(
|
|||
publishRoomAliasInRoomDirectoryResult: (RoomAlias) -> Result<Boolean> = { lambdaError() },
|
||||
removeRoomAliasFromRoomDirectoryResult: (RoomAlias) -> Result<Boolean> = { lambdaError() },
|
||||
setIsFavoriteResult: (Boolean) -> Result<Unit> = { lambdaError() },
|
||||
markAsReadResult: (ReceiptType) -> Result<Unit> = { lambdaError() },
|
||||
) = FakeJoinedRoom(
|
||||
roomNotificationSettingsService = notificationSettingsService,
|
||||
setNameResult = setNameResult,
|
||||
|
|
@ -118,7 +122,7 @@ fun aJoinedRoom(
|
|||
updateCanonicalAliasResult = updateCanonicalAliasResult,
|
||||
publishRoomAliasInRoomDirectoryResult = publishRoomAliasInRoomDirectoryResult,
|
||||
removeRoomAliasFromRoomDirectoryResult = removeRoomAliasFromRoomDirectoryResult,
|
||||
baseRoom = aRoom(
|
||||
baseRoom = aFakeBaseRoom(
|
||||
sessionId = sessionId,
|
||||
roomId = roomId,
|
||||
roomPermissions = roomPermissions,
|
||||
|
|
@ -139,5 +143,6 @@ fun aJoinedRoom(
|
|||
joinedMemberCount = joinedMemberCount,
|
||||
activeMemberCount = activeMemberCount,
|
||||
invitedMemberCount = invitedMemberCount,
|
||||
markAsReadResult = markAsReadResult,
|
||||
)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@ import io.element.android.libraries.androidutils.clipboard.ClipboardHelper
|
|||
import io.element.android.libraries.androidutils.clipboard.FakeClipboardHelper
|
||||
import io.element.android.libraries.architecture.Presenter
|
||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||
import io.element.android.libraries.matrix.api.core.RoomId
|
||||
import io.element.android.libraries.matrix.api.core.SessionId
|
||||
import io.element.android.libraries.matrix.api.core.UserId
|
||||
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
||||
import io.element.android.libraries.matrix.api.room.RoomMembersState
|
||||
|
|
@ -28,6 +30,7 @@ import io.element.android.libraries.matrix.api.room.RoomNotificationMode
|
|||
import io.element.android.libraries.matrix.api.room.StateEventType
|
||||
import io.element.android.libraries.matrix.api.room.join.JoinRule
|
||||
import io.element.android.libraries.matrix.api.room.powerlevels.RoomPermissions
|
||||
import io.element.android.libraries.matrix.api.timeline.ReceiptType
|
||||
import io.element.android.libraries.matrix.test.AN_AVATAR_URL
|
||||
import io.element.android.libraries.matrix.test.AN_EVENT_ID
|
||||
import io.element.android.libraries.matrix.test.A_ROOM_NAME
|
||||
|
|
@ -41,7 +44,11 @@ import io.element.android.libraries.matrix.test.notificationsettings.FakeNotific
|
|||
import io.element.android.libraries.matrix.test.room.aRoomInfo
|
||||
import io.element.android.libraries.matrix.test.room.powerlevels.FakeRoomPermissions
|
||||
import io.element.android.libraries.preferences.api.store.AppPreferencesStore
|
||||
import io.element.android.libraries.preferences.api.store.SessionPreferencesStore
|
||||
import io.element.android.libraries.preferences.test.InMemoryAppPreferencesStore
|
||||
import io.element.android.libraries.preferences.test.InMemorySessionPreferencesStore
|
||||
import io.element.android.libraries.push.api.notifications.NotificationCleaner
|
||||
import io.element.android.libraries.push.test.notifications.FakeNotificationCleaner
|
||||
import io.element.android.services.analytics.api.AnalyticsService
|
||||
import io.element.android.services.analytics.test.FakeAnalyticsService
|
||||
import io.element.android.tests.testutils.EventsRecorder
|
||||
|
|
@ -79,7 +86,10 @@ class RoomDetailsPresenterTest {
|
|||
analyticsService: AnalyticsService = FakeAnalyticsService(),
|
||||
encryptionService: FakeEncryptionService = FakeEncryptionService(),
|
||||
clipboardHelper: ClipboardHelper = FakeClipboardHelper(),
|
||||
appPreferencesStore: AppPreferencesStore = InMemoryAppPreferencesStore()
|
||||
appPreferencesStore: AppPreferencesStore = InMemoryAppPreferencesStore(),
|
||||
navigator: RoomDetailsNavigator = FakeRoomDetailsNavigator(),
|
||||
notificationCleaner: NotificationCleaner = FakeNotificationCleaner(),
|
||||
sessionPreferencesStore: SessionPreferencesStore = InMemorySessionPreferencesStore(),
|
||||
): RoomDetailsPresenter {
|
||||
val matrixClient = FakeMatrixClient(notificationSettingsService = notificationSettingsService)
|
||||
val roomMemberDetailsPresenterFactory = object : RoomMemberDetailsPresenter.Factory {
|
||||
|
|
@ -96,6 +106,7 @@ class RoomDetailsPresenterTest {
|
|||
}
|
||||
}
|
||||
return RoomDetailsPresenter(
|
||||
navigator = navigator,
|
||||
client = matrixClient,
|
||||
room = room,
|
||||
notificationSettingsService = matrixClient.notificationSettingsService,
|
||||
|
|
@ -106,6 +117,8 @@ class RoomDetailsPresenterTest {
|
|||
analyticsService = analyticsService,
|
||||
clipboardHelper = clipboardHelper,
|
||||
appPreferencesStore = appPreferencesStore,
|
||||
notificationCleaner = notificationCleaner,
|
||||
sessionPreferencesStore = sessionPreferencesStore,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -598,6 +611,85 @@ class RoomDetailsPresenterTest {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `present - mark as read`() = runTest {
|
||||
val markAsReadResult = lambdaRecorder<ReceiptType, Result<Unit>> { _ -> Result.success(Unit) }
|
||||
val room = aJoinedRoom(
|
||||
markAsReadResult = markAsReadResult,
|
||||
)
|
||||
val clearMessagesForRoomResult = lambdaRecorder<SessionId, RoomId, Unit> { _, _ -> Result.success(Unit) }
|
||||
val notificationCleaner = FakeNotificationCleaner(
|
||||
clearMessagesForRoomLambda = clearMessagesForRoomResult,
|
||||
)
|
||||
val presenter = createRoomDetailsPresenter(
|
||||
room = room,
|
||||
notificationCleaner = notificationCleaner,
|
||||
)
|
||||
presenter.testWithLifecycleOwner(lifecycleOwner = fakeLifecycleOwner) {
|
||||
skipItems(1)
|
||||
with(awaitItem()) {
|
||||
eventSink(RoomDetailsEvent.MarkAsRead)
|
||||
}
|
||||
assertThat(room.baseRoom.setUnreadFlagCalls).containsExactly(false)
|
||||
markAsReadResult.assertions().isCalledOnce().with(value(ReceiptType.READ))
|
||||
clearMessagesForRoomResult.assertions().isCalledOnce().with(
|
||||
value(room.sessionId), value(room.roomId)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `present - mark as read - private`() = runTest {
|
||||
val markAsReadResult = lambdaRecorder<ReceiptType, Result<Unit>> { _ -> Result.success(Unit) }
|
||||
val room = aJoinedRoom(
|
||||
markAsReadResult = markAsReadResult,
|
||||
)
|
||||
val sessionPreferencesStore = InMemorySessionPreferencesStore(
|
||||
isSendPublicReadReceiptsEnabled = false,
|
||||
)
|
||||
val clearMessagesForRoomResult = lambdaRecorder<SessionId, RoomId, Unit> { _, _ -> Result.success(Unit) }
|
||||
val notificationCleaner = FakeNotificationCleaner(
|
||||
clearMessagesForRoomLambda = clearMessagesForRoomResult,
|
||||
)
|
||||
val presenter = createRoomDetailsPresenter(
|
||||
room = room,
|
||||
notificationCleaner = notificationCleaner,
|
||||
sessionPreferencesStore = sessionPreferencesStore,
|
||||
)
|
||||
presenter.testWithLifecycleOwner(lifecycleOwner = fakeLifecycleOwner) {
|
||||
skipItems(1)
|
||||
with(awaitItem()) {
|
||||
eventSink(RoomDetailsEvent.MarkAsRead)
|
||||
}
|
||||
assertThat(room.baseRoom.setUnreadFlagCalls).containsExactly(false)
|
||||
markAsReadResult.assertions().isCalledOnce().with(value(ReceiptType.READ_PRIVATE))
|
||||
clearMessagesForRoomResult.assertions().isCalledOnce().with(
|
||||
value(room.sessionId), value(room.roomId)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `present - mark as unread`() = runTest {
|
||||
val room = aJoinedRoom()
|
||||
val onDoneResult = lambdaRecorder<Unit> { }
|
||||
val navigator = FakeRoomDetailsNavigator(
|
||||
onDoneResult = onDoneResult
|
||||
)
|
||||
val presenter = createRoomDetailsPresenter(
|
||||
room = room,
|
||||
navigator = navigator,
|
||||
)
|
||||
presenter.testWithLifecycleOwner(lifecycleOwner = fakeLifecycleOwner) {
|
||||
skipItems(1)
|
||||
with(awaitItem()) {
|
||||
eventSink(RoomDetailsEvent.MarkAsUnread)
|
||||
}
|
||||
onDoneResult.assertions().isCalledOnce()
|
||||
assertThat(room.baseRoom.setUnreadFlagCalls).containsExactly(true)
|
||||
}
|
||||
}
|
||||
|
||||
private fun roomPermissions(
|
||||
canInvite: Boolean = true,
|
||||
canKick: Boolean = true,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue