mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-04 19:44:05 +00:00
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:
@@ -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",
|
||||||
@@ -77,13 +86,12 @@ extension RoomMemberProxyMock {
|
|||||||
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
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|||||||
@@ -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")
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -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,
|
||||||
|
|||||||
+2
-2
@@ -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,
|
||||||
|
|||||||
+2
-2
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user