diff --git a/shared/src/commonMain/kotlin/net/newpipe/app/screen/settings/model/SettingsCategory.kt b/shared/src/commonMain/kotlin/net/newpipe/app/screen/settings/model/SettingsCategory.kt index f10f1a724..95e32f71b 100644 --- a/shared/src/commonMain/kotlin/net/newpipe/app/screen/settings/model/SettingsCategory.kt +++ b/shared/src/commonMain/kotlin/net/newpipe/app/screen/settings/model/SettingsCategory.kt @@ -1,3 +1,8 @@ +/* +* SPDX-FileCopyrightText: 2026 NewPipe e.V. +* SPDX-License-Identifier: GPL-3.0-or-later +*/ + package net.newpipe.app.screen.settings.model import org.jetbrains.compose.resources.DrawableResource diff --git a/shared/src/commonTest/kotlin/net/newpipe/app/composable/PreferenceRowTest.kt b/shared/src/commonTest/kotlin/net/newpipe/app/composable/PreferenceRowTest.kt new file mode 100644 index 000000000..9c6160184 --- /dev/null +++ b/shared/src/commonTest/kotlin/net/newpipe/app/composable/PreferenceRowTest.kt @@ -0,0 +1,48 @@ +/* +* SPDX-FileCopyrightText: 2026 NewPipe e.V. +* SPDX-License-Identifier: GPL-3.0-or-later +*/ + +package net.newpipe.app.composable + +import androidx.compose.ui.test.ExperimentalTestApi +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import androidx.compose.ui.test.v2.runComposeUiTest +import kotlin.test.Test +import kotlin.test.assertTrue + +@OptIn(ExperimentalTestApi::class) +class PreferenceRowTest { + + @Test + fun testPreferenceRowTitleAndClick() = runComposeUiTest { + val title = "Test title" + var clicked = false + setContent { + PreferenceRow( + title = title, + onClick = { clicked = true } + ) + } + + onNodeWithText(title).apply { + assertIsDisplayed() + performClick() + } + assertTrue(clicked) + } + + @Test + fun testPreferenceRowShowsSummary() = runComposeUiTest { + val title = "Test title" + val summary = "Test summary" + setContent { + PreferenceRow(title = title, summary = summary) + } + + onNodeWithText(title).assertIsDisplayed() + onNodeWithText(summary).assertIsDisplayed() + } +} \ No newline at end of file diff --git a/shared/src/commonTest/kotlin/net/newpipe/app/screen/settings/SettingsHomeScreenTest.kt b/shared/src/commonTest/kotlin/net/newpipe/app/screen/settings/SettingsHomeScreenTest.kt new file mode 100644 index 000000000..f28eef7aa --- /dev/null +++ b/shared/src/commonTest/kotlin/net/newpipe/app/screen/settings/SettingsHomeScreenTest.kt @@ -0,0 +1,66 @@ +/* +* SPDX-FileCopyrightText: 2026 NewPipe e.V. +* SPDX-License-Identifier: GPL-3.0-or-later +*/ + +package net.newpipe.app.screen.settings + +import androidx.compose.ui.test.ExperimentalTestApi +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import androidx.compose.ui.test.v2.runComposeUiTest +import com.russhwolf.settings.MapSettings +import com.russhwolf.settings.Settings +import net.newpipe.app.extensions.withKoin +import net.newpipe.app.screen.settings.model.SettingsCategory +import kotlin.test.Test +import kotlin.test.assertTrue +import newpipe.shared.generated.resources.Res +import newpipe.shared.generated.resources.ic_headset +import newpipe.shared.generated.resources.settings +import newpipe.shared.generated.resources.settings_category_video_audio_title +import org.jetbrains.compose.resources.getString +import org.koin.dsl.module + +@OptIn(ExperimentalTestApi::class) +class SettingsHomeScreenTest { + + private val emptySettings = module { + single { MapSettings() } + } + + @Test + fun testTitleAndCategoriesRender() = runComposeUiTest { + withKoin( + modules = listOf(emptySettings), + content = { SettingsHomeScreenContent() }, + onContent = { + onNodeWithText(getString(Res.string.settings)).assertIsDisplayed() + onNodeWithText(getString(Res.string.settings_category_video_audio_title)) + .assertIsDisplayed() + } + ) + } + + @Test + fun testCategoryClickFires() = runComposeUiTest { + var clicked = false + val categories = listOf( + SettingsCategory( + title = Res.string.settings_category_video_audio_title, + icon = Res.drawable.ic_headset, + onClick = { clicked = true } + ) + ) + withKoin( + modules = listOf(emptySettings), + content = { SettingsHomeScreenContent(categories = categories) }, + onContent = { + onNodeWithText(getString(Res.string.settings_category_video_audio_title)) + .performClick() + assertTrue(clicked) + } + ) + } +}