ganfra
7 months ago
4 changed files with 131 additions and 2 deletions
@ -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