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
@@ -42,6 +42,15 @@ extension RoomMemberProxyMock {
} }
// Mocks // 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 { static var mockAlice: RoomMemberProxyMock {
RoomMemberProxyMock(with: .init(userID: "@alice:matrix.org", RoomMemberProxyMock(with: .init(userID: "@alice:matrix.org",
displayName: "Alice", displayName: "Alice",
@@ -76,14 +85,13 @@ extension RoomMemberProxyMock {
avatarURL: URL.picturesDirectory, avatarURL: URL.picturesDirectory,
membership: .join)) membership: .join))
} }
static var mockMe: RoomMemberProxyMock { static var mockInvited: RoomMemberProxyMock {
RoomMemberProxyMock(with: .init(userID: "@me:matrix.org", RoomMemberProxyMock(with: .init(userID: "@invited:matrix.org",
displayName: "Me", displayName: "Invited",
avatarURL: URL.picturesDirectory, avatarURL: nil,
membership: .join, membership: .invite,
isAccountOwner: true, isIgnored: true))
canInviteUsers: true))
} }
static var mockIgnored: RoomMemberProxyMock { static var mockIgnored: RoomMemberProxyMock {
@@ -103,3 +111,15 @@ extension RoomMemberProxyMock {
canSendStateEvent: { allowedStateEvents.contains($0) })) canSendStateEvent: { allowedStateEvents.contains($0) }))
} }
} }
extension Array where Element == RoomMemberProxyMock {
static let allMembers: [RoomMemberProxyMock] = [
.mockMe,
.mockAlice,
.mockBob,
.mockCharlie,
.mockDan,
.mockInvited,
.mockIgnored
]
}
+9 -15
View File
@@ -23,9 +23,9 @@ struct RoomProxyMockConfiguration {
let displayName: String? let displayName: String?
var topic: String? var topic: String?
var avatarURL: URL? var avatarURL: URL?
var isDirect = Bool.random() var isDirect = false
var isSpace = Bool.random() var isSpace = false
var isPublic = Bool.random() var isPublic = false
var isEncrypted = true var isEncrypted = true
var hasOngoingCall = true var hasOngoingCall = true
var canonicalAlias: String? var canonicalAlias: String?
@@ -37,15 +37,12 @@ struct RoomProxyMockConfiguration {
return mock return mock
}() }()
var members: [RoomMemberProxyProtocol]? var members: [RoomMemberProxyMock] = .allMembers
var memberForID: RoomMemberProxyMock = .mockMe var memberForID: RoomMemberProxyMock = .mockMe
var ownUserID = "@alice:somewhere.org" var ownUserID = "@alice:somewhere.org"
var canUserTriggerRoomNotification = false var canUserTriggerRoomNotification = false
var canUserJoinCall = true var canUserJoinCall = true
var joinedMembersCount = 50
var activeMembersCount = 25
} }
extension RoomProxyMock { extension RoomProxyMock {
@@ -66,15 +63,12 @@ extension RoomProxyMock {
timeline = configuration.timeline timeline = configuration.timeline
joinedMembersCount = configuration.joinedMembersCount
activeMembersCount = configuration.activeMembersCount
ownUserID = configuration.ownUserID ownUserID = configuration.ownUserID
if let configuredMembers = configuration.members { members = CurrentValueSubject(configuration.members).asCurrentValuePublisher()
members = CurrentValueSubject(configuredMembers).asCurrentValuePublisher()
} else { joinedMembersCount = configuration.members.filter { $0.membership == .join }.count
members = CurrentValueSubject([]).asCurrentValuePublisher() activeMembersCount = configuration.members.filter { $0.membership == .join || $0.membership == .invite }.count
}
updateMembersClosure = { } updateMembersClosure = { }
acceptInvitationClosure = { .success(()) } acceptInvitationClosure = { .success(()) }
@@ -278,11 +278,13 @@ struct RoomDetailsScreen: View {
struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview { struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview {
static let genericRoomViewModel = { static let genericRoomViewModel = {
let members: [RoomMemberProxyMock] = [ let members: [RoomMemberProxyMock] = [
.mockMe,
.mockAlice, .mockAlice,
.mockBob, .mockBob,
.mockCharlie .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: """ topic: """
Discussions about Element X iOS | https://github.com/vector-im/element-x-ios 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 notificationSettingsProxy = NotificationSettingsProxyMock(with: notificationSettingsProxyMockConfiguration)
let appSettings = AppSettings() let appSettings = AppSettings()
return RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", return RoomDetailsScreenViewModel(accountUserID: RoomMemberProxyMock.mockMe.userID,
roomProxy: roomProxy, roomProxy: roomProxy,
mediaProvider: MockMediaProvider(), mediaProvider: MockMediaProvider(),
userIndicatorController: ServiceLocator.shared.userIndicatorController, userIndicatorController: ServiceLocator.shared.userIndicatorController,
@@ -316,17 +318,17 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview {
.mockDan .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.", topic: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.",
isDirect: true, isDirect: true,
isEncrypted: true, isEncrypted: true,
canonicalAlias: "#alias:domain.com", canonicalAlias: "#alias:domain.com",
members: members, members: members))
activeMembersCount: 2))
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init()) let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init())
let appSettings = AppSettings() let appSettings = AppSettings()
return RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", return RoomDetailsScreenViewModel(accountUserID: RoomMemberProxyMock.mockMe.userID,
roomProxy: roomProxy, roomProxy: roomProxy,
mediaProvider: MockMediaProvider(), mediaProvider: MockMediaProvider(),
userIndicatorController: ServiceLocator.shared.userIndicatorController, userIndicatorController: ServiceLocator.shared.userIndicatorController,
@@ -337,18 +339,20 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview {
static let simpleRoomViewModel = { static let simpleRoomViewModel = {
let members: [RoomMemberProxyMock] = [ let members: [RoomMemberProxyMock] = [
.mockMe,
.mockAlice, .mockAlice,
.mockBob, .mockBob,
.mockCharlie .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, isDirect: false,
isEncrypted: false, isEncrypted: false,
members: members)) members: members))
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init()) let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init())
let appSettings = AppSettings() let appSettings = AppSettings()
return RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", return RoomDetailsScreenViewModel(accountUserID: RoomMemberProxyMock.mockMe.userID,
roomProxy: roomProxy, roomProxy: roomProxy,
mediaProvider: MockMediaProvider(), mediaProvider: MockMediaProvider(),
userIndicatorController: ServiceLocator.shared.userIndicatorController, userIndicatorController: ServiceLocator.shared.userIndicatorController,
@@ -362,6 +366,7 @@ struct RoomDetailsScreen_Previews: PreviewProvider, TestablePreview {
.previewDisplayName("Generic Room") .previewDisplayName("Generic Room")
RoomDetailsScreen(context: dmRoomViewModel.context) RoomDetailsScreen(context: dmRoomViewModel.context)
.previewDisplayName("DM Room") .previewDisplayName("DM Room")
.snapshot(delay: 0.25)
RoomDetailsScreen(context: simpleRoomViewModel.context) RoomDetailsScreen(context: simpleRoomViewModel.context)
.previewDisplayName("Simple Room") .previewDisplayName("Simple Room")
} }
@@ -42,7 +42,7 @@ struct RoomNotificationSettingsCustomSectionView_Previews: PreviewProvider, Test
static let viewModel = { static let viewModel = {
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .allMessages, roomMode: .mentionsAndKeywordsOnly)) 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, return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy,
roomProxy: roomProxy, roomProxy: roomProxy,
@@ -52,7 +52,7 @@ struct RoomNotificationSettingsCustomSectionView_Previews: PreviewProvider, Test
static let viewModelUnencrypted = { static let viewModelUnencrypted = {
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .allMessages, roomMode: .mentionsAndKeywordsOnly)) 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, return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy,
roomProxy: roomProxy, roomProxy: roomProxy,
@@ -83,7 +83,7 @@ struct RoomNotificationSettingsScreen_Previews: PreviewProvider, TestablePreview
static let viewModel = { static let viewModel = {
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .mentionsAndKeywordsOnly, roomMode: .mentionsAndKeywordsOnly)) 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, return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy,
roomProxy: roomProxy, roomProxy: roomProxy,
@@ -93,7 +93,7 @@ struct RoomNotificationSettingsScreen_Previews: PreviewProvider, TestablePreview
static let viewModelCustom = { static let viewModelCustom = {
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .allMessages, roomMode: .mentionsAndKeywordsOnly)) 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, return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy,
roomProxy: roomProxy, roomProxy: roomProxy,
@@ -52,7 +52,7 @@ struct RoomNotificationSettingsUserDefinedScreen_Previews: PreviewProvider, Test
static let viewModel = { static let viewModel = {
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .mentionsAndKeywordsOnly, roomMode: .mentionsAndKeywordsOnly)) 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, return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy,
roomProxy: roomProxy, roomProxy: roomProxy,
@@ -62,7 +62,7 @@ struct RoomNotificationSettingsUserDefinedScreen_Previews: PreviewProvider, Test
static let viewModelUnencrypted = { static let viewModelUnencrypted = {
let notificationSettingsProxy = NotificationSettingsProxyMock(with: .init(defaultRoomMode: .mentionsAndKeywordsOnly, roomMode: .mentionsAndKeywordsOnly)) 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, return RoomNotificationSettingsScreenViewModel(notificationSettingsProxy: notificationSettingsProxy,
roomProxy: roomProxy, roomProxy: roomProxy,
@@ -585,8 +585,7 @@ class MockScreen: Identifiable {
displayName: "Room", displayName: "Room",
isEncrypted: true, isEncrypted: true,
members: members, members: members,
memberForID: .mockOwner(allowedStateEvents: [], canInviteUsers: false), memberForID: .mockOwner(allowedStateEvents: [], canInviteUsers: false)))
activeMembersCount: members.count))
let coordinator = RoomDetailsScreenCoordinator(parameters: .init(accountUserID: "@owner:somewhere.com", let coordinator = RoomDetailsScreenCoordinator(parameters: .init(accountUserID: "@owner:somewhere.com",
roomProxy: roomProxy, roomProxy: roomProxy,
mediaProvider: MockMediaProvider(), mediaProvider: MockMediaProvider(),
@@ -606,8 +605,7 @@ class MockScreen: Identifiable {
isEncrypted: true, isEncrypted: true,
canonicalAlias: "#mock:room.org", canonicalAlias: "#mock:room.org",
members: members, members: members,
memberForID: .mockOwner(allowedStateEvents: [], canInviteUsers: false), memberForID: .mockOwner(allowedStateEvents: [], canInviteUsers: false)))
activeMembersCount: members.count))
let coordinator = RoomDetailsScreenCoordinator(parameters: .init(accountUserID: "@owner:somewhere.com", let coordinator = RoomDetailsScreenCoordinator(parameters: .init(accountUserID: "@owner:somewhere.com",
roomProxy: roomProxy, roomProxy: roomProxy,
mediaProvider: MockMediaProvider(), mediaProvider: MockMediaProvider(),
@@ -629,8 +627,7 @@ class MockScreen: Identifiable {
isEncrypted: true, isEncrypted: true,
canonicalAlias: "#mock:room.org", canonicalAlias: "#mock:room.org",
members: members, members: members,
memberForID: owner, memberForID: owner))
activeMembersCount: members.count))
let coordinator = RoomDetailsScreenCoordinator(parameters: .init(accountUserID: "@owner:somewhere.com", let coordinator = RoomDetailsScreenCoordinator(parameters: .init(accountUserID: "@owner:somewhere.com",
roomProxy: roomProxy, roomProxy: roomProxy,
mediaProvider: MockMediaProvider(), mediaProvider: MockMediaProvider(),
@@ -648,8 +645,7 @@ class MockScreen: Identifiable {
displayName: "Room", displayName: "Room",
isEncrypted: true, isEncrypted: true,
members: members, members: members,
memberForID: owner, memberForID: owner))
activeMembersCount: members.count))
let coordinator = RoomDetailsScreenCoordinator(parameters: .init(accountUserID: "@owner:somewhere.com", let coordinator = RoomDetailsScreenCoordinator(parameters: .init(accountUserID: "@owner:somewhere.com",
roomProxy: roomProxy, roomProxy: roomProxy,
mediaProvider: MockMediaProvider(), mediaProvider: MockMediaProvider(),
@@ -668,8 +664,7 @@ class MockScreen: Identifiable {
isDirect: true, isDirect: true,
isEncrypted: true, isEncrypted: true,
members: members, members: members,
memberForID: .mockOwner(allowedStateEvents: [], canInviteUsers: false), memberForID: .mockOwner(allowedStateEvents: [], canInviteUsers: false)))
activeMembersCount: members.count))
let coordinator = RoomDetailsScreenCoordinator(parameters: .init(accountUserID: "@owner:somewhere.com", let coordinator = RoomDetailsScreenCoordinator(parameters: .init(accountUserID: "@owner:somewhere.com",
roomProxy: roomProxy, roomProxy: roomProxy,
mediaProvider: MockMediaProvider(), mediaProvider: MockMediaProvider(),
@@ -31,7 +31,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
override func setUp() { override func setUp() {
cancellables.removeAll() cancellables.removeAll()
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", joinedMembersCount: 0)) roomProxyMock = RoomProxyMock(with: .init(displayName: "Test"))
notificationSettingsProxyMock = NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()) notificationSettingsProxyMock = NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration())
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com",
roomProxy: roomProxyMock, roomProxy: roomProxyMock,
@@ -88,6 +88,16 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
} }
func testLeaveRoomTappedWithLessThanTwoMembers() async { 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) context.send(viewAction: .processTapLeave)
XCTAssertEqual(context.leaveRoomAlertItem?.state, .empty) XCTAssertEqual(context.leaveRoomAlertItem?.state, .empty)
XCTAssertEqual(context.leaveRoomAlertItem?.subtitle, L10n.leaveRoomAlertEmptySubtitle) XCTAssertEqual(context.leaveRoomAlertItem?.subtitle, L10n.leaveRoomAlertEmptySubtitle)
@@ -131,7 +141,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
func testInitialDMDetailsState() async throws { func testInitialDMDetailsState() async throws {
let recipient = RoomMemberProxyMock.mockDan let recipient = RoomMemberProxyMock.mockDan
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient] 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", viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com",
roomProxy: roomProxyMock, roomProxy: roomProxyMock,
mediaProvider: MockMediaProvider(), mediaProvider: MockMediaProvider(),
@@ -157,7 +167,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
} }
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient] 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", viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com",
roomProxy: roomProxyMock, roomProxy: roomProxyMock,
mediaProvider: MockMediaProvider(), mediaProvider: MockMediaProvider(),
@@ -192,7 +202,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
return .failure(.ignoreUserFailed) return .failure(.ignoreUserFailed)
} }
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient] 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", viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com",
roomProxy: roomProxyMock, roomProxy: roomProxyMock,
mediaProvider: MockMediaProvider(), mediaProvider: MockMediaProvider(),
@@ -228,7 +238,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
return .success(()) return .success(())
} }
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient] 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", viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com",
roomProxy: roomProxyMock, roomProxy: roomProxyMock,
mediaProvider: MockMediaProvider(), mediaProvider: MockMediaProvider(),
@@ -263,7 +273,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
return .failure(.unignoreUserFailed) return .failure(.unignoreUserFailed)
} }
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, recipient] 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", viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com",
roomProxy: roomProxyMock, roomProxy: roomProxyMock,
mediaProvider: MockMediaProvider(), mediaProvider: MockMediaProvider(),
@@ -297,8 +307,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", roomProxyMock = RoomProxyMock(with: .init(displayName: "Test",
isPublic: true, isPublic: true,
members: mockedMembers, members: mockedMembers,
memberForID: .mockOwner(allowedStateEvents: [], canInviteUsers: false), memberForID: .mockOwner(allowedStateEvents: [], canInviteUsers: false)))
activeMembersCount: mockedMembers.count))
viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com", viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com",
roomProxy: roomProxyMock, roomProxy: roomProxyMock,
mediaProvider: MockMediaProvider(), mediaProvider: MockMediaProvider(),
@@ -314,7 +323,7 @@ class RoomDetailsScreenViewModelTests: XCTestCase {
func testInvitePeople() async { func testInvitePeople() async {
let mockedMembers: [RoomMemberProxyMock] = [.mockMe, .mockBob, .mockAlice] 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", viewModel = RoomDetailsScreenViewModel(accountUserID: "@owner:somewhere.com",
roomProxy: roomProxyMock, roomProxy: roomProxyMock,
mediaProvider: MockMediaProvider(), mediaProvider: MockMediaProvider(),
@@ -69,7 +69,7 @@ class RoomMembersListScreenViewModelTests: XCTestCase {
} }
func testJoinedAndInvitedMembers() async throws { func testJoinedAndInvitedMembers() async throws {
setup(with: [.mockInvitedAlice, .mockBob]) setup(with: [.mockInvited, .mockBob])
let deferred = deferFulfillment(context.$viewState) { state in let deferred = deferFulfillment(context.$viewState) { state in
state.visibleInvitedMembers.count == 1 state.visibleInvitedMembers.count == 1
@@ -83,7 +83,7 @@ class RoomMembersListScreenViewModelTests: XCTestCase {
} }
func testInvitedMembers() async throws { func testInvitedMembers() async throws {
setup(with: [.mockInvitedAlice]) setup(with: [.mockInvited])
let deferred = deferFulfillment(context.$viewState) { state in let deferred = deferFulfillment(context.$viewState) { state in
state.visibleInvitedMembers.count == 1 state.visibleInvitedMembers.count == 1
@@ -97,9 +97,9 @@ class RoomMembersListScreenViewModelTests: XCTestCase {
} }
func testSearchInvitedMembers() async throws { func testSearchInvitedMembers() async throws {
setup(with: [.mockInvitedAlice]) setup(with: [.mockInvited])
context.searchQuery = "alice" context.searchQuery = "invited"
let deferred = deferFulfillment(context.$viewState) { state in let deferred = deferFulfillment(context.$viewState) { state in
state.visibleInvitedMembers.count == 1 state.visibleInvitedMembers.count == 1
@@ -113,7 +113,7 @@ class RoomMembersListScreenViewModelTests: XCTestCase {
} }
private func setup(with members: [RoomMemberProxyMock]) { 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(), mediaProvider: MockMediaProvider(),
userIndicatorController: ServiceLocator.shared.userIndicatorController) userIndicatorController: ServiceLocator.shared.userIndicatorController)
} }
@@ -28,12 +28,12 @@ class RoomNotificationSettingsScreenViewModelTests: XCTestCase {
override func setUpWithError() throws { override func setUpWithError() throws {
cancellables.removeAll() cancellables.removeAll()
roomProxyMock = RoomProxyMock(with: .init(displayName: "Test", joinedMembersCount: 0)) roomProxyMock = RoomProxyMock(with: .init(displayName: "Test"))
notificationSettingsProxyMock = NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration()) notificationSettingsProxyMock = NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration())
} }
func testInitialStateDefaultModeEncryptedRoom() async throws { 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()) let notificationSettingsProxyMock = NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration())
notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: true)) notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: true))
@@ -55,7 +55,7 @@ class RoomNotificationSettingsScreenViewModelTests: XCTestCase {
} }
func testInitialStateDefaultModeEncryptedRoomWithCanPushEncrypted() async throws { 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)) let notificationSettingsProxyMock = NotificationSettingsProxyMock(with: .init(canPushEncryptedEvents: true))
notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: true)) notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: true))
@@ -77,7 +77,7 @@ class RoomNotificationSettingsScreenViewModelTests: XCTestCase {
} }
func testInitialStateDefaultModeUnencryptedRoom() async throws { 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()) let notificationSettingsProxyMock = NotificationSettingsProxyMock(with: NotificationSettingsProxyMockConfiguration())
notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: true)) notificationSettingsProxyMock.getNotificationSettingsRoomIdIsEncryptedIsOneToOneReturnValue = RoomNotificationSettingsProxyMock(with: .init(mode: .mentionsAndKeywordsOnly, isDefault: true))
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:22c9fb68f3efadf5fa6f6c244e9c3697c1a544d3ab39bc9f93212a98c07971d8 oid sha256:6d3154c595aa72c0d2294ef768a42fbc8ac75d80dc7f9472f84f7f09280d9d8f
size 169268 size 166466
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:a847d4fb1716ef163b5d02cf827334dcfab9bf73e634b693ef29cb0b300f2718 oid sha256:2de940348816f099648132074d81cdea904a5763af7df164d8568e708d9d0a59
size 173205 size 172011
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:a4bb8b7b11c4eb0c2aee864d870d8faff2856d52b7758f72aad3948f6b05c948 oid sha256:449d0e11d90607daffcd89d9f620abb8b3bd398ce194d929b945b8f89297f785
size 112105 size 128390
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:23477e22db7bf4d5df68b9227f26d7ce306b729f0d29cc85c8abd481346696b5 oid sha256:7acdf255b5e67fbb48e2e7b12f58e6c5c2e751eb4d7e768ae28290ff051ed7ab
size 103846 size 103147
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:1361941a0833e448836b7382d28f27c6e8736ae70112dc67ffe2934680438b37 oid sha256:dce4a86e7461894924e2ce39cb5abebf871ceb0f315a93e59c286f1eab8bbd64
size 154898 size 152046