From 0ceec2f9e7f78a003b50fc5ebd9c564bf0ac85cc Mon Sep 17 00:00:00 2001 From: jmsatheesh <19515164+jmsatheesh@users.noreply.github.com> Date: Wed, 14 Aug 2024 16:50:47 +0100 Subject: [PATCH 1/7] DDCNL-9316 WIP- Migrate to httpclientV2 and sca wrappers --- .../MarriageAllowanceConnector.scala | 51 ++++++++++--------- app/connectors/PertaxAuthConnector.scala | 39 +++++++------- app/connectors/TamcAuthConnector.scala | 10 ++-- app/errorHandler/ErrorHandler.scala | 34 +++++++++---- app/models/admin/FeatureFlag.scala | 2 +- app/views/Main.scala | 11 ++-- app/views/includes/InputDate.scala.html | 2 +- project/LibraryDependencies.scala | 9 ++-- project/build.properties | 2 +- project/plugins.sbt | 2 +- ...FakeCachedStaticHtmlPartialRetriever.scala | 9 ++-- test/helpers/FakePartialRetriever.scala | 5 +- test/utils/MockFormPartialRetriever.scala | 4 +- 13 files changed, 101 insertions(+), 79 deletions(-) diff --git a/app/connectors/MarriageAllowanceConnector.scala b/app/connectors/MarriageAllowanceConnector.scala index c5ae9637..6b89018c 100644 --- a/app/connectors/MarriageAllowanceConnector.scala +++ b/app/connectors/MarriageAllowanceConnector.scala @@ -18,26 +18,26 @@ package connectors import com.google.inject.Inject import config.ApplicationConfig -import play.api.libs.json.Json import errors.ErrorResponseStatus.{BAD_REQUEST, CITIZEN_NOT_FOUND, TRANSFEROR_NOT_FOUND} import errors.{BadFetchRequest, CitizenNotFound, MarriageAllowanceError, TransferorNotFound} import models._ +import play.api.libs.json.Json import uk.gov.hmrc.domain.Nino import uk.gov.hmrc.http._ +import uk.gov.hmrc.http.client.HttpClientV2 import uk.gov.hmrc.http.HttpReads.Implicits._ import scala.concurrent.{ExecutionContext, Future} -class MarriageAllowanceConnector @Inject()(httpClient: HttpClient, applicationConfig: ApplicationConfig) { +class MarriageAllowanceConnector @Inject()(httpClient: HttpClientV2, applicationConfig: ApplicationConfig) { def marriageAllowanceUrl = applicationConfig.marriageAllowanceUrl def listRelationship(nino: Nino)( - implicit hc: HeaderCarrier, ec: ExecutionContext): Future[RelationshipRecordList] = + implicit hc: HeaderCarrier, ec: ExecutionContext): Future[RelationshipRecordList] = { httpClient - .GET[HttpResponse]( - s"$marriageAllowanceUrl/paye/$nino/list-relationship" - ) + .get(url"$marriageAllowanceUrl/paye/$nino/list-relationship") + .execute[HttpResponse] .flatMap { response => val relationshipRecordWrapper = response.json.as[RelationshipRecordStatusWrapper] @@ -58,44 +58,47 @@ class MarriageAllowanceConnector @Inject()(httpClient: HttpClient, applicationCo }.recoverWith { case t: Throwable => Future.failed(t) } + } def getRecipientRelationship(transferorNino: Nino, recipientData: RegistrationFormInput) - (implicit hc: HeaderCarrier, ec: ExecutionContext): Future[Either[MarriageAllowanceError, GetRelationshipResponse]] = + (implicit hc: HeaderCarrier, ec: ExecutionContext): Future[Either[MarriageAllowanceError, GetRelationshipResponse]] = { httpClient - .POST[RegistrationFormInput, HttpResponse]( - s"$marriageAllowanceUrl/paye/$transferorNino/get-recipient-relationship", body = recipientData - ) + .post(url"$marriageAllowanceUrl/paye/$transferorNino/get-recipient-relationship") + .withBody(Json.toJson(recipientData)) + .execute[HttpResponse] .map { case response if response.status == 200 => Right(response.json.as[GetRelationshipResponse]) case errorResponse => Left(errorResponse.json.as[MarriageAllowanceError]) }.recoverWith { - case t: Throwable => - Future.failed(t) + case t: Throwable => Future.failed(t) } + } def createRelationship(transferorNino: Nino, data: CreateRelationshipRequestHolder)( - implicit hc: HeaderCarrier, ec: ExecutionContext): Future[Either[MarriageAllowanceError, Option[CreateRelationshipResponse]]] = + implicit hc: HeaderCarrier, ec: ExecutionContext): Future[Either[MarriageAllowanceError, Option[CreateRelationshipResponse]]] = { httpClient - .PUT[CreateRelationshipRequestHolder, HttpResponse]( - s"$marriageAllowanceUrl/paye/$transferorNino/create-multi-year-relationship/pta", data - ) + .put(url"$marriageAllowanceUrl/paye/$transferorNino/create-multi-year-relationship/pta") + .withBody(Json.toJson(data)) + .execute[HttpResponse] .map { case response if response.status == 200 => Right(Json.fromJson[CreateRelationshipResponse](response.json).asOpt) case errorResponse => Left(errorResponse.json.as[MarriageAllowanceError]) }.recoverWith { - case t: Throwable => Future.failed(t) - } + case t: Throwable => Future.failed(t) + } + } def updateRelationship(transferorNino: Nino, data: UpdateRelationshipRequestHolder)( - implicit hc: HeaderCarrier, ec: ExecutionContext): Future[Either[MarriageAllowanceError, Option[UpdateRelationshipResponse]]] = + implicit hc: HeaderCarrier, ec: ExecutionContext): Future[Either[MarriageAllowanceError, Option[UpdateRelationshipResponse]]] = { httpClient - .PUT[UpdateRelationshipRequestHolder, HttpResponse]( - s"$marriageAllowanceUrl/paye/$transferorNino/update-relationship", data - ) + .put(url"$marriageAllowanceUrl/paye/$transferorNino/update-relationship") + .withBody(Json.toJson(data)) + .execute[HttpResponse] .map { case response if response.status == 200 => Right(Json.fromJson[UpdateRelationshipResponse](response.json).asOpt) case errorResponse => Left(errorResponse.json.as[MarriageAllowanceError]) }.recoverWith { - case t: Throwable => Future.failed(t) - } + case t: Throwable => Future.failed(t) + } + } } diff --git a/app/connectors/PertaxAuthConnector.scala b/app/connectors/PertaxAuthConnector.scala index 26f5a352..13f56430 100644 --- a/app/connectors/PertaxAuthConnector.scala +++ b/app/connectors/PertaxAuthConnector.scala @@ -22,7 +22,7 @@ import com.google.inject.ImplementedBy import config.ApplicationConfig import play.api.Logging import play.api.http.HeaderNames -import uk.gov.hmrc.http.{HeaderCarrier, HttpClient, HttpException, HttpResponse, UpstreamErrorResponse} +import uk.gov.hmrc.http.{HeaderCarrier, HttpException, HttpResponse, StringContextOps, UpstreamErrorResponse} import uk.gov.hmrc.play.partials.HtmlPartial import uk.gov.hmrc.http.HttpReads.Implicits._ @@ -30,18 +30,19 @@ import javax.inject.Inject import scala.concurrent.{ExecutionContext, Future} import connectors.httpParsers.PertaxAuthenticationHttpParser._ import models.pertaxAuth.PertaxAuthResponseModel +import uk.gov.hmrc.http.client.HttpClientV2 -class PertaxAuthConnectorImpl @Inject()(http: HttpClient, appConfig: ApplicationConfig, httpClientResponse: HttpClientResponse)( - implicit ec: ExecutionContext +class PertaxAuthConnectorImpl @Inject()(http: HttpClientV2, appConfig: ApplicationConfig, httpClientResponse: HttpClientResponse)( + implicit ec: ExecutionContext ) extends PertaxAuthConnector with Logging { override def authorise(nino: String)(implicit hc: HeaderCarrier): Future[Either[UpstreamErrorResponse, PertaxAuthResponseModel]] = { val authUrl = appConfig.pertaxAuthBaseUrl + s"/pertax/$nino/authorise" - http.GET[Either[UpstreamErrorResponse, PertaxAuthResponseModel]]( - url = authUrl, - headers = Seq(HeaderNames.ACCEPT -> "application/vnd.hmrc.1.0+json") - ) + http + .get(url = url"$authUrl") + .setHeader(HeaderNames.ACCEPT -> "application/vnd.hmrc.1.0+json") + .execute[Either[UpstreamErrorResponse, PertaxAuthResponseModel]] } def pertaxPostAuthorise(implicit @@ -53,10 +54,9 @@ class PertaxAuthConnectorImpl @Inject()(http: HttpClient, appConfig: Application httpClientResponse .read( http - .POSTEmpty[Either[UpstreamErrorResponse, HttpResponse]]( - s"$pertaxUrl/pertax/authorise", - Seq(HeaderNames.ACCEPT -> "application/vnd.hmrc.2.0+json") - ) + .post(url= url"$pertaxUrl/pertax/authorise") + .setHeader(HeaderNames.ACCEPT -> "application/vnd.hmrc.2.0+json") + .execute[Either[UpstreamErrorResponse, HttpResponse]] ) .map(_.json.as[PertaxAuthResponseModel]) } @@ -65,13 +65,16 @@ class PertaxAuthConnectorImpl @Inject()(http: HttpClient, appConfig: Application val partialUrl = appConfig.pertaxAuthBaseUrl + s"${if (partialContextUrl.charAt(0).toString == "/") partialContextUrl else s"/$partialContextUrl"}" - http.GET[HtmlPartial](partialUrl).map { - case partialSuccess: HtmlPartial.Success => partialSuccess - case partialFailure: HtmlPartial.Failure => - logger.error(s"[PertaxAuthConnector][loadPartial] Failed to load Partial from partial url '$partialUrl'. " + - s"Partial info: $partialFailure, body: ${partialFailure.body}") - partialFailure - }.recover { + http + .get(url"$partialUrl") + .execute[HtmlPartial] + .map { + case partialSuccess: HtmlPartial.Success => partialSuccess + case partialFailure: HtmlPartial.Failure => + logger.error(s"[PertaxAuthConnector][loadPartial] Failed to load Partial from partial url '$partialUrl'. " + + s"Partial info: $partialFailure, body: ${partialFailure.body}") + partialFailure + }.recover { case exception: HttpException => HtmlPartial.Failure(Some(exception.responseCode)) case _ => HtmlPartial.Failure(None) } diff --git a/app/connectors/TamcAuthConnector.scala b/app/connectors/TamcAuthConnector.scala index 09a24ae6..07d0b989 100644 --- a/app/connectors/TamcAuthConnector.scala +++ b/app/connectors/TamcAuthConnector.scala @@ -16,12 +16,14 @@ package connectors -import com.google.inject.Inject -import config.ApplicationConfig + import config.ApplicationConfig + +import javax.inject.Inject import uk.gov.hmrc.auth.core.PlayAuthConnector -import uk.gov.hmrc.http.HttpClient +import uk.gov.hmrc.http.client.HttpClientV2 -class TamcAuthConnector @Inject()(val http: HttpClient, applicationConfig: ApplicationConfig) extends PlayAuthConnector { + class TamcAuthConnector @Inject()(val httpClientV2: HttpClientV2, applicationConfig: ApplicationConfig) + extends PlayAuthConnector { override val serviceUrl: String = applicationConfig.authURL diff --git a/app/errorHandler/ErrorHandler.scala b/app/errorHandler/ErrorHandler.scala index 1bac017a..ea623dd9 100644 --- a/app/errorHandler/ErrorHandler.scala +++ b/app/errorHandler/ErrorHandler.scala @@ -18,21 +18,33 @@ package errorHandler import com.google.inject.Inject import play.api.i18n.MessagesApi -import play.api.mvc.Request +import play.api.mvc.{Request, RequestHeader} import play.twirl.api.Html -import uk.gov.hmrc.http.HttpClient import uk.gov.hmrc.play.bootstrap.frontend.http.FrontendErrorHandler -import uk.gov.hmrc.play.partials.HeaderCarrierForPartialsConverter + +import scala.concurrent.{ExecutionContext, Future} class ErrorHandler @Inject()( - val messagesApi: MessagesApi, - val httpGet: HttpClient, - val headerCarrierForPartialsConverter: HeaderCarrierForPartialsConverter, - errorTemplate: views.html.templates.error_template, - pageNotFoundTemplate: views.html.templates.page_not_found_template) extends FrontendErrorHandler { + override implicit val messagesApi: MessagesApi, + errorTemplate: views.html.templates.error_template, + pageNotFoundTemplate: views.html.templates.page_not_found_template) + ( + implicit val ec: ExecutionContext + ) extends FrontendErrorHandler { + + //FIXME sca-wrapper > 9.0.0 will have some breaking changes, views will be based on RequestHeader instead of Request[_] + private def rhToRequest(rh: RequestHeader): Request[_] = Request(rh, "") + + + override def standardErrorTemplate(pageTitle: String, heading: String, message: String)(implicit request: RequestHeader): Future[Html] = { + implicit val req: Request[_] = rhToRequest(request) + Future.successful(errorTemplate(pageTitle, heading, message)) + } + + override def notFoundTemplate(implicit request: RequestHeader): Future[Html] = { + implicit val req: Request[_] = rhToRequest(request) + Future.successful(pageNotFoundTemplate()) + } - override def standardErrorTemplate(pageTitle: String, heading: String, message: String)(implicit request: Request[_]): Html = - errorTemplate(pageTitle, heading, message) - override def notFoundTemplate(implicit request: Request[_]): Html = pageNotFoundTemplate() } diff --git a/app/models/admin/FeatureFlag.scala b/app/models/admin/FeatureFlag.scala index 7184b778..28ed10e8 100644 --- a/app/models/admin/FeatureFlag.scala +++ b/app/models/admin/FeatureFlag.scala @@ -14,7 +14,7 @@ * limitations under the License. */ -package models.admin +//package models.admin //import uk.gov.hmrc.mongoFeatureToggles.model.FeatureFlagName // diff --git a/app/views/Main.scala b/app/views/Main.scala index 3a2b80af..58d8a22b 100644 --- a/app/views/Main.scala +++ b/app/views/Main.scala @@ -25,10 +25,9 @@ import play.twirl.api.{Html, HtmlFormat} import uk.gov.hmrc.hmrcfrontend.views.viewmodels.hmrcstandardpage.ServiceURLs import uk.gov.hmrc.mongoFeatureToggles.services.FeatureFlagService import uk.gov.hmrc.sca.models.BannerConfig -import uk.gov.hmrc.sca.models.auth.AuthenticatedRequest +//import uk.gov.hmrc.sca.models.auth.AuthenticatedRequest import uk.gov.hmrc.sca.services.WrapperService - -import scala.util.{Failure, Success, Try} +//import scala.util.{Failure, Success, Try} @ImplementedBy(classOf[MainImpl]) trait Main { @@ -70,11 +69,11 @@ class MainImpl @Inject() ( contentBlock: Html )(implicit BaseUserRequest: Request[_], messages: Messages): HtmlFormat.Appendable = { - val trustedHelper = Try(BaseUserRequest.asInstanceOf[AuthenticatedRequest[_]]) match { + /*val trustedHelper = Try(BaseUserRequest.asInstanceOf[AuthenticatedRequest[_,_]]) match { case Failure(_: java.lang.ClassCastException) => None case Success(value) => value.trustedHelper case Failure(exception) => throw exception - } + }*/ val fullPageTitle = { @@ -99,7 +98,7 @@ class MainImpl @Inject() ( showBetaBanner = true, showHelpImproveBanner = false ), - optTrustedHelper = trustedHelper, + //optTrustedHelper = trustedHelper, fullWidth = false )(messages, BaseUserRequest) } diff --git a/app/views/includes/InputDate.scala.html b/app/views/includes/InputDate.scala.html index aae4aa5b..9b661946 100644 --- a/app/views/includes/InputDate.scala.html +++ b/app/views/includes/InputDate.scala.html @@ -31,4 +31,4 @@ isPageHeading = isPageHeading)), attributes = fieldSetAttrs )) -).withFormField(form(fieldName))) \ No newline at end of file +).withDayMonthYearFormField(form(fieldName))) \ No newline at end of file diff --git a/project/LibraryDependencies.scala b/project/LibraryDependencies.scala index 9ba8347f..4e6a0d41 100644 --- a/project/LibraryDependencies.scala +++ b/project/LibraryDependencies.scala @@ -18,9 +18,9 @@ import sbt.* object LibraryDependencies { - private val hmrcMongoFeatureTogglesClientVersion = "1.5.0" - private val hmrcScaWrapperVersion = "1.9.0" - private val hmrcBootstrapVersion = "8.6.0" + private val hmrcMongoFeatureTogglesClientVersion = "1.6.0" + private val hmrcScaWrapperVersion = "1.11.0" + private val hmrcBootstrapVersion = "9.2.0" private val playVersion = "play-30" @@ -33,7 +33,8 @@ object LibraryDependencies { private val test: Seq[ModuleID] = Seq( "uk.gov.hmrc" %% s"bootstrap-test-$playVersion" % hmrcBootstrapVersion, - "org.scalatestplus" %% "scalacheck-1-17" % "3.2.18.0" + "org.scalatestplus" %% "scalacheck-1-17" % "3.2.18.0", + "uk.gov.hmrc" %% s"sca-wrapper-test-$playVersion" % hmrcScaWrapperVersion ).map(_ % Test) def apply(): Seq[ModuleID] = compile ++ test diff --git a/project/build.properties b/project/build.properties index 081fdbbc..ee4c672c 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.10.0 +sbt.version=1.10.1 diff --git a/project/plugins.sbt b/project/plugins.sbt index 12662ce4..a70587e2 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -4,7 +4,7 @@ resolvers += "Typesafe Releases" at "https://repo.typesafe.com/typesafe/releases addSbtPlugin("uk.gov.hmrc" % "sbt-auto-build" % "3.22.0") addSbtPlugin("uk.gov.hmrc" % "sbt-distributables" % "2.5.0") -addSbtPlugin("org.playframework" % "sbt-plugin" % "3.0.3") +addSbtPlugin("org.playframework" % "sbt-plugin" % "3.0.5") addSbtPlugin("io.github.irundaia" % "sbt-sassify" % "1.5.2") addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.2") diff --git a/test/helpers/FakeCachedStaticHtmlPartialRetriever.scala b/test/helpers/FakeCachedStaticHtmlPartialRetriever.scala index cf4288c3..08854569 100644 --- a/test/helpers/FakeCachedStaticHtmlPartialRetriever.scala +++ b/test/helpers/FakeCachedStaticHtmlPartialRetriever.scala @@ -16,17 +16,18 @@ package helpers -import uk.gov.hmrc.http.HttpGet -import uk.gov.hmrc.play.partials.CachedStaticHtmlPartialRetriever - +import uk.gov.hmrc.http.client.HttpClientV2 +import uk.gov.hmrc.play.partials.{CachedStaticHtmlPartialRetriever} import scala.concurrent.duration.Duration object FakeCachedStaticHtmlPartialRetriever extends CachedStaticHtmlPartialRetriever { - override def httpGet: HttpGet = ??? + override def httpClientV2: HttpClientV2 = ??? + override def refreshAfter: Duration = ??? override def expireAfter: Duration = ??? override def maximumEntries: Int = ??? + } diff --git a/test/helpers/FakePartialRetriever.scala b/test/helpers/FakePartialRetriever.scala index 294d47aa..12f20f5f 100644 --- a/test/helpers/FakePartialRetriever.scala +++ b/test/helpers/FakePartialRetriever.scala @@ -19,13 +19,14 @@ package helpers import com.google.inject.Inject import play.api.mvc.RequestHeader import play.twirl.api.Html -import uk.gov.hmrc.http.HttpClient +import uk.gov.hmrc.http.client.HttpClientV2 import uk.gov.hmrc.play.partials.{FormPartialRetriever, HeaderCarrierForPartialsConverter} import scala.concurrent.ExecutionContext + class FakePartialRetriever @Inject()( - override val httpGet: HttpClient, + override val httpClientV2: HttpClientV2, override val headerCarrierForPartialsConverter: HeaderCarrierForPartialsConverter ) extends FormPartialRetriever { diff --git a/test/utils/MockFormPartialRetriever.scala b/test/utils/MockFormPartialRetriever.scala index 66fc6c15..67e9633f 100644 --- a/test/utils/MockFormPartialRetriever.scala +++ b/test/utils/MockFormPartialRetriever.scala @@ -18,13 +18,13 @@ package utils import play.api.mvc.RequestHeader import play.twirl.api.Html -import uk.gov.hmrc.http.HttpClient +import uk.gov.hmrc.http.client.HttpClientV2 import uk.gov.hmrc.play.partials.{FormPartialRetrieverImpl, HeaderCarrierForPartialsConverter} import javax.inject.Inject import scala.concurrent.ExecutionContext -class MockFormPartialRetriever @Inject()(httpGet: HttpClient, headerCarrierForPartialsConverter: HeaderCarrierForPartialsConverter) +class MockFormPartialRetriever @Inject()(httpGet: HttpClientV2, headerCarrierForPartialsConverter: HeaderCarrierForPartialsConverter) extends FormPartialRetrieverImpl(httpGet, headerCarrierForPartialsConverter) { override def getPartialContent(url: String, templateParameters: Map[String, String], errorMessage: Html) From 7319339bce616e749b191de71a196a3f1a86d6b2 Mon Sep 17 00:00:00 2001 From: jmsatheesh <19515164+jmsatheesh@users.noreply.github.com> Date: Wed, 14 Aug 2024 16:50:47 +0100 Subject: [PATCH 2/7] DDCNL-9316 Migrate to httpclientV2 and sca wrappers --- .../MarriageAllowanceConnector.scala | 51 ++++++++++--------- app/connectors/PertaxAuthConnector.scala | 39 +++++++------- app/connectors/TamcAuthConnector.scala | 10 ++-- app/errorHandler/ErrorHandler.scala | 34 +++++++++---- app/models/admin/FeatureFlag.scala | 2 +- app/views/Main.scala | 11 +--- app/views/includes/InputDate.scala.html | 2 +- project/LibraryDependencies.scala | 15 +++--- project/build.properties | 2 +- project/plugins.sbt | 2 +- ...FakeCachedStaticHtmlPartialRetriever.scala | 9 ++-- test/helpers/FakePartialRetriever.scala | 5 +- .../emailaddress/PlayFormFormatterSpec.scala | 4 +- test/utils/MockFormPartialRetriever.scala | 4 +- 14 files changed, 101 insertions(+), 89 deletions(-) diff --git a/app/connectors/MarriageAllowanceConnector.scala b/app/connectors/MarriageAllowanceConnector.scala index c5ae9637..6b89018c 100644 --- a/app/connectors/MarriageAllowanceConnector.scala +++ b/app/connectors/MarriageAllowanceConnector.scala @@ -18,26 +18,26 @@ package connectors import com.google.inject.Inject import config.ApplicationConfig -import play.api.libs.json.Json import errors.ErrorResponseStatus.{BAD_REQUEST, CITIZEN_NOT_FOUND, TRANSFEROR_NOT_FOUND} import errors.{BadFetchRequest, CitizenNotFound, MarriageAllowanceError, TransferorNotFound} import models._ +import play.api.libs.json.Json import uk.gov.hmrc.domain.Nino import uk.gov.hmrc.http._ +import uk.gov.hmrc.http.client.HttpClientV2 import uk.gov.hmrc.http.HttpReads.Implicits._ import scala.concurrent.{ExecutionContext, Future} -class MarriageAllowanceConnector @Inject()(httpClient: HttpClient, applicationConfig: ApplicationConfig) { +class MarriageAllowanceConnector @Inject()(httpClient: HttpClientV2, applicationConfig: ApplicationConfig) { def marriageAllowanceUrl = applicationConfig.marriageAllowanceUrl def listRelationship(nino: Nino)( - implicit hc: HeaderCarrier, ec: ExecutionContext): Future[RelationshipRecordList] = + implicit hc: HeaderCarrier, ec: ExecutionContext): Future[RelationshipRecordList] = { httpClient - .GET[HttpResponse]( - s"$marriageAllowanceUrl/paye/$nino/list-relationship" - ) + .get(url"$marriageAllowanceUrl/paye/$nino/list-relationship") + .execute[HttpResponse] .flatMap { response => val relationshipRecordWrapper = response.json.as[RelationshipRecordStatusWrapper] @@ -58,44 +58,47 @@ class MarriageAllowanceConnector @Inject()(httpClient: HttpClient, applicationCo }.recoverWith { case t: Throwable => Future.failed(t) } + } def getRecipientRelationship(transferorNino: Nino, recipientData: RegistrationFormInput) - (implicit hc: HeaderCarrier, ec: ExecutionContext): Future[Either[MarriageAllowanceError, GetRelationshipResponse]] = + (implicit hc: HeaderCarrier, ec: ExecutionContext): Future[Either[MarriageAllowanceError, GetRelationshipResponse]] = { httpClient - .POST[RegistrationFormInput, HttpResponse]( - s"$marriageAllowanceUrl/paye/$transferorNino/get-recipient-relationship", body = recipientData - ) + .post(url"$marriageAllowanceUrl/paye/$transferorNino/get-recipient-relationship") + .withBody(Json.toJson(recipientData)) + .execute[HttpResponse] .map { case response if response.status == 200 => Right(response.json.as[GetRelationshipResponse]) case errorResponse => Left(errorResponse.json.as[MarriageAllowanceError]) }.recoverWith { - case t: Throwable => - Future.failed(t) + case t: Throwable => Future.failed(t) } + } def createRelationship(transferorNino: Nino, data: CreateRelationshipRequestHolder)( - implicit hc: HeaderCarrier, ec: ExecutionContext): Future[Either[MarriageAllowanceError, Option[CreateRelationshipResponse]]] = + implicit hc: HeaderCarrier, ec: ExecutionContext): Future[Either[MarriageAllowanceError, Option[CreateRelationshipResponse]]] = { httpClient - .PUT[CreateRelationshipRequestHolder, HttpResponse]( - s"$marriageAllowanceUrl/paye/$transferorNino/create-multi-year-relationship/pta", data - ) + .put(url"$marriageAllowanceUrl/paye/$transferorNino/create-multi-year-relationship/pta") + .withBody(Json.toJson(data)) + .execute[HttpResponse] .map { case response if response.status == 200 => Right(Json.fromJson[CreateRelationshipResponse](response.json).asOpt) case errorResponse => Left(errorResponse.json.as[MarriageAllowanceError]) }.recoverWith { - case t: Throwable => Future.failed(t) - } + case t: Throwable => Future.failed(t) + } + } def updateRelationship(transferorNino: Nino, data: UpdateRelationshipRequestHolder)( - implicit hc: HeaderCarrier, ec: ExecutionContext): Future[Either[MarriageAllowanceError, Option[UpdateRelationshipResponse]]] = + implicit hc: HeaderCarrier, ec: ExecutionContext): Future[Either[MarriageAllowanceError, Option[UpdateRelationshipResponse]]] = { httpClient - .PUT[UpdateRelationshipRequestHolder, HttpResponse]( - s"$marriageAllowanceUrl/paye/$transferorNino/update-relationship", data - ) + .put(url"$marriageAllowanceUrl/paye/$transferorNino/update-relationship") + .withBody(Json.toJson(data)) + .execute[HttpResponse] .map { case response if response.status == 200 => Right(Json.fromJson[UpdateRelationshipResponse](response.json).asOpt) case errorResponse => Left(errorResponse.json.as[MarriageAllowanceError]) }.recoverWith { - case t: Throwable => Future.failed(t) - } + case t: Throwable => Future.failed(t) + } + } } diff --git a/app/connectors/PertaxAuthConnector.scala b/app/connectors/PertaxAuthConnector.scala index 26f5a352..13f56430 100644 --- a/app/connectors/PertaxAuthConnector.scala +++ b/app/connectors/PertaxAuthConnector.scala @@ -22,7 +22,7 @@ import com.google.inject.ImplementedBy import config.ApplicationConfig import play.api.Logging import play.api.http.HeaderNames -import uk.gov.hmrc.http.{HeaderCarrier, HttpClient, HttpException, HttpResponse, UpstreamErrorResponse} +import uk.gov.hmrc.http.{HeaderCarrier, HttpException, HttpResponse, StringContextOps, UpstreamErrorResponse} import uk.gov.hmrc.play.partials.HtmlPartial import uk.gov.hmrc.http.HttpReads.Implicits._ @@ -30,18 +30,19 @@ import javax.inject.Inject import scala.concurrent.{ExecutionContext, Future} import connectors.httpParsers.PertaxAuthenticationHttpParser._ import models.pertaxAuth.PertaxAuthResponseModel +import uk.gov.hmrc.http.client.HttpClientV2 -class PertaxAuthConnectorImpl @Inject()(http: HttpClient, appConfig: ApplicationConfig, httpClientResponse: HttpClientResponse)( - implicit ec: ExecutionContext +class PertaxAuthConnectorImpl @Inject()(http: HttpClientV2, appConfig: ApplicationConfig, httpClientResponse: HttpClientResponse)( + implicit ec: ExecutionContext ) extends PertaxAuthConnector with Logging { override def authorise(nino: String)(implicit hc: HeaderCarrier): Future[Either[UpstreamErrorResponse, PertaxAuthResponseModel]] = { val authUrl = appConfig.pertaxAuthBaseUrl + s"/pertax/$nino/authorise" - http.GET[Either[UpstreamErrorResponse, PertaxAuthResponseModel]]( - url = authUrl, - headers = Seq(HeaderNames.ACCEPT -> "application/vnd.hmrc.1.0+json") - ) + http + .get(url = url"$authUrl") + .setHeader(HeaderNames.ACCEPT -> "application/vnd.hmrc.1.0+json") + .execute[Either[UpstreamErrorResponse, PertaxAuthResponseModel]] } def pertaxPostAuthorise(implicit @@ -53,10 +54,9 @@ class PertaxAuthConnectorImpl @Inject()(http: HttpClient, appConfig: Application httpClientResponse .read( http - .POSTEmpty[Either[UpstreamErrorResponse, HttpResponse]]( - s"$pertaxUrl/pertax/authorise", - Seq(HeaderNames.ACCEPT -> "application/vnd.hmrc.2.0+json") - ) + .post(url= url"$pertaxUrl/pertax/authorise") + .setHeader(HeaderNames.ACCEPT -> "application/vnd.hmrc.2.0+json") + .execute[Either[UpstreamErrorResponse, HttpResponse]] ) .map(_.json.as[PertaxAuthResponseModel]) } @@ -65,13 +65,16 @@ class PertaxAuthConnectorImpl @Inject()(http: HttpClient, appConfig: Application val partialUrl = appConfig.pertaxAuthBaseUrl + s"${if (partialContextUrl.charAt(0).toString == "/") partialContextUrl else s"/$partialContextUrl"}" - http.GET[HtmlPartial](partialUrl).map { - case partialSuccess: HtmlPartial.Success => partialSuccess - case partialFailure: HtmlPartial.Failure => - logger.error(s"[PertaxAuthConnector][loadPartial] Failed to load Partial from partial url '$partialUrl'. " + - s"Partial info: $partialFailure, body: ${partialFailure.body}") - partialFailure - }.recover { + http + .get(url"$partialUrl") + .execute[HtmlPartial] + .map { + case partialSuccess: HtmlPartial.Success => partialSuccess + case partialFailure: HtmlPartial.Failure => + logger.error(s"[PertaxAuthConnector][loadPartial] Failed to load Partial from partial url '$partialUrl'. " + + s"Partial info: $partialFailure, body: ${partialFailure.body}") + partialFailure + }.recover { case exception: HttpException => HtmlPartial.Failure(Some(exception.responseCode)) case _ => HtmlPartial.Failure(None) } diff --git a/app/connectors/TamcAuthConnector.scala b/app/connectors/TamcAuthConnector.scala index 09a24ae6..07d0b989 100644 --- a/app/connectors/TamcAuthConnector.scala +++ b/app/connectors/TamcAuthConnector.scala @@ -16,12 +16,14 @@ package connectors -import com.google.inject.Inject -import config.ApplicationConfig + import config.ApplicationConfig + +import javax.inject.Inject import uk.gov.hmrc.auth.core.PlayAuthConnector -import uk.gov.hmrc.http.HttpClient +import uk.gov.hmrc.http.client.HttpClientV2 -class TamcAuthConnector @Inject()(val http: HttpClient, applicationConfig: ApplicationConfig) extends PlayAuthConnector { + class TamcAuthConnector @Inject()(val httpClientV2: HttpClientV2, applicationConfig: ApplicationConfig) + extends PlayAuthConnector { override val serviceUrl: String = applicationConfig.authURL diff --git a/app/errorHandler/ErrorHandler.scala b/app/errorHandler/ErrorHandler.scala index 1bac017a..ea623dd9 100644 --- a/app/errorHandler/ErrorHandler.scala +++ b/app/errorHandler/ErrorHandler.scala @@ -18,21 +18,33 @@ package errorHandler import com.google.inject.Inject import play.api.i18n.MessagesApi -import play.api.mvc.Request +import play.api.mvc.{Request, RequestHeader} import play.twirl.api.Html -import uk.gov.hmrc.http.HttpClient import uk.gov.hmrc.play.bootstrap.frontend.http.FrontendErrorHandler -import uk.gov.hmrc.play.partials.HeaderCarrierForPartialsConverter + +import scala.concurrent.{ExecutionContext, Future} class ErrorHandler @Inject()( - val messagesApi: MessagesApi, - val httpGet: HttpClient, - val headerCarrierForPartialsConverter: HeaderCarrierForPartialsConverter, - errorTemplate: views.html.templates.error_template, - pageNotFoundTemplate: views.html.templates.page_not_found_template) extends FrontendErrorHandler { + override implicit val messagesApi: MessagesApi, + errorTemplate: views.html.templates.error_template, + pageNotFoundTemplate: views.html.templates.page_not_found_template) + ( + implicit val ec: ExecutionContext + ) extends FrontendErrorHandler { + + //FIXME sca-wrapper > 9.0.0 will have some breaking changes, views will be based on RequestHeader instead of Request[_] + private def rhToRequest(rh: RequestHeader): Request[_] = Request(rh, "") + + + override def standardErrorTemplate(pageTitle: String, heading: String, message: String)(implicit request: RequestHeader): Future[Html] = { + implicit val req: Request[_] = rhToRequest(request) + Future.successful(errorTemplate(pageTitle, heading, message)) + } + + override def notFoundTemplate(implicit request: RequestHeader): Future[Html] = { + implicit val req: Request[_] = rhToRequest(request) + Future.successful(pageNotFoundTemplate()) + } - override def standardErrorTemplate(pageTitle: String, heading: String, message: String)(implicit request: Request[_]): Html = - errorTemplate(pageTitle, heading, message) - override def notFoundTemplate(implicit request: Request[_]): Html = pageNotFoundTemplate() } diff --git a/app/models/admin/FeatureFlag.scala b/app/models/admin/FeatureFlag.scala index 7184b778..28ed10e8 100644 --- a/app/models/admin/FeatureFlag.scala +++ b/app/models/admin/FeatureFlag.scala @@ -14,7 +14,7 @@ * limitations under the License. */ -package models.admin +//package models.admin //import uk.gov.hmrc.mongoFeatureToggles.model.FeatureFlagName // diff --git a/app/views/Main.scala b/app/views/Main.scala index 3a2b80af..fd6f99ac 100644 --- a/app/views/Main.scala +++ b/app/views/Main.scala @@ -25,11 +25,8 @@ import play.twirl.api.{Html, HtmlFormat} import uk.gov.hmrc.hmrcfrontend.views.viewmodels.hmrcstandardpage.ServiceURLs import uk.gov.hmrc.mongoFeatureToggles.services.FeatureFlagService import uk.gov.hmrc.sca.models.BannerConfig -import uk.gov.hmrc.sca.models.auth.AuthenticatedRequest import uk.gov.hmrc.sca.services.WrapperService -import scala.util.{Failure, Success, Try} - @ImplementedBy(classOf[MainImpl]) trait Main { def apply( @@ -70,12 +67,6 @@ class MainImpl @Inject() ( contentBlock: Html )(implicit BaseUserRequest: Request[_], messages: Messages): HtmlFormat.Appendable = { - val trustedHelper = Try(BaseUserRequest.asInstanceOf[AuthenticatedRequest[_]]) match { - case Failure(_: java.lang.ClassCastException) => None - case Success(value) => value.trustedHelper - case Failure(exception) => throw exception - } - val fullPageTitle = { s"""$pageTitle - ${messages(serviceTitle)}""" @@ -99,7 +90,7 @@ class MainImpl @Inject() ( showBetaBanner = true, showHelpImproveBanner = false ), - optTrustedHelper = trustedHelper, + optTrustedHelper = None, fullWidth = false )(messages, BaseUserRequest) } diff --git a/app/views/includes/InputDate.scala.html b/app/views/includes/InputDate.scala.html index aae4aa5b..9b661946 100644 --- a/app/views/includes/InputDate.scala.html +++ b/app/views/includes/InputDate.scala.html @@ -31,4 +31,4 @@ isPageHeading = isPageHeading)), attributes = fieldSetAttrs )) -).withFormField(form(fieldName))) \ No newline at end of file +).withDayMonthYearFormField(form(fieldName))) \ No newline at end of file diff --git a/project/LibraryDependencies.scala b/project/LibraryDependencies.scala index 9ba8347f..6bfc8e1a 100644 --- a/project/LibraryDependencies.scala +++ b/project/LibraryDependencies.scala @@ -18,22 +18,23 @@ import sbt.* object LibraryDependencies { - private val hmrcMongoFeatureTogglesClientVersion = "1.5.0" - private val hmrcScaWrapperVersion = "1.9.0" - private val hmrcBootstrapVersion = "8.6.0" + private val hmrcMongoFeatureTogglesClientVersion = "1.6.0" + private val hmrcScaWrapperVersion = "1.11.0" private val playVersion = "play-30" private val compile: Seq[ModuleID] = Seq( - "uk.gov.hmrc" %% s"emailaddress-$playVersion" % "4.0.0", - "uk.gov.hmrc" %% s"mongo-feature-toggles-client-$playVersion" % hmrcMongoFeatureTogglesClientVersion, "uk.gov.hmrc" %% s"sca-wrapper-$playVersion" % hmrcScaWrapperVersion, + "uk.gov.hmrc" %% s"mongo-feature-toggles-client-$playVersion" % hmrcMongoFeatureTogglesClientVersion, + "uk.gov.hmrc" %% s"emailaddress-$playVersion" % "4.0.0", "uk.gov.hmrc" %% s"tax-year" % "4.0.0", ) private val test: Seq[ModuleID] = Seq( - "uk.gov.hmrc" %% s"bootstrap-test-$playVersion" % hmrcBootstrapVersion, - "org.scalatestplus" %% "scalacheck-1-17" % "3.2.18.0" + "uk.gov.hmrc" %% s"sca-wrapper-test-$playVersion" % hmrcScaWrapperVersion, + "uk.gov.hmrc" %% s"mongo-feature-toggles-client-$playVersion" % hmrcMongoFeatureTogglesClientVersion, + "org.scalatestplus" %% "scalacheck-1-17" % "3.2.18.0", + ).map(_ % Test) def apply(): Seq[ModuleID] = compile ++ test diff --git a/project/build.properties b/project/build.properties index 081fdbbc..ee4c672c 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.10.0 +sbt.version=1.10.1 diff --git a/project/plugins.sbt b/project/plugins.sbt index 12662ce4..a70587e2 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -4,7 +4,7 @@ resolvers += "Typesafe Releases" at "https://repo.typesafe.com/typesafe/releases addSbtPlugin("uk.gov.hmrc" % "sbt-auto-build" % "3.22.0") addSbtPlugin("uk.gov.hmrc" % "sbt-distributables" % "2.5.0") -addSbtPlugin("org.playframework" % "sbt-plugin" % "3.0.3") +addSbtPlugin("org.playframework" % "sbt-plugin" % "3.0.5") addSbtPlugin("io.github.irundaia" % "sbt-sassify" % "1.5.2") addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.2") diff --git a/test/helpers/FakeCachedStaticHtmlPartialRetriever.scala b/test/helpers/FakeCachedStaticHtmlPartialRetriever.scala index cf4288c3..08854569 100644 --- a/test/helpers/FakeCachedStaticHtmlPartialRetriever.scala +++ b/test/helpers/FakeCachedStaticHtmlPartialRetriever.scala @@ -16,17 +16,18 @@ package helpers -import uk.gov.hmrc.http.HttpGet -import uk.gov.hmrc.play.partials.CachedStaticHtmlPartialRetriever - +import uk.gov.hmrc.http.client.HttpClientV2 +import uk.gov.hmrc.play.partials.{CachedStaticHtmlPartialRetriever} import scala.concurrent.duration.Duration object FakeCachedStaticHtmlPartialRetriever extends CachedStaticHtmlPartialRetriever { - override def httpGet: HttpGet = ??? + override def httpClientV2: HttpClientV2 = ??? + override def refreshAfter: Duration = ??? override def expireAfter: Duration = ??? override def maximumEntries: Int = ??? + } diff --git a/test/helpers/FakePartialRetriever.scala b/test/helpers/FakePartialRetriever.scala index 294d47aa..12f20f5f 100644 --- a/test/helpers/FakePartialRetriever.scala +++ b/test/helpers/FakePartialRetriever.scala @@ -19,13 +19,14 @@ package helpers import com.google.inject.Inject import play.api.mvc.RequestHeader import play.twirl.api.Html -import uk.gov.hmrc.http.HttpClient +import uk.gov.hmrc.http.client.HttpClientV2 import uk.gov.hmrc.play.partials.{FormPartialRetriever, HeaderCarrierForPartialsConverter} import scala.concurrent.ExecutionContext + class FakePartialRetriever @Inject()( - override val httpGet: HttpClient, + override val httpClientV2: HttpClientV2, override val headerCarrierForPartialsConverter: HeaderCarrierForPartialsConverter ) extends FormPartialRetriever { diff --git a/test/uk/gov/hmrc/emailaddress/PlayFormFormatterSpec.scala b/test/uk/gov/hmrc/emailaddress/PlayFormFormatterSpec.scala index 6040950c..5983c188 100644 --- a/test/uk/gov/hmrc/emailaddress/PlayFormFormatterSpec.scala +++ b/test/uk/gov/hmrc/emailaddress/PlayFormFormatterSpec.scala @@ -19,9 +19,7 @@ package uk.gov.hmrc.emailaddress import org.scalatest.wordspec.AnyWordSpec import org.scalatest.matchers.should.Matchers import play.api.data.FormError -import org.scalatestplus.scalacheck.ScalaCheckPropertyChecks - -class PlayFormFormatterSpec extends AnyWordSpec with Matchers with ScalaCheckPropertyChecks { +class PlayFormFormatterSpec extends AnyWordSpec with Matchers { val emails: List[String] = EmailAddressGenerators.randomEmailAddresses().distinct diff --git a/test/utils/MockFormPartialRetriever.scala b/test/utils/MockFormPartialRetriever.scala index 66fc6c15..67e9633f 100644 --- a/test/utils/MockFormPartialRetriever.scala +++ b/test/utils/MockFormPartialRetriever.scala @@ -18,13 +18,13 @@ package utils import play.api.mvc.RequestHeader import play.twirl.api.Html -import uk.gov.hmrc.http.HttpClient +import uk.gov.hmrc.http.client.HttpClientV2 import uk.gov.hmrc.play.partials.{FormPartialRetrieverImpl, HeaderCarrierForPartialsConverter} import javax.inject.Inject import scala.concurrent.ExecutionContext -class MockFormPartialRetriever @Inject()(httpGet: HttpClient, headerCarrierForPartialsConverter: HeaderCarrierForPartialsConverter) +class MockFormPartialRetriever @Inject()(httpGet: HttpClientV2, headerCarrierForPartialsConverter: HeaderCarrierForPartialsConverter) extends FormPartialRetrieverImpl(httpGet, headerCarrierForPartialsConverter) { override def getPartialContent(url: String, templateParameters: Map[String, String], errorMessage: Html) From ba4ae0944bb47c6b5e81bcf69e9958e54e8e2c03 Mon Sep 17 00:00:00 2001 From: jmsatheesh <19515164+jmsatheesh@users.noreply.github.com> Date: Fri, 16 Aug 2024 09:49:30 +0100 Subject: [PATCH 3/7] DDCNL-9316 - Review comments addressed --- app/connectors/MarriageAllowanceConnector.scala | 2 ++ app/models/admin/FeatureFlag.scala | 2 +- conf/application.conf | 1 - 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/connectors/MarriageAllowanceConnector.scala b/app/connectors/MarriageAllowanceConnector.scala index 6b89018c..5983d2f5 100644 --- a/app/connectors/MarriageAllowanceConnector.scala +++ b/app/connectors/MarriageAllowanceConnector.scala @@ -26,6 +26,8 @@ import uk.gov.hmrc.domain.Nino import uk.gov.hmrc.http._ import uk.gov.hmrc.http.client.HttpClientV2 import uk.gov.hmrc.http.HttpReads.Implicits._ +import play.api.libs.ws.writeableOf_JsValue + import scala.concurrent.{ExecutionContext, Future} diff --git a/app/models/admin/FeatureFlag.scala b/app/models/admin/FeatureFlag.scala index 28ed10e8..39a68361 100644 --- a/app/models/admin/FeatureFlag.scala +++ b/app/models/admin/FeatureFlag.scala @@ -14,7 +14,7 @@ * limitations under the License. */ -//package models.admin + //import uk.gov.hmrc.mongoFeatureToggles.model.FeatureFlagName // diff --git a/conf/application.conf b/conf/application.conf index 0c210ee9..abd1c310 100644 --- a/conf/application.conf +++ b/conf/application.conf @@ -25,7 +25,6 @@ play.i18n.langs = ["en","cy"] # ~~~~ # Additional play modules can be added here play.modules.enabled += "config.TamcModule" -play.modules.enabled += "uk.gov.hmrc.play.bootstrap.HttpClientModule" play.modules.enabled += "uk.gov.hmrc.play.bootstrap.HttpClientV2Module" play.modules.enabled += "uk.gov.hmrc.mongo.play.PlayMongoModule" play.modules.enabled += "uk.gov.hmrc.internalauth.client.modules.InternalAuthModule" From dca2a9e5dd30586dd3c2d5b110ca20f8f1045b5b Mon Sep 17 00:00:00 2001 From: jmsatheesh <19515164+jmsatheesh@users.noreply.github.com> Date: Fri, 16 Aug 2024 10:36:13 +0100 Subject: [PATCH 4/7] DDCNL-9316 - Review comments addressed --- .../MarriageAllowanceConnector.scala | 2 -- app/models/admin/FeatureFlag.scala | 26 ------------------- 2 files changed, 28 deletions(-) delete mode 100644 app/models/admin/FeatureFlag.scala diff --git a/app/connectors/MarriageAllowanceConnector.scala b/app/connectors/MarriageAllowanceConnector.scala index 5983d2f5..6b89018c 100644 --- a/app/connectors/MarriageAllowanceConnector.scala +++ b/app/connectors/MarriageAllowanceConnector.scala @@ -26,8 +26,6 @@ import uk.gov.hmrc.domain.Nino import uk.gov.hmrc.http._ import uk.gov.hmrc.http.client.HttpClientV2 import uk.gov.hmrc.http.HttpReads.Implicits._ -import play.api.libs.ws.writeableOf_JsValue - import scala.concurrent.{ExecutionContext, Future} diff --git a/app/models/admin/FeatureFlag.scala b/app/models/admin/FeatureFlag.scala deleted file mode 100644 index 39a68361..00000000 --- a/app/models/admin/FeatureFlag.scala +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2023 HM Revenue & Customs - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - -//import uk.gov.hmrc.mongoFeatureToggles.model.FeatureFlagName -// -//case object Toggle extends FeatureFlagName { -// override val name: String = "toggle-name" -// override val description: Option[String] = Some( -// "Enable/disable feature" -// ) -//} From 716ae8c90f01576ed2049b796fddfd02b478fe1b Mon Sep 17 00:00:00 2001 From: jmsatheesh <19515164+jmsatheesh@users.noreply.github.com> Date: Fri, 16 Aug 2024 14:08:04 +0100 Subject: [PATCH 5/7] DDCNL-9316 - Removed feature toogle, removed errorTemplate --- app/config/ApplicationConfig.scala | 3 +- app/config/ApplicationStartUp.scala | 23 ---- app/config/TamcModule.scala | 3 +- app/views/Main.scala | 10 +- app/views/errorTemplate.scala.html | 121 ------------------ app/views/templates/error_template.scala.html | 5 +- .../page_not_found_template.scala.html | 5 +- conf/admin.routes | 1 - conf/application.conf | 7 - conf/prod.routes | 1 - conf/testOnlyDoNotUseInAppConf.routes | 4 +- project/LibraryDependencies.scala | 17 ++- test/errorHandler/ErrorHandlerSpec.scala | 2 +- 13 files changed, 19 insertions(+), 183 deletions(-) delete mode 100644 app/config/ApplicationStartUp.scala delete mode 100644 app/views/errorTemplate.scala.html delete mode 100644 conf/admin.routes diff --git a/app/config/ApplicationConfig.scala b/app/config/ApplicationConfig.scala index 8b64969d..67cbf86c 100644 --- a/app/config/ApplicationConfig.scala +++ b/app/config/ApplicationConfig.scala @@ -122,6 +122,5 @@ class ApplicationConfig @Inject()(configuration: Configuration, servicesConfig: val pertaxAuthBaseUrl = servicesConfig.baseUrl("pertax-auth") - lazy val internalAuthResourceType: String = - servicesConfig.getConfString("internal-auth.resource-type", "ddcn-live-admin-frontend") + } diff --git a/app/config/ApplicationStartUp.scala b/app/config/ApplicationStartUp.scala deleted file mode 100644 index ba5c5a53..00000000 --- a/app/config/ApplicationStartUp.scala +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2023 HM Revenue & Customs - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package config - -import uk.gov.hmrc.mongoFeatureToggles.model.FeatureFlagNamesLibrary - -class ApplicationStartUp { - FeatureFlagNamesLibrary.addFlags(List()) -} diff --git a/app/config/TamcModule.scala b/app/config/TamcModule.scala index 3d44efd8..99029ee8 100644 --- a/app/config/TamcModule.scala +++ b/app/config/TamcModule.scala @@ -29,7 +29,6 @@ class TamcModule extends Module { Seq( bind[AuthConnector].to[TamcAuthConnector], bind[CurrentTaxYear].toInstance(TaxYear), - bind[TaxBandReader].to[TaxBandReaderImpl], - bind[ApplicationStartUp].toSelf.eagerly() + bind[TaxBandReader].to[TaxBandReaderImpl] ) } diff --git a/app/views/Main.scala b/app/views/Main.scala index fd6f99ac..5f79a6ac 100644 --- a/app/views/Main.scala +++ b/app/views/Main.scala @@ -17,13 +17,11 @@ package views import com.google.inject.{ImplementedBy, Inject} -import config.ApplicationConfig import play.api.Logging import play.api.i18n.Messages import play.api.mvc.Request import play.twirl.api.{Html, HtmlFormat} import uk.gov.hmrc.hmrcfrontend.views.viewmodels.hmrcstandardpage.ServiceURLs -import uk.gov.hmrc.mongoFeatureToggles.services.FeatureFlagService import uk.gov.hmrc.sca.models.BannerConfig import uk.gov.hmrc.sca.services.WrapperService @@ -47,8 +45,6 @@ trait Main { } class MainImpl @Inject() ( - appConfig: ApplicationConfig, - featureFlagService: FeatureFlagService, wrapperService: WrapperService, additionalStyles: views.html.components.additionalStyles, additionalScripts: views.html.components.additionalScripts @@ -67,13 +63,9 @@ class MainImpl @Inject() ( contentBlock: Html )(implicit BaseUserRequest: Request[_], messages: Messages): HtmlFormat.Appendable = { - val fullPageTitle = - { - s"""$pageTitle - ${messages(serviceTitle)}""" - } wrapperService.standardScaLayout( content = contentBlock, - pageTitle = Some(fullPageTitle), + pageTitle = Some(s"$pageTitle - ${messages(serviceTitle)}"), serviceNameKey = Some("tamc.apply"), serviceURLs = ServiceURLs( signOutUrl = Some(controllers.routes.AuthorisationController.logout().url) diff --git a/app/views/errorTemplate.scala.html b/app/views/errorTemplate.scala.html deleted file mode 100644 index 813e4931..00000000 --- a/app/views/errorTemplate.scala.html +++ /dev/null @@ -1,121 +0,0 @@ -@* - * Copyright 2023 HM Revenue & Customs - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *@ - -@import uk.gov.hmrc.hmrcfrontend.views.html.helpers._ -@import config.ApplicationConfig -@import includes.Link -@import uk.gov.hmrc.hmrcfrontend.config.AccountMenuConfig -@import uk.gov.hmrc.hmrcfrontend.views.html.components.implicits.RichAccountMenu -@import uk.gov.hmrc.hmrcfrontend.views.viewmodels.accountmenu.{AccountMenu, SignOut} -@import views.html.helper.CSPNonce - -@this( - hmrcLayout: HmrcLayout, - hmrcLanguageSelectHelper: HmrcLanguageSelectHelper, - hmrcTimeoutDialogHelper: HmrcTimeoutDialogHelper, - twoThirdsMainContent: TwoThirdsMainContent, - hmrcReportTechnicalIssueHelper: HmrcReportTechnicalIssueHelper, - hmrcReportTechnicalIssue: HmrcReportTechnicalIssue, - appConfig: ApplicationConfig, - govukPhaseBanner : GovukPhaseBanner, - link: Link, - hmrcAccountMenu: HmrcAccountMenu -)(implicit accountMenuConfig: AccountMenuConfig) - -@( - pageTitle: Option[String], - serviceName: Option[String] = Some("tamc.apply"), - backLinkHref: Option[String] = None, - additionalScripts: Option[Html] = None -)(content: Html)(implicit request: Request[_], messages: Messages) - -@headBlock = { - - - @hmrcTimeoutDialogHelper( - signOutUrl = routes.AuthorisationController.logout().url, - keepAliveUrl = Some("/keep-alive") - ) - @additionalScripts.getOrElse("") -} - -@addedScripts = { - - - - - - -} - -@beforeContent = { - @hmrcAccountMenu(AccountMenu( - signOut = SignOut(href = controllers.routes.AuthorisationController.logout().url), - language = if(messages.lang.code == "cy") Cy else En - ).withUrlsFromConfig()) - - @hmrcLanguageSelectHelper() -} - - -@contentBlock = { - @content - @hmrcReportTechnicalIssue(ReportTechnicalIssue( - serviceId = appConfig.contactFormServiceIdentifier, - language = if(messages.lang.code == "cy") Cy else En, - referrerUrl = Some(request.uri), - baseUrl = Some(appConfig.contactFrontendService), - classes = Some("govuk-!-margin-bottom-8") - )) - - @govukPhaseBanner(PhaseBanner( - tag = Some(Tag( - content = Text("beta") - )), - content = HtmlContent(messages("betaBanner.message", - link(link=appConfig.betaFeedbackUnauthenticatedUrl, - messageKey="betaBanner.linkText", - inParagraph = true))) - )) -} - -@hmrcLayout( - pageTitle = pageTitle, - isWelshTranslationAvailable = true, - accessibilityStatementUrl = Some(appConfig.accessibilityStatementUrl(request.uri)), - displayHmrcBanner = false, - additionalHeadBlock = Some(headBlock), - additionalScriptsBlock = Some(addedScripts), - beforeContentBlock = Some(beforeContent), - mainContentLayout = Some(twoThirdsMainContent(_)) -)(contentBlock) diff --git a/app/views/templates/error_template.scala.html b/app/views/templates/error_template.scala.html index 5ae33564..5ab65b68 100644 --- a/app/views/templates/error_template.scala.html +++ b/app/views/templates/error_template.scala.html @@ -16,16 +16,17 @@ @import config.ApplicationConfig @import includes.{H1, P} +@import views.Main @this( -main: errorTemplate, +main: Main, applicationConfig: ApplicationConfig, p: P, h1: H1) @(pageTitle: String, heading: String, message: String)(implicit messages: Messages, request: Request[_]) -@main(pageTitle = Some(pageTitle)){ +@main(pageTitle = pageTitle){ @h1(heading, elmId = Some("errorHeading")) @p(Text(message), elmId = Some("errorText")) diff --git a/app/views/templates/page_not_found_template.scala.html b/app/views/templates/page_not_found_template.scala.html index 177aa176..37e4ff96 100644 --- a/app/views/templates/page_not_found_template.scala.html +++ b/app/views/templates/page_not_found_template.scala.html @@ -14,11 +14,12 @@ * limitations under the License. *@ +@import views.Main @import config.ApplicationConfig @import includes.{H1, P} @this( -main: errorTemplate, +main: Main, applicationConfig: ApplicationConfig, h1: H1, p: P @@ -26,7 +27,7 @@ @()(implicit messages: Messages, request: Request[_]) -@main(pageTitle = Some(messages("title.pattern", messages("global.page.not.found.error.title")))){ +@main(pageTitle = messages("title.pattern", messages("global.page.not.found.error.title"))){ @h1("global.page.not.found.error.title") diff --git a/conf/admin.routes b/conf/admin.routes deleted file mode 100644 index 964f5793..00000000 --- a/conf/admin.routes +++ /dev/null @@ -1 +0,0 @@ --> /featureFlags mongoFeatureTogglesAdmin.Routes diff --git a/conf/application.conf b/conf/application.conf index abd1c310..a8c523e4 100644 --- a/conf/application.conf +++ b/conf/application.conf @@ -27,7 +27,6 @@ play.i18n.langs = ["en","cy"] play.modules.enabled += "config.TamcModule" play.modules.enabled += "uk.gov.hmrc.play.bootstrap.HttpClientV2Module" play.modules.enabled += "uk.gov.hmrc.mongo.play.PlayMongoModule" -play.modules.enabled += "uk.gov.hmrc.internalauth.client.modules.InternalAuthModule" # Provides an implementation and configures all filters required by a Platform frontend microservice. # SCA Wrapper @@ -139,12 +138,6 @@ microservice { port = 9250 } - internal-auth { - resource-type = "ddcn-live-admin-frontend" - host = localhost - port = 8470 - } - } } diff --git a/conf/prod.routes b/conf/prod.routes index 8c8ad77c..7fb52c12 100644 --- a/conf/prod.routes +++ b/conf/prod.routes @@ -1,3 +1,2 @@ -> /marriage-allowance-application app.Routes -> / health.Routes --> /admin admin.Routes diff --git a/conf/testOnlyDoNotUseInAppConf.routes b/conf/testOnlyDoNotUseInAppConf.routes index 61c24e35..3de088c6 100644 --- a/conf/testOnlyDoNotUseInAppConf.routes +++ b/conf/testOnlyDoNotUseInAppConf.routes @@ -10,6 +10,4 @@ # Failing to follow this rule may result in test routes deployed in production. # Add all the application routes to the prod.routes file --> / prod.Routes - --> /marriage-allowance-application mongoFeatureTogglesTestOnly.Routes +-> / prod.Routes \ No newline at end of file diff --git a/project/LibraryDependencies.scala b/project/LibraryDependencies.scala index 6bfc8e1a..654ec1c4 100644 --- a/project/LibraryDependencies.scala +++ b/project/LibraryDependencies.scala @@ -18,23 +18,22 @@ import sbt.* object LibraryDependencies { - private val hmrcMongoFeatureTogglesClientVersion = "1.6.0" private val hmrcScaWrapperVersion = "1.11.0" + private val hmrcMongoVersion = "2.1.0" private val playVersion = "play-30" private val compile: Seq[ModuleID] = Seq( - "uk.gov.hmrc" %% s"sca-wrapper-$playVersion" % hmrcScaWrapperVersion, - "uk.gov.hmrc" %% s"mongo-feature-toggles-client-$playVersion" % hmrcMongoFeatureTogglesClientVersion, - "uk.gov.hmrc" %% s"emailaddress-$playVersion" % "4.0.0", - "uk.gov.hmrc" %% s"tax-year" % "4.0.0", + "uk.gov.hmrc" %% s"sca-wrapper-$playVersion" % hmrcScaWrapperVersion, + "uk.gov.hmrc" %% s"emailaddress-$playVersion" % "4.0.0", + "uk.gov.hmrc" %% s"tax-year" % "4.0.0", + "uk.gov.hmrc.mongo" %% s"hmrc-mongo-$playVersion" % hmrcMongoVersion, + "org.typelevel" %% "cats-core" % "2.12.0" + ) private val test: Seq[ModuleID] = Seq( - "uk.gov.hmrc" %% s"sca-wrapper-test-$playVersion" % hmrcScaWrapperVersion, - "uk.gov.hmrc" %% s"mongo-feature-toggles-client-$playVersion" % hmrcMongoFeatureTogglesClientVersion, - "org.scalatestplus" %% "scalacheck-1-17" % "3.2.18.0", - + "uk.gov.hmrc" %% s"sca-wrapper-test-$playVersion" % hmrcScaWrapperVersion, ).map(_ % Test) def apply(): Seq[ModuleID] = compile ++ test diff --git a/test/errorHandler/ErrorHandlerSpec.scala b/test/errorHandler/ErrorHandlerSpec.scala index efbe319f..993f7021 100644 --- a/test/errorHandler/ErrorHandlerSpec.scala +++ b/test/errorHandler/ErrorHandlerSpec.scala @@ -54,7 +54,7 @@ class ErrorHandlerSpec extends UnitSpec with GuiceOneAppPerSuite with Injecting{ val docHeading = doc.select("#errorHeading").text() val docMessage = doc.select("#errorText").text() - docTitle shouldBe title + " GOV.UK" + docTitle shouldBe s"$title - Marriage Allowance - GOV.UK GOV.UK" docHeading shouldBe heading docMessage shouldBe message } From 4a580b54a3205c8898ee9dda1ad85426f06467ab Mon Sep 17 00:00:00 2001 From: jmsatheesh <19515164+jmsatheesh@users.noreply.github.com> Date: Mon, 19 Aug 2024 11:06:42 +0100 Subject: [PATCH 6/7] DDCNL-9316 - Fixed failed test case --- app/views/templates/page_not_found_template.scala.html | 3 +-- project/LibraryDependencies.scala | 5 ++--- test/errorHandler/ErrorHandlerSpec.scala | 6 +++--- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/app/views/templates/page_not_found_template.scala.html b/app/views/templates/page_not_found_template.scala.html index 37e4ff96..e2adf966 100644 --- a/app/views/templates/page_not_found_template.scala.html +++ b/app/views/templates/page_not_found_template.scala.html @@ -27,8 +27,7 @@ @()(implicit messages: Messages, request: Request[_]) -@main(pageTitle = messages("title.pattern", messages("global.page.not.found.error.title"))){ - +@main(pageTitle = messages("global.page.not.found.error.title")){ @h1("global.page.not.found.error.title") @p(Text(messages("global.page.not.found.error.check.web.address.correct"))) diff --git a/project/LibraryDependencies.scala b/project/LibraryDependencies.scala index 654ec1c4..9be26990 100644 --- a/project/LibraryDependencies.scala +++ b/project/LibraryDependencies.scala @@ -18,10 +18,9 @@ import sbt.* object LibraryDependencies { - private val hmrcScaWrapperVersion = "1.11.0" + private val hmrcScaWrapperVersion = "1.11.0" private val hmrcMongoVersion = "2.1.0" - - private val playVersion = "play-30" + private val playVersion = "play-30" private val compile: Seq[ModuleID] = Seq( "uk.gov.hmrc" %% s"sca-wrapper-$playVersion" % hmrcScaWrapperVersion, diff --git a/test/errorHandler/ErrorHandlerSpec.scala b/test/errorHandler/ErrorHandlerSpec.scala index 993f7021..7da96062 100644 --- a/test/errorHandler/ErrorHandlerSpec.scala +++ b/test/errorHandler/ErrorHandlerSpec.scala @@ -50,11 +50,11 @@ class ErrorHandlerSpec extends UnitSpec with GuiceOneAppPerSuite with Injecting{ val standardErrorTemplate: Html = errorHandler.standardErrorTemplate(title, heading, message) val doc: Document = Jsoup.parse(standardErrorTemplate.toString()) - val docTitle = doc.select("title").text() + val docTitle = doc.title() val docHeading = doc.select("#errorHeading").text() val docMessage = doc.select("#errorText").text() - docTitle shouldBe s"$title - Marriage Allowance - GOV.UK GOV.UK" + docTitle shouldBe title + " - " + messages("title.pattern") docHeading shouldBe heading docMessage shouldBe message } @@ -65,7 +65,7 @@ class ErrorHandlerSpec extends UnitSpec with GuiceOneAppPerSuite with Injecting{ val notFoundTemplate: Html = errorHandler.notFoundTemplate val doc: Document = Jsoup.parse(notFoundTemplate.toString()) - val docTitle = doc.select("title").text() + val docTitle = doc.title() docTitle should include(messages("title.pattern")) } } From c37b341e61027b1c04fe861ffe6ed79c026af035 Mon Sep 17 00:00:00 2001 From: jmsatheesh <19515164+jmsatheesh@users.noreply.github.com> Date: Mon, 19 Aug 2024 11:49:55 +0100 Subject: [PATCH 7/7] DDCNL-9316 - Fixed failed test case --- test/errorHandler/ErrorHandlerSpec.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/errorHandler/ErrorHandlerSpec.scala b/test/errorHandler/ErrorHandlerSpec.scala index 7da96062..92b28fd6 100644 --- a/test/errorHandler/ErrorHandlerSpec.scala +++ b/test/errorHandler/ErrorHandlerSpec.scala @@ -54,7 +54,7 @@ class ErrorHandlerSpec extends UnitSpec with GuiceOneAppPerSuite with Injecting{ val docHeading = doc.select("#errorHeading").text() val docMessage = doc.select("#errorText").text() - docTitle shouldBe title + " - " + messages("title.pattern") + docTitle shouldBe title + " - Marriage Allowance - GOV.UK" docHeading shouldBe heading docMessage shouldBe message } @@ -66,7 +66,7 @@ class ErrorHandlerSpec extends UnitSpec with GuiceOneAppPerSuite with Injecting{ val doc: Document = Jsoup.parse(notFoundTemplate.toString()) val docTitle = doc.title() - docTitle should include(messages("title.pattern")) + docTitle should include("Marriage Allowance - GOV.UK") } } } \ No newline at end of file