Skip to content

Commit

Permalink
Add Compose UI Test for common module
Browse files Browse the repository at this point in the history
  • Loading branch information
alirezaeiii committed Sep 11, 2024
1 parent e133fed commit 180ce5b
Show file tree
Hide file tree
Showing 10 changed files with 273 additions and 7 deletions.
2 changes: 2 additions & 0 deletions common/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,6 @@ dependencies {
implementation(Deps.composeUiToolingPreview)
implementation(Deps.coil)
implementation(Deps.iconExtended)
androidTestImplementation(Deps.composeUiTest)
debugImplementation(Deps.composeManifest)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.sample.tmdb.common.ui.component

import androidx.activity.ComponentActivity
import androidx.compose.ui.Modifier
import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.junit4.createAndroidComposeRule
import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithText
import com.sample.tmdb.common.R
import org.junit.Rule
import org.junit.Test

class DestinationBarTest {

@get:Rule
val composeTestRule = createAndroidComposeRule<ComponentActivity>()

@Test
fun destinationBarTest() {
with(composeTestRule) {
setContent {
DestinationBar(Modifier,"title", {}, {})
}
onNodeWithText("title").assertIsDisplayed()
onNodeWithContentDescription(
activity.getString(
R.string.back
)
).assertIsDisplayed()
onNodeWithContentDescription(
activity.getString(
R.string.search_desc
)
).assertIsDisplayed()
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.sample.tmdb.common.ui.component

import androidx.activity.ComponentActivity
import androidx.compose.ui.test.assertIsDisplayed
import org.junit.Rule
import androidx.compose.ui.test.junit4.createAndroidComposeRule
import androidx.compose.ui.test.onNodeWithText
import com.sample.tmdb.common.R
import org.junit.Test

class ErrorScreenTest {

@get:Rule
val composeTestRule = createAndroidComposeRule<ComponentActivity>()

@Test
fun errorScreenTest() {
with(composeTestRule) {
setContent {
ErrorScreen("Message") {
}
}
onNodeWithText("Message").assertIsDisplayed()
onNodeWithText(
activity.getString(
R.string.retry
)
).assertIsDisplayed()
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.sample.tmdb.common.ui.component

import android.os.Parcel
import androidx.activity.ComponentActivity
import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.junit4.createAndroidComposeRule
import androidx.compose.ui.test.onNodeWithContentDescription
import androidx.compose.ui.test.onNodeWithText
import androidx.navigation.compose.rememberNavController
import com.sample.tmdb.common.R
import com.sample.tmdb.common.model.Credit
import com.sample.tmdb.common.model.Gender
import org.junit.Rule
import org.junit.Test

class PersonCardTest {

@get:Rule
val composeTestRule = createAndroidComposeRule<ComponentActivity>()

@Test
fun personCardTest() {
with(composeTestRule) {
setContent {
PersonCard(
person = CreditSample(
"role", "name", null,
Gender.MALE, 1
),
navController = rememberNavController()
)
}
onNodeWithContentDescription(
activity.getString(
R.string.person_content_description,
"name",
"role"
)
).assertIsDisplayed()
onNodeWithText("role").assertIsDisplayed()
onNodeWithText("name").assertIsDisplayed()

}
}
}

private class CreditSample(
override val role: String,
override val name: String,
override val profileUrl: String?,
override val gender: Gender,
override val id: Int
) : Credit {
override fun describeContents(): Int = 0

override fun writeToParcel(p0: Parcel, p1: Int) {
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.sample.tmdb.common.ui.component

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 org.junit.Rule
import org.junit.Test

class TMDbCardTest {

@get:Rule
val composeTestRule = createComposeRule()

@Test
fun tmdbCardTest() {
with(composeTestRule) {
setContent {
TMDbCard(tmdbItem = TMDbItemSample(1, "overview",
"releaseDate", null, null, "name",
1.1, 1), {})
}
onNodeWithText("name").assertIsDisplayed()
onNodeWithContentDescription("name").assertIsDisplayed()
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package com.sample.tmdb.common.ui.component

import android.os.Parcel
import androidx.compose.foundation.layout.Box
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.DateRange
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 com.sample.tmdb.common.model.TMDbItem
import org.junit.Rule
import org.junit.Test

class TMDbItemContentTest {

@get:Rule
val composeTestRule = createComposeRule()

@Test
fun tmdbItemContentTest() {
with(composeTestRule) {
setContent {
TMDbItemContent(tmdbItem = TMDbItemSample(1, "overview",
"releaseDate", null, null, "name",
1.1, 1)) {
}
}
onNodeWithText("name").assertIsDisplayed()
onNodeWithText("releaseDate").assertIsDisplayed()
onNodeWithText("1.1").assertIsDisplayed()
onNodeWithText("1").assertIsDisplayed()
onNodeWithContentDescription("name").assertIsDisplayed()
}
}

@Test
fun tmdbItemRate() {
with(composeTestRule) {
setContent {
TMDbItemRate(1.1)
}
onNodeWithText("1.1").assertIsDisplayed()
}
}

@Test
fun tmdbItemPosterTest() {
with(composeTestRule) {
setContent {
Box {
TMDbItemPoster(null, "name")
}
}
onNodeWithContentDescription("name").assertIsDisplayed()
}
}

@Test
fun tmdbItemInfo() {
with(composeTestRule) {
setContent {
TMDbItemInfo(tmdbItem = TMDbItemSample(1, "overview",
"releaseDate", null, null, "name",
1.1, 1))
}
onNodeWithText("name").assertIsDisplayed()
onNodeWithText("releaseDate").assertIsDisplayed()
onNodeWithText("1").assertIsDisplayed()
}
}

@Test
fun tmdbItemName() {
with(composeTestRule) {
setContent {
TMDbItemName("name")
}
onNodeWithText("name").assertIsDisplayed()
}
}

@Test
fun tmdbItemFeature() {
with(composeTestRule) {
setContent {
TMDbItemFeature(icon = Icons.Default.DateRange, field = "releaseDate")
}
onNodeWithText("releaseDate").assertIsDisplayed()
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.sample.tmdb.common.ui.component

import android.os.Parcel
import com.sample.tmdb.common.model.TMDbItem

internal class TMDbItemSample(
override val id: Int,
override val overview: String,
override val releaseDate: String?,
override val posterUrl: String?,
override val backdropUrl: String?,
override val name: String,
override val voteAverage: Double,
override val voteCount: Int
) : TMDbItem {
override fun describeContents(): Int = 0

override fun writeToParcel(p0: Parcel, p1: Int) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import com.sample.tmdb.common.R
import com.sample.tmdb.common.ui.Dimens.TMDb_0_dp
import com.sample.tmdb.common.ui.theme.AlphaNearOpaque
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ fun TMDbCard(
Column {
AsyncImage(
model = imageUrl,
contentDescription = null,
contentDescription = tmdbItem.name,
modifier = Modifier
.size(width = itemWidth, height = 180.dp),
contentScale = ContentScale.Crop
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ fun <T : TMDbItem> TMDbItemContent(
}

@Composable
private fun TMDbItemRate(rate: Double, modifier: Modifier) {
fun TMDbItemRate(rate: Double, modifier: Modifier = Modifier) {
val shape = RoundedCornerShape(percent = 50)
Surface(
shape = shape,
Expand All @@ -105,7 +105,7 @@ private fun TMDbItemRate(rate: Double, modifier: Modifier) {
}

@Composable
private fun BoxScope.TMDbItemPoster(posterUrl: String?, tmdbItemName: String) {
fun BoxScope.TMDbItemPoster(posterUrl: String?, tmdbItemName: String) {
val painter = rememberAsyncImagePainter(
model = posterUrl,
error = rememberVectorPainter(Icons.Filled.BrokenImage),
Expand All @@ -132,7 +132,7 @@ private fun BoxScope.TMDbItemPoster(posterUrl: String?, tmdbItemName: String) {
}

@Composable
private fun <T : TMDbItem> TMDbItemInfo(tmdbItem: T, modifier: Modifier) {
fun <T : TMDbItem> TMDbItemInfo(tmdbItem: T, modifier: Modifier = Modifier) {
Column(
verticalArrangement = Arrangement.spacedBy(TMDb_4_dp),
modifier = modifier.padding(
Expand All @@ -152,7 +152,7 @@ private fun <T : TMDbItem> TMDbItemInfo(tmdbItem: T, modifier: Modifier) {
}

@Composable
private fun TMDbItemName(name: String) = Text(
fun TMDbItemName(name: String) = Text(
text = name,
style = MaterialTheme.typography.subtitle1.copy(
color = Color.White,
Expand All @@ -165,7 +165,7 @@ private fun TMDbItemName(name: String) = Text(
)

@Composable
private fun TMDbItemFeature(icon: ImageVector, field: String) {
fun TMDbItemFeature(icon: ImageVector, field: String) {
Row(verticalAlignment = Alignment.CenterVertically) {
Icon(
imageVector = icon,
Expand Down

0 comments on commit 180ce5b

Please sign in to comment.