Skip to content

Commit a28b52d

Browse files
authored
DTR-2951: CIS ANSF: Reset journey when entity type is changed on CYA page (Apply to partnership and individual) (#73)
* DTR-2951: reset journey when entity type is changed on CYA page (Apply to partnership and individual) * DTR-2951: apply scalafmtAll * DTR-2951: update address type to InternationalAddress * DTR-2951: add PartnershipMobileNumberPage and PartnershipPhoneNumberPage to removePartnershipSubcontractor * DTR-2951: Fix reset journey in NormalMode (not CheckMode) * DTR-2951: Clean up * DTR-2951: clean up * DTR-2951: Clean up * DTR-2951: update test after merging main * DTR-2951: remove commented out code * DTR-2951: clean up * DTR-2951: apply scalafmtAll
1 parent 59241c1 commit a28b52d

File tree

16 files changed

+396
-43
lines changed

16 files changed

+396
-43
lines changed

app/controllers/add/company/CompanyPhoneNumberController.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class CompanyPhoneNumberController @Inject() (
5151
.get(CompanyNamePage)
5252
.map { companyName =>
5353
val preparedForm = request.userAnswers.get(CompanyPhoneNumberPage) match {
54-
case None => form
54+
case None => form
5555
case Some(value) => form.fill(value)
5656
}
5757

@@ -72,7 +72,7 @@ class CompanyPhoneNumberController @Inject() (
7272
value =>
7373
for {
7474
updatedAnswers <- Future.fromTry(request.userAnswers.set(CompanyPhoneNumberPage, value))
75-
_ <- sessionRepository.set(updatedAnswers)
75+
_ <- sessionRepository.set(updatedAnswers)
7676
} yield Redirect(navigator.nextPage(CompanyPhoneNumberPage, mode, updatedAnswers))
7777
)
7878
}

app/forms/add/company/CompanyPhoneNumberFormProvider.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,5 @@ class CompanyPhoneNumberFormProvider @Inject() extends Mappings {
3434
maxLength(Constants.MaxLength35, "companyPhoneNumber.error.length")
3535
)
3636
)
37-
3837
)
3938
}

app/models/contact/ContactOptions.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ sealed trait ContactOptions
2525

2626
object ContactOptions extends Enumerable.Implicits {
2727

28-
case object Email extends WithName("email") with ContactOptions
29-
case object Phone extends WithName("phone") with ContactOptions
30-
case object Mobile extends WithName("mobile") with ContactOptions
28+
case object Email extends WithName("email") with ContactOptions
29+
case object Phone extends WithName("phone") with ContactOptions
30+
case object Mobile extends WithName("mobile") with ContactOptions
3131
case object NoDetails extends WithName("noDetails") with ContactOptions
3232

3333
private case object Or extends ContactOptions
@@ -47,7 +47,7 @@ object ContactOptions extends Enumerable.Implicits {
4747
value = Some(value.toString),
4848
id = Some(s"value_$index")
4949
)
50-
case (Or, _) =>
50+
case (Or, _) =>
5151
RadioItem(divider = Some(messages(s"$messagePrefix.or")))
5252
}
5353

app/navigation/Navigator.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ class Navigator @Inject() () {
9797
_ => controllers.add.partnership.routes.PartnershipMobileNumberController.onPageLoad(NormalMode)
9898
case PartnershipPhoneNumberPage =>
9999
_ => controllers.add.partnership.routes.PartnershipPhoneNumberController.onPageLoad(NormalMode)
100-
case CompanyPhoneNumberPage =>
100+
case CompanyPhoneNumberPage =>
101101
_ => controllers.add.company.routes.CompanyPhoneNumberController.onPageLoad(NormalMode)
102102
case _ => _ => routes.IndexController.onPageLoad()
103103
}

app/pages/add/CheckYourAnswersSubmittedPage.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@ import pages.QuestionPage
2020
import play.api.libs.json.JsPath
2121

2222
case object CheckYourAnswersSubmittedPage extends QuestionPage[Boolean] {
23-
override def path: JsPath = JsPath \ toString
23+
override def path: JsPath = JsPath \ toString
2424
override def toString: String = "checkYourAnswersSubmitted"
2525
}

