ganfra
7 months ago
4 changed files with 131 additions and 2 deletions
@ -0,0 +1,121 @@
@@ -0,0 +1,121 @@
|
||||
/* |
||||
* Copyright (c) 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. |
||||
*/ |
||||
|
||||
package io.element.android.features.roomlist.impl.filters |
||||
|
||||
import app.cash.molecule.RecompositionMode |
||||
import app.cash.molecule.moleculeFlow |
||||
import app.cash.turbine.test |
||||
import com.google.common.truth.Truth.assertThat |
||||
import io.element.android.libraries.matrix.api.roomlist.RoomListService |
||||
import io.element.android.libraries.matrix.test.roomlist.FakeRoomListService |
||||
import io.element.android.tests.testutils.awaitLastSequentialItem |
||||
import kotlinx.coroutines.test.runTest |
||||
import org.junit.Test |
||||
import io.element.android.libraries.matrix.api.roomlist.RoomListFilter as MatrixRoomListFilter |
||||
|
||||
class RoomListFiltersPresenterTests { |
||||
|
||||
@Test |
||||
fun `present - initial state`() = runTest { |
||||
val presenter = createRoomListFiltersPresenter() |
||||
moleculeFlow(RecompositionMode.Immediate) { |
||||
presenter.present() |
||||
}.test { |
||||
awaitItem().let { state -> |
||||
assertThat(state.selectedFilters).isEmpty() |
||||
assertThat(state.showClearFilterButton).isFalse() |
||||
assertThat(state.unselectedFilters).containsExactly( |
||||
RoomListFilter.Rooms, |
||||
RoomListFilter.People, |
||||
RoomListFilter.Unread, |
||||
RoomListFilter.Favourites, |
||||
) |
||||
} |
||||
} |
||||
} |
||||
|
||||
@Test |
||||
fun `present - toggle rooms filter`() = runTest { |
||||
val roomListService = FakeRoomListService() |
||||
val presenter = createRoomListFiltersPresenter(roomListService) |
||||
moleculeFlow(RecompositionMode.Immediate) { |
||||
presenter.present() |
||||
}.test { |
||||
awaitItem().eventSink.invoke(RoomListFiltersEvents.ToggleFilter(RoomListFilter.Rooms)) |
||||
|
||||
awaitLastSequentialItem().let { state -> |
||||
|
||||
assertThat(state.selectedFilters).containsExactly(RoomListFilter.Rooms) |
||||
assertThat(state.showClearFilterButton).isTrue() |
||||
assertThat(state.unselectedFilters).containsExactly( |
||||
RoomListFilter.Unread, |
||||
RoomListFilter.Favourites, |
||||
) |
||||
val roomListCurrentFilter = roomListService.allRooms.currentFilter.value as MatrixRoomListFilter.All |
||||
assertThat(roomListCurrentFilter.filters).containsExactly( |
||||
MatrixRoomListFilter.NonLeft, |
||||
MatrixRoomListFilter.Category.Group, |
||||
) |
||||
|
||||
state.eventSink.invoke(RoomListFiltersEvents.ToggleFilter(RoomListFilter.Rooms)) |
||||
} |
||||
|
||||
awaitLastSequentialItem().let { state -> |
||||
assertThat(state.selectedFilters).isEmpty() |
||||
assertThat(state.showClearFilterButton).isFalse() |
||||
assertThat(state.unselectedFilters).containsExactly( |
||||
RoomListFilter.Rooms, |
||||
RoomListFilter.People, |
||||
RoomListFilter.Unread, |
||||
RoomListFilter.Favourites, |
||||
) |
||||
val roomListCurrentFilter = roomListService.allRooms.currentFilter.value as MatrixRoomListFilter.All |
||||
assertThat(roomListCurrentFilter.filters).containsExactly( |
||||
MatrixRoomListFilter.NonLeft, |
||||
) |
||||
} |
||||
} |
||||
} |
||||
|
||||
@Test |
||||
fun `present - clear filters event`() = runTest { |
||||
val roomListService = FakeRoomListService() |
||||
val presenter = createRoomListFiltersPresenter(roomListService) |
||||
moleculeFlow(RecompositionMode.Immediate) { |
||||
presenter.present() |
||||
}.test { |
||||
awaitItem().eventSink.invoke(RoomListFiltersEvents.ToggleFilter(RoomListFilter.Rooms)) |
||||
awaitLastSequentialItem().let { state -> |
||||
assertThat(state.selectedFilters).isNotEmpty() |
||||
assertThat(state.showClearFilterButton).isTrue() |
||||
state.eventSink.invoke(RoomListFiltersEvents.ClearSelectedFilters) |
||||
} |
||||
awaitLastSequentialItem().let { state -> |
||||
assertThat(state.selectedFilters).isEmpty() |
||||
assertThat(state.showClearFilterButton).isFalse() |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
fun createRoomListFiltersPresenter( |
||||
roomListService: RoomListService = FakeRoomListService(), |
||||
): RoomListFiltersPresenter { |
||||
return RoomListFiltersPresenter( |
||||
roomListService = roomListService, |
||||
) |
||||
} |
Loading…
Reference in new issue