Infer joined and active member count from the member list

* Infer joined and active member count from the member list, default the members to all mock members

* Address PR comments, fix some tests and screenshots
This commit is contained in:
Stefan Ceriu
2024-02-07 19:10:15 +02:00
committed by GitHub
parent d0c835a9bf
commit c32015278e
15 changed files with 98 additions and 75 deletions
@@ -31,7 +31,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
override func setUp() {
cancellables.removeAll()
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", joinedMembersCount: 0))
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test"))
notificationSettingsProxyMock = NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration())
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com",
roomProxy: roomProxyMock,
@@ -88,6 +88,16 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
}
func testLeaveRoomTappedWithLessThanTwoMembers() async {
let mockedMembers: [RoomMemberProxyMock] = [.mockAlice]
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isPublic: false, members: mockedMembers))
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com",
roomProxy: roomProxyMock,
mediaProvider: MockMediaProvider(),
userIndicatorController: ServiceLocator.shared.userIndicatorController,
notificationSettingsProxy: NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()),
attributedStringBuilder: AttributedStringBuilder(permalinkBaseURL: ServiceLocator.shared.settings.permalinkBaseURL,
mentionBuilder: MentionBuilder()))
context.send(viewAction: .processTapLeave)
XCTAssertEqual(context.leaveRoomAlertItem?.state, .empty)
XCTAssertEqual(context.leaveRoomAlertItem?.subtitle, L10n.leaveRoomAlertEmptySubtitle)
@@ -131,7 +141,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
func testInitialDMDetailsState() async throws {
let recipient = RoomMemberProxyMock.mockDan
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers, activeMembersCount: mockedMembers.count))
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com",
roomProxy: roomProxyMock,
mediaProvider: MockMediaProvider(),
@@ -157,7 +167,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
}
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers, activeMembersCount: mockedMembers.count))
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com",
roomProxy: roomProxyMock,
mediaProvider: MockMediaProvider(),
@@ -192,7 +202,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
return .failure(.ignoreUserFailed)
}
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers, activeMembersCount: mockedMembers.count))
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com",
roomProxy: roomProxyMock,
mediaProvider: MockMediaProvider(),
@@ -228,7 +238,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
return .success(())
}
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers, activeMembersCount: mockedMembers.count))
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com",
roomProxy: roomProxyMock,
mediaProvider: MockMediaProvider(),
@@ -263,7 +273,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
return .failure(.unignoreUserFailed)
}
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient]
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers, activeMembersCount: mockedMembers.count))
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isDirect: true, isEncrypted: true, members: mockedMembers))
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com",
roomProxy: roomProxyMock,
mediaProvider: MockMediaProvider(),
@@ -297,8 +307,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test",
isPublic: true,
members: mockedMembers,
memberForID: .mockOwner(allowedStateEvents: [], canInviteUsers: false),
activeMembersCount: mockedMembers.count))
memberForID: .mockOwner(allowedStateEvents: [], canInviteUsers: false)))
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com",
roomProxy: roomProxyMock,
mediaProvider: MockMediaProvider(),
@@ -314,7 +323,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
func testInvitePeople() async {
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice]
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isPublic: true, members: mockedMembers, activeMembersCount: mockedMembers.count))
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isPublic: true, members: mockedMembers))
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com",
roomProxy: roomProxyMock,
mediaProvider: MockMediaProvider(),
@@ -69,7 +69,7 @@ class RoomMembersListScreenViewModelTests: XCTestCase {
}
func testJoinedAndInvitedMembers() async throws {
setup(with: [.mockInvitedAlice, .mockBob])
setup(with: [.mockInvited, .mockBob])
let deferred = deferFulfillment(context.$viewState) { state in
state.visibleInvitedMembers.count == 1
@@ -83,7 +83,7 @@ class RoomMembersListScreenViewModelTests: XCTestCase {
}
func testInvitedMembers() async throws {
setup(with: [.mockInvitedAlice])
setup(with: [.mockInvited])
let deferred = deferFulfillment(context.$viewState) { state in
state.visibleInvitedMembers.count == 1
@@ -97,9 +97,9 @@ class RoomMembersListScreenViewModelTests: XCTestCase {
}
func testSearchInvitedMembers() async throws {
setup(with: [.mockInvitedAlice])
setup(with: [.mockInvited])
context.searchQuery = "alice"
context.searchQuery = "invited"
let deferred = deferFulfillment(context.$viewState) { state in
state.visibleInvitedMembers.count == 1
@@ -113,7 +113,7 @@ class RoomMembersListScreenViewModelTests: XCTestCase {
}
private func setup(with members: [RoomMemberProxyMock]) {
viewModel = .init(roomProxy: RoomProxyMock(with: .init(displayName: "test", members: members, joinedMembersCount: members.filter { $0.membership == .join }.count)),
viewModel = .init(roomProxy: RoomProxyMock(with: .init(displayName: "test", members: members)),
mediaProvider: MockMediaProvider(),
userIndicatorController: ServiceLocator.shared.userIndicatorController)
}
@@ -28,12 +28,12 @@ class RoomNotificationSettingsScreenViewModelTests: XCTestCase {
override func setUpWithError() throws {
cancellables.removeAll()
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", joinedMembersCount: 0))
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test"))
notificationSettingsProxyMock = NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration())
}
func testInitialStateDefaultModeEncryptedRoom() async throws {
let roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isEncrypted: true, joinedMembersCount: 0))
let roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isEncrypted: true))
let notificationSettingsProxyMock = NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration())
notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: true))
@@ -55,7 +55,7 @@ class RoomNotificationSettingsScreenViewModelTests: XCTestCase {
}
func testInitialStateDefaultModeEncryptedRoomWithCanPushEncrypted() async throws {
let roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isEncrypted: true, joinedMembersCount: 0))
let roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isEncrypted: true))
let notificationSettingsProxyMock = NotificationSettingsProxyMock(with: .init(canPushEncryptedEvents: true))
notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: true))
@@ -77,7 +77,7 @@ class RoomNotificationSettingsScreenViewModelTests: XCTestCase {
}
func testInitialStateDefaultModeUnencryptedRoom() async throws {
let roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isEncrypted: false, joinedMembersCount: 0))
let roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", isEncrypted: false))
let notificationSettingsProxyMock = NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration())
notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: true))
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:22c9fb68f3efadf5fa6f6c244e9c3697c1a544d3ab39bc9f93212a98c07971d8
size 169268
oid sha256:6d3154c595aa72c0d2294ef768a42fbc8ac75d80dc7f9472f84f7f09280d9d8f
size 166466
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a847d4fb1716ef163b5d02cf827334dcfab9bf73e634b693ef29cb0b300f2718
size 173205
oid sha256:2de940348816f099648132074d81cdea904a5763af7df164d8568e708d9d0a59
size 172011
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a4bb8b7b11c4eb0c2aee864d870d8faff2856d52b7758f72aad3948f6b05c948
size 112105
oid sha256:449d0e11d90607daffcd89d9f620abb8b3bd398ce194d929b945b8f89297f785
size 128390
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:23477e22db7bf4d5df68b9227f26d7ce306b729f0d29cc85c8abd481346696b5
size 103846
oid sha256:7acdf255b5e67fbb48e2e7b12f58e6c5c2e751eb4d7e768ae28290ff051ed7ab
size 103147
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1361941a0833e448836b7382d28f27c6e8736ae70112dc67ffe2934680438b37
size 154898
oid sha256:dce4a86e7461894924e2ce39cb5abebf871ceb0f315a93e59c286f1eab8bbd64
size 152046