From 4647853ce79b3c45f88af30ee72035f9915679d4 Mon Sep 17 00:00:00 2001 From: Jeena Date: Mon, 9 Mar 2026 12:23:35 +0000 Subject: [PATCH] test(US-14): add instrumented UI tests for PacerScreen Tests cover: app launch, START/STOP toggle, preset BPM button, and service running/stopped state. Run with: ./gradlew connectedAndroidTest --- .../kotlin/net/jeena/pacer/PacerScreenTest.kt | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 app/src/androidTest/kotlin/net/jeena/pacer/PacerScreenTest.kt diff --git a/app/src/androidTest/kotlin/net/jeena/pacer/PacerScreenTest.kt b/app/src/androidTest/kotlin/net/jeena/pacer/PacerScreenTest.kt new file mode 100644 index 0000000..2f3fcaa --- /dev/null +++ b/app/src/androidTest/kotlin/net/jeena/pacer/PacerScreenTest.kt @@ -0,0 +1,68 @@ +package net.jeena.pacer + +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import androidx.test.ext.junit.runners.AndroidJUnit4 +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith + +/** + * Instrumented UI tests for PacerScreen (US-14). + * Run with: ./gradlew connectedAndroidTest + */ +@RunWith(AndroidJUnit4::class) +class PacerScreenTest { + + @get:Rule + val composeRule = createAndroidComposeRule() + + @Test + fun appLaunches_andShowsStartButton() { + composeRule.onNodeWithText("START").assertIsDisplayed() + } + + @Test + fun appLaunches_andShowsTitle() { + composeRule.onNodeWithText("PACER").assertIsDisplayed() + } + + @Test + fun tappingStart_changesButtonToStop() { + composeRule.onNodeWithText("START").performClick() + composeRule.onNodeWithText("STOP").assertIsDisplayed() + } + + @Test + fun tappingStop_changesButtonBackToStart() { + composeRule.onNodeWithText("START").performClick() + composeRule.onNodeWithText("STOP").performClick() + composeRule.onNodeWithText("START").assertIsDisplayed() + } + + @Test + fun presetButton_updatesBpmDisplay() { + // Tap the "100 / SLOW" preset + composeRule.onNodeWithText("100").performClick() + composeRule.onNodeWithText("100").assertIsDisplayed() + } + + @Test + fun serviceRunning_afterTappingStart() { + composeRule.onNodeWithText("START").performClick() + composeRule.waitForIdle() + assert(PacerService.isRunning) + // Clean up + composeRule.onNodeWithText("STOP").performClick() + } + + @Test + fun serviceStopped_afterTappingStop() { + composeRule.onNodeWithText("START").performClick() + composeRule.onNodeWithText("STOP").performClick() + composeRule.waitForIdle() + assert(!PacerService.isRunning) + } +}