mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +00:00
Room List Filters implementation (#2423)
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user