@@ -12,6 +12,7 @@ import dev.hotwire.core.turbo.errors.LoadError
1212import dev.hotwire.core.turbo.errors.WebError
1313import dev.hotwire.core.turbo.util.toJson
1414import dev.hotwire.core.turbo.visit.Visit
15+ import dev.hotwire.core.turbo.visit.VisitAction
1516import dev.hotwire.core.turbo.visit.VisitDestination
1617import dev.hotwire.core.turbo.visit.VisitOptions
1718import dev.hotwire.core.turbo.webview.HotwireWebView
@@ -290,6 +291,84 @@ class SessionTest : BaseRepositoryTest() {
290291 verify(callback, times(1 )).visitCompleted(false )
291292 }
292293
294+ @Test
295+ fun `restore visit with restoration identifier uses restore visit` () {
296+ val visitIdentifier = " 12345"
297+ val restorationIdentifier = " 67890"
298+ val restoreVisit = visit.copy(
299+ options = VisitOptions (action = VisitAction .RESTORE )
300+ )
301+
302+ session.currentVisit = visit.copy(identifier = visitIdentifier)
303+ session.turboIsReady(true )
304+ session.pageLoaded(restorationIdentifier)
305+ session.visit(restoreVisit)
306+
307+ verify(webView, times(1 )).visitLocation(
308+ location = restoreVisit.location,
309+ options = restoreVisit.options,
310+ restorationIdentifier = " 67890"
311+ )
312+ }
313+
314+ @Test
315+ fun `restore visit with no restoration identifier uses advance visit` () {
316+ val visitIdentifier = " 12345"
317+ val restoreVisit = visit.copy(
318+ options = VisitOptions (action = VisitAction .RESTORE )
319+ )
320+
321+ session.currentVisit = visit.copy(identifier = visitIdentifier)
322+ session.turboIsReady(true )
323+ session.visit(restoreVisit)
324+
325+ verify(webView, times(1 )).visitLocation(
326+ location = restoreVisit.location,
327+ options = restoreVisit.options.copy(action = VisitAction .ADVANCE ),
328+ restorationIdentifier = " "
329+ )
330+ }
331+
332+ @Test
333+ fun `advance visit does not use restoration identifier` () {
334+ val visitIdentifier = " 12345"
335+ val restorationIdentifier = " 67890"
336+ val advanceVisit = visit.copy(
337+ options = VisitOptions (action = VisitAction .ADVANCE )
338+ )
339+
340+ session.currentVisit = visit.copy(identifier = visitIdentifier)
341+ session.turboIsReady(true )
342+ session.pageLoaded(restorationIdentifier)
343+ session.visit(advanceVisit)
344+
345+ verify(webView, times(1 )).visitLocation(
346+ location = advanceVisit.location,
347+ options = advanceVisit.options,
348+ restorationIdentifier = " "
349+ )
350+ }
351+
352+ @Test
353+ fun `replace visit does not use restoration identifier` () {
354+ val visitIdentifier = " 12345"
355+ val restorationIdentifier = " 67890"
356+ val replaceVisit = visit.copy(
357+ options = VisitOptions (action = VisitAction .REPLACE )
358+ )
359+
360+ session.currentVisit = visit.copy(identifier = visitIdentifier)
361+ session.turboIsReady(true )
362+ session.pageLoaded(restorationIdentifier)
363+ session.visit(replaceVisit)
364+
365+ verify(webView, times(1 )).visitLocation(
366+ location = replaceVisit.location,
367+ options = replaceVisit.options,
368+ restorationIdentifier = " "
369+ )
370+ }
371+
293372 @Test
294373 fun `restore current visit fails with session not ready` () {
295374 val visitIdentifier = " 12345"
0 commit comments