mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 12:07:55 +00:00
Add some tests.
# Conflicts: # ElementX.xcodeproj/project.pbxproj
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
// Please see LICENSE files in the repository root for full details.
|
||||
//
|
||||
|
||||
import Combine
|
||||
@testable import ElementX
|
||||
import Testing
|
||||
|
||||
@@ -16,12 +17,16 @@ final class JoinRoomScreenViewModelTests {
|
||||
case knocked
|
||||
case invited
|
||||
case banned
|
||||
case alreadyJoined
|
||||
}
|
||||
|
||||
var viewModel: JoinRoomScreenViewModelProtocol!
|
||||
|
||||
var clientProxy: ClientProxyMock!
|
||||
|
||||
/// Backs the client's static room summary provider so tests can push membership changes.
|
||||
var roomListSubject: CurrentValueSubject<[RoomSummary], Never>!
|
||||
|
||||
var context: JoinRoomScreenViewModelType.Context {
|
||||
viewModel.context
|
||||
}
|
||||
@@ -35,6 +40,7 @@ final class JoinRoomScreenViewModelTests {
|
||||
isolated deinit {
|
||||
viewModel = nil
|
||||
clientProxy = nil
|
||||
roomListSubject = nil
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -114,6 +120,26 @@ final class JoinRoomScreenViewModelTests {
|
||||
try await deferred.fulfill()
|
||||
}
|
||||
|
||||
@Test
|
||||
func alreadyJoinedRoomAdvancesTheScreen() async throws {
|
||||
setupViewModel(mode: .alreadyJoined)
|
||||
|
||||
let deferred = deferFulfillment(viewModel.actionsPublisher) { $0 == .joined(.roomID("1")) }
|
||||
try await deferred.fulfill()
|
||||
}
|
||||
|
||||
@Test
|
||||
func membershipChangeWhileInvitedAdvancesTheScreen() async throws {
|
||||
setupViewModel(mode: .invited)
|
||||
try await deferFulfillment(viewModel.context.$viewState) { $0.mode == .invited(isDM: false) }.fulfill()
|
||||
|
||||
// Simulate the server-side join arriving through the room list.
|
||||
clientProxy.roomForIdentifierClosure = { .joined(JoinedRoomProxyMock(.init(id: $0))) }
|
||||
let deferred = deferFulfillment(viewModel.actionsPublisher) { $0 == .joined(.roomID("1")) }
|
||||
roomListSubject.send([.mock(id: "1", name: "Test")])
|
||||
try await deferred.fulfill()
|
||||
}
|
||||
|
||||
@Test
|
||||
func declineAndBlockInviteLegacyInteraction() async throws {
|
||||
setupViewModel(mode: .invited)
|
||||
@@ -169,6 +195,11 @@ final class JoinRoomScreenViewModelTests {
|
||||
private func setupViewModel(throwing: Bool = false, mode: TestMode = .joined) {
|
||||
clientProxy = ClientProxyMock(.init())
|
||||
|
||||
roomListSubject = .init([])
|
||||
let summaryProvider = RoomSummaryProviderMock(.init())
|
||||
summaryProvider.roomListPublisher = roomListSubject.asCurrentValuePublisher()
|
||||
clientProxy.staticRoomSummaryProvider = summaryProvider
|
||||
|
||||
clientProxy.joinRoomViaReturnValue = throwing ? .failure(.sdkError(ClientProxyMockError.generic)) : .success(())
|
||||
clientProxy.joinRoomAliasReturnValue = clientProxy.joinRoomViaReturnValue
|
||||
|
||||
@@ -198,6 +229,11 @@ final class JoinRoomScreenViewModelTests {
|
||||
roomProxy.forgetRoomReturnValue = .success(())
|
||||
return .banned(roomProxy)
|
||||
}
|
||||
case .alreadyJoined:
|
||||
clientProxy.roomPreviewForIdentifierViaReturnValue = .success(RoomPreviewProxyMock.joinable)
|
||||
clientProxy.roomForIdentifierClosure = { roomID in
|
||||
.joined(JoinedRoomProxyMock(.init(id: roomID)))
|
||||
}
|
||||
}
|
||||
|
||||
viewModel = JoinRoomScreenViewModel(source: .generic(roomID: "1", via: []),
|
||||
|
||||
Reference in New Issue
Block a user