@@ -26,6 +26,7 @@ import com.mapbox.navigation.instrumentation_tests.utils.coroutines.roadObjectsO
2626import com.mapbox.navigation.instrumentation_tests.utils.coroutines.routeProgressUpdates
2727import com.mapbox.navigation.instrumentation_tests.utils.coroutines.routesUpdates
2828import com.mapbox.navigation.instrumentation_tests.utils.coroutines.sdkTest
29+ import com.mapbox.navigation.instrumentation_tests.utils.coroutines.setNavigationRoutesAndWaitForAlternativesUpdate
2930import com.mapbox.navigation.instrumentation_tests.utils.coroutines.setNavigationRoutesAndWaitForUpdate
3031import com.mapbox.navigation.instrumentation_tests.utils.http.FailByRequestMockRequestHandler
3132import com.mapbox.navigation.instrumentation_tests.utils.http.MockDirectionsRefreshHandler
@@ -34,6 +35,8 @@ import com.mapbox.navigation.instrumentation_tests.utils.http.MockRoutingTileEnd
3435import com.mapbox.navigation.instrumentation_tests.utils.idling.IdlingPolicyTimeoutRule
3536import com.mapbox.navigation.instrumentation_tests.utils.location.MockLocationReplayerRule
3637import com.mapbox.navigation.instrumentation_tests.utils.readRawFileText
38+ import com.mapbox.navigation.instrumentation_tests.utils.routes.RoutesProvider
39+ import com.mapbox.navigation.instrumentation_tests.utils.routes.RoutesProvider.toNavigationRoutes
3740import com.mapbox.navigation.testing.ui.BaseTest
3841import com.mapbox.navigation.testing.ui.utils.getMapboxAccessTokenFromResources
3942import com.mapbox.navigation.testing.ui.utils.runOnMainSync
@@ -424,7 +427,7 @@ class RouteRefreshTest : BaseTest<EmptyTestActivity>(EmptyTestActivity::class.ja
424427 R .raw.route_response_route_refresh,
425428 R .raw.route_response_route_refresh_truncated_first_leg,
426429 " route_response_route_refresh" ,
427- acceptedGeometryIndex = 5
430+ acceptedGeometryIndex = 3
428431 )
429432 val routeOptions = generateRouteOptions(twoCoordinates)
430433 val requestedRoutes = mapboxNavigation.requestRoutes(routeOptions)
@@ -433,10 +436,10 @@ class RouteRefreshTest : BaseTest<EmptyTestActivity>(EmptyTestActivity::class.ja
433436
434437 mapboxNavigation.setNavigationRoutes(requestedRoutes)
435438 mapboxNavigation.startTripSession()
436- // corresponds to currentRouteGeometryIndex = 5
437- stayOnPosition(38.57622 , - 121.496731 )
439+ // corresponds to currentRouteGeometryIndex = 3
440+ stayOnPosition(38.577344 , - 121.496248 )
438441 mapboxNavigation.routeProgressUpdates()
439- .filter { it.currentRouteGeometryIndex == 5 }
442+ .filter { it.currentRouteGeometryIndex == 3 }
440443 .first()
441444 val refreshedRoutes = mapboxNavigation.routesUpdates()
442445 .filter {
@@ -446,12 +449,67 @@ class RouteRefreshTest : BaseTest<EmptyTestActivity>(EmptyTestActivity::class.ja
446449 .navigationRoutes
447450
448451 assertEquals(224.224 , requestedRoutes[0 ].getSumOfDurationAnnotationsFromLeg(0 ), 0.0001 )
449- assertEquals(169.582 , refreshedRoutes[0 ].getSumOfDurationAnnotationsFromLeg(0 ), 0.0001 )
452+ assertEquals(172.175 , refreshedRoutes[0 ].getSumOfDurationAnnotationsFromLeg(0 ), 0.0001 )
450453
451454 assertEquals(227.918 , requestedRoutes[1 ].getSumOfDurationAnnotationsFromLeg(0 ), 0.0001 )
452- assertEquals(234.024 , refreshedRoutes[1 ].getSumOfDurationAnnotationsFromLeg(0 ), 0.0001 )
455+ assertEquals(235.641 , refreshedRoutes[1 ].getSumOfDurationAnnotationsFromLeg(0 ), 0.0001 )
453456 }
454457
458+ @Test
459+ fun expect_route_refresh_to_update_annotations_for_new_alternative () = sdkTest {
460+ setupMockRequestHandlers(
461+ twoCoordinates,
462+ R .raw.route_response_single_route_multileg,
463+ R .raw.route_response_single_route_multileg_refreshed,
464+ " route_response_single_route_multileg" ,
465+ acceptedGeometryIndex = 70
466+ )
467+ val routeOptions = generateRouteOptions(twoCoordinates)
468+ val requestedRoutes = mapboxNavigation.requestRoutes(routeOptions)
469+ .getSuccessfulResultOrThrowException()
470+ .routes
471+ val alternativeRoute =
472+ RoutesProvider .alternative_for_multileg(activity).toNavigationRoutes().first()
473+
474+ mapboxNavigation.setNavigationRoutes(requestedRoutes, initialLegIndex = 1 )
475+ mapboxNavigation.startTripSession()
476+
477+ // corresponds to currentRouteGeometryIndex = 70 for primary route and 11 for alternative route
478+ stayOnPosition(38.581798 , - 121.476146 )
479+ mapboxNavigation.routeProgressUpdates()
480+ .filter {
481+ it.currentRouteGeometryIndex == 70
482+ }
483+ .first()
484+
485+ mockWebServerRule.requestHandlers.add(
486+ FailByRequestMockRequestHandler (
487+ MockDirectionsRefreshHandler (
488+ " route_response_alternative_for_multileg" ,
489+ readRawFileText(
490+ activity,
491+ R .raw.route_response_alternative_for_multileg_refreshed
492+ ),
493+ acceptedGeometryIndex = 11
494+ )
495+ )
496+ )
497+ mapboxNavigation.setNavigationRoutesAndWaitForAlternativesUpdate(requestedRoutes + alternativeRoute, initialLegIndex = 1 )
498+
499+ val refreshedRoutes = mapboxNavigation.routesUpdates()
500+ .filter {
501+ it.reason == ROUTES_UPDATE_REASON_REFRESH
502+ }
503+ .first()
504+ .navigationRoutes
505+
506+ assertEquals(201.673 , requestedRoutes[0 ].getSumOfDurationAnnotationsFromLeg(1 ), 0.0001 )
507+ assertEquals( 202.881 , refreshedRoutes[0 ].getSumOfDurationAnnotationsFromLeg(1 ), 0.0001 )
508+
509+ assertEquals(194.3 , alternativeRoute.getSumOfDurationAnnotationsFromLeg(0 ), 0.0001 )
510+ assertEquals(187.126 , refreshedRoutes[1 ].getSumOfDurationAnnotationsFromLeg(0 ), 0.0001 )
511+ }
512+
455513 @Test
456514 fun expect_route_refresh_to_update_annotations_incidents_and_closures_for_truncated_next_leg () =
457515 sdkTest {
0 commit comments