Skip to content

Commit 8abb014

Browse files
committed
NAVAND-777: move onDestroy test to JUnit tests
1 parent 356a372 commit 8abb014

11 files changed

Lines changed: 107 additions & 297 deletions

File tree

instrumentation-tests/src/androidTest/java/com/mapbox/navigation/instrumentation_tests/core/RouteRefreshOnDemandTest.kt

Lines changed: 57 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.mapbox.navigation.instrumentation_tests.core
22

33
import android.location.Location
4-
import androidx.annotation.IntegerRes
54
import com.mapbox.api.directions.v5.DirectionsCriteria
65
import com.mapbox.api.directions.v5.models.RouteOptions
76
import com.mapbox.geojson.Point
@@ -25,20 +24,20 @@ import com.mapbox.navigation.instrumentation_tests.utils.coroutines.requestRoute
2524
import com.mapbox.navigation.instrumentation_tests.utils.coroutines.routesUpdates
2625
import com.mapbox.navigation.instrumentation_tests.utils.coroutines.sdkTest
2726
import com.mapbox.navigation.instrumentation_tests.utils.coroutines.setNavigationRoutesAndWaitForUpdate
28-
import com.mapbox.navigation.instrumentation_tests.utils.http.FailByRequestMockRequestHandler
2927
import com.mapbox.navigation.instrumentation_tests.utils.http.MockDirectionsRefreshHandler
3028
import com.mapbox.navigation.instrumentation_tests.utils.http.MockDirectionsRequestHandler
3129
import com.mapbox.navigation.instrumentation_tests.utils.http.MockRoutingTileEndpointErrorRequestHandler
30+
import com.mapbox.navigation.instrumentation_tests.utils.http.NthAttemptHandler
3231
import com.mapbox.navigation.instrumentation_tests.utils.location.MockLocationReplayerRule
3332
import com.mapbox.navigation.instrumentation_tests.utils.readRawFileText
3433
import com.mapbox.navigation.testing.ui.BaseTest
34+
import com.mapbox.navigation.testing.ui.http.MockRequestHandler
3535
import com.mapbox.navigation.testing.ui.utils.getMapboxAccessTokenFromResources
3636
import kotlinx.coroutines.delay
3737
import kotlinx.coroutines.flow.filter
3838
import kotlinx.coroutines.flow.first
3939
import kotlinx.coroutines.flow.take
4040
import kotlinx.coroutines.flow.toList
41-
import org.junit.After
4241
import org.junit.Assert.assertEquals
4342
import org.junit.Before
4443
import org.junit.Rule
@@ -55,48 +54,34 @@ class RouteRefreshOnDemandTest : BaseTest<EmptyTestActivity>(EmptyTestActivity::
5554
@get:Rule
5655
val mockLocationReplayerRule = MockLocationReplayerRule(mockLocationUpdatesRule)
5756

58-
private lateinit var failedRefreshHandlerWrapper: FailByRequestMockRequestHandler
59-
private lateinit var refreshHandler: MockDirectionsRefreshHandler
57+
private lateinit var baseRefreshHandler: MockDirectionsRefreshHandler
6058
private lateinit var mapboxNavigation: MapboxNavigation
6159
private val twoCoordinates = listOf(
6260
Point.fromLngLat(-121.496066, 38.577764),
6361
Point.fromLngLat(-121.480279, 38.57674)
6462
)
6563

66-
override fun setupMockLocation(): Location = mockLocationUpdatesRule.generateLocationUpdate {
67-
latitude = twoCoordinates[0].latitude()
68-
longitude = twoCoordinates[0].longitude()
69-
bearing = 190f
70-
}
71-
7264
@Before
73-
fun setup() {
74-
setupMockRequestHandlers(
75-
twoCoordinates,
76-
R.raw.route_response_route_refresh,
77-
R.raw.route_response_route_refresh_annotations,
78-
"route_response_route_refresh"
65+
fun setUp() {
66+
baseRefreshHandler = MockDirectionsRefreshHandler(
67+
"route_response_single_route_refresh",
68+
readRawFileText(activity, R.raw.route_response_route_refresh_annotations),
7969
)
8070
}
8171

82-
@After
83-
fun tearDown() {
84-
failedRefreshHandlerWrapper.failResponse = false
72+
override fun setupMockLocation(): Location = mockLocationUpdatesRule.generateLocationUpdate {
73+
latitude = twoCoordinates[0].latitude()
74+
longitude = twoCoordinates[0].longitude()
75+
bearing = 190f
8576
}
8677

8778
@Test
8879
fun immediate_route_refresh_before_planned() = sdkTest {
8980
val observer = TestObserver()
9081
val routeRefreshes = mutableListOf<RoutesUpdatedResult>()
91-
val routeRefreshOptions = RouteRefreshOptions.Builder()
92-
.intervalMillis(TimeUnit.SECONDS.toMillis(30))
93-
.build()
94-
RouteRefreshOptions::class.java.getDeclaredField("intervalMillis").apply {
95-
isAccessible = true
96-
set(routeRefreshOptions, 5_000L)
97-
}
98-
refreshHandler.jsonResponseModifier = DynamicResponseModifier()
99-
createMapboxNavigation(routeRefreshOptions)
82+
setupMockRequestHandlers(baseRefreshHandler)
83+
baseRefreshHandler.jsonResponseModifier = DynamicResponseModifier()
84+
createMapboxNavigation(createRouteRefreshOptionsWithInvalidInterval(5000))
10085
val routeOptions = generateRouteOptions(twoCoordinates)
10186
val requestedRoutes = mapboxNavigation.requestRoutes(routeOptions)
10287
.getSuccessfulResultOrThrowException()
@@ -150,6 +135,45 @@ class RouteRefreshOnDemandTest : BaseTest<EmptyTestActivity>(EmptyTestActivity::
150135
)
151136
}
152137

138+
@Test
139+
fun route_refresh_on_demand_between_planned_attempts() = sdkTest {
140+
val observer = TestObserver()
141+
baseRefreshHandler.jsonResponseModifier = DynamicResponseModifier()
142+
setupMockRequestHandlers(
143+
NthAttemptHandler(baseRefreshHandler, 1)
144+
)
145+
146+
createMapboxNavigation(createRouteRefreshOptionsWithInvalidInterval(5_000))
147+
mapboxNavigation.routeRefreshController.registerRouteRefreshStateObserver(observer)
148+
mapboxNavigation.startTripSession()
149+
val routeOptions = generateRouteOptions(twoCoordinates)
150+
val requestedRoutes = mapboxNavigation.requestRoutes(routeOptions)
151+
.getSuccessfulResultOrThrowException()
152+
.routes
153+
mapboxNavigation.setNavigationRoutesAndWaitForUpdate(requestedRoutes)
154+
delay(8000) // refresh interval + accuracy
155+
156+
mapboxNavigation.routeRefreshController.requestImmediateRouteRefresh()
157+
158+
// one from immediate and the next planned
159+
mapboxNavigation.routesUpdates()
160+
.filter { it.reason == RoutesExtra.ROUTES_UPDATE_REASON_REFRESH }
161+
.take(2)
162+
.toList()
163+
164+
assertEquals(
165+
listOf(
166+
RouteRefreshExtra.REFRESH_STATE_STARTED,
167+
RouteRefreshExtra.REFRESH_STATE_CANCELED,
168+
RouteRefreshExtra.REFRESH_STATE_STARTED,
169+
RouteRefreshExtra.REFRESH_STATE_FINISHED_SUCCESS,
170+
RouteRefreshExtra.REFRESH_STATE_STARTED,
171+
RouteRefreshExtra.REFRESH_STATE_FINISHED_SUCCESS,
172+
),
173+
observer.getStatesSnapshot()
174+
)
175+
}
176+
153177
private fun createMapboxNavigation(routeRefreshOptions: RouteRefreshOptions) {
154178
mapboxNavigation = MapboxNavigationProvider.create(
155179
NavigationOptions.Builder(activity)
@@ -186,27 +210,17 @@ class RouteRefreshOnDemandTest : BaseTest<EmptyTestActivity>(EmptyTestActivity::
186210
}
187211

188212
private fun setupMockRequestHandlers(
189-
coordinates: List<Point>,
190-
@IntegerRes routesResponse: Int,
191-
@IntegerRes refreshResponse: Int,
192-
responseTestUuid: String,
193-
acceptedGeometryIndex: Int? = null,
213+
refreshHandler: MockRequestHandler,
194214
) {
195215
mockWebServerRule.requestHandlers.clear()
196216
mockWebServerRule.requestHandlers.add(
197217
MockDirectionsRequestHandler(
198218
"driving-traffic",
199-
readRawFileText(activity, routesResponse),
200-
coordinates
219+
readRawFileText(activity, R.raw.route_response_single_route_refresh),
220+
twoCoordinates
201221
)
202222
)
203-
refreshHandler = MockDirectionsRefreshHandler(
204-
responseTestUuid,
205-
readRawFileText(activity, refreshResponse),
206-
acceptedGeometryIndex
207-
)
208-
failedRefreshHandlerWrapper = FailByRequestMockRequestHandler(refreshHandler)
209-
mockWebServerRule.requestHandlers.add(failedRefreshHandlerWrapper)
223+
mockWebServerRule.requestHandlers.add(refreshHandler)
210224
mockWebServerRule.requestHandlers.add(MockRoutingTileEndpointErrorRequestHandler())
211225
}
212226

instrumentation-tests/src/androidTest/java/com/mapbox/navigation/instrumentation_tests/core/RouteRefreshStateTest.kt

Lines changed: 0 additions & 222 deletions
This file was deleted.

0 commit comments

Comments
 (0)