test: responsive navigation mode test for compact/expanded (Closes #36) (#54)

This commit was merged in pull request #54.
This commit is contained in:
2026-03-13 13:22:44 +01:00
parent 604070ce4b
commit a6c5e2a2f9

View File

@@ -0,0 +1,95 @@
package org.shahondin1624
import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Modifier
import androidx.compose.ui.test.ExperimentalTestApi
import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.onAllNodesWithTag
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.runComposeUiTest
import androidx.compose.ui.unit.dp
import org.shahondin1624.lib.components.TestTags
import org.shahondin1624.theme.LocalWindowSizeClass
import org.shahondin1624.theme.WindowSizeClass
import kotlin.test.Test
import kotlin.test.assertEquals
/**
* Tests that the correct navigation mode is rendered at each window size class.
*/
@OptIn(ExperimentalTestApi::class)
class ResponsiveNavigationModeTest {
@Test
fun compactShowsModalDrawerHiddenByDefault() = runComposeUiTest {
setContent {
App()
}
waitForIdle()
// Hamburger menu button should be visible
onNodeWithTag(TestTags.MENU_BUTTON).assertIsDisplayed()
// Navigation rail and permanent drawer should not exist
assertEquals(
0,
onAllNodesWithTag(TestTags.NAV_RAIL).fetchSemanticsNodes().size,
"NavigationRail should not be present in compact mode"
)
assertEquals(
0,
onAllNodesWithTag(TestTags.NAV_PERMANENT_DRAWER).fetchSemanticsNodes().size,
"PermanentDrawer should not be present in compact mode"
)
}
@Test
fun compactDrawerAppearsOnMenuTap() = runComposeUiTest {
setContent {
App()
}
waitForIdle()
// Tap hamburger
onNodeWithTag(TestTags.MENU_BUTTON).performClick()
waitForIdle()
// Drawer content should now be visible
onNodeWithTag(TestTags.NAV_CHARACTER_SHEET).assertIsDisplayed()
onNodeWithTag(TestTags.NAV_SETTINGS).assertIsDisplayed()
}
@Test
fun expandedShowsPermanentSidebar() = runComposeUiTest {
setContent {
// Force expanded size class by wrapping in a wide box
CompositionLocalProvider(LocalWindowSizeClass provides WindowSizeClass.Expanded) {
BoxWithConstraints(modifier = Modifier.width(1200.dp).fillMaxSize()) {
App()
}
}
}
waitForIdle()
// Permanent drawer should be visible
onNodeWithTag(TestTags.NAV_PERMANENT_DRAWER).assertIsDisplayed()
// Hamburger menu button should not exist
assertEquals(
0,
onAllNodesWithTag(TestTags.MENU_BUTTON).fetchSemanticsNodes().size,
"Menu button should not be present in expanded mode"
)
// Navigation items always visible
onNodeWithTag(TestTags.NAV_CHARACTER_SHEET).assertIsDisplayed()
onNodeWithTag(TestTags.NAV_SETTINGS).assertIsDisplayed()
}
}