Prompt user when inviting users with uncached identities (#5331)

If the user attempts to invite someone (to a room or creating a DM) whose identity is not cached, we prompt them to make sure this was their intention.
This commit is contained in:
Skye Elliot
2026-04-14 12:51:58 +01:00
committed by GitHub
parent fe2319cada
commit 78240ebdee
45 changed files with 541 additions and 40 deletions
@@ -85,6 +85,40 @@ struct StartChatScreenViewModelTests {
try await deferred.fulfill()
}
// MARK: - History Sharing
@Test
func inviteConfirmationFetchesIdentity() async throws {
ServiceLocator.shared.settings.enableKeyShareOnInvite = true
clientProxy.directRoomForUserIDReturnValue = .success(nil)
clientProxy.userIdentityForFallBackToServerReturnValue = .success(UserIdentityProxyMock(configuration: .init(verificationState: .notVerified)))
// User identity becomes known, i.e. not unknown
let deferred = deferFulfillment(viewModel.context.$viewState.compactMap(\.bindings.selectedUserToInvite)) {
!$0.isUnknown
}
context.send(viewAction: .selectUser(.mockBob))
try await deferred.fulfill()
#expect(clientProxy.userIdentityForFallBackToServerCalled)
}
@Test
func inviteConfirmationFallsBackToUnknownIdentityOnFailure() async throws {
ServiceLocator.shared.settings.enableKeyShareOnInvite = true
clientProxy.directRoomForUserIDReturnValue = .success(nil)
clientProxy.userIdentityForFallBackToServerReturnValue = .failure(.forbiddenAccess)
// User identity never becomes known, i.e. is never not unknown
let deferred = deferFailure(viewModel.context.$viewState.compactMap(\.bindings.selectedUserToInvite), timeout: .seconds(5)) {
!$0.isUnknown
}
context.send(viewAction: .selectUser(.mockBob))
try await deferred.fulfill()
#expect(clientProxy.userIdentityForFallBackToServerCalled)
}
// MARK: - Private
private func assertSearchResults(toBe count: Int) {