Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Infer joined and active member count from the member list, default t… #2431

Merged
merged 2 commits into from
Feb 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 28 additions & 8 deletions ElementX/Sources/Mocks/RoomMemberProxyMock.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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 {
Expand All @@ -103,3 +111,15 @@ extension RoomMemberProxyMock {
canSendStateEvent: { allowedStateEvents.contains($0) }))
}
}

extension Array where Element == RoomMemberProxyMock {
static let allMembers: [RoomMemberProxyMock] = [
stefanceriu marked this conversation as resolved.
Show resolved Hide resolved
.mockMe,
.mockAlice,
.mockBob,
.mockCharlie,
.mockDan,
.mockInvited,
.mockIgnored
]
}
24 changes: 9 additions & 15 deletions ElementX/Sources/Mocks/RoomProxyMock.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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?
Expand All @@ -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 {
Expand All @@ -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(()) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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,
Expand Down
15 changes: 5 additions & 10 deletions ElementX/Sources/UITests/UITestsAppCoordinator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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(),
Expand All @@ -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(),
Expand All @@ -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(),
Expand All @@ -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(),
Expand All @@ -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(),
Expand Down
Loading
Loading