diff --git a/e2eTest/src/main/java/org/groundplatform/android/e2etest/TestConfig.kt b/e2eTest/src/main/java/org/groundplatform/android/e2etest/TestConfig.kt index 60b31f7554..52d2b97d74 100644 --- a/e2eTest/src/main/java/org/groundplatform/android/e2etest/TestConfig.kt +++ b/e2eTest/src/main/java/org/groundplatform/android/e2etest/TestConfig.kt @@ -33,7 +33,11 @@ object TestConfig { TestTask(taskType = Task.Type.DROP_PIN, isRequired = true), TestTask(Task.Type.INSTRUCTIONS), TestTask(Task.Type.TEXT), - TestTask(taskType = Task.Type.MULTIPLE_CHOICE, selectIndexes = listOf(1)), + TestTask( + taskType = Task.Type.MULTIPLE_CHOICE, + selectIndexes = listOf(1), + isConditional = true, + ), TestTask(taskType = Task.Type.MULTIPLE_CHOICE, selectIndexes = (0..3).toList()), TestTask(Task.Type.NUMBER), TestTask(Task.Type.PHOTO), @@ -45,4 +49,10 @@ object TestConfig { val TEST_LIST_DRAW_AREA = listOf(TestTask(taskType = Task.Type.DRAW_AREA, isRequired = true)) const val LOI_NAME = "Test location" const val TEST_PHOTO_FILE = "e2e_test_photo.webp" + const val CONDITIONAL_TRIGGER_OPTION = "Arabica" + const val EXPECTED_CONDITIONAL_OPTION = "Coffee" + const val NEXT_NAVIGATION_TEST_OPTION = "Next" + const val PREVIOUS_NAVIGATION_TEST_OPTION = "Previous" + const val COVER_CROPPING_TEST_OPTION = "Cover Cropping" + const val PALM_TEST_OPTION = "Palm" } diff --git a/e2eTest/src/main/java/org/groundplatform/android/e2etest/TestTask.kt b/e2eTest/src/main/java/org/groundplatform/android/e2etest/TestTask.kt index ffc3db15d4..a6273f986b 100644 --- a/e2eTest/src/main/java/org/groundplatform/android/e2etest/TestTask.kt +++ b/e2eTest/src/main/java/org/groundplatform/android/e2etest/TestTask.kt @@ -21,4 +21,11 @@ data class TestTask( val taskType: Task.Type, val isRequired: Boolean = false, val selectIndexes: List? = null, + val isConditional: Boolean = false, ) + +sealed class MultipleChoiceType { + data class Regular(val selectIndexes: List) : MultipleChoiceType() + + data object Conditional : MultipleChoiceType() +} diff --git a/e2eTest/src/main/java/org/groundplatform/android/e2etest/drivers/AndroidTestDriver.kt b/e2eTest/src/main/java/org/groundplatform/android/e2etest/drivers/AndroidTestDriver.kt index dc909542f0..1088eb7ed6 100644 --- a/e2eTest/src/main/java/org/groundplatform/android/e2etest/drivers/AndroidTestDriver.kt +++ b/e2eTest/src/main/java/org/groundplatform/android/e2etest/drivers/AndroidTestDriver.kt @@ -24,6 +24,8 @@ import android.provider.MediaStore import android.widget.DatePicker import android.widget.TimePicker import androidx.compose.ui.test.ExperimentalTestApi +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.assertIsNotDisplayed import androidx.compose.ui.test.hasContentDescription import androidx.compose.ui.test.hasTestTag import androidx.compose.ui.test.hasText @@ -168,4 +170,12 @@ class AndroidTestDriver( } override fun getStringResource(id: Int): String = composeRule.activity.getString(id) + + override fun assertVisible(componentText: String, isVisible: Boolean) { + if (isVisible) { + composeRule.onTarget(TestDriver.Target.Text(componentText)).assertIsDisplayed() + } else { + composeRule.onTarget(TestDriver.Target.Text(componentText)).assertIsNotDisplayed() + } + } } diff --git a/e2eTest/src/main/java/org/groundplatform/android/e2etest/drivers/TestDriver.kt b/e2eTest/src/main/java/org/groundplatform/android/e2etest/drivers/TestDriver.kt index e179f3c366..06ff85e171 100644 --- a/e2eTest/src/main/java/org/groundplatform/android/e2etest/drivers/TestDriver.kt +++ b/e2eTest/src/main/java/org/groundplatform/android/e2etest/drivers/TestDriver.kt @@ -36,6 +36,8 @@ interface TestDriver { fun getStringResource(id: Int): String + fun assertVisible(componentText: String, isVisible: Boolean = false) + sealed class Target { data class TestTag(val tag: String) : Target() diff --git a/e2eTest/src/main/java/org/groundplatform/android/e2etest/robots/DataCollectionRobot.kt b/e2eTest/src/main/java/org/groundplatform/android/e2etest/robots/DataCollectionRobot.kt index 3ed98d4672..c5d53f31ab 100644 --- a/e2eTest/src/main/java/org/groundplatform/android/e2etest/robots/DataCollectionRobot.kt +++ b/e2eTest/src/main/java/org/groundplatform/android/e2etest/robots/DataCollectionRobot.kt @@ -16,7 +16,14 @@ package org.groundplatform.android.e2etest.robots import org.groundplatform.android.R +import org.groundplatform.android.e2etest.MultipleChoiceType +import org.groundplatform.android.e2etest.TestConfig.CONDITIONAL_TRIGGER_OPTION +import org.groundplatform.android.e2etest.TestConfig.COVER_CROPPING_TEST_OPTION +import org.groundplatform.android.e2etest.TestConfig.EXPECTED_CONDITIONAL_OPTION import org.groundplatform.android.e2etest.TestConfig.LOI_NAME +import org.groundplatform.android.e2etest.TestConfig.NEXT_NAVIGATION_TEST_OPTION +import org.groundplatform.android.e2etest.TestConfig.PALM_TEST_OPTION +import org.groundplatform.android.e2etest.TestConfig.PREVIOUS_NAVIGATION_TEST_OPTION import org.groundplatform.android.e2etest.TestTask import org.groundplatform.android.e2etest.drivers.TestDriver import org.groundplatform.android.model.task.Task @@ -41,7 +48,13 @@ class DataCollectionRobot(override val testDriver: TestDriver) : Robot textTask() - Task.Type.MULTIPLE_CHOICE -> multipleChoiceTask(task.selectIndexes!!) + Task.Type.MULTIPLE_CHOICE -> { + if (task.isConditional) { + multipleChoiceTask(MultipleChoiceType.Conditional) + } else { + multipleChoiceTask(MultipleChoiceType.Regular(task.selectIndexes!!)) + } + } Task.Type.PHOTO -> cameraTask() Task.Type.NUMBER -> numberTask() Task.Type.DATE -> dateTask() @@ -109,17 +122,26 @@ class DataCollectionRobot(override val testDriver: TestDriver) : Robot) { - if (selectIndexes.size == 1) { - testDriver.selectFromList( - TestDriver.Target.TestTag(SELECT_MULTIPLE_RADIO_TEST_TAG), - selectIndexes[0], - ) - } else { - selectIndexes.forEach { - testDriver.selectFromList(TestDriver.Target.TestTag(SELECT_MULTIPLE_CHECKBOX_TEST_TAG), it) + private fun multipleChoiceTask(multipleChoiceType: MultipleChoiceType) { + when (multipleChoiceType) { + is MultipleChoiceType.Regular -> { + if (multipleChoiceType.selectIndexes.size == 1) { + testDriver.selectFromList( + TestDriver.Target.TestTag(SELECT_MULTIPLE_RADIO_TEST_TAG), + multipleChoiceType.selectIndexes[0], + ) + } else { + multipleChoiceType.selectIndexes.forEach { + testDriver.selectFromList( + TestDriver.Target.TestTag(SELECT_MULTIPLE_CHECKBOX_TEST_TAG), + it, + ) + } + testDriver.insertText("Other", TestDriver.Target.TestTag(OTHER_INPUT_TEXT_TEST_TAG)) + } } - testDriver.insertText("Other", TestDriver.Target.TestTag(OTHER_INPUT_TEXT_TEST_TAG)) + MultipleChoiceType.Conditional -> + conditionalTask(TestDriver.Target.TestTag(SELECT_MULTIPLE_RADIO_TEST_TAG)) } } @@ -138,4 +160,20 @@ class DataCollectionRobot(override val testDriver: TestDriver) : Robot