Skip to content

Commit bf29595

Browse files
committed
Add some tests for the default filters we apply.
1 parent 9624e4c commit bf29595

File tree

2 files changed

+120
-0
lines changed

2 files changed

+120
-0
lines changed

ElementX.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,7 @@
570570
6A54F52443EC52AC5CD772C0 /* JoinRoomScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 869A8A4632E511351BFE2EC4 /* JoinRoomScreen.swift */; };
571571
6A64546ABE648ED9E6DBB459 /* RemoteSettingsHook.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5D186A6DB8FAC5C9D0E4D61 /* RemoteSettingsHook.swift */; };
572572
6A916606A8B92FE8A990A219 /* XCTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85A1941B874A3BE9CDDF43EF /* XCTestCase.swift */; };
573+
6AB306367E56A6F6DFA0E2FF /* RoomSummaryProviderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F46E441BA50705E6CEC89FE0 /* RoomSummaryProviderTests.swift */; };
573574
6AD722DD92E465E56D2885AB /* BugReportScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA919F521E9F0EE3638AFC85 /* BugReportScreen.swift */; };
574575
6AEB650311F694A5702255C9 /* UserProfileScreenCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5B4932E4EFBC8FAC10972CD /* UserProfileScreenCoordinator.swift */; };
575576
6B31508C6334C617360C2EAB /* RoomMemberDetailsViewModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC589E641AE46EFB2962534D /* RoomMemberDetailsViewModelTests.swift */; };
@@ -2679,6 +2680,7 @@
26792680
F409D44C2E6BE50462E82F8A /* en-US */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-US"; path = "en-US.lproj/Localizable.strings"; sourceTree = "<group>"; };
26802681
F4469F6AE311BDC439B3A5EC /* UserSessionMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserSessionMock.swift; sourceTree = "<group>"; };
26812682
F4548A9BDE5CB3AB864BCA9F /* EffectsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EffectsView.swift; sourceTree = "<group>"; };
2683+
F46E441BA50705E6CEC89FE0 /* RoomSummaryProviderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomSummaryProviderTests.swift; sourceTree = "<group>"; };
26822684
F4CEB4590CCF70F0E3C0B171 /* GeneratedAccessibilityTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeneratedAccessibilityTests.swift; sourceTree = "<group>"; };
26832685
F506C6ADB1E1DA6638078E11 /* UITests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = UITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
26842686
F51D674A5B5F1FE1B878E20F /* nb */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nb; path = nb.lproj/Localizable.strings; sourceTree = "<group>"; };
@@ -4498,6 +4500,7 @@
44984500
48FEFF746DB341CDB18D7AAA /* RoomRolesAndPermissionsScreenViewModelTests.swift */,
44994501
93CF7B19FFCF8EFBE0A8696A /* RoomScreenViewModelTests.swift */,
45004502
AEEAFB646E583655652C3D04 /* RoomStateEventStringBuilderTests.swift */,
4503+
F46E441BA50705E6CEC89FE0 /* RoomSummaryProviderTests.swift */,
45014504
046C0D3F53B0B5EF0A1F5BEA /* RoomSummaryTests.swift */,
45024505
2E88534A39781D76487D59DF /* SecureBackupKeyBackupScreenViewModelTests.swift */,
45034506
848F69921527D31CAACB93AF /* SecureBackupLogoutConfirmationScreenViewModelTests.swift */,
@@ -7168,6 +7171,7 @@
71687171
84C631E734FD2555B39B681C /* RoomRolesAndPermissionsScreenViewModelTests.swift in Sources */,
71697172
46562110EE202E580A5FFD9C /* RoomScreenViewModelTests.swift in Sources */,
71707173
CC0D088F505F33A20DC5590F /* RoomStateEventStringBuilderTests.swift in Sources */,
7174+
6AB306367E56A6F6DFA0E2FF /* RoomSummaryProviderTests.swift in Sources */,
71717175
15913A5B07118C1268A840E4 /* RoomSummaryTests.swift in Sources */,
71727176
7691233E3572A9173FD96CB3 /* SecureBackupKeyBackupScreenViewModelTests.swift in Sources */,
71737177
EB87DF90CF6F8D5D12404C6E /* SecureBackupLogoutConfirmationScreenViewModelTests.swift in Sources */,
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
//
2+
// Copyright 2025 New Vector Ltd.
3+
//
4+
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
5+
// Please see LICENSE files in the repository root for full details.
6+
//
7+
8+
import XCTest
9+
10+
@testable import ElementX
11+
12+
final class RoomSummaryProviderTests: XCTestCase {
13+
var appSettings: AppSettings!
14+
var roomList: RoomListSDKMock!
15+
var dynamicEntriesController: RoomListDynamicEntriesControllerSDKMock!
16+
17+
var roomSummaryProvider: RoomSummaryProvider!
18+
19+
override func setUp() {
20+
AppSettings.resetAllSettings()
21+
appSettings = AppSettings()
22+
}
23+
24+
override func tearDown() {
25+
AppSettings.resetAllSettings()
26+
}
27+
28+
func testDefaultRustFilters() async {
29+
// Given a new room provider.
30+
setupProvider()
31+
await Task.yield()
32+
33+
// Then it should have the default Rust filters enabled.
34+
XCTAssertEqual(dynamicEntriesController.setFilterKindCallsCount, 1)
35+
XCTAssertEqual(dynamicEntriesController.setFilterKindReceivedInvocations.last, .all(filters: [.nonLeft,
36+
.nonSpace,
37+
.deduplicateVersions]))
38+
39+
// When setting one our user filters.
40+
roomSummaryProvider.setFilter(.all(filters: [.favourites]))
41+
await Task.yield()
42+
43+
// Then that filter should be added to the default Rust filters.
44+
XCTAssertEqual(dynamicEntriesController.setFilterKindCallsCount, 2)
45+
XCTAssertEqual(dynamicEntriesController.setFilterKindReceivedInvocations.last, .all(filters: [.all(filters: [.favourite, .joined]),
46+
.nonLeft,
47+
.nonSpace,
48+
.deduplicateVersions]))
49+
}
50+
51+
func testLowPriorityRustFilters() async {
52+
// Given a new room provider with the low priority filter enabled.
53+
setupProvider(isLowPriorityFilterEnabled: true)
54+
await Task.yield()
55+
56+
// Then the default Rust filters should include the non-low priority filter,
57+
// so that low priority rooms are hidden from the top of the room list.
58+
XCTAssertEqual(dynamicEntriesController.setFilterKindCallsCount, 1)
59+
XCTAssertEqual(dynamicEntriesController.setFilterKindReceivedInvocations.last, .all(filters: [.nonLeft,
60+
.nonSpace,
61+
.deduplicateVersions,
62+
.all(filters: [.nonLowPriority, .joined])]))
63+
64+
// When setting the low priority filter.
65+
roomSummaryProvider.setFilter(.all(filters: [.lowPriority]))
66+
await Task.yield()
67+
68+
// Then the non-low priority filter should be replaced with the low priority filter.
69+
XCTAssertEqual(dynamicEntriesController.setFilterKindCallsCount, 2)
70+
XCTAssertEqual(dynamicEntriesController.setFilterKindReceivedInvocations.last, .all(filters: [.all(filters: [.lowPriority, .joined]),
71+
.nonLeft,
72+
.nonSpace,
73+
.deduplicateVersions]))
74+
75+
// When setting another one of our filters.
76+
roomSummaryProvider.setFilter(.all(filters: [.rooms]))
77+
await Task.yield()
78+
79+
// Then the filter should be combined with the non-low priority filter.
80+
XCTAssertEqual(dynamicEntriesController.setFilterKindCallsCount, 3)
81+
XCTAssertEqual(dynamicEntriesController.setFilterKindReceivedInvocations.last, .all(filters: [.all(filters: [.category(expect: .group), .joined]),
82+
.nonLeft,
83+
.nonSpace,
84+
.deduplicateVersions,
85+
.all(filters: [.nonLowPriority, .joined])]))
86+
}
87+
88+
// MARK: - Helpers
89+
90+
private func setupProvider(isLowPriorityFilterEnabled: Bool = false) {
91+
appSettings.lowPriorityFilterEnabled = isLowPriorityFilterEnabled
92+
93+
let stateEventStringBuilder = RoomStateEventStringBuilder(userID: "@me:matrix.org")
94+
let attributedStringBuilder = AttributedStringBuilder(mentionBuilder: MentionBuilder())
95+
let eventStringBuilder = RoomEventStringBuilder(stateEventStringBuilder: stateEventStringBuilder,
96+
messageEventStringBuilder: RoomMessageEventStringBuilder(attributedStringBuilder: attributedStringBuilder,
97+
destination: .roomList),
98+
shouldDisambiguateDisplayNames: true,
99+
shouldPrefixSenderName: true)
100+
101+
roomSummaryProvider = RoomSummaryProvider(roomListService: RoomListServiceSDKMock(),
102+
eventStringBuilder: eventStringBuilder,
103+
name: "Test",
104+
notificationSettings: NotificationSettingsProxyMock(with: .init()),
105+
appSettings: appSettings)
106+
107+
dynamicEntriesController = RoomListDynamicEntriesControllerSDKMock()
108+
dynamicEntriesController.setFilterKindReturnValue = true
109+
let dynamicAdaptersResult = RoomListEntriesWithDynamicAdaptersResultSDKMock()
110+
dynamicAdaptersResult.controllerReturnValue = dynamicEntriesController
111+
roomList = RoomListSDKMock()
112+
roomList.entriesWithDynamicAdaptersPageSizeListenerReturnValue = dynamicAdaptersResult
113+
roomList.loadingStateListenerReturnValue = .some(.init(state: .notLoaded, stateStream: .init(noPointer: .init())))
114+
roomSummaryProvider.setRoomList(roomList)
115+
}
116+
}

0 commit comments

Comments
 (0)