Room List Filters implementation (#2423)

This commit is contained in:
Mauro
2024-02-08 16:50:44 +01:00
committed by GitHub
parent e1d1e99ad4
commit 224e4e4881
18 changed files with 292 additions and 128 deletions
@@ -25,10 +25,13 @@ class HomeScreenViewModelTests: XCTestCase {
var clientProxy: MockClientProxy!
var context: HomeScreenViewModelType.Context! { viewModel.context }
var cancellables = Set<AnyCancellable>()
var roomSummaryProvider: MockRoomSummaryProvider!
override func setUpWithError() throws {
ServiceLocator.shared.settings.roomListFiltersEnabled = true
cancellables.removeAll()
clientProxy = MockClientProxy(userID: "@mock:client.com")
roomSummaryProvider = MockRoomSummaryProvider(state: .loaded(.mockRooms))
clientProxy = MockClientProxy(userID: "@mock:client.com", roomSummaryProvider: roomSummaryProvider)
viewModel = HomeScreenViewModel(userSession: MockUserSession(clientProxy: clientProxy,
mediaProvider: MockMediaProvider(),
voiceMessageMediaManager: VoiceMessageMediaManagerMock()),
@@ -37,6 +40,10 @@ class HomeScreenViewModelTests: XCTestCase {
userIndicatorController: ServiceLocator.shared.userIndicatorController)
}
override func tearDown() {
AppSettings.reset()
}
func testSelectRoom() async throws {
let mockRoomId = "mock_room_id"
var correctResult = false
@@ -153,4 +160,14 @@ class HomeScreenViewModelTests: XCTestCase {
XCTAssertNil(context.alertInfo)
XCTAssertTrue(correctResult)
}
func testFilters() async throws {
context.viewState.filtersState.activateFilter(.people)
try await Task.sleep(for: .milliseconds(100))
XCTAssertEqual(roomSummaryProvider.currentFilter, RoomSummaryProviderFilter.include(.init(filters: [.people])))
context.isSearchFieldFocused = true
context.searchQuery = "Test"
try await Task.sleep(for: .milliseconds(100))
XCTAssertEqual(roomSummaryProvider.currentFilter, RoomSummaryProviderFilter.include(.init(query: "Test", filters: [.people])))
}
}
@@ -0,0 +1,70 @@
//
// 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 XCTest
@testable import ElementX
final class RoomListFiltersStateTests: XCTestCase {
var state: RoomListFiltersState!
override func setUp() {
state = RoomListFiltersState()
}
func testInitialState() {
XCTAssertFalse(state.isFiltering)
XCTAssertEqual(state.activeFilters, [])
XCTAssertEqual(state.availableFilters, RoomListFilter.allCases)
}
func testSetAndUnsetFilters() {
state.activateFilter(.unreads)
XCTAssertTrue(state.isFiltering)
XCTAssertEqual(state.activeFilters, [.unreads])
XCTAssertEqual(state.availableFilters, [.people, .rooms, .favourites])
state.deactivateFilter(.unreads)
XCTAssertFalse(state.isFiltering)
XCTAssertEqual(state.activeFilters, [])
XCTAssertEqual(state.availableFilters, RoomListFilter.allCases)
}
func testMutuallyExclusiveFilters() {
state.activateFilter(.people)
XCTAssertTrue(state.isFiltering)
XCTAssertEqual(state.activeFilters, [.people])
XCTAssertEqual(state.availableFilters, [.unreads, .favourites])
state.deactivateFilter(.people)
state.activateFilter(.rooms)
state.activateFilter(.unreads)
XCTAssertTrue(state.isFiltering)
XCTAssertEqual(state.activeFilters, [.rooms, .unreads])
XCTAssertEqual(state.availableFilters, [.favourites])
}
func testClearFilters() {
state.activateFilter(.people)
state.activateFilter(.unreads)
state.activateFilter(.favourites)
XCTAssertTrue(state.isFiltering)
XCTAssertEqual(state.activeFilters, [.people, .unreads, .favourites])
XCTAssertEqual(state.availableFilters, [])
state.clearFilters()
XCTAssertFalse(state.isFiltering)
XCTAssertEqual(state.activeFilters, [])
XCTAssertEqual(state.availableFilters, RoomListFilter.allCases)
}
}