Skip to content

Commit cecb2ad

Browse files
committed
add tests for eta_model parameter
1 parent a0f2c8c commit cecb2ad

File tree

4 files changed

+163
-1
lines changed

4 files changed

+163
-1
lines changed

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

+50
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import com.mapbox.navigation.base.trip.model.RouteProgressState
2222
import com.mapbox.navigation.core.MapboxNavigation
2323
import com.mapbox.navigation.core.MapboxNavigationProvider
2424
import com.mapbox.navigation.core.directions.session.RoutesExtra
25+
import com.mapbox.navigation.core.internal.extensions.flowLocationMatcherResult
2526
import com.mapbox.navigation.core.reroute.NavigationRerouteController
2627
import com.mapbox.navigation.core.reroute.RerouteController
2728
import com.mapbox.navigation.core.reroute.RerouteState
@@ -35,6 +36,7 @@ import com.mapbox.navigation.instrumentation_tests.utils.http.MockDirectionsRefr
3536
import com.mapbox.navigation.instrumentation_tests.utils.http.MockDirectionsRequestHandler
3637
import com.mapbox.navigation.instrumentation_tests.utils.idling.RouteProgressStateIdlingResource
3738
import com.mapbox.navigation.instrumentation_tests.utils.location.MockLocationReplayerRule
39+
import com.mapbox.navigation.instrumentation_tests.utils.location.stayOnPosition
3840
import com.mapbox.navigation.instrumentation_tests.utils.readRawFileText
3941
import com.mapbox.navigation.instrumentation_tests.utils.routes.MockRoute
4042
import com.mapbox.navigation.instrumentation_tests.utils.routes.RoutesProvider
@@ -67,6 +69,7 @@ import org.junit.Rule
6769
import org.junit.Test
6870
import java.net.URI
6971
import java.util.concurrent.TimeUnit
72+
import kotlin.math.abs
7073

