Invited members in room's members list (#880)

* Add invited people in RoomMembersListScreen

* Optimize main thread perfomance in RoomDetailsScreenViewModel

* Fix member count in RoomDetailsScreenViewModel

* Add warning

* Add performance warnings

* Build members in RoomMembersListScreenViewModel in global queue

* Refactor RoomDetailsScreenViewModel build members process

* Localize strings

* Cleanup

* Fix RoomDetailsScreenViewModelTests UTs

* Fix UI tests

* Add RoomMembersListScreenViewModel UTs

* Add UI tests

* Amend UI tests

* Use clearAndTypeText
This commit is contained in:
Alfonso Grillo
2023-05-12 15:12:59 +02:00
committed by GitHub
parent edc9fe4612
commit 1981270840
28 changed files with 293 additions and 62 deletions
@@ -33,6 +33,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
let mockedMembers: [RoomMemberProxyMock] = [.mockBob, .mockAlice]
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isPublic: true, members: mockedMembers))
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
await context.nextViewState()
context.send(viewAction: .processTapLeave)
XCTAssertEqual(context.leaveRoomAlertItem?.state, .public)
XCTAssertEqual(context.leaveRoomAlertItem?.subtitle, L10n.leaveRoomAlertSubtitle)
@@ -42,6 +43,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
let mockedMembers: [RoomMemberProxyMock] = [.mockBob, .mockAlice]
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isPublic: false, members: mockedMembers))
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
await context.nextViewState()
context.send(viewAction: .processTapLeave)
XCTAssertEqual(context.leaveRoomAlertItem?.state, .private)
XCTAssertEqual(context.leaveRoomAlertItem?.subtitle, L10n.leaveRoomAlertPrivateSubtitle)
@@ -85,6 +87,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
await context.nextViewState()
XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient))
}
@@ -97,6 +100,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
await context.nextViewState()
XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient))
context.send(viewAction: .ignoreConfirmed)
@@ -118,6 +122,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
await context.nextViewState()
XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient))
context.send(viewAction: .ignoreConfirmed)
@@ -140,6 +145,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
await context.nextViewState()
XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient))
context.send(viewAction: .unignoreConfirmed)
@@ -161,6 +167,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
viewModel = RoomDetailsScreenViewModel(roomProxy: roomProxyMock, mediaProvider: MockMediaProvider())
await context.nextViewState()
XCTAssertEqual(context.viewState.dmRecipient, RoomMemberDetails(withProxy: recipient))
context.send(viewAction: .unignoreConfirmed)
@@ -19,4 +19,62 @@ import XCTest
@testable import ElementX
@MainActor
class RoomMembersListScreenViewModelTests: XCTestCase { }
class RoomMembersListScreenViewModelTests: XCTestCase {
var viewModel: RoomMembersListScreenViewModel!
var context: RoomMembersListScreenViewModel.Context {
viewModel.context
}
func testJoinedMembers() async {
setup(with: [.mockAlice, .mockBob])
await context.nextViewState()
XCTAssertEqual(viewModel.state.joinedMembersCount, 2)
XCTAssertEqual(viewModel.state.visibleJoinedMembers.count, 2)
}
func testSearch() async {
setup(with: [.mockAlice, .mockBob])
await context.nextViewState()
context.searchQuery = "alice"
XCTAssertEqual(viewModel.state.joinedMembersCount, 2)
XCTAssertEqual(viewModel.state.visibleJoinedMembers.count, 1)
}
func testEmptySearch() async {
setup(with: [.mockAlice, .mockBob])
await context.nextViewState()
context.searchQuery = "WWW"
XCTAssertEqual(viewModel.state.joinedMembersCount, 2)
XCTAssertEqual(viewModel.state.visibleJoinedMembers.count, 0)
}
func testJoinedAndInvitedMembers() async {
setup(with: [.mockInvitedAlice, .mockBob])
await context.nextViewState()
XCTAssertEqual(viewModel.state.joinedMembersCount, 1)
XCTAssertEqual(viewModel.state.visibleInvitedMembers.count, 1)
XCTAssertEqual(viewModel.state.visibleJoinedMembers.count, 1)
}
func testInvitedMembers() async {
setup(with: [.mockInvitedAlice])
await context.nextViewState()
XCTAssertEqual(viewModel.state.joinedMembersCount, 0)
XCTAssertEqual(viewModel.state.visibleInvitedMembers.count, 1)
XCTAssertEqual(viewModel.state.visibleJoinedMembers.count, 0)
}
func testSearchInvitedMembers() async {
setup(with: [.mockInvitedAlice])
context.searchQuery = "alice"
await context.nextViewState()
XCTAssertEqual(viewModel.state.joinedMembersCount, 0)
XCTAssertEqual(viewModel.state.visibleInvitedMembers.count, 1)
XCTAssertEqual(viewModel.state.visibleJoinedMembers.count, 0)
}
private func setup(with members: [RoomMemberProxyMock]) {
viewModel = .init(mediaProvider: MockMediaProvider(), members: members)
}
}