@@ -296,13 +296,13 @@ class ReplayRouteSessionTest {
296296 val primaryRoute = activeRoutes.navigationRoutes.first()
297297
298298 sut.onAttached(mapboxNavigation)
299+ routesObserver.captured.onRoutesChanged(activeRoutes)
299300 progressObserver.captured.onRouteProgressChanged(
300301 mockk {
301302 every { navigationRoute } returns primaryRoute
302303 every { currentRouteGeometryIndex } returns 15
303304 }
304305 )
305- routesObserver.captured.onRoutesChanged(activeRoutes)
306306
307307 val pushedEvents = slot<List <ReplayEventBase >>()
308308 verify { replayer.pushEvents(capture(pushedEvents)) }
@@ -321,19 +321,64 @@ class ReplayRouteSessionTest {
321321 val primaryRoute = activeRoutes.navigationRoutes.first()
322322
323323 sut.onAttached(mapboxNavigation)
324+ routesObserver.captured.onRoutesChanged(activeRoutes)
324325 progressObserver.captured.onRouteProgressChanged(
325326 mockk {
326327 every { navigationRoute } returns primaryRoute
327328 every { currentRouteGeometryIndex } returns 12
328329 }
329330 )
330- routesObserver.captured.onRoutesChanged(activeRoutes)
331331
332332 val pushedEvents = slot<List <ReplayEventBase >>()
333333 verify { replayer.pushEvents(capture(pushedEvents)) }
334334 verifySkipToIndex(pushedEvents.captured, primaryRoute, 12 )
335335 }
336336
337+ @Test
338+ fun `onRouteProgress - will change to new route when the route changes` () {
339+ val progressObserver = slot<RouteProgressObserver >()
340+ val routesObserver = slot<RoutesObserver >()
341+ every {
342+ mapboxNavigation.registerRouteProgressObserver(capture(progressObserver))
343+ } just runs
344+ every { mapboxNavigation.registerRoutesObserver(capture(routesObserver)) } just runs
345+ val firstRoutesUpdatedResult = mockActiveRoutesUpdatedResult()
346+ val firstRoute = firstRoutesUpdatedResult.navigationRoutes.first()
347+ every { firstRoute.id } returns " test-first-route-id"
348+ val firstRouteProgress = mockk<RouteProgress > {
349+ every { navigationRoute } returns firstRoute
350+ every { currentRouteGeometryIndex } returns 12
351+ }
352+ val secondRoutesUpdatedResult = mockActiveRoutesUpdatedResult()
353+ val secondRoute = secondRoutesUpdatedResult.navigationRoutes.first()
354+ every { secondRoute.id } returns " test-second-route-id"
355+ val secondRouteProgress = mockk<RouteProgress > {
356+ every { navigationRoute } returns secondRoute
357+ every { currentRouteGeometryIndex } returns 13
358+ }
359+
360+ sut.onAttached(mapboxNavigation)
361+ routesObserver.captured.onRoutesChanged(firstRoutesUpdatedResult)
362+ progressObserver.captured.onRouteProgressChanged(firstRouteProgress)
363+ progressObserver.captured.onRouteProgressChanged(firstRouteProgress)
364+ progressObserver.captured.onRouteProgressChanged(firstRouteProgress)
365+ routesObserver.captured.onRoutesChanged(secondRoutesUpdatedResult)
366+ progressObserver.captured.onRouteProgressChanged(secondRouteProgress)
367+
368+ verify(exactly = 2 ) {
369+ replayer.clearEvents()
370+ replayer.pushEvents(any())
371+ }
372+ verifyOrder {
373+ replayer.clearEvents()
374+ replayer.play()
375+ replayer.pushEvents(any())
376+ replayer.clearEvents()
377+ replayer.play()
378+ replayer.pushEvents(any())
379+ }
380+ }
381+
337382 private fun verifySkipToIndex (
338383 pushedEvents : List <ReplayEventBase >,
339384 primaryRoute : NavigationRoute ,
0 commit comments