Skip to content

Commit

Permalink
Add UI test for light meter and fix user guide test
Browse files Browse the repository at this point in the history
  • Loading branch information
kylecorry31 committed Oct 28, 2024
1 parent 65c6c70 commit 5eb2bef
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,16 @@ import com.kylecorry.trail_sense.R
import com.kylecorry.trail_sense.test_utils.TestUtils
import com.kylecorry.trail_sense.test_utils.TestUtils.back
import com.kylecorry.trail_sense.test_utils.TestUtils.context
import com.kylecorry.trail_sense.test_utils.TestUtils.not
import com.kylecorry.trail_sense.test_utils.TestUtils.openQuickActions
import com.kylecorry.trail_sense.test_utils.TestUtils.waitFor
import com.kylecorry.trail_sense.test_utils.views.Side
import com.kylecorry.trail_sense.test_utils.views.click
import com.kylecorry.trail_sense.test_utils.views.hasText
import com.kylecorry.trail_sense.test_utils.views.input
import com.kylecorry.trail_sense.test_utils.views.quickAction
import com.kylecorry.trail_sense.test_utils.views.scroll
import com.kylecorry.trail_sense.test_utils.views.toolbarButton
import com.kylecorry.trail_sense.test_utils.views.view
import com.kylecorry.trail_sense.test_utils.views.viewWithText
import com.kylecorry.trail_sense.tools.guide.infrastructure.Guides
Expand Down Expand Up @@ -49,8 +54,10 @@ class ToolUserGuideTest {
// Verify it shows each guide
val guides = Guides.guides(context)
.flatMap { it.guides }
// TODO: Open each guide, maybe by navigating directly to them
.take(2)


var lastScrollCount = 0
guides.forEachIndexed { index, guide ->

// Skip the weather guide (no good way to differentiate it from the section in this test)
Expand All @@ -63,19 +70,8 @@ class ToolUserGuideTest {
viewWithText(guides.first().name)
}

// Scroll to the last position
if (lastScrollCount > 0) {
view(R.id.guide_fragment).scroll(percent = lastScrollCount.toFloat())
}

waitFor {
try {
viewWithText(guide.name).click()
} catch (e: Error) {
view(R.id.guide_fragment).scroll(percent = 1f)
lastScrollCount++
throw e
}
viewWithText(guide.name).click()
}

// Wait for the guide to load
Expand All @@ -88,9 +84,24 @@ class ToolUserGuideTest {
}

// Search
view(R.id.search_view_edit_text).input("Settings")
view(R.id.search_view_edit_text).input("Sett")
waitFor {
viewWithText("Settings")
}

verifyQuickAction()
}

fun verifyQuickAction() {
openQuickActions()

quickAction(Tools.QUICK_ACTION_USER_GUIDE)
.click()

// Verify it shows the user guide
waitFor {
view(R.id.guide_name).hasText("Tools")
view(R.id.guide_scroll).hasText { it.isNotEmpty() }
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package com.kylecorry.trail_sense.tools.light

import androidx.arch.core.executor.testing.InstantTaskExecutorRule
import com.kylecorry.trail_sense.test_utils.TestUtils
import com.kylecorry.trail_sense.test_utils.TestUtils.waitFor
import com.kylecorry.trail_sense.test_utils.views.view
import com.kylecorry.trail_sense.tools.tools.infrastructure.Tools
import dagger.hilt.android.testing.HiltAndroidRule
import dagger.hilt.android.testing.HiltAndroidTest
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import com.kylecorry.trail_sense.R
import com.kylecorry.trail_sense.test_utils.TestUtils.not
import com.kylecorry.trail_sense.test_utils.views.click
import com.kylecorry.trail_sense.test_utils.views.hasText
import com.kylecorry.trail_sense.test_utils.views.input

@HiltAndroidTest
class ToolLightMeterTest {

@get:Rule
var hiltRule = HiltAndroidRule(this)

@get:Rule
val grantPermissionRule = TestUtils.mainPermissionsGranted()

@get:Rule
val instantExec = InstantTaskExecutorRule()

@Before
fun setUp() {
hiltRule.inject()
TestUtils.setupApplication()
TestUtils.setWaitForIdleTimeout(100)
TestUtils.startWithTool(Tools.LIGHT_METER)
}

@Test
fun verifyBasicFunctionality() {
waitFor {
view(R.id.light_title).hasText(Regex("\\d+ lx"))
}

// Enter the distance
view(R.id.amount).input("10")

// The candella and beam distance should be shown
waitFor {
view(R.id.light_title).hasText(Regex("\\d+ cd"))
view(R.id.beam_distance_text).hasText(Regex("\\d+ ft beam distance"))
}

// Reset
view(R.id.reset_btn).click()
waitFor {
view(R.id.light_title).hasText(Regex("\\d+ cd"))
view(R.id.beam_distance_text).hasText(Regex("\\d+ ft beam distance"))
}
}
}

0 comments on commit 5eb2bef

Please sign in to comment.