mirror of
https://github.com/element-hq/element-x-ios.git
synced 2025-03-10 21:39:12 +00:00
Fix room list cell highlighting issues, add unit tests
This commit is contained in:
parent
60ba71c727
commit
d7a190ba23
@ -404,6 +404,7 @@
|
||||
6786C4B0936AC84D993B20BF /* NotificationSettingsScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5F06F2F09B2EDD067DC2174 /* NotificationSettingsScreen.swift */; };
|
||||
67C05C50AD734283374605E3 /* MatrixEntityRegex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AD1A853D605C2146B0DC028 /* MatrixEntityRegex.swift */; };
|
||||
67D6E0700A9C1E676F6231F8 /* Collections in Frameworks */ = {isa = PBXBuildFile; productRef = AD544C0FA48DFFB080920061 /* Collections */; };
|
||||
6817EAD73DC1FFD8B943B5B9 /* HomeScreenRoomTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B73587C2E3CF5998361AE516 /* HomeScreenRoomTests.swift */; };
|
||||
68184EF36396424FE19A727D /* MediaLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AFCE895ECFFA53FEE64D62B /* MediaLoader.swift */; };
|
||||
6832733838C57A7D3FE8FEB5 /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = 78A5A8DE1E2B09C978C7F3B0 /* KeychainAccess */; };
|
||||
6851B077B4C913CC12DB6E77 /* AppLockFlowCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCE93F0CBF0D96B77111C413 /* AppLockFlowCoordinator.swift */; };
|
||||
@ -1726,6 +1727,7 @@
|
||||
B697816AF93DA06EC58C5D70 /* WaitlistScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WaitlistScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||
B6E89E530A8E92EC44301CA1 /* Bundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bundle.swift; sourceTree = "<group>"; };
|
||||
B70A50C41C5871B4DB905E7E /* VoiceMessageRoomTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VoiceMessageRoomTimelineView.swift; sourceTree = "<group>"; };
|
||||
B73587C2E3CF5998361AE516 /* HomeScreenRoomTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeScreenRoomTests.swift; sourceTree = "<group>"; };
|
||||
B746EFA112532A7B701FB914 /* RoomNotificationSettingsCustomSectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomNotificationSettingsCustomSectionView.swift; sourceTree = "<group>"; };
|
||||
B7884BD256C091EB511B2EDF /* AppLockSetupPINScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppLockSetupPINScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||
B788615712FED326F73D3F83 /* GlobalSearchScreenViewModelProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlobalSearchScreenViewModelProtocol.swift; sourceTree = "<group>"; };
|
||||
@ -3321,6 +3323,7 @@
|
||||
84B7A28A6606D58D1E38C55A /* ExpiringTaskRunnerTests.swift */,
|
||||
1A7ED2EF5BDBAD2A7DBC4636 /* GeoURITests.swift */,
|
||||
EA4D639E27D5882A6A71AECF /* GlobalSearchScreenViewModelTests.swift */,
|
||||
B73587C2E3CF5998361AE516 /* HomeScreenRoomTests.swift */,
|
||||
505208F28007C0FEC14E1FF0 /* HomeScreenViewModelTests.swift */,
|
||||
CC14E5209C262530E19BC4C1 /* InvitesScreenViewModelTests.swift */,
|
||||
845DDBDE5A0887E73D38B826 /* InviteUsersViewModelTests.swift */,
|
||||
@ -5296,6 +5299,7 @@
|
||||
71B62C48B8079D49F3FBC845 /* ExpiringTaskRunnerTests.swift in Sources */,
|
||||
07756D532EFE33DD1FA258E5 /* GeoURITests.swift in Sources */,
|
||||
EE56238683BC3ECA9BA00684 /* GlobalSearchScreenViewModelTests.swift in Sources */,
|
||||
6817EAD73DC1FFD8B943B5B9 /* HomeScreenRoomTests.swift in Sources */,
|
||||
F6F49E37272AD7397CD29A01 /* HomeScreenViewModelTests.swift in Sources */,
|
||||
A23B8B27A1436A1049EEF68E /* InfoPlistReader.swift in Sources */,
|
||||
A216C83ADCF32BA5EF8A6FBC /* InviteUsersViewModelTests.swift in Sources */,
|
||||
|
@ -197,7 +197,7 @@ extension HomeScreenRoom {
|
||||
let isMentionShown = details.hasUnreadMentions && !details.isMuted
|
||||
let isMuteShown = details.isMuted
|
||||
let isCallShown = details.hasOngoingCall
|
||||
let isHighlighted = !details.isMuted && (details.hasUnreadNotifications || details.hasUnreadMentions || details.isMarkedUnread)
|
||||
let isHighlighted = details.isMarkedUnread || (!details.isMuted && (details.hasUnreadNotifications || details.hasUnreadMentions))
|
||||
|
||||
self.init(id: identifier,
|
||||
roomId: details.id,
|
||||
|
@ -119,26 +119,23 @@ struct HomeScreenRoomCell: View {
|
||||
HStack(spacing: 8) {
|
||||
if room.badges.isCallShown {
|
||||
CompoundIcon(\.videoCallSolid, size: .xSmall, relativeTo: .compound.bodySM)
|
||||
.foregroundColor(room.isHighlighted ? .compound.iconAccentTertiary : .compound.iconQuaternary)
|
||||
}
|
||||
|
||||
if room.badges.isMuteShown {
|
||||
CompoundIcon(\.notificationsOffSolid, size: .custom(15), relativeTo: .compound.bodyMD)
|
||||
.accessibilityLabel(L10n.a11yNotificationsMuted)
|
||||
.foregroundColor(.compound.iconQuaternary)
|
||||
}
|
||||
|
||||
if room.badges.isMentionShown {
|
||||
mentionIcon
|
||||
.foregroundColor(.compound.iconAccentTertiary)
|
||||
}
|
||||
|
||||
if room.badges.isDotShown {
|
||||
Circle()
|
||||
.frame(width: 12, height: 12)
|
||||
.foregroundColor(room.isHighlighted ? .compound.iconAccentTertiary : .compound.iconQuaternary)
|
||||
}
|
||||
}
|
||||
.foregroundColor(room.isHighlighted ? .compound.iconAccentTertiary : .compound.iconQuaternary)
|
||||
}
|
||||
}
|
||||
|
||||
|
237
UnitTests/Sources/HomeScreenRoomTests.swift
Normal file
237
UnitTests/Sources/HomeScreenRoomTests.swift
Normal file
@ -0,0 +1,237 @@
|
||||
//
|
||||
// Copyright 2024 New Vector Ltd
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
import Combine
|
||||
import XCTest
|
||||
|
||||
@testable import ElementX
|
||||
|
||||
@MainActor
|
||||
class HomeScreenRoomTests: XCTestCase {
|
||||
var roomSummaryDetails: RoomSummaryDetails!
|
||||
|
||||
// swiftlint:disable:next function_parameter_count
|
||||
func setupRoomSummary(isMarkedUnread: Bool,
|
||||
unreadMessagesCount: UInt,
|
||||
unreadMentionsCount: UInt,
|
||||
unreadNotificationsCount: UInt,
|
||||
notificationMode: RoomNotificationModeProxy,
|
||||
hasOngoingCall: Bool) {
|
||||
roomSummaryDetails = RoomSummaryDetails(id: "Test room",
|
||||
name: "Test room",
|
||||
isDirect: false,
|
||||
avatarURL: nil,
|
||||
lastMessage: nil,
|
||||
lastMessageFormattedTimestamp: nil,
|
||||
isMarkedUnread: isMarkedUnread,
|
||||
unreadMessagesCount: unreadMessagesCount,
|
||||
unreadMentionsCount: unreadMentionsCount,
|
||||
unreadNotificationsCount: unreadNotificationsCount,
|
||||
notificationMode: notificationMode,
|
||||
canonicalAlias: nil,
|
||||
inviter: nil,
|
||||
hasOngoingCall: hasOngoingCall)
|
||||
}
|
||||
|
||||
func testNoBadge() {
|
||||
setupRoomSummary(isMarkedUnread: false,
|
||||
unreadMessagesCount: 0,
|
||||
unreadMentionsCount: 0,
|
||||
unreadNotificationsCount: 0,
|
||||
notificationMode: .allMessages,
|
||||
hasOngoingCall: false)
|
||||
|
||||
let room = HomeScreenRoom(details: roomSummaryDetails, invalidated: false, hideUnreadMessagesBadge: false)
|
||||
|
||||
XCTAssertFalse(room.isHighlighted)
|
||||
XCTAssertFalse(room.badges.isDotShown)
|
||||
XCTAssertFalse(room.badges.isCallShown)
|
||||
XCTAssertFalse(room.badges.isMuteShown)
|
||||
XCTAssertFalse(room.badges.isMentionShown)
|
||||
}
|
||||
|
||||
func testAllBadgesExceptMute() {
|
||||
setupRoomSummary(isMarkedUnread: true,
|
||||
unreadMessagesCount: 5,
|
||||
unreadMentionsCount: 5,
|
||||
unreadNotificationsCount: 5,
|
||||
notificationMode: .allMessages,
|
||||
hasOngoingCall: true)
|
||||
|
||||
let room = HomeScreenRoom(details: roomSummaryDetails, invalidated: false, hideUnreadMessagesBadge: false)
|
||||
|
||||
XCTAssertTrue(room.isHighlighted)
|
||||
XCTAssertTrue(room.badges.isDotShown)
|
||||
XCTAssertTrue(room.badges.isCallShown)
|
||||
XCTAssertFalse(room.badges.isMuteShown)
|
||||
XCTAssertTrue(room.badges.isMentionShown)
|
||||
}
|
||||
|
||||
func testUnhighlightedDot() {
|
||||
setupRoomSummary(isMarkedUnread: false,
|
||||
unreadMessagesCount: 5,
|
||||
unreadMentionsCount: 0,
|
||||
unreadNotificationsCount: 0,
|
||||
notificationMode: .allMessages,
|
||||
hasOngoingCall: false)
|
||||
|
||||
let room = HomeScreenRoom(details: roomSummaryDetails, invalidated: false, hideUnreadMessagesBadge: false)
|
||||
|
||||
XCTAssertFalse(room.isHighlighted)
|
||||
XCTAssertTrue(room.badges.isDotShown)
|
||||
XCTAssertFalse(room.badges.isCallShown)
|
||||
XCTAssertFalse(room.badges.isMuteShown)
|
||||
XCTAssertFalse(room.badges.isMentionShown)
|
||||
}
|
||||
|
||||
func testHighlightedDot() {
|
||||
setupRoomSummary(isMarkedUnread: false,
|
||||
unreadMessagesCount: 0,
|
||||
unreadMentionsCount: 0,
|
||||
unreadNotificationsCount: 5,
|
||||
notificationMode: .allMessages,
|
||||
hasOngoingCall: false)
|
||||
|
||||
let room = HomeScreenRoom(details: roomSummaryDetails, invalidated: false, hideUnreadMessagesBadge: false)
|
||||
|
||||
XCTAssertTrue(room.isHighlighted)
|
||||
XCTAssertTrue(room.badges.isDotShown)
|
||||
XCTAssertFalse(room.badges.isCallShown)
|
||||
XCTAssertFalse(room.badges.isMuteShown)
|
||||
XCTAssertFalse(room.badges.isMentionShown)
|
||||
}
|
||||
|
||||
func testHighlightedMentionAndDot() {
|
||||
setupRoomSummary(isMarkedUnread: false,
|
||||
unreadMessagesCount: 0,
|
||||
unreadMentionsCount: 5,
|
||||
unreadNotificationsCount: 0,
|
||||
notificationMode: .allMessages,
|
||||
hasOngoingCall: false)
|
||||
|
||||
let room = HomeScreenRoom(details: roomSummaryDetails, invalidated: false, hideUnreadMessagesBadge: false)
|
||||
|
||||
XCTAssertTrue(room.isHighlighted)
|
||||
XCTAssertTrue(room.badges.isDotShown)
|
||||
XCTAssertFalse(room.badges.isCallShown)
|
||||
XCTAssertFalse(room.badges.isMuteShown)
|
||||
XCTAssertTrue(room.badges.isMentionShown)
|
||||
}
|
||||
|
||||
func testUnhighlightedCall() {
|
||||
setupRoomSummary(isMarkedUnread: false,
|
||||
unreadMessagesCount: 0,
|
||||
unreadMentionsCount: 0,
|
||||
unreadNotificationsCount: 0,
|
||||
notificationMode: .allMessages,
|
||||
hasOngoingCall: true)
|
||||
|
||||
let room = HomeScreenRoom(details: roomSummaryDetails, invalidated: false, hideUnreadMessagesBadge: false)
|
||||
|
||||
XCTAssertFalse(room.isHighlighted)
|
||||
XCTAssertFalse(room.badges.isDotShown)
|
||||
XCTAssertTrue(room.badges.isCallShown)
|
||||
XCTAssertFalse(room.badges.isMuteShown)
|
||||
XCTAssertFalse(room.badges.isMentionShown)
|
||||
}
|
||||
|
||||
func testMentionAndKeywordsUnhighlightedDot() {
|
||||
setupRoomSummary(isMarkedUnread: false,
|
||||
unreadMessagesCount: 10,
|
||||
unreadMentionsCount: 0,
|
||||
unreadNotificationsCount: 0,
|
||||
notificationMode: .mentionsAndKeywordsOnly,
|
||||
hasOngoingCall: false)
|
||||
|
||||
let room = HomeScreenRoom(details: roomSummaryDetails, invalidated: false, hideUnreadMessagesBadge: false)
|
||||
|
||||
XCTAssertFalse(room.isHighlighted)
|
||||
XCTAssertTrue(room.badges.isDotShown)
|
||||
XCTAssertFalse(room.badges.isCallShown)
|
||||
XCTAssertFalse(room.badges.isMuteShown)
|
||||
XCTAssertFalse(room.badges.isMentionShown)
|
||||
}
|
||||
|
||||
func testMentionAndKeywordsUnhighlightedDotHidden() {
|
||||
setupRoomSummary(isMarkedUnread: false,
|
||||
unreadMessagesCount: 10,
|
||||
unreadMentionsCount: 0,
|
||||
unreadNotificationsCount: 0,
|
||||
notificationMode: .mentionsAndKeywordsOnly,
|
||||
hasOngoingCall: false)
|
||||
|
||||
let room = HomeScreenRoom(details: roomSummaryDetails, invalidated: false, hideUnreadMessagesBadge: true)
|
||||
|
||||
XCTAssertFalse(room.isHighlighted)
|
||||
XCTAssertFalse(room.badges.isDotShown)
|
||||
XCTAssertFalse(room.badges.isCallShown)
|
||||
XCTAssertFalse(room.badges.isMuteShown)
|
||||
XCTAssertFalse(room.badges.isMentionShown)
|
||||
}
|
||||
|
||||
// MARK: - Mark unread
|
||||
|
||||
func testMarkedUnreadDot() {
|
||||
setupRoomSummary(isMarkedUnread: true,
|
||||
unreadMessagesCount: 0,
|
||||
unreadMentionsCount: 0,
|
||||
unreadNotificationsCount: 0,
|
||||
notificationMode: .allMessages,
|
||||
hasOngoingCall: false)
|
||||
|
||||
let room = HomeScreenRoom(details: roomSummaryDetails, invalidated: false, hideUnreadMessagesBadge: false)
|
||||
|
||||
XCTAssertTrue(room.isHighlighted)
|
||||
XCTAssertTrue(room.badges.isDotShown)
|
||||
XCTAssertFalse(room.badges.isCallShown)
|
||||
XCTAssertFalse(room.badges.isMuteShown)
|
||||
XCTAssertFalse(room.badges.isMentionShown)
|
||||
}
|
||||
|
||||
func testMarkedUnreadDotAndMention() {
|
||||
setupRoomSummary(isMarkedUnread: true,
|
||||
unreadMessagesCount: 0,
|
||||
unreadMentionsCount: 5,
|
||||
unreadNotificationsCount: 0,
|
||||
notificationMode: .allMessages,
|
||||
hasOngoingCall: false)
|
||||
|
||||
let room = HomeScreenRoom(details: roomSummaryDetails, invalidated: false, hideUnreadMessagesBadge: false)
|
||||
|
||||
XCTAssertTrue(room.isHighlighted)
|
||||
XCTAssertTrue(room.badges.isDotShown)
|
||||
XCTAssertFalse(room.badges.isCallShown)
|
||||
XCTAssertFalse(room.badges.isMuteShown)
|
||||
XCTAssertTrue(room.badges.isMentionShown)
|
||||
}
|
||||
|
||||
func testMarkedUnreadMuteDotAndCall() {
|
||||
setupRoomSummary(isMarkedUnread: true,
|
||||
unreadMessagesCount: 5,
|
||||
unreadMentionsCount: 5,
|
||||
unreadNotificationsCount: 5,
|
||||
notificationMode: .mute,
|
||||
hasOngoingCall: true)
|
||||
|
||||
let room = HomeScreenRoom(details: roomSummaryDetails, invalidated: false, hideUnreadMessagesBadge: false)
|
||||
|
||||
XCTAssertTrue(room.isHighlighted)
|
||||
XCTAssertTrue(room.badges.isDotShown)
|
||||
XCTAssertTrue(room.badges.isCallShown)
|
||||
XCTAssertTrue(room.badges.isMuteShown)
|
||||
XCTAssertFalse(room.badges.isMentionShown)
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user