diff --git a/user/build.gradle.kts b/user/build.gradle.kts index 82f4f21b2..d728a0a8b 100644 --- a/user/build.gradle.kts +++ b/user/build.gradle.kts @@ -97,4 +97,5 @@ dependencies { //Permission implementation("com.google.accompanist:accompanist-permissions:0.28.0") + androidTestImplementation ("com.google.truth:truth:1.1.4") } diff --git a/user/src/androidTest/java/org/the_chance/honeymart/ui/feature/home/search/SearchBarTest.kt b/user/src/androidTest/java/org/the_chance/honeymart/ui/feature/home/search/SearchBarTest.kt new file mode 100644 index 000000000..12ea537d3 --- /dev/null +++ b/user/src/androidTest/java/org/the_chance/honeymart/ui/feature/home/search/SearchBarTest.kt @@ -0,0 +1,85 @@ +package org.the_chance.honeymart.ui.feature.home.search + +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onNodeWithContentDescription +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import com.google.common.truth.Truth +import org.junit.Rule +import org.junit.Test +import org.the_chance.design_system.R +import org.the_chance.honeymart.ui.feature.home.composables.SearchBar + +class SearchBarTest { + + @get:Rule + val composeTestRule = createComposeRule() + + @Test + fun checkTextIsDisplayed() { + composeTestRule.setContent { + SearchBar( + icon = painterResource(id = R.drawable.ic_search), + text = "search", + onClick = { /*TODO*/ }) + } + + composeTestRule.onNodeWithText("search").assertIsDisplayed() + } + + @Test + fun checkIconIsDisplayed() { + composeTestRule.setContent { + SearchBar( + icon = painterResource(id = R.drawable.ic_search), + onClick = { /*TODO*/ }) + } + + composeTestRule.onNodeWithContentDescription("SearchIcon").assertIsDisplayed() + } + + @Test + fun checkSearchBarClick() { + var isClicked = false + + composeTestRule.setContent { + SearchBar( + icon = painterResource(id = R.drawable.ic_search), + onClick = { isClicked = true }) + } + composeTestRule.onNodeWithContentDescription("SearchWidget").performClick() + Truth.assertThat(isClicked).isTrue() + } + + @Test + fun searchBar_DisplaysText_Search() { + testDisplayText("search") + } + + @Test + fun searchBar_DisplaysText_Find() { + testDisplayText("find") + } + + @Test + fun searchBar_DisplaysText_Lookup() { + testDisplayText("lookup") + } + + private fun testDisplayText(text: String) { + composeTestRule.setContent { + SearchBar( + icon = painterResource(id = R.drawable.ic_search), + text = text, + onClick = { /*TODO*/ } + ) + } + + composeTestRule.waitForIdle() + + composeTestRule.onNodeWithText(text).assertIsDisplayed() + } + +} \ No newline at end of file diff --git a/user/src/main/java/org/the_chance/honeymart/ui/feature/home/composables/SearchBar.kt b/user/src/main/java/org/the_chance/honeymart/ui/feature/home/composables/SearchBar.kt index 61067058b..351977d7a 100644 --- a/user/src/main/java/org/the_chance/honeymart/ui/feature/home/composables/SearchBar.kt +++ b/user/src/main/java/org/the_chance/honeymart/ui/feature/home/composables/SearchBar.kt @@ -18,6 +18,8 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.contentDescription +import androidx.compose.ui.semantics.semantics import androidx.compose.ui.tooling.preview.Preview import org.the_chance.design_system.R import org.the_chance.honymart.ui.theme.HoneyMartTheme @@ -28,12 +30,16 @@ import org.the_chance.honymart.ui.theme.dimens fun SearchBar( icon: Painter, onClick: () -> Unit, + text : String = stringResource(R.string.search), modifier: Modifier = Modifier, ) { Surface( modifier = modifier .clip(shape = MaterialTheme.shapes.medium) - .clickable { onClick() }, + .clickable { onClick() } + .semantics { + contentDescription = "SearchWidget" + }, color = MaterialTheme.colorScheme.tertiaryContainer, shape = MaterialTheme.shapes.medium, border = BorderStroke( @@ -55,12 +61,18 @@ fun SearchBar( painter = icon, contentDescription = null, modifier = Modifier - .size(MaterialTheme.dimens.icon24), + .size(MaterialTheme.dimens.icon24) + .semantics { + contentDescription = "SearchIcon" + }, tint = MaterialTheme.colorScheme.onBackground ) Text( - text = stringResource(R.string.search), + modifier = Modifier.semantics { + contentDescription = "TextFiled" + }, + text = text, style = Typography.displaySmall.copy(MaterialTheme.colorScheme.onSecondaryContainer), ) }