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
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
]
}
+9 -15
View File
@@ -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,12 @@ extension RoomProxyMock {
timeline = configuration.timeline
joinedMembersCount = configuration.joinedMembersCount
activeMembersCount = configuration.activeMembersCount
ownUserID = configuration.ownUserID
if let configuredMembers = configuration.members {
members = CurrentValueSubject(configuredMembers).asCurrentValuePublisher()
} else {
members = CurrentValueSubject([]).asCurrentValuePublisher()
}
members = CurrentValueSubject(configuration.members).asCurrentValuePublisher()
joinedMembersCount = configuration.members.filter { $0.membership == .join }.count
activeMembersCount = configuration.members.filter { $0.membership == .join || $0.membership == .invite }.count
updateMembersClosure = { }
acceptInvitationClosure = { .success(()) }
@@ -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,17 +318,17 @@ 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,
canonicalAlias: "#alias:domain.com",
members: members,
activeMembersCount: 2))
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,
@@ -337,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,
@@ -362,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")
}
@@ -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,
@@ -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,
@@ -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,
@@ -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(),