From ebca84f36eb1014a455e55fe1021898f6db59533 Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Wed, 7 Feb 2024 15:23:25 +0200 Subject: [PATCH 1/2] Infert joined and active member count from the member list, default the members to all mock members --- .../Sources/Mocks/RoomMemberProxyMock.swift | 36 ++++++++++++++----- ElementX/Sources/Mocks/RoomProxyMock.swift | 23 +++++------- .../View/RoomDetailsScreen.swift | 3 +- ...otificationSettingsCustomSectionView.swift | 4 +-- .../View/RoomNotificationSettingsScreen.swift | 4 +-- ...otificationSettingsUserDefinedScreen.swift | 4 +-- .../UITests/UITestsAppCoordinator.swift | 15 +++----- .../Sources/RoomDetailsViewModelTests.swift | 27 +++++++++----- .../RoomMembersListViewModelTests.swift | 10 +++--- ...ficationSettingsScreenViewModelTests.swift | 8 ++--- .../test_roomDetailsScreen.DM-Room.png | 4 +-- .../test_roomDetailsScreen.Generic-Room.png | 4 +-- .../test_roomDetailsScreen.Simple-Room.png | 4 +-- .../test_roomMembersListScreen.1.png | 4 +-- 14 files changed, 84 insertions(+), 66 deletions(-) diff --git a/ElementX/Sources/Mocks/RoomMemberProxyMock.swift b/ElementX/Sources/Mocks/RoomMemberProxyMock.swift index 30b3a0fd78..536299e0cb 100644 --- a/ElementX/Sources/Mocks/RoomMemberProxyMock.swift +++ b/ElementX/Sources/Mocks/RoomMemberProxyMock.swift @@ -42,6 +42,15 @@ extension RoomMemberProxyMock { } // Mocks + static var mockMe: RoomMemberProxyMock { + RoomMemberProxyMock(with: .init(userID: "@me:matrix.org", + displayName: "Me", + avatarURL: URL.picturesDirectory, + membership: .join, + isAccountOwner: true, + canInviteUsers: true)) + } + static var mockAlice: RoomMemberProxyMock { RoomMemberProxyMock(with: .init(userID: "@alice:matrix.org", displayName: "Alice", @@ -76,14 +85,13 @@ extension RoomMemberProxyMock { avatarURL: URL.picturesDirectory, membership: .join)) } - - static var mockMe: RoomMemberProxyMock { - RoomMemberProxyMock(with: .init(userID: "@me:matrix.org", - displayName: "Me", - avatarURL: URL.picturesDirectory, - membership: .join, - isAccountOwner: true, - canInviteUsers: true)) + + static var mockInvited: RoomMemberProxyMock { + RoomMemberProxyMock(with: .init(userID: "@invited:matrix.org", + displayName: "Invited", + avatarURL: nil, + membership: .invite, + isIgnored: true)) } static var mockIgnored: RoomMemberProxyMock { @@ -103,3 +111,15 @@ extension RoomMemberProxyMock { canSendStateEvent: { allowedStateEvents.contains($0) })) } } + +extension Array where Element == RoomMemberProxyMock { + static let allMembers: [RoomMemberProxyMock] = [ + .mockMe, + .mockAlice, + .mockBob, + .mockCharlie, + .mockDan, + .mockInvited, + .mockIgnored + ] +} diff --git a/ElementX/Sources/Mocks/RoomProxyMock.swift b/ElementX/Sources/Mocks/RoomProxyMock.swift index 0268bc82b4..e8e9d369a2 100644 --- a/ElementX/Sources/Mocks/RoomProxyMock.swift +++ b/ElementX/Sources/Mocks/RoomProxyMock.swift @@ -23,9 +23,9 @@ struct RoomProxyMockConfiguration { let displayName: String? var topic: String? var avatarURL: URL? - var isDirect = Bool.random() - var isSpace = Bool.random() - var isPublic = Bool.random() + var isDirect = false + var isSpace = false + var isPublic = false var isEncrypted = true var hasOngoingCall = true var canonicalAlias: String? @@ -37,15 +37,12 @@ struct RoomProxyMockConfiguration { return mock }() - var members: [RoomMemberProxyProtocol]? + var members: [RoomMemberProxyMock] = .allMembers var memberForID: RoomMemberProxyMock = .mockMe var ownUserID = "@alice:somewhere.org" var canUserTriggerRoomNotification = false var canUserJoinCall = true - - var joinedMembersCount = 50 - var activeMembersCount = 25 } extension RoomProxyMock { @@ -66,15 +63,13 @@ extension RoomProxyMock { timeline = configuration.timeline - joinedMembersCount = configuration.joinedMembersCount - activeMembersCount = configuration.activeMembersCount ownUserID = configuration.ownUserID + + members = CurrentValueSubject(configuration.members).asCurrentValuePublisher() - if let configuredMembers = configuration.members { - members = CurrentValueSubject(configuredMembers).asCurrentValuePublisher() - } else { - members = CurrentValueSubject([]).asCurrentValuePublisher() - } + let joinedMembers = configuration.members.filter { $0.membership == .join } + joinedMembersCount = joinedMembers.count + activeMembersCount = joinedMembers.count updateMembersClosure = { } acceptInvitationClosure = { .success(()) } diff --git a/ElementX/Sources/Screens/RoomDetailsScreen/View/RoomDetailsScreen.swift b/ElementX/Sources/Screens/RoomDetailsScreen/View/RoomDetailsScreen.swift index 13db756978..53e5a76faf 100644 --- a/ElementX/Sources/Screens/RoomDetailsScreen/View/RoomDetailsScreen.swift +++ b/ElementX/Sources/Screens/RoomDetailsScreen/View/RoomDetailsScreen.swift @@ -321,8 +321,7 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview { isDirect: true, isEncrypted: true, canonicalAlias: "#alias:domain.com", - members: members, - activeMembersCount: 2)) + members: members)) let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init()) let appSettings = AppSettings() diff --git a/ElementX/Sources/Screens/RoomNotificationSettingsScreen/View/RoomNotificationSettingsCustomSectionView.swift b/ElementX/Sources/Screens/RoomNotificationSettingsScreen/View/RoomNotificationSettingsCustomSectionView.swift index 1ba54a012f..b8784c6838 100644 --- a/ElementX/Sources/Screens/RoomNotificationSettingsScreen/View/RoomNotificationSettingsCustomSectionView.swift +++ b/ElementX/Sources/Screens/RoomNotificationSettingsScreen/View/RoomNotificationSettingsCustomSectionView.swift @@ -42,7 +42,7 @@ struct RoomNotificationSettingsCustomSectionView_Previews: PreviewProvider, Test static let viewModel = { let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .allMessages, roomMode: .mentionsAndKeywordsOnly)) - let roomProxy = RoomProxyMock(with: .init(displayName: "Room", isEncrypted: true, joinedMembersCount: 4)) + let roomProxy = RoomProxyMock(with: .init(displayName: "Room", isEncrypted: true)) return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy, roomProxy: roomProxy, @@ -52,7 +52,7 @@ struct RoomNotificationSettingsCustomSectionView_Previews: PreviewProvider, Test static let viewModelUnencrypted = { let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .allMessages, roomMode: .mentionsAndKeywordsOnly)) - let roomProxy = RoomProxyMock(with: .init(displayName: "Room", isEncrypted: false, joinedMembersCount: 4)) + let roomProxy = RoomProxyMock(with: .init(displayName: "Room", isEncrypted: false)) return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy, roomProxy: roomProxy, diff --git a/ElementX/Sources/Screens/RoomNotificationSettingsScreen/View/RoomNotificationSettingsScreen.swift b/ElementX/Sources/Screens/RoomNotificationSettingsScreen/View/RoomNotificationSettingsScreen.swift index 7387f603cf..19e2df1953 100644 --- a/ElementX/Sources/Screens/RoomNotificationSettingsScreen/View/RoomNotificationSettingsScreen.swift +++ b/ElementX/Sources/Screens/RoomNotificationSettingsScreen/View/RoomNotificationSettingsScreen.swift @@ -83,7 +83,7 @@ struct RoomNotificationSettingsScreen_Previews: PreviewProvider, TestablePreview static let viewModel = { let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .mentionsAndKeywordsOnly, roomMode: .mentionsAndKeywordsOnly)) - let roomProxy = RoomProxyMock(with: .init(displayName: "Room", isEncrypted: true, joinedMembersCount: 4)) + let roomProxy = RoomProxyMock(with: .init(displayName: "Room", isEncrypted: true)) return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy, roomProxy: roomProxy, @@ -93,7 +93,7 @@ struct RoomNotificationSettingsScreen_Previews: PreviewProvider, TestablePreview static let viewModelCustom = { let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .allMessages, roomMode: .mentionsAndKeywordsOnly)) - let roomProxy = RoomProxyMock(with: .init(displayName: "Room", isEncrypted: true, joinedMembersCount: 4)) + let roomProxy = RoomProxyMock(with: .init(displayName: "Room", isEncrypted: true)) return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy, roomProxy: roomProxy, diff --git a/ElementX/Sources/Screens/RoomNotificationSettingsScreen/View/RoomNotificationSettingsUserDefinedScreen.swift b/ElementX/Sources/Screens/RoomNotificationSettingsScreen/View/RoomNotificationSettingsUserDefinedScreen.swift index 9c2d8e637f..aef0eadc65 100644 --- a/ElementX/Sources/Screens/RoomNotificationSettingsScreen/View/RoomNotificationSettingsUserDefinedScreen.swift +++ b/ElementX/Sources/Screens/RoomNotificationSettingsScreen/View/RoomNotificationSettingsUserDefinedScreen.swift @@ -52,7 +52,7 @@ struct RoomNotificationSettingsUserDefinedScreen_Previews: PreviewProvider, Test static let viewModel = { let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .mentionsAndKeywordsOnly, roomMode: .mentionsAndKeywordsOnly)) - let roomProxy = RoomProxyMock(with: .init(displayName: "Room", isEncrypted: true, joinedMembersCount: 4)) + let roomProxy = RoomProxyMock(with: .init(displayName: "Room", isEncrypted: true)) return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy, roomProxy: roomProxy, @@ -62,7 +62,7 @@ struct RoomNotificationSettingsUserDefinedScreen_Previews: PreviewProvider, Test static let viewModelUnencrypted = { let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .mentionsAndKeywordsOnly, roomMode: .mentionsAndKeywordsOnly)) - let roomProxy = RoomProxyMock(with: .init(displayName: "Room", isEncrypted: false, joinedMembersCount: 4)) + let roomProxy = RoomProxyMock(with: .init(displayName: "Room", isEncrypted: false)) return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy, roomProxy: roomProxy, diff --git a/ElementX/Sources/UITests/UITestsAppCoordinator.swift b/ElementX/Sources/UITests/UITestsAppCoordinator.swift index 7cbeaacb27..60cea2a490 100644 --- a/ElementX/Sources/UITests/UITestsAppCoordinator.swift +++ b/ElementX/Sources/UITests/UITestsAppCoordinator.swift @@ -585,8 +585,7 @@ class MockScreen: Identifiable { displayName: "Room", isEncrypted: true, members: members, - memberForID: .mockOwner(allowedStateEvents: [], canInviteUsers: false), - activeMembersCount: members.count)) + memberForID: .mockOwner(allowedStateEvents: [], canInviteUsers: false))) let coordinator = RoomDetailsScreenCoordinator(parameters: .init(accountUserID: "@owner:somewhere.com", roomProxy: roomProxy, mediaProvider: MockMediaProvider(), @@ -606,8 +605,7 @@ class MockScreen: Identifiable { isEncrypted: true, canonicalAlias: "#mock:room.org", members: members, - memberForID: .mockOwner(allowedStateEvents: [], canInviteUsers: false), - activeMembersCount: members.count)) + memberForID: .mockOwner(allowedStateEvents: [], canInviteUsers: false))) let coordinator = RoomDetailsScreenCoordinator(parameters: .init(accountUserID: "@owner:somewhere.com", roomProxy: roomProxy, mediaProvider: MockMediaProvider(), @@ -629,8 +627,7 @@ class MockScreen: Identifiable { isEncrypted: true, canonicalAlias: "#mock:room.org", members: members, - memberForID: owner, - activeMembersCount: members.count)) + memberForID: owner)) let coordinator = RoomDetailsScreenCoordinator(parameters: .init(accountUserID: "@owner:somewhere.com", roomProxy: roomProxy, mediaProvider: MockMediaProvider(), @@ -648,8 +645,7 @@ class MockScreen: Identifiable { displayName: "Room", isEncrypted: true, members: members, - memberForID: owner, - activeMembersCount: members.count)) + memberForID: owner)) let coordinator = RoomDetailsScreenCoordinator(parameters: .init(accountUserID: "@owner:somewhere.com", roomProxy: roomProxy, mediaProvider: MockMediaProvider(), @@ -668,8 +664,7 @@ class MockScreen: Identifiable { isDirect: true, isEncrypted: true, members: members, - memberForID: .mockOwner(allowedStateEvents: [], canInviteUsers: false), - activeMembersCount: members.count)) + memberForID: .mockOwner(allowedStateEvents: [], canInviteUsers: false))) let coordinator = RoomDetailsScreenCoordinator(parameters: .init(accountUserID: "@owner:somewhere.com", roomProxy: roomProxy, mediaProvider: MockMediaProvider(), diff --git a/UnitTests/Sources/RoomDetailsViewModelTests.swift b/UnitTests/Sources/RoomDetailsViewModelTests.swift index b11594f923..d319d0cee1 100644 --- a/UnitTests/Sources/RoomDetailsViewModelTests.swift +++ b/UnitTests/Sources/RoomDetailsViewModelTests.swift @@ -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(), diff --git a/UnitTests/Sources/RoomMembersListViewModelTests.swift b/UnitTests/Sources/RoomMembersListViewModelTests.swift index 0c360a2730..b98d6460ae 100644 --- a/UnitTests/Sources/RoomMembersListViewModelTests.swift +++ b/UnitTests/Sources/RoomMembersListViewModelTests.swift @@ -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) } diff --git a/UnitTests/Sources/RoomNotificationSettingsScreenViewModelTests.swift b/UnitTests/Sources/RoomNotificationSettingsScreenViewModelTests.swift index a4f9689d7b..8f5129d318 100644 --- a/UnitTests/Sources/RoomNotificationSettingsScreenViewModelTests.swift +++ b/UnitTests/Sources/RoomNotificationSettingsScreenViewModelTests.swift @@ -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)) diff --git a/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.DM-Room.png b/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.DM-Room.png index 57dc99019a..811d6b81a4 100644 --- a/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.DM-Room.png +++ b/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.DM-Room.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:22c9fb68f3efadf5fa6f6c244e9c3697c1a544d3ab39bc9f93212a98c07971d8 -size 169268 +oid sha256:1e15fedae5254c9f44e184f490cab7f381b85f66fa8f9ba8a0abf6505e704fe6 +size 168048 diff --git a/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.Generic-Room.png b/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.Generic-Room.png index 3a2b2fd538..f85aa1bc87 100644 --- a/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.Generic-Room.png +++ b/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.Generic-Room.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a847d4fb1716ef163b5d02cf827334dcfab9bf73e634b693ef29cb0b300f2718 -size 173205 +oid sha256:cde8f362d5ffb277d0707752bc3aeab84dc6dd973d629ace3cef4f64077bec80 +size 172349 diff --git a/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.Simple-Room.png b/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.Simple-Room.png index ca550a91b7..35128eee52 100644 --- a/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.Simple-Room.png +++ b/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.Simple-Room.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a4bb8b7b11c4eb0c2aee864d870d8faff2856d52b7758f72aad3948f6b05c948 -size 112105 +oid sha256:1f2900b8511d3d4b0048e0088480c2fdb382a192e4f4572f6c2c8c542422c50b +size 111257 diff --git a/UnitTests/__Snapshots__/PreviewTests/test_roomMembersListScreen.1.png b/UnitTests/__Snapshots__/PreviewTests/test_roomMembersListScreen.1.png index 900de499b8..65d3410b67 100644 --- a/UnitTests/__Snapshots__/PreviewTests/test_roomMembersListScreen.1.png +++ b/UnitTests/__Snapshots__/PreviewTests/test_roomMembersListScreen.1.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:23477e22db7bf4d5df68b9227f26d7ce306b729f0d29cc85c8abd481346696b5 -size 103846 +oid sha256:7acdf255b5e67fbb48e2e7b12f58e6c5c2e751eb4d7e768ae28290ff051ed7ab +size 103147 From 3daae64c1dfb1edf6e3dca9380b3bf89e22d9366 Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Wed, 7 Feb 2024 18:08:21 +0200 Subject: [PATCH 2/2] Address PR comments, fix some tests and screenshots --- ElementX/Sources/Mocks/RoomProxyMock.swift | 7 +++---- .../View/RoomDetailsScreen.swift | 18 ++++++++++++------ .../test_roomDetailsScreen.DM-Room.png | 4 ++-- .../test_roomDetailsScreen.Generic-Room.png | 4 ++-- .../test_roomDetailsScreen.Simple-Room.png | 4 ++-- .../PreviewTests/test_timelineReplyView.1.png | 4 ++-- 6 files changed, 23 insertions(+), 18 deletions(-) diff --git a/ElementX/Sources/Mocks/RoomProxyMock.swift b/ElementX/Sources/Mocks/RoomProxyMock.swift index e8e9d369a2..e8889ecd21 100644 --- a/ElementX/Sources/Mocks/RoomProxyMock.swift +++ b/ElementX/Sources/Mocks/RoomProxyMock.swift @@ -66,10 +66,9 @@ extension RoomProxyMock { ownUserID = configuration.ownUserID members = CurrentValueSubject(configuration.members).asCurrentValuePublisher() - - let joinedMembers = configuration.members.filter { $0.membership == .join } - joinedMembersCount = joinedMembers.count - activeMembersCount = joinedMembers.count + + joinedMembersCount = configuration.members.filter { $0.membership == .join }.count + activeMembersCount = configuration.members.filter { $0.membership == .join || $0.membership == .invite }.count updateMembersClosure = { } acceptInvitationClosure = { .success(()) } diff --git a/ElementX/Sources/Screens/RoomDetailsScreen/View/RoomDetailsScreen.swift b/ElementX/Sources/Screens/RoomDetailsScreen/View/RoomDetailsScreen.swift index 53e5a76faf..f2aba7c457 100644 --- a/ElementX/Sources/Screens/RoomDetailsScreen/View/RoomDetailsScreen.swift +++ b/ElementX/Sources/Screens/RoomDetailsScreen/View/RoomDetailsScreen.swift @@ -278,11 +278,13 @@ struct RoomDetailsScreen: View { struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview { static let genericRoomViewModel = { let members: [RoomMemberProxyMock] = [ + .mockMe, .mockAlice, .mockBob, .mockCharlie ] - let roomProxy = RoomProxyMock(with: .init(id: "room_a_id", displayName: "Room A", + let roomProxy = RoomProxyMock(with: .init(id: "room_a_id", + displayName: "Room A", topic: """ Discussions about Element X iOS | https://github.com/vector-im/element-x-ios @@ -301,7 +303,7 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview { let notificationSettingsProxy = NotificationSettingsProxyMock(with: notificationSettingsProxyMockConfiguration) let appSettings = AppSettings() - return RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", + return RoomDetailsScreenViewModel(accountUserID: RoomMemberProxyMock.mockMe.userID, roomProxy: roomProxy, mediaProvider: MockMediaProvider(), userIndicatorController: ServiceLocator.shared.userIndicatorController, @@ -316,7 +318,8 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview { .mockDan ] - let roomProxy = RoomProxyMock(with: .init(id: "dm_room_id", displayName: "DM Room", + let roomProxy = RoomProxyMock(with: .init(id: "dm_room_id", + displayName: "DM Room", topic: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", isDirect: true, isEncrypted: true, @@ -325,7 +328,7 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview { let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init()) let appSettings = AppSettings() - return RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", + return RoomDetailsScreenViewModel(accountUserID: RoomMemberProxyMock.mockMe.userID, roomProxy: roomProxy, mediaProvider: MockMediaProvider(), userIndicatorController: ServiceLocator.shared.userIndicatorController, @@ -336,18 +339,20 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview { static let simpleRoomViewModel = { let members: [RoomMemberProxyMock] = [ + .mockMe, .mockAlice, .mockBob, .mockCharlie ] - let roomProxy = RoomProxyMock(with: .init(id: "simple_room_id", displayName: "Room A", + let roomProxy = RoomProxyMock(with: .init(id: "simple_room_id", + displayName: "Room A", isDirect: false, isEncrypted: false, members: members)) let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init()) let appSettings = AppSettings() - return RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", + return RoomDetailsScreenViewModel(accountUserID: RoomMemberProxyMock.mockMe.userID, roomProxy: roomProxy, mediaProvider: MockMediaProvider(), userIndicatorController: ServiceLocator.shared.userIndicatorController, @@ -361,6 +366,7 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview { .previewDisplayName("Generic Room") RoomDetailsScreen(context: dmRoomViewModel.context) .previewDisplayName("DM Room") + .snapshot(delay: 0.25) RoomDetailsScreen(context: simpleRoomViewModel.context) .previewDisplayName("Simple Room") } diff --git a/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.DM-Room.png b/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.DM-Room.png index 811d6b81a4..dce0572825 100644 --- a/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.DM-Room.png +++ b/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.DM-Room.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1e15fedae5254c9f44e184f490cab7f381b85f66fa8f9ba8a0abf6505e704fe6 -size 168048 +oid sha256:6d3154c595aa72c0d2294ef768a42fbc8ac75d80dc7f9472f84f7f09280d9d8f +size 166466 diff --git a/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.Generic-Room.png b/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.Generic-Room.png index f85aa1bc87..746cf8f88e 100644 --- a/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.Generic-Room.png +++ b/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.Generic-Room.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cde8f362d5ffb277d0707752bc3aeab84dc6dd973d629ace3cef4f64077bec80 -size 172349 +oid sha256:2de940348816f099648132074d81cdea904a5763af7df164d8568e708d9d0a59 +size 172011 diff --git a/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.Simple-Room.png b/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.Simple-Room.png index 35128eee52..833cd8d8f5 100644 --- a/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.Simple-Room.png +++ b/UnitTests/__Snapshots__/PreviewTests/test_roomDetailsScreen.Simple-Room.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f2900b8511d3d4b0048e0088480c2fdb382a192e4f4572f6c2c8c542422c50b -size 111257 +oid sha256:449d0e11d90607daffcd89d9f620abb8b3bd398ce194d929b945b8f89297f785 +size 128390 diff --git a/UnitTests/__Snapshots__/PreviewTests/test_timelineReplyView.1.png b/UnitTests/__Snapshots__/PreviewTests/test_timelineReplyView.1.png index 3079749a78..bffcfc1d92 100644 --- a/UnitTests/__Snapshots__/PreviewTests/test_timelineReplyView.1.png +++ b/UnitTests/__Snapshots__/PreviewTests/test_timelineReplyView.1.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1361941a0833e448836b7382d28f27c6e8736ae70112dc67ffe2934680438b37 -size 154898 +oid sha256:dce4a86e7461894924e2ce39cb5abebf871ceb0f315a93e59c286f1eab8bbd64 +size 152046