From 0599f26a645e43a1f93ee0d626f84093fc1101ec Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 21 Feb 2024 20:55:49 +0100 Subject: [PATCH] RoomListFilters : add more tests. --- .../filters/RoomListFiltersStateProvider.kt | 4 +- .../impl/filters/RoomListFiltersView.kt | 7 +- .../impl/filters/RoomListFiltersViewTests.kt | 72 +++++++++++++++++++ .../android/libraries/testtags/TestTags.kt | 1 + 4 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersViewTests.kt diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersStateProvider.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersStateProvider.kt index d3270291ea..281f014cc7 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersStateProvider.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersStateProvider.kt @@ -36,8 +36,10 @@ fun aRoomListFiltersState( unselectedFilters: ImmutableList = RoomListFilter.entries.toImmutableList(), selectedFilters: ImmutableList = persistentListOf(), isFeatureEnabled: Boolean = true, + eventSink: (RoomListFiltersEvents) -> Unit = {}, ) = RoomListFiltersState( unselectedFilters = unselectedFilters, selectedFilters = selectedFilters, isFeatureEnabled = isFeatureEnabled, -) {} + eventSink = eventSink, +) diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersView.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersView.kt index 4d3e1811af..8aefe30d0c 100644 --- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersView.kt +++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersView.kt @@ -49,6 +49,8 @@ import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.IconButton import io.element.android.libraries.designsystem.theme.components.Text +import io.element.android.libraries.testtags.TestTags +import io.element.android.libraries.testtags.testTag import kotlinx.collections.immutable.ImmutableList @Composable @@ -70,7 +72,10 @@ fun RoomListFiltersView( verticalAlignment = Alignment.CenterVertically, ) { AnimatedVisibility(visible = state.hasAnyFilterSelected) { - RoomListClearFiltersButton(onClick = ::onClearFiltersClicked) + RoomListClearFiltersButton( + modifier = Modifier.testTag(TestTags.homeScreenClearFilters), + onClick = ::onClearFiltersClicked + ) } val lazyListState = rememberLazyListState() val fadingEdgesBrush = horizontalFadingEdgesBrush( diff --git a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersViewTests.kt b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersViewTests.kt new file mode 100644 index 0000000000..6c9bd9e050 --- /dev/null +++ b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/filters/RoomListFiltersViewTests.kt @@ -0,0 +1,72 @@ +/* + * 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 androidx.activity.ComponentActivity +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import io.element.android.features.roomlist.impl.R +import io.element.android.libraries.testtags.TestTags +import io.element.android.tests.testutils.EventsRecorder +import io.element.android.tests.testutils.clickOn +import io.element.android.tests.testutils.pressTag +import kotlinx.collections.immutable.persistentListOf +import kotlinx.collections.immutable.toImmutableList +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class RoomListFiltersViewTests { + @get:Rule val rule = createAndroidComposeRule() + + @Test + fun `clicking on filters generates expected Event`() { + val eventsRecorder = EventsRecorder() + rule.setContent { + RoomListFiltersView( + state = aRoomListFiltersState(eventSink = eventsRecorder), + ) + } + rule.clickOn(R.string.screen_roomlist_filter_rooms) + eventsRecorder.assertList( + listOf( + RoomListFiltersEvents.ToggleFilter(RoomListFilter.Rooms), + ) + ) + } + + @Test + fun `clicking on clear filters generates expected Event`() { + val eventsRecorder = EventsRecorder() + rule.setContent { + RoomListFiltersView( + state = aRoomListFiltersState( + unselectedFilters = persistentListOf(), + selectedFilters = RoomListFilter.entries.toImmutableList(), + eventSink = eventsRecorder + ), + ) + } + rule.pressTag(TestTags.homeScreenClearFilters.value) + eventsRecorder.assertList( + listOf( + RoomListFiltersEvents.ClearSelectedFilters, + ) + ) + } +} diff --git a/libraries/testtags/src/main/kotlin/io/element/android/libraries/testtags/TestTags.kt b/libraries/testtags/src/main/kotlin/io/element/android/libraries/testtags/TestTags.kt index 7992ddee17..25d876d4cb 100644 --- a/libraries/testtags/src/main/kotlin/io/element/android/libraries/testtags/TestTags.kt +++ b/libraries/testtags/src/main/kotlin/io/element/android/libraries/testtags/TestTags.kt @@ -47,6 +47,7 @@ object TestTags { * Room list / Home screen. */ val homeScreenSettings = TestTag("home_screen-settings") + val homeScreenClearFilters = TestTag("home_screen-clear_filters") /** * Welcome screen.