add robot for settings feature ui tests

pull/402/head
JanFidor 3 years ago
parent a71aebb277
commit f91fe5b4c0

@ -0,0 +1,60 @@
/*
* Copyright 2022 The Android Open Source Project
*
* 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
*
* https://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 com.google.samples.apps.nowinandroid.feature.settings
import androidx.activity.ComponentActivity
import androidx.annotation.StringRes
import androidx.compose.ui.test.assertIsSelected
import androidx.compose.ui.test.junit4.AndroidComposeTestRule
import androidx.compose.ui.test.onNodeWithText
import androidx.test.ext.junit.rules.ActivityScenarioRule
internal class SettingsDialogRobot(
private val composeTestRule: AndroidComposeTestRule<ActivityScenarioRule<ComponentActivity>, ComponentActivity>
) {
fun setContent(settingsUiState: SettingsUiState) {
composeTestRule.setContent {
SettingsDialog(
settingsUiState = settingsUiState,
onDismiss = { },
onChangeThemeBrand = {},
onChangeDarkThemeConfig = {}
)
}
}
fun loadingIndicatorExists() {
composeTestRule
.onNodeWithText(getString(R.string.loading))
.assertExists()
}
fun settingExists(name: String) {
composeTestRule
.onNodeWithText(name)
.assertExists()
}
fun settingIsSelected(name: String) {
composeTestRule
.onNodeWithText(name)
.assertIsSelected()
}
fun getString(@StringRes stringId: Int) =
composeTestRule.activity.resources.getString(stringId)
}

@ -17,9 +17,9 @@
package com.google.samples.apps.nowinandroid.feature.settings
import androidx.activity.ComponentActivity
import androidx.compose.ui.test.assertIsSelected
import androidx.compose.ui.test.junit4.AndroidComposeTestRule
import androidx.compose.ui.test.junit4.createAndroidComposeRule
import androidx.compose.ui.test.onNodeWithText
import androidx.test.ext.junit.rules.ActivityScenarioRule
import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig.DARK
import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand.ANDROID
import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Loading
@ -32,74 +32,60 @@ class SettingsDialogTest {
@get:Rule
val composeTestRule = createAndroidComposeRule<ComponentActivity>()
private fun getString(id: Int) = composeTestRule.activity.resources.getString(id)
@Test
fun whenLoading_showsLoadingText() {
composeTestRule.setContent {
SettingsDialog(
settingsUiState = Loading,
onDismiss = { },
onChangeThemeBrand = {},
onChangeDarkThemeConfig = {}
)
launchSettingsDialogRobot(composeTestRule, Loading) {
loadingIndicatorExists()
}
composeTestRule
.onNodeWithText(getString(R.string.loading))
.assertExists()
}
@Test
fun whenStateIsSuccess_allSettingsAreDisplayed() {
composeTestRule.setContent {
SettingsDialog(
settingsUiState = Success(
UserEditableSettings(
brand = ANDROID,
darkThemeConfig = DARK
)
),
onDismiss = { },
onChangeThemeBrand = {},
onChangeDarkThemeConfig = {}
launchSettingsDialogRobot(
composeTestRule,
Success(
UserEditableSettings(
brand = ANDROID,
darkThemeConfig = DARK
)
)
}
) {
settingExists(getString(R.string.brand_default))
settingExists(getString(R.string.brand_android))
settingExists(getString(R.string.dark_mode_config_system_default))
// Check that all the possible settings are displayed.
composeTestRule.onNodeWithText(getString(R.string.brand_default)).assertExists()
composeTestRule.onNodeWithText(getString(R.string.brand_android)).assertExists()
composeTestRule.onNodeWithText(
getString(R.string.dark_mode_config_system_default)
).assertExists()
composeTestRule.onNodeWithText(getString(R.string.dark_mode_config_light)).assertExists()
composeTestRule.onNodeWithText(getString(R.string.dark_mode_config_dark)).assertExists()
settingExists(getString(R.string.dark_mode_config_light))
settingExists(getString(R.string.dark_mode_config_dark))
// Check that the correct settings are selected.
composeTestRule.onNodeWithText(getString(R.string.brand_android)).assertIsSelected()
composeTestRule.onNodeWithText(getString(R.string.dark_mode_config_dark)).assertIsSelected()
settingIsSelected(getString(R.string.brand_android))
settingIsSelected(getString(R.string.dark_mode_config_dark))
}
}
@Test
fun whenStateIsSuccess_allLinksAreDisplayed() {
composeTestRule.setContent {
SettingsDialog(
settingsUiState = Success(
UserEditableSettings(
brand = ANDROID,
darkThemeConfig = DARK
)
),
onDismiss = { },
onChangeThemeBrand = {},
onChangeDarkThemeConfig = {}
launchSettingsDialogRobot(
composeTestRule,
Success(
UserEditableSettings(
brand = ANDROID,
darkThemeConfig = DARK
)
)
) {
settingExists(getString(R.string.privacy_policy))
settingExists(getString(R.string.licenses))
settingExists(getString(R.string.brand_guidelines))
settingExists(getString(R.string.feedback))
}
composeTestRule.onNodeWithText(getString(R.string.privacy_policy)).assertExists()
composeTestRule.onNodeWithText(getString(R.string.licenses)).assertExists()
composeTestRule.onNodeWithText(getString(R.string.brand_guidelines)).assertExists()
composeTestRule.onNodeWithText(getString(R.string.feedback)).assertExists()
}
}
private fun launchSettingsDialogRobot(
composeTestRule: AndroidComposeTestRule<ActivityScenarioRule<ComponentActivity>, ComponentActivity>,
settingsUiState: SettingsUiState,
func: SettingsDialogRobot.() -> Unit
) = SettingsDialogRobot(composeTestRule).apply {
setContent(settingsUiState)
func()
}

Loading…
Cancel
Save