app/pages/add/Cleanup.scala

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
/*
2+
* Copyright 2026 HM Revenue & Customs
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package pages.add
18+
19+
import models.UserAnswers
20+
import pages.add.partnership.*
21+
import pages.add.company.*
22+
23+
import scala.util.Try
24+
25+
trait Cleanup {
26+
27+
def removeIndividualSoleTraderSubcontractor(userAnswers: UserAnswers): Try[UserAnswers] =
28+
userAnswers
29+
.remove(AddressOfSubcontractorPage)
30+
.flatMap(_.remove(NationalInsuranceNumberYesNoPage))
31+
.flatMap(_.remove(SubAddressYesNoPage))
32+
.flatMap(_.remove(SubContactDetailsPage))
33+
.flatMap(_.remove(SubcontractorContactDetailsYesNoPage))
34+
.flatMap(_.remove(SubcontractorNamePage))
35+
.flatMap(_.remove(SubcontractorsUniqueTaxpayerReferencePage))
36+
.flatMap(_.remove(SubNationalInsuranceNumberPage))
37+
.flatMap(_.remove(SubTradingNameYesNoPage))
38+
.flatMap(_.remove(TradingNameOfSubcontractorPage))
39+
.flatMap(_.remove(UniqueTaxpayerReferenceYesNoPage))
40+
.flatMap(_.remove(WorksReferenceNumberPage))
41+
.flatMap(_.remove(WorksReferenceNumberYesNoPage))
42+
43+
// TODO Add unit test for removeLimitedCompanySubcontractor when company journey is done
44+
def removeLimitedCompanySubcontractor(userAnswers: UserAnswers): Try[UserAnswers] =
45+
userAnswers
46+
.remove(CompanyAddressPage)
47+
.flatMap(_.remove(CompanyAddressYesNoPage))
48+
.flatMap(_.remove(CompanyContactOptionsPage))
49+
.flatMap(_.remove(CompanyCrnPage))
50+
.flatMap(_.remove(CompanyCrnYesNoPage))
51+
.flatMap(_.remove(CompanyEmailAddressPage))
52+
.flatMap(_.remove(CompanyMobileNumberPage))
53+
.flatMap(_.remove(CompanyNamePage))
54+
.flatMap(_.remove(CompanyPhoneNumberPage))
55+
.flatMap(_.remove(CompanyUtrPage))
56+
.flatMap(_.remove(CompanyUtrYesNoPage))
57+
.flatMap(_.remove(CompanyWorksReferencePage))
58+
.flatMap(_.remove(CompanyWorksReferenceYesNoPage))
59+
60+
def removePartnershipSubcontractor(userAnswers: UserAnswers): Try[UserAnswers] =
61+
userAnswers
62+
.remove(PartnershipAddressPage)
63+
.flatMap(_.remove(PartnershipAddressYesNoPage))
64+
.flatMap(_.remove(PartnershipChooseContactDetailsPage))
65+
.flatMap(_.remove(PartnershipContactDetailsYesNoPage))
66+
.flatMap(_.remove(PartnershipEmailAddressPage))
67+
.flatMap(_.remove(PartnershipHasUtrYesNoPage))
68+
.flatMap(_.remove(PartnershipMobileNumberPage))
69+
.flatMap(_.remove(PartnershipNamePage))
70+
.flatMap(_.remove(PartnershipNominatedPartnerCrnPage))
71+
.flatMap(_.remove(PartnershipNominatedPartnerCrnYesNoPage))
72+
.flatMap(_.remove(PartnershipNominatedPartnerNamePage))
73+
.flatMap(_.remove(PartnershipNominatedPartnerNinoPage))
74+
.flatMap(_.remove(PartnershipNominatedPartnerNinoYesNoPage))
75+
.flatMap(_.remove(PartnershipNominatedPartnerUtrPage))
76+
.flatMap(_.remove(PartnershipNominatedPartnerUtrYesNoPage))
77+
.flatMap(_.remove(PartnershipPhoneNumberPage))
78+
.flatMap(_.remove(PartnershipUniqueTaxpayerReferencePage))
79+
.flatMap(_.remove(PartnershipWorksReferenceNumberPage))
80+
.flatMap(_.remove(PartnershipWorksReferenceNumberYesNoPage))
81+
}

app/pages/add/TypeOfSubcontractorPage.scala

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,38 +18,33 @@ package pages.add
1818

1919
import models.UserAnswers
2020
import models.add.TypeOfSubcontractor
21+
import models.add.TypeOfSubcontractor.*
2122
import pages.QuestionPage
2223
import play.api.libs.json.JsPath
2324

2425
import scala.util.Try
2526

26-
case object TypeOfSubcontractorPage extends QuestionPage[TypeOfSubcontractor] {
27+
case object TypeOfSubcontractorPage extends QuestionPage[TypeOfSubcontractor] with Cleanup {
2728

2829
override def path: JsPath = JsPath \ toString
2930

3031
override def toString: String = "typeOfSubcontractor"
3132

32-
override def cleanup(value: Option[TypeOfSubcontractor], ua: UserAnswers): Try[UserAnswers] = {
33-
val previousValue = ua.get(TypeOfSubcontractorPage)
34-
35-
(previousValue, value) match {
36-
case (Some(oldValue), Some(newValue)) if oldValue != newValue =>
37-
ua.remove(AddressOfSubcontractorPage)
38-
.flatMap(_.remove(NationalInsuranceNumberYesNoPage))
39-
.flatMap(_.remove(SubAddressYesNoPage))
40-
.flatMap(_.remove(SubContactDetailsPage))
41-
.flatMap(_.remove(SubcontractorContactDetailsYesNoPage))
42-
.flatMap(_.remove(SubcontractorNamePage))
43-
.flatMap(_.remove(SubcontractorsUniqueTaxpayerReferencePage))
44-
.flatMap(_.remove(SubNationalInsuranceNumberPage))
45-
.flatMap(_.remove(SubTradingNameYesNoPage))
46-
.flatMap(_.remove(TradingNameOfSubcontractorPage))
47-
.flatMap(_.remove(UniqueTaxpayerReferenceYesNoPage))
48-
.flatMap(_.remove(WorksReferenceNumberPage))
49-
.flatMap(_.remove(WorksReferenceNumberYesNoPage))
50-
// add any new page if added in future
51-
case _ =>
33+
override def cleanup(value: Option[TypeOfSubcontractor], ua: UserAnswers): Try[UserAnswers] =
34+
value match {
35+
case Some(Individualorsoletrader) =>
36+
removePartnershipSubcontractor(ua)
37+
.flatMap(removeLimitedCompanySubcontractor)
38+
39+
case Some(Limitedcompany) =>
40+
removeIndividualSoleTraderSubcontractor(ua)
41+
.flatMap(removePartnershipSubcontractor)
42+
43+
case Some(Partnership) =>
44+
removeIndividualSoleTraderSubcontractor(ua)
45+
.flatMap(removeLimitedCompanySubcontractor)
46+
47+
case _ =>
5248
super.cleanup(value, ua)
5349
}
54-
}
5550
}

app/viewmodels/checkAnswers/add/TypeOfSubcontractorSummary.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
package viewmodels.checkAnswers.add
1818

19-
import models.{CheckMode, UserAnswers}
19+
import models.{NormalMode, UserAnswers}
2020
import pages.add.TypeOfSubcontractorPage
2121
import play.api.i18n.Messages
2222
import play.twirl.api.HtmlFormat
@@ -42,7 +42,7 @@ object TypeOfSubcontractorSummary {
4242
actions = Seq(
4343
ActionItemViewModel(
4444
"site.change",
45-
controllers.add.routes.TypeOfSubcontractorController.onPageLoad(CheckMode).url
45+
controllers.add.routes.TypeOfSubcontractorController.onPageLoad(NormalMode).url
4646
)
4747
.withVisuallyHiddenText(messages("typeOfSubcontractor.change.hidden"))
4848
.withAttribute("id" -> "type-of-subcontractor")

test/controllers/add/TypeOfSubcontractorControllerSpec.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ import scala.concurrent.Future
3535

3636
class TypeOfSubcontractorControllerSpec extends SpecBase with MockitoSugar {
3737

38-
lazy val subcontractorTypesRoute = controllers.add.routes.TypeOfSubcontractorController.onPageLoad(NormalMode).url
38+
private lazy val subcontractorTypesRoute =
39+
controllers.add.routes.TypeOfSubcontractorController.onPageLoad(NormalMode).url
3940

4041
val formProvider = new TypeOfSubcontractorFormProvider()
4142
val form = formProvider()
@@ -225,6 +226,5 @@ class TypeOfSubcontractorControllerSpec extends SpecBase with MockitoSugar {
225226
contentAsString(result) must include(messages(application)("typeOfSubcontractor.error.required"))
226227
}
227228
}
228-
229229
}
230230
}

test/forms/add/company/CompanyPhoneNumberFormProviderSpec.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,4 +118,4 @@ class CompanyPhoneNumberFormProviderSpec extends StringFieldBehaviours {
118118
result.value.value mustBe "123 456"
119119
}
120120
}
121-
}
121+
}

0 commit comments

Comments
 (0)