mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 06:55:59 +00:00
Add UI tests for accepting space invites. (#4602)
* Fix the space visibility icon size in the join room screen. * Add a UI test for accepting space invites.
This commit is contained in:
@@ -17,6 +17,7 @@ struct ClientProxyMockConfiguration {
|
||||
var spaceServiceConfiguration: SpaceServiceProxyMock.Configuration = .init()
|
||||
var roomPreviews: [RoomPreviewProxyProtocol]?
|
||||
var roomDirectorySearchProxy: RoomDirectorySearchProxyProtocol?
|
||||
var overrides = Overrides()
|
||||
|
||||
var recoveryState: SecureBackupRecoveryState = .enabled
|
||||
|
||||
@@ -26,6 +27,10 @@ struct ClientProxyMockConfiguration {
|
||||
var hideInviteAvatars = false
|
||||
|
||||
var maxMediaUploadSize: UInt = 100 * 1024 * 1024
|
||||
|
||||
class Overrides {
|
||||
var joinedRoomIDs: Set<String> = []
|
||||
}
|
||||
}
|
||||
|
||||
enum ClientProxyMockError: Error {
|
||||
@@ -67,6 +72,11 @@ extension ClientProxyMock {
|
||||
createDirectRoomWithExpectedRoomNameReturnValue = .failure(.sdkError(ClientProxyMockError.generic))
|
||||
createRoomNameTopicIsRoomPrivateIsKnockingOnlyUserIDsAvatarURLAliasLocalPartReturnValue = .failure(.sdkError(ClientProxyMockError.generic))
|
||||
canJoinRoomWithReturnValue = true
|
||||
joinRoomViaClosure = { roomID, _ in
|
||||
configuration.overrides.joinedRoomIDs.insert(roomID)
|
||||
return .success(())
|
||||
}
|
||||
joinRoomAliasReturnValue = .success(())
|
||||
uploadMediaReturnValue = .failure(.sdkError(ClientProxyMockError.generic))
|
||||
loadUserDisplayNameReturnValue = .failure(.sdkError(ClientProxyMockError.generic))
|
||||
setUserDisplayNameReturnValue = .failure(.sdkError(ClientProxyMockError.generic))
|
||||
@@ -96,9 +106,19 @@ extension ClientProxyMock {
|
||||
|
||||
roomForIdentifierClosure = { [weak self] identifier in
|
||||
if let room = self?.roomSummaryProvider.roomListPublisher.value.first(where: { $0.id == identifier }) {
|
||||
let roomProxy = await JoinedRoomProxyMock(.init(id: room.id, name: room.name))
|
||||
roomProxy.loadOrFetchEventDetailsForReturnValue = .success(TimelineEventSDKMock())
|
||||
return .joined(roomProxy)
|
||||
let joinedRoomIDs = configuration.overrides.joinedRoomIDs
|
||||
switch room.joinRequestType {
|
||||
case .invite where !joinedRoomIDs.contains(room.id):
|
||||
let roomProxy = await InvitedRoomProxyMock(.init(id: room.id, name: room.name, isSpace: room.isSpace))
|
||||
return .invited(roomProxy)
|
||||
case .knock where !joinedRoomIDs.contains(room.id):
|
||||
let roomProxy = await KnockedRoomProxyMock(.init(id: room.id, name: room.name))
|
||||
return .knocked(roomProxy)
|
||||
default:
|
||||
let roomProxy = await JoinedRoomProxyMock(.init(id: room.id, name: room.name, isSpace: room.isSpace))
|
||||
roomProxy.loadOrFetchEventDetailsForReturnValue = .success(TimelineEventSDKMock())
|
||||
return .joined(roomProxy)
|
||||
}
|
||||
} else if let spaceRoomProxy = configuration.spaceServiceConfiguration.joinedSpaces.first(where: { $0.id == identifier }) {
|
||||
let roomProxy = await JoinedRoomProxyMock(.init(id: spaceRoomProxy.id, name: spaceRoomProxy.name, isSpace: spaceRoomProxy.isSpace))
|
||||
roomProxy.loadOrFetchEventDetailsForReturnValue = .success(TimelineEventSDKMock())
|
||||
|
||||
@@ -344,7 +344,7 @@ extension Array where Element == RoomSummary {
|
||||
|
||||
static let mockSpaceInvites: [Element] = [
|
||||
RoomSummary(room: RoomSDKMock(),
|
||||
id: "someAwesomeSpaceID1",
|
||||
id: "!space1:matrix.org",
|
||||
joinRequestType: .invite(inviter: RoomMemberProxyMock.mockCharlie),
|
||||
name: "First space",
|
||||
isDirect: false,
|
||||
@@ -365,7 +365,7 @@ extension Array where Element == RoomSummary {
|
||||
isFavourite: false,
|
||||
isTombstoned: false),
|
||||
RoomSummary(room: RoomSDKMock(),
|
||||
id: "someAwesomeSpaceID2",
|
||||
id: "!space2:matrix.org",
|
||||
joinRequestType: .invite(inviter: RoomMemberProxyMock.mockCharlie),
|
||||
name: "Second space",
|
||||
isDirect: false,
|
||||
|
||||
@@ -22,6 +22,7 @@ enum A11yIdentifiers {
|
||||
static let loginScreen = LoginScreen()
|
||||
static let authenticationStartScreen = AuthenticationStartScreen()
|
||||
static let reportContent = ReportContent()
|
||||
static let joinRoomScreen = JoinRoomScreen()
|
||||
static let roomScreen = RoomScreen()
|
||||
static let roomDetailsScreen = RoomDetailsScreen()
|
||||
static let roomNotificationSettingsScreen = RoomNotificationSettingsScreen()
|
||||
@@ -132,6 +133,10 @@ enum A11yIdentifiers {
|
||||
let ignoreUser = "report_content-ignore_user"
|
||||
}
|
||||
|
||||
struct JoinRoomScreen {
|
||||
let join = "join-room_join"
|
||||
}
|
||||
|
||||
struct RoomScreen {
|
||||
let name = "room-name"
|
||||
let avatar = "room-avatar"
|
||||
|
||||
@@ -53,6 +53,7 @@ struct HomeScreenInviteCell: View {
|
||||
context.send(viewAction: .selectRoom(roomIdentifier: roomID))
|
||||
}
|
||||
}
|
||||
.accessibilityIdentifier(A11yIdentifiers.homeScreen.roomName(room.name))
|
||||
}
|
||||
|
||||
// MARK: - Private
|
||||
|
||||
@@ -78,7 +78,7 @@ struct JoinRoomScreen: View {
|
||||
.multilineTextAlignment(.center)
|
||||
} icon: {
|
||||
if let icon = context.viewState.subtitleIcon {
|
||||
CompoundIcon(icon)
|
||||
CompoundIcon(icon, size: .small, relativeTo: .compound.bodyLG)
|
||||
.foregroundStyle(.compound.iconTertiary)
|
||||
}
|
||||
}
|
||||
@@ -308,6 +308,7 @@ struct JoinRoomScreen: View {
|
||||
var joinButton: some View {
|
||||
Button(L10n.screenJoinRoomJoinAction) { context.send(viewAction: .join) }
|
||||
.buttonStyle(.compound(.super))
|
||||
.accessibilityIdentifier(A11yIdentifiers.joinRoomScreen.join)
|
||||
}
|
||||
|
||||
@ToolbarContentBuilder
|
||||
|
||||
@@ -586,9 +586,14 @@ class MockScreen: Identifiable {
|
||||
appSettings.analyticsConsentState = .optedOut
|
||||
appSettings.hasSeenSpacesAnnouncement = true
|
||||
|
||||
let roomSummaries: [RoomSummary] = if id == .userSessionSpacesFlow {
|
||||
[[RoomSummary].mockSpaceInvites[0]] + .mockRooms
|
||||
} else {
|
||||
.mockRooms
|
||||
}
|
||||
let clientProxy = ClientProxyMock(.init(userID: "@mock:client.com",
|
||||
deviceID: "MOCKCLIENT",
|
||||
roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(.mockRooms))),
|
||||
roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(roomSummaries))),
|
||||
spaceServiceConfiguration: .init(joinedSpaces: .mockSingleRoom),
|
||||
roomPreviews: [SpaceRoomProxyProtocol].mockSpaceList.map(RoomPreviewProxyMock.init)))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user