7174
class CoreRerouteTest : BaseTest<EmptyTestActivity>(EmptyTestActivity::class.java) {
7275

@@ -853,6 +856,53 @@ class CoreRerouteTest : BaseTest<EmptyTestActivity>(EmptyTestActivity::class.jav
853856
assertEquals(routes[1], rerouteResult.navigationRoutes.first())
854857
}
855858

859+
@Test
860+
fun reroute_keeps_eta_model_parameter() = sdkTest {
861+
val mapboxNavigation = createMapboxNavigation()
862+
val coordinates = listOf(
863+
Point.fromLngLat(139.828785, 36.503349),
864+
Point.fromLngLat(139.051904, 35.982396)
865+
)
866+
val offRouteLocation = mockLocationUpdatesRule.generateLocationUpdate {
867+
this.latitude = coordinates[0].latitude() + 0.002
868+
this.longitude = coordinates[0].longitude()
869+
}
870+
val handler = MockDirectionsRequestHandler(
871+
DirectionsCriteria.PROFILE_DRIVING_TRAFFIC,
872+
readRawFileText(context, R.raw.route_response_enhanced_model),
873+
coordinates,
874+
relaxedExpectedCoordinates = true
875+
)
876+
mockWebServerRule.requestHandlers.add(handler)
877+
878+
mapboxNavigation.startTripSession()
879+
stayOnPosition(coordinates[0].latitude(), coordinates[0].longitude(), 0f) {
880+
mapboxNavigation.flowLocationMatcherResult().filter {
881+
abs(it.enhancedLocation.latitude - coordinates[0].latitude()) < 0.001 &&
882+
abs(it.enhancedLocation.longitude - coordinates[0].longitude()) < 0.001
883+
}.first()
884+
val routes = mapboxNavigation.requestRoutes(
885+
RouteOptions.builder()
886+
.applyDefaultNavigationOptions()
887+
.applyLanguageAndVoiceUnitOptions(activity)
888+
.baseUrl(mockWebServerRule.baseUrl)
889+
.coordinatesList(coordinates)
890+
.unrecognizedProperties(mapOf("eta_model" to "enhanced"))
891+
.build()
892+
).getSuccessfulResultOrThrowException().routes
893+
894+
mapboxNavigation.setNavigationRoutesAndWaitForUpdate(routes)
895+
}
896+
stayOnPosition(offRouteLocation.latitude, offRouteLocation.longitude, 0f) {
897+
mapboxNavigation.routesUpdates()
898+
.filter { it.reason == RoutesExtra.ROUTES_UPDATE_REASON_REROUTE }
899+
.first()
900+
901+
val rerouteRequest = handler.handledRequests.last()
902+
assertEquals("enhanced", rerouteRequest.requestUrl?.queryParameter("eta_model"))
903+
}
904+
}
905+
856906
private fun createMapboxNavigation(customRefreshInterval: Long? = null): MapboxNavigation {
857907
var mapboxNavigation: MapboxNavigation? = null
858908

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package com.mapbox.navigation.instrumentation_tests.core
2+
3+
import android.location.Location
4+
import com.mapbox.navigation.base.route.RouterOrigin
5+
import com.mapbox.navigation.instrumentation_tests.utils.location.stayOnPosition
6+
import com.mapbox.navigation.instrumentation_tests.utils.routes.EvRoutesProvider
7+
import com.mapbox.navigation.instrumentation_tests.utils.routes.MockedEvRoutes
8+
import com.mapbox.navigation.instrumentation_tests.utils.tiles.OfflineRegions
9+
import com.mapbox.navigation.instrumentation_tests.utils.tiles.withMapboxNavigationAndOfflineTilesForRegion
10+
import com.mapbox.navigation.instrumentation_tests.utils.withMapboxNavigation
11+
import com.mapbox.navigation.instrumentation_tests.utils.withoutInternet
12+
import com.mapbox.navigation.testing.ui.BaseCoreNoCleanUpTest
13+
import com.mapbox.navigation.testing.ui.utils.coroutines.RouteRequestResult
14+
import com.mapbox.navigation.testing.ui.utils.coroutines.getSuccessfulResultOrThrowException
15+
import com.mapbox.navigation.testing.ui.utils.coroutines.requestRoutes
16+
import com.mapbox.navigation.testing.ui.utils.coroutines.sdkTest
17+
import com.mapbox.navigation.testing.ui.utils.coroutines.setNavigationRoutesAndWaitForUpdate
18+
import com.mapbox.navigation.testing.ui.utils.coroutines.setNavigationRoutesAsync
19+
import org.junit.Assert
20+
import org.junit.Assert.assertEquals
21+
import org.junit.Test
22+
23+
class RequestRoutesTest : BaseCoreNoCleanUpTest() {
24+
25+
override fun setupMockLocation(): Location {
26+
return mockLocationUpdatesRule.generateLocationUpdate {
27+
longitude = 13.361378213031003
28+
latitude = 52.49813341962201
29+
}
30+
}
31+
32+
@Test
33+
fun buildOfflineRouteWithUnknownParameters() = sdkTest(
34+
timeout = INCREASED_TIMEOUT_BECAUSE_OF_REAL_ROUTING_TILES_USAGE
35+
) {
36+
val testRoute = setupBerlinEvRoute()
37+
withMapboxNavigationAndOfflineTilesForRegion(
38+
OfflineRegions.Berlin,
39+
) { navigation ->
40+
navigation.startTripSession()
41+
stayOnPosition(
42+
testRoute.origin.latitude(),
43+
testRoute.origin.longitude(),
44+
0.0f,
45+
) {
46+
withoutInternet {
47+
val requestResult = navigation.requestRoutes(
48+
testRoute.routeOptions.toBuilder()
49+
.unrecognizedProperties(
50+
mapOf(
51+
"unknown_key1" to "unknown_value1",
52+
"unknown_key2" to "333",
53+
)
54+
)
55+
.build()
56+
).getSuccessfulResultOrThrowException()
57+
assertEquals(RouterOrigin.Onboard, requestResult.routerOrigin)
58+
navigation.setNavigationRoutesAndWaitForUpdate(requestResult.routes)
59+
}
60+
}
61+
}
62+
}
63+
64+
private fun setupBerlinEvRoute(): MockedEvRoutes {
65+
val originalTestRoute = EvRoutesProvider.getBerlinEvRoute(
66+
context,
67+
mockWebServerRule.baseUrl
68+
)
69+
mockWebServerRule.requestHandlers.add(originalTestRoute.mockWebServerHandler)
70+
return originalTestRoute
71+
}
72+
}

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

+40-1
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,43 @@ class RouteAlternativesTest : BaseCoreNoCleanUpTest() {
295295
}
296296
}
297297

298+
@Test
299+
fun alternative_request_keeps_eta_model_parameter() = sdkTest {
300+
setupMockRequestHandlers()
301+
withMapboxNavigation(
302+
historyRecorderRule = mapboxHistoryTestRule
303+
) { mapboxNavigation ->
304+
val routes = mapboxNavigation.requestNavigationRoutes(
305+
startCoordinates,
306+
unrecognized = mapOf("eta_model" to "enhanced")
307+
)
308+
mockWebServerRule.requestHandlers.clear()
309+
val alternativesHandler = MockDirectionsRequestHandler(
310+
"driving-traffic",
311+
readRawFileText(context, R.raw.route_response_alternative_during_navigation),
312+
startCoordinates,
313+
relaxedExpectedCoordinates = true
314+
)
315+
mockWebServerRule.requestHandlers.add(alternativesHandler)
316+
mapboxNavigation.startTripSession()
317+
mapboxNavigation.flowLocationMatcherResult().first()
318+
mapboxNavigation.setNavigationRoutesAsync(routes)
319+
mockLocationReplayerRule.playRoute(routes.first().directionsRoute)
320+
321+
mapboxNavigation.alternativesUpdates()
322+
.filterIsInstance<NavigationRouteAlternativesResult.OnRouteAlternatives>()
323+
.filter {
324+
it.alternatives.isNotEmpty() && it.alternatives.none {
325+
it.id.startsWith("1SSd29ZxmjD7ELLqDJHRPPDP5W4wdh633IbGo41pJrL6wpJRmzNaMA==")
326+
}
327+
}
328+
.first()
329+
330+
val alternativesRequest = alternativesHandler.handledRequests.last()
331+
assertEquals("enhanced", alternativesRequest.requestUrl?.queryParameter("eta_model"))
332+
}
333+
}
334+
298335
private fun createExternalAlternatives(): List<NavigationRoute> {
299336
return NavigationRoute.create(
300337
readRawFileText(context, R.raw.route_response_alternative_continue),
@@ -328,12 +365,14 @@ class RouteAlternativesTest : BaseCoreNoCleanUpTest() {
328365
}
329366

330367
private suspend fun MapboxNavigation.requestNavigationRoutes(
331-
coordinates: List<Point>
368+
coordinates: List<Point>,
369+
unrecognized: Map<String, String>? = null
332370
): List<NavigationRoute> {
333371
val routeOptions = RouteOptions.builder()
334372
.applyDefaultNavigationOptions()
335373
.alternatives(true)
336374
.coordinatesList(coordinates)
375+
.unrecognizedProperties(unrecognized)
337376
.baseUrl(mockWebServerRule.baseUrl) // Comment out to test a real server
338377
.build()
339378
return requestRoutes(routeOptions)

instrumentation-tests/src/main/res/raw/route_response_enhanced_model.json

+1
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)