Skip to content

Commit 9b0728c

Browse files
committed
test: Check the launch of CropImageScreen
1 parent 899c7d7 commit 9b0728c

File tree

3 files changed

+106
-1
lines changed

3 files changed

+106
-1
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package io.github.droidkaigi.confsched.testing.robot
2+
3+
import androidx.compose.ui.test.assertIsDisplayed
4+
import androidx.compose.ui.test.hasTestTag
5+
import io.github.droidkaigi.confsched.designsystem.theme.KaigiTheme
6+
import io.github.droidkaigi.confsched.profilecard.CropImageScreen
7+
import io.github.droidkaigi.confsched.profilecard.CropImageScreenTestTag
8+
import javax.inject.Inject
9+
10+
class CropImageScreenRobot @Inject constructor(
11+
screenRobot: DefaultScreenRobot,
12+
) : ScreenRobot by screenRobot {
13+
14+
fun setupScreenContent() {
15+
robotTestRule.setContent {
16+
KaigiTheme {
17+
CropImageScreen(
18+
onNavigationIconClick = {},
19+
onBackWithConfirm = {},
20+
)
21+
}
22+
}
23+
waitUntilIdle()
24+
}
25+
26+
fun checkScreenDisplayed() {
27+
composeTestRule
28+
.onNode(hasTestTag(CropImageScreenTestTag))
29+
.assertIsDisplayed()
30+
}
31+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package io.github.droidkaigi.confsched.profilecard
2+
3+
import dagger.hilt.android.testing.BindValue
4+
import dagger.hilt.android.testing.HiltAndroidTest
5+
import io.github.droidkaigi.confsched.testing.DescribedBehavior
6+
import io.github.droidkaigi.confsched.testing.describeBehaviors
7+
import io.github.droidkaigi.confsched.testing.execute
8+
import io.github.droidkaigi.confsched.testing.robot.CropImageScreenRobot
9+
import io.github.droidkaigi.confsched.testing.robot.runRobot
10+
import io.github.droidkaigi.confsched.testing.rules.RobotTestRule
11+
import org.junit.Rule
12+
import org.junit.Test
13+
import org.junit.runner.RunWith
14+
import org.robolectric.ParameterizedRobolectricTestRunner
15+
import javax.inject.Inject
16+
17+
@RunWith(ParameterizedRobolectricTestRunner::class)
18+
@HiltAndroidTest
19+
class CropImageScreenTest(
20+
private val testCase: DescribedBehavior<CropImageScreenRobot>,
21+
) {
22+
23+
@get:Rule
24+
@BindValue
25+
val robotTestRule: RobotTestRule = RobotTestRule(testInstance = this)
26+
27+
@Inject
28+
lateinit var cropImageScreenRobot: CropImageScreenRobot
29+
30+
@Test
31+
fun runTest() {
32+
runRobot(cropImageScreenRobot) {
33+
testCase.execute(cropImageScreenRobot)
34+
}
35+
}
36+
37+
companion object {
38+
@JvmStatic
39+
@ParameterizedRobolectricTestRunner.Parameters(name = "{0}")
40+
fun behaviors(): List<DescribedBehavior<CropImageScreenRobot>> {
41+
return describeBehaviors(name = "CropImageScreen") {
42+
describe("when launch") {
43+
doIt {
44+
setupScreenContent()
45+
}
46+
itShould("show screen") {
47+
captureScreenWithChecks {
48+
checkScreenDisplayed()
49+
}
50+
}
51+
}
52+
}
53+
}
54+
}
55+
}

feature/profilecard/src/commonMain/kotlin/io/github/droidkaigi/confsched/profilecard/CropImageScreen.kt

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import androidx.compose.ui.geometry.Size
3434
import androidx.compose.ui.geometry.toRect
3535
import androidx.compose.ui.layout.ContentScale
3636
import androidx.compose.ui.platform.LocalDensity
37+
import androidx.compose.ui.platform.testTag
3738
import androidx.compose.ui.unit.IntRect
3839
import androidx.compose.ui.unit.dp
3940
import androidx.compose.ui.unit.roundToIntRect
@@ -50,6 +51,8 @@ import kotlin.math.max
5051

5152
const val cropImageScreenRoute = "cropImage"
5253

54+
const val CropImageScreenTestTag = "CropImageScreenTestTag"
55+
5356
fun NavGraphBuilder.cropImageScreens(
5457
onNavigationIconClick: () -> Unit,
5558
onBackWithConfirm: () -> Unit,
@@ -78,6 +81,20 @@ internal sealed interface CropImageScreenState {
7881
) : CropImageScreenState
7982
}
8083

84+
@Composable
85+
fun CropImageScreen(
86+
onNavigationIconClick: () -> Unit,
87+
onBackWithConfirm: () -> Unit,
88+
modifier: Modifier = Modifier,
89+
) {
90+
CropImageScreen(
91+
onNavigationIconClick = onNavigationIconClick,
92+
onBackWithConfirm = onBackWithConfirm,
93+
modifier = modifier,
94+
eventFlow = rememberEventFlow(),
95+
)
96+
}
97+
8198
@OptIn(ExperimentalMaterial3Api::class)
8299
@Composable
83100
internal fun CropImageScreen(
@@ -94,7 +111,9 @@ internal fun CropImageScreen(
94111
}
95112

96113
Scaffold(
97-
modifier = modifier.fillMaxSize(),
114+
modifier = modifier
115+
.testTag(CropImageScreenTestTag)
116+
.fillMaxSize(),
98117
topBar = {
99118
TopAppBar(
100119
title = {

0 commit comments

Comments
 (0)