diff --git a/app/config/CurrencyFormatter.scala b/app/config/CurrencyFormatter.scala index ccd6a7119..917d68b3c 100644 --- a/app/config/CurrencyFormatter.scala +++ b/app/config/CurrencyFormatter.scala @@ -30,7 +30,7 @@ trait CurrencyFormatter { } implicit class StringToCurrency(amt: String) { - def toCurrency: Option[String] = Try(BigDecimal(amt)).toOption.map(currencyFormat) + def toCurrency: String = Try(BigDecimal(amt)).toOption.map(currencyFormat).getOrElse(amt) } implicit class IntToPercentage(amt: Int) { diff --git a/app/controllers/taxCalculation/leaseholdSelfAssessed/LeaseholdSelfAssessedPremiumPayableTaxController.scala b/app/controllers/taxCalculation/leaseholdSelfAssessed/LeaseholdSelfAssessedPremiumPayableTaxController.scala index e646e76a2..7e17f4110 100644 --- a/app/controllers/taxCalculation/leaseholdSelfAssessed/LeaseholdSelfAssessedPremiumPayableTaxController.scala +++ b/app/controllers/taxCalculation/leaseholdSelfAssessed/LeaseholdSelfAssessedPremiumPayableTaxController.scala @@ -51,7 +51,7 @@ class LeaseholdSelfAssessedPremiumPayableTaxController @Inject()( def onPageLoad(mode: Mode): Action[AnyContent] = (identify andThen getData andThen requireData) { implicit request => sdltCalculationService.whenInFlow(LeaseholdSelfAssessed) { - val premiumPayable = request.userAnswers.fullReturn.flatMap(_.lease.flatMap(_.totalPremiumPayable.flatMap(_.toCurrency))) + val premiumPayable = request.userAnswers.fullReturn.flatMap(_.lease.flatMap(_.totalPremiumPayable.map(_.toCurrency))) premiumPayable match { case Some(premiumPayable) => @@ -69,7 +69,7 @@ class LeaseholdSelfAssessedPremiumPayableTaxController @Inject()( def onSubmit(mode: Mode): Action[AnyContent] = (identify andThen getData andThen requireData).async { implicit request => sdltCalculationService.whenInFlowAsync(LeaseholdSelfAssessed) { - val premiumPayable = request.userAnswers.fullReturn.flatMap(_.lease.flatMap(_.totalPremiumPayable.flatMap(_.toCurrency))) + val premiumPayable = request.userAnswers.fullReturn.flatMap(_.lease.flatMap(_.totalPremiumPayable.map(_.toCurrency))) premiumPayable match { case Some(premiumPayable) => diff --git a/app/controllers/taxCalculation/leaseholdSelfAssessed/LeaseholdSelfAssessedTaxDueOnNpvController.scala b/app/controllers/taxCalculation/leaseholdSelfAssessed/LeaseholdSelfAssessedTaxDueOnNpvController.scala index b05010fb4..8b8b17c02 100644 --- a/app/controllers/taxCalculation/leaseholdSelfAssessed/LeaseholdSelfAssessedTaxDueOnNpvController.scala +++ b/app/controllers/taxCalculation/leaseholdSelfAssessed/LeaseholdSelfAssessedTaxDueOnNpvController.scala @@ -53,7 +53,7 @@ class LeaseholdSelfAssessedTaxDueOnNpvController @Inject()( def onPageLoad(mode: Mode): Action[AnyContent] = (identify andThen getData andThen requireData) { implicit request => sdltCalculationService.whenInFlow(LeaseholdSelfAssessed) { - val npv = request.userAnswers.fullReturn.flatMap(_.lease.flatMap(_.netPresentValue.flatMap(_.toCurrency))) + val npv = request.userAnswers.fullReturn.flatMap(_.lease.flatMap(_.netPresentValue.map(_.toCurrency))) npv match { case Some(npv) => @@ -73,7 +73,7 @@ class LeaseholdSelfAssessedTaxDueOnNpvController @Inject()( def onSubmit(mode: Mode): Action[AnyContent] = (identify andThen getData andThen requireData).async { implicit request => sdltCalculationService.whenInFlowAsync(LeaseholdSelfAssessed) { - val npv = request.userAnswers.fullReturn.flatMap(_.lease.flatMap(_.netPresentValue.flatMap(_.toCurrency))) + val npv = request.userAnswers.fullReturn.flatMap(_.lease.flatMap(_.netPresentValue.map(_.toCurrency))) npv match { case Some(npv) => diff --git a/app/viewmodels/checkAnswers/taxCalculation/CalculatedSdltDueSummary.scala b/app/viewmodels/checkAnswers/taxCalculation/CalculatedSdltDueSummary.scala index 93bed5005..4a57cb548 100644 --- a/app/viewmodels/checkAnswers/taxCalculation/CalculatedSdltDueSummary.scala +++ b/app/viewmodels/checkAnswers/taxCalculation/CalculatedSdltDueSummary.scala @@ -16,14 +16,15 @@ package viewmodels.checkAnswers.taxCalculation +import config.CurrencyFormatter import play.api.i18n.Messages -import play.twirl.api.HtmlFormat +import uk.gov.hmrc.govukfrontend.views.viewmodels.content.HtmlContent import viewmodels.checkAnswers.summary.SummaryRowResult import viewmodels.checkAnswers.summary.SummaryRowResult.Row import viewmodels.govuk.summarylist.* import viewmodels.implicits.* -object CalculatedSdltDueSummary { +object CalculatedSdltDueSummary extends CurrencyFormatter { def row(sdltDue: String)(implicit messages: Messages): SummaryRowResult = { val label = messages("taxCalculation.calculatedSdltDue.checkYourAnswersLabel") @@ -31,7 +32,7 @@ object CalculatedSdltDueSummary { Row( SummaryListRowViewModel( key = label, - value = ValueViewModel(HtmlFormat.escape(s"£$sdltDue").toString) + value = ValueViewModel(HtmlContent(sdltDue.toCurrency)) ) ) } diff --git a/test/config/CurrencyFormatterSpec.scala b/test/config/CurrencyFormatterSpec.scala index a42a6adcf..8c8a8c840 100644 --- a/test/config/CurrencyFormatterSpec.scala +++ b/test/config/CurrencyFormatterSpec.scala @@ -60,23 +60,23 @@ class CurrencyFormatterSpec extends AnyFreeSpec with Matchers { } "strips the .00 suffix from a decimal string" in { - "500000.00".toCurrency mustEqual Some("£500,000") + "500000.00".toCurrency mustEqual "£500,000" } "formats a whole-number string" in { - "500000".toCurrency mustEqual Some("£500,000") + "500000".toCurrency mustEqual "£500,000" } "groups thousands with commas" in { - "1234567.00".toCurrency mustEqual Some("£1,234,567") + "1234567.00".toCurrency mustEqual "£1,234,567" } - "returns None for a non-numeric string" in { - "my-name-is-jeff".toCurrency mustEqual None + "returns the original string for a non-numeric string" in { + "my-name-is-jeff".toCurrency mustEqual "my-name-is-jeff" } - "returns None for an empty string" in { - "".toCurrency mustEqual None + "returns the original string for an empty string" in { + "".toCurrency mustEqual "" } } diff --git a/test/controllers/taxCalculation/leaseholdSelfAssessed/LeaseholdSelfAssessedPremiumPayableTaxControllerSpec.scala b/test/controllers/taxCalculation/leaseholdSelfAssessed/LeaseholdSelfAssessedPremiumPayableTaxControllerSpec.scala index c68351fc7..86277814d 100644 --- a/test/controllers/taxCalculation/leaseholdSelfAssessed/LeaseholdSelfAssessedPremiumPayableTaxControllerSpec.scala +++ b/test/controllers/taxCalculation/leaseholdSelfAssessed/LeaseholdSelfAssessedPremiumPayableTaxControllerSpec.scala @@ -45,7 +45,7 @@ class LeaseholdSelfAssessedPremiumPayableTaxControllerSpec extends AnyFreeSpec w private val fullReturnWithLeaseData = emptyFullReturn.copy(lease = Some(completeLease)) val form = new LeaseholdSelfAssessedPremiumPayableTaxFormProvider()() val premiumPayable = "50000.00" - val formattedPremiumPayable = premiumPayable.toCurrency.getOrElse("") + val formattedPremiumPayable = premiumPayable.toCurrency lazy val premiumPayableRoute = controllers.taxCalculation.leaseholdSelfAssessed.routes.LeaseholdSelfAssessedPremiumPayableTaxController.onPageLoad(NormalMode).url diff --git a/test/controllers/taxCalculation/leaseholdSelfAssessed/LeaseholdSelfAssessedTaxDueOnNpvControllerSpec.scala b/test/controllers/taxCalculation/leaseholdSelfAssessed/LeaseholdSelfAssessedTaxDueOnNpvControllerSpec.scala index c0ccc26a2..39c024a56 100644 --- a/test/controllers/taxCalculation/leaseholdSelfAssessed/LeaseholdSelfAssessedTaxDueOnNpvControllerSpec.scala +++ b/test/controllers/taxCalculation/leaseholdSelfAssessed/LeaseholdSelfAssessedTaxDueOnNpvControllerSpec.scala @@ -47,7 +47,7 @@ class LeaseholdSelfAssessedTaxDueOnNpvControllerSpec extends SpecBase with Mocki val form: Form[String] = formProvider() val npv = "95000.00" - val formattedNPV = npv.toCurrency.getOrElse("") + val formattedNPV = npv.toCurrency private val fullReturnWithLeaseData = emptyFullReturn.copy(lease = Some(completeLease)) diff --git a/test/viewmodels/checkAnswers/taxCalculation/CalculatedSdltDueSummarySpec.scala b/test/viewmodels/checkAnswers/taxCalculation/CalculatedSdltDueSummarySpec.scala index 1620593de..f1b697812 100644 --- a/test/viewmodels/checkAnswers/taxCalculation/CalculatedSdltDueSummarySpec.scala +++ b/test/viewmodels/checkAnswers/taxCalculation/CalculatedSdltDueSummarySpec.scala @@ -25,7 +25,7 @@ class CalculatedSdltDueSummarySpec extends SpecBase { "CalculatedSdltDueSummary" - { - val sdltDue = "27,500.00" + val sdltDue = "27500" "when the tax due on NPV is present" - { @@ -46,7 +46,7 @@ class CalculatedSdltDueSummarySpec extends SpecBase { result.key.content.asHtml.toString() mustEqual msgs("taxCalculation.calculatedSdltDue.checkYourAnswersLabel") val valueHtml = result.value.content.asHtml.toString() - valueHtml mustEqual "£27,500.00" + valueHtml mustEqual "£27,500" result.actions mustBe None } }