Fix flakiness for tests that rely on room members loading quickly.

This commit is contained in:
Stefan Ceriu
2024-02-26 14:01:41 +02:00
committed by Stefan Ceriu
parent 7615e97c7f
commit f5c43ed68f
3 changed files with 16 additions and 13 deletions
@@ -110,6 +110,8 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
}
buildTimelineViews()
updateMembers(roomProxy.membersPublisher.value)
// Note: beware if we get to e.g. restore a reply / edit,
// maybe we are tracking a non-needed first initial state
@@ -269,7 +271,13 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
Task { await roomScreenInteractionHandler.scrubVoiceMessagePlayback(scrubbing: scrubbing) }
}
}
private func updateMembers(_ members: [RoomMemberProxyProtocol]) {
state.members = members.reduce(into: [String: RoomMemberState]()) { dictionary, member in
dictionary[member.userID] = RoomMemberState(displayName: member.displayName, avatarURL: member.avatarURL)
}
}
private func setupSubscriptions() {
timelineController.callbacks
.receive(on: DispatchQueue.main)
@@ -318,15 +326,10 @@ class RoomScreenViewModel: RoomScreenViewModelType, RoomScreenViewModelProtocol
appSettings.$sharePresence
.weakAssign(to: \.state.showReadReceipts, on: self)
.store(in: &cancellables)
roomProxy.membersPublisher
.map { members in
members.reduce(into: [String: RoomMemberState]()) { dictionary, member in
dictionary[member.userID] = RoomMemberState(displayName: member.displayName, avatarURL: member.avatarURL)
}
}
.receive(on: DispatchQueue.main)
.weakAssign(to: \.state.members, on: self)
.sink { [weak self] in self?.updateMembers($0) }
.store(in: &cancellables)
roomProxy.typingMembersPublisher
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:15512881ca14cf2eae9556c280880243cc619817f87e27ed05887c07e8f21329
size 112214
oid sha256:8f7b0844007df5ea840a959b85171d3c256cf091a69972a1f7f30c0c2280958e
size 125301
@@ -128,7 +128,7 @@ class RoomMembersListScreenViewModelTests: XCTestCase {
func testKickMember() async throws {
setup(with: .allMembers)
var deferred = deferFulfillment(context.$viewState) { !$0.visibleJoinedMembers.isEmpty }
let deferred = deferFulfillment(context.$viewState) { !$0.visibleJoinedMembers.isEmpty }
try await deferred.fulfill()
context.send(viewAction: .kickMember(viewModel.state.visibleJoinedMembers[0]))
@@ -141,7 +141,7 @@ class RoomMembersListScreenViewModelTests: XCTestCase {
func testBanMember() async throws {
setup(with: .allMembers)
var deferred = deferFulfillment(context.$viewState) { !$0.visibleJoinedMembers.isEmpty }
let deferred = deferFulfillment(context.$viewState) { !$0.visibleJoinedMembers.isEmpty }
try await deferred.fulfill()
context.send(viewAction: .banMember(viewModel.state.visibleJoinedMembers[0]))
@@ -154,7 +154,7 @@ class RoomMembersListScreenViewModelTests: XCTestCase {
func testUnbanMember() async throws {
setup(with: .allMembers)
var deferred = deferFulfillment(context.$viewState) { !$0.visibleJoinedMembers.isEmpty }
let deferred = deferFulfillment(context.$viewState) { !$0.visibleJoinedMembers.isEmpty }
try await deferred.fulfill()
context.send(viewAction: .unbanMember(viewModel.state.visibleJoinedMembers[0]))