From 3254ca5884c85c64f6bae2e755c36b4987e8630b Mon Sep 17 00:00:00 2001 From: jackheslop96 <43777106+jackheslop96@users.noreply.github.com> Date: Mon, 12 Feb 2024 08:49:28 +0000 Subject: [PATCH] Sequential navigation when currentPage is None. --- app/navigation/UserAnswersNavigator.scala | 2 +- .../navigation/UserAnswersNavigatorSpec.scala | 36 ++++++++++++++----- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/app/navigation/UserAnswersNavigator.scala b/app/navigation/UserAnswersNavigator.scala index 3b2789f8a..0c9fe8c7b 100644 --- a/app/navigation/UserAnswersNavigator.scala +++ b/app/navigation/UserAnswersNavigator.scala @@ -80,7 +80,7 @@ object UserAnswersNavigator extends Logging { t.routeIfCompleted(_, mode, _) } case Left(ReaderError(unansweredPage, answeredPages, _)) => - rec(answeredPages.toList, exit = false) { + rec(answeredPages.toList, exit = currentPage.isEmpty) { (userAnswers, _) => unansweredPage.route(userAnswers, mode) } } diff --git a/test/navigation/UserAnswersNavigatorSpec.scala b/test/navigation/UserAnswersNavigatorSpec.scala index 85231df72..b301b221b 100644 --- a/test/navigation/UserAnswersNavigatorSpec.scala +++ b/test/navigation/UserAnswersNavigatorSpec.scala @@ -61,16 +61,20 @@ class UserAnswersNavigatorSpec extends SpecBase { "when in normal mode" - { val mode = NormalMode - "and no pages answered" in { - val currentPage = None - val answeredPages = Nil - val userAnswersReaderResult = Left(ReaderError(FooPage, answeredPages)) + "and currentPage is None" - { + "and userAnswersReaderResult is a Left" - { + "must redirect to first answered page" in { + val currentPage = None + val answeredPages = Seq(FooPage, BarPage) + val userAnswersReaderResult = Left(ReaderError(BazPage, answeredPages)) - val result = UserAnswersNavigator - .nextPage(currentPage, userAnswersReaderResult, mode) - .apply(userAnswers, stage) + val result = UserAnswersNavigator + .nextPage(currentPage, userAnswersReaderResult, mode) + .apply(userAnswers, stage) - result.value.url mustBe "/foo" + result.value.url mustBe "/foo" + } + } } "and on FooPage" - { @@ -133,6 +137,22 @@ class UserAnswersNavigatorSpec extends SpecBase { "when in check mode" - { val mode = CheckMode + "and currentPage is None" - { + "and userAnswersReaderResult is a Left" - { + "must redirect to first answered page" in { + val currentPage = None + val answeredPages = Seq(FooPage, BarPage) + val userAnswersReaderResult = Left(ReaderError(BazPage, answeredPages)) + + val result = UserAnswersNavigator + .nextPage(currentPage, userAnswersReaderResult, mode) + .apply(userAnswers, stage) + + result.value.url mustBe "/foo" + } + } + } + "and on FooPage" - { val currentPage = Some(FooPage)