From 0a054dc36d43aa62a1b468d897e9fd6b6837b83b Mon Sep 17 00:00:00 2001 From: "jose.puente" Date: Wed, 6 Dec 2017 16:18:34 +0000 Subject: [PATCH] Full API urls in links --- .../gov/hmrc/epayeapi/config/AppContext.scala | 7 ++--- .../epayeapi/connectors/EpayeConnector.scala | 11 +++++--- .../controllers/GetEmpRefsController.scala | 11 ++++---- .../GetMonthlyStatementController.scala | 4 ++- .../controllers/GetSummaryController.scala | 5 ++-- .../epayeapi/models/out/EmpRefsJson.scala | 27 ++++++++++--------- .../gov/hmrc/epayeapi/models/out/Link.scala | 20 +++++++------- .../models/out/MonthlyStatementJson.scala | 18 ++++++------- .../epayeapi/models/out/SummaryJson.scala | 10 +++---- .../gov/hmrc/epayeapi/modules/AppModule.scala | 5 +++- conf/application.conf | 1 + .../1.0/examples/AnnualStatement.get.json | 12 ++++----- .../conf/1.0/examples/Epaye.get.array.json | 14 +++++----- .../1.0/examples/MonthlyStatement.get.json | 12 ++++----- .../api/conf/1.0/examples/Summary.get.json | 4 +-- .../epaye/monthly-statement/out/2017-3.json | 12 ++++----- .../connectors/EpayeConnectorSpec.scala | 8 +++--- .../epayeapi/controllers/GetEmpRefsSpec.scala | 6 ++--- .../epayeapi/controllers/GetSummarySpec.scala | 8 +++--- .../controllers/MonthlyStatementSpec.scala | 20 +++++++------- .../hmrc/epayeapi/models/out/LinkSpecs.scala | 14 ++++++---- test/unit/AppSpec.scala | 3 +++ 22 files changed, 127 insertions(+), 105 deletions(-) diff --git a/app/uk/gov/hmrc/epayeapi/config/AppContext.scala b/app/uk/gov/hmrc/epayeapi/config/AppContext.scala index 7ea285d..8314152 100644 --- a/app/uk/gov/hmrc/epayeapi/config/AppContext.scala +++ b/app/uk/gov/hmrc/epayeapi/config/AppContext.scala @@ -18,7 +18,7 @@ package uk.gov.hmrc.epayeapi.config import javax.inject.{Inject, Singleton} -import play.api.{Configuration, Environment, Logger} +import play.api.{Configuration, Logger} import uk.gov.hmrc.play.config.inject.DefaultServicesConfig import scala.util.Try @@ -31,8 +31,9 @@ case class AppContext @Inject() (config: DefaultServicesConfig) { val appName: String = current.getString("appName").getOrElse(throw new RuntimeException("appName is not configured")) val appUrl: String = current.getString("appUrl").getOrElse(throw new RuntimeException("appUrl is not configured")) val serviceLocatorUrl: String = config.baseUrl("service-locator") - val apiContext: String = current.getString(s"api.context").getOrElse(throw new RuntimeException(s"Missing Key $env.api.context")) - val apiStatus: String = current.getString("api.status").getOrElse(throw new RuntimeException(s"Missing Key $env.api.status")) + val apiContext: String = current.getString("api.context").getOrElse(throw new RuntimeException(s"Missing Key 'api.context' in environment $env.")) + val apiStatus: String = current.getString("api.status").getOrElse(throw new RuntimeException(s"Missing Key 'api.status' in environment $env.")) + val apiBaseUrl : String = current.getString("api.baseUrl").getOrElse(throw new RuntimeException(s"Missing Key 'api.baseUrl' in environment $env.")) val useSandboxConnectors: Boolean = Try(current.getString("useSandboxConnectors").getOrElse("false").toBoolean) .getOrElse(false) diff --git a/app/uk/gov/hmrc/epayeapi/connectors/EpayeConnector.scala b/app/uk/gov/hmrc/epayeapi/connectors/EpayeConnector.scala index 616e379..7e712f6 100644 --- a/app/uk/gov/hmrc/epayeapi/connectors/EpayeConnector.scala +++ b/app/uk/gov/hmrc/epayeapi/connectors/EpayeConnector.scala @@ -27,7 +27,10 @@ import uk.gov.hmrc.play.http.ws.WSHttp import scala.concurrent.{ExecutionContext, Future} -case class EpayeApiConfig(baseUrl: String) +case class EpayeApiConfig( + epayeBaseUrl: String, + apiBaseUrl: String +) @Singleton case class EpayeConnector @Inject() ( @@ -38,7 +41,7 @@ case class EpayeConnector @Inject() ( def getTotal(empRef: EmpRef, headers: HeaderCarrier): Future[EpayeResponse[EpayeTotalsResponse]] = { val url = - s"${config.baseUrl}" + + s"${config.epayeBaseUrl}" + s"/epaye" + s"/${empRef.encodedValue}" + s"/api/v1/annual-statement" @@ -48,7 +51,7 @@ case class EpayeConnector @Inject() ( def getAnnualStatement(empRef: EmpRef, taxYear: TaxYear, headers: HeaderCarrier): Future[EpayeResponse[EpayeAnnualStatement]] = { val url = - s"${config.baseUrl}" + + s"${config.epayeBaseUrl}" + s"/epaye" + s"/${empRef.encodedValue}" + s"/api/v1/annual-statement/${taxYear.asString}" @@ -58,7 +61,7 @@ case class EpayeConnector @Inject() ( def getMonthlyStatement(empRef: EmpRef, headers: HeaderCarrier, taxYear: TaxYear, taxMonth: TaxMonth): Future[EpayeResponse[EpayeMonthlyStatement]] = { val url = - s"${config.baseUrl}" + + s"${config.epayeBaseUrl}" + s"/epaye/${empRef.encodedValue}" + s"/api/v1" + s"/monthly-statement/${taxYear.asString}/${taxMonth.asString}" diff --git a/app/uk/gov/hmrc/epayeapi/controllers/GetEmpRefsController.scala b/app/uk/gov/hmrc/epayeapi/controllers/GetEmpRefsController.scala index 47b570f..cdc8967 100644 --- a/app/uk/gov/hmrc/epayeapi/controllers/GetEmpRefsController.scala +++ b/app/uk/gov/hmrc/epayeapi/controllers/GetEmpRefsController.scala @@ -20,16 +20,17 @@ import javax.inject.{Inject, Singleton} import akka.stream.Materializer import play.api.libs.json.Json -import play.api.mvc.{Action, AnyContent, EssentialAction} +import play.api.mvc.{Action, EssentialAction} import uk.gov.hmrc.auth.core.AuthConnector -import uk.gov.hmrc.domain.EmpRef +import uk.gov.hmrc.epayeapi.connectors.EpayeApiConfig import uk.gov.hmrc.epayeapi.models.Formats._ import uk.gov.hmrc.epayeapi.models.out.EmpRefsJson -import scala.concurrent.{ExecutionContext, Future} +import scala.concurrent.ExecutionContext @Singleton -case class GetEmpRefsController @Inject()( +case class GetEmpRefsController @Inject() ( + config: EpayeApiConfig, authConnector: AuthConnector, implicit val ec: ExecutionContext, implicit val mat: Materializer @@ -38,7 +39,7 @@ case class GetEmpRefsController @Inject()( def getEmpRefs(): EssentialAction = EmpRefsAction { empRefs => Action { request => - Ok(Json.toJson(EmpRefsJson.fromSeq(empRefs.toSeq))) + Ok(Json.toJson(EmpRefsJson.fromSeq(config.apiBaseUrl, empRefs.toSeq))) } } } diff --git a/app/uk/gov/hmrc/epayeapi/controllers/GetMonthlyStatementController.scala b/app/uk/gov/hmrc/epayeapi/controllers/GetMonthlyStatementController.scala index 8fefef5..cc863c1 100644 --- a/app/uk/gov/hmrc/epayeapi/controllers/GetMonthlyStatementController.scala +++ b/app/uk/gov/hmrc/epayeapi/controllers/GetMonthlyStatementController.scala @@ -24,7 +24,7 @@ import play.api.libs.json.Json import play.api.mvc.{Action, EssentialAction} import uk.gov.hmrc.auth.core.AuthConnector import uk.gov.hmrc.domain.EmpRef -import uk.gov.hmrc.epayeapi.connectors.EpayeConnector +import uk.gov.hmrc.epayeapi.connectors.{EpayeApiConfig, EpayeConnector} import uk.gov.hmrc.epayeapi.models.Formats._ import uk.gov.hmrc.epayeapi.models.in.{EpayeJsonError, EpayeNotFound, EpayeResponse, EpayeSuccess} import uk.gov.hmrc.epayeapi.models.out.ApiErrorJson.EmpRefNotFound @@ -35,6 +35,7 @@ import scala.concurrent.ExecutionContext @Singleton case class GetMonthlyStatementController @Inject() ( + config: EpayeApiConfig, authConnector: AuthConnector, epayeConnector: EpayeConnector, implicit val ec: ExecutionContext, @@ -54,6 +55,7 @@ case class GetMonthlyStatementController @Inject() ( case EpayeSuccess(json) => Ok(Json.toJson( MonthlyStatementJson( + config.apiBaseUrl, empRef, taxYear, taxMonth, diff --git a/app/uk/gov/hmrc/epayeapi/controllers/GetSummaryController.scala b/app/uk/gov/hmrc/epayeapi/controllers/GetSummaryController.scala index 5f1e260..8c0e620 100644 --- a/app/uk/gov/hmrc/epayeapi/controllers/GetSummaryController.scala +++ b/app/uk/gov/hmrc/epayeapi/controllers/GetSummaryController.scala @@ -24,7 +24,7 @@ import play.api.libs.json.Json import play.api.mvc.{Action, EssentialAction} import uk.gov.hmrc.auth.core.AuthConnector import uk.gov.hmrc.domain.EmpRef -import uk.gov.hmrc.epayeapi.connectors.EpayeConnector +import uk.gov.hmrc.epayeapi.connectors.{EpayeApiConfig, EpayeConnector} import uk.gov.hmrc.epayeapi.models.Formats._ import uk.gov.hmrc.epayeapi.models.in.{EpayeJsonError, EpayeNotFound, EpayeResponse, EpayeSuccess} import uk.gov.hmrc.epayeapi.models.out.ApiErrorJson.EmpRefNotFound @@ -34,6 +34,7 @@ import scala.concurrent.ExecutionContext @Singleton case class GetSummaryController @Inject() ( + config: EpayeApiConfig, authConnector: AuthConnector, epayeConnector: EpayeConnector, implicit val ec: ExecutionContext, @@ -46,7 +47,7 @@ case class GetSummaryController @Inject() ( Action.async { request => epayeConnector.getTotal(empRef, hc(request)).map { case EpayeSuccess(totals) => - Ok(Json.toJson(SummaryJson(empRef, totals))) + Ok(Json.toJson(SummaryJson(config.apiBaseUrl, empRef, totals))) case EpayeJsonError(err) => Logger.error(s"Upstream returned invalid json: $err") InternalServerError(Json.toJson(ApiErrorJson.InternalServerError)) diff --git a/app/uk/gov/hmrc/epayeapi/models/out/EmpRefsJson.scala b/app/uk/gov/hmrc/epayeapi/models/out/EmpRefsJson.scala index 86cfbab..127b735 100644 --- a/app/uk/gov/hmrc/epayeapi/models/out/EmpRefsJson.scala +++ b/app/uk/gov/hmrc/epayeapi/models/out/EmpRefsJson.scala @@ -24,29 +24,30 @@ case class EmpRefsJson( ) object EmpRefsJson { - def fromSeq(seq: Seq[EmpRef]): EmpRefsJson = - EmpRefsJson(seq.map(EmpRefItem(_)), EmpRefsLinks()) - def apply(empRef: EmpRef): EmpRefsJson = - EmpRefsJson(Seq(EmpRefItem(empRef)), EmpRefsLinks()) + def fromSeq(apiBaseUrl: String, seq: Seq[EmpRef]): EmpRefsJson = + EmpRefsJson(seq.map(EmpRefItem(apiBaseUrl, _)), EmpRefsLinks(apiBaseUrl)) + def apply(apiBaseUrl: String, empRef: EmpRef): EmpRefsJson = + EmpRefsJson(Seq(EmpRefItem(apiBaseUrl, empRef)), EmpRefsLinks(apiBaseUrl)) } case class EmpRefItem(empRef: EmpRef, _links: EmpRefLinks) object EmpRefItem { - def apply(empRef: EmpRef): EmpRefItem = - EmpRefItem(empRef, EmpRefLinks(empRef)) + def apply(apiBaseUrl: String, empRef: EmpRef): EmpRefItem = + EmpRefItem(empRef, EmpRefLinks(apiBaseUrl, empRef)) } -case class EmpRefsLinks(self: Link = Link.empRefsLink()) +case class EmpRefsLinks(self: Link) + +object EmpRefsLinks { + def apply(apiBaseUrl: String): EmpRefsLinks = + new EmpRefsLinks(self = Link.empRefsLink(apiBaseUrl)) +} case class EmpRefLinks(summary: Link) object EmpRefLinks { - def apply(empRef: EmpRef): EmpRefLinks = - EmpRefLinks(summary = Link.summaryLink(empRef)) + def apply(apiBaseUrl: String, empRef: EmpRef): EmpRefLinks = + EmpRefLinks(summary = Link.summaryLink(apiBaseUrl, empRef)) } - - - - diff --git a/app/uk/gov/hmrc/epayeapi/models/out/Link.scala b/app/uk/gov/hmrc/epayeapi/models/out/Link.scala index 818aa64..241039e 100644 --- a/app/uk/gov/hmrc/epayeapi/models/out/Link.scala +++ b/app/uk/gov/hmrc/epayeapi/models/out/Link.scala @@ -24,18 +24,18 @@ case class Link(href: String) object Link { val prefix = "/organisations/paye" - def empRefsLink(): Link = - Link(s"$prefix/") + def empRefsLink(apiBaseUrl: String): Link = + Link(s"$apiBaseUrl$prefix/") - def summaryLink(empRef: EmpRef): Link = - Link(s"$prefix/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}") + def summaryLink(apiBaseUrl: String, empRef: EmpRef): Link = + Link(s"$apiBaseUrl$prefix/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}") - def statementsLink(empRef: EmpRef): Link = - Link(s"$prefix/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}/statements") + def statementsLink(apiBaseUrl: String, empRef: EmpRef): Link = + Link(s"$apiBaseUrl$prefix/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}/statements") - def anualStatementLink(empRef: EmpRef, taxYear: TaxYear): Link = - Link(s"$prefix/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}/statements/${taxYear.asString}") + def anualStatementLink(apiBaseUrl: String, empRef: EmpRef, taxYear: TaxYear): Link = + Link(s"$apiBaseUrl$prefix/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}/statements/${taxYear.asString}") - def monthlyStatementLink(empRef: EmpRef, taxYear: TaxYear, taxMonth: TaxMonth): Link = - Link(s"$prefix/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}/statements/${taxYear.asString}/${taxMonth.asString}") + def monthlyStatementLink(apiBaseUrl: String, empRef: EmpRef, taxYear: TaxYear, taxMonth: TaxMonth): Link = + Link(s"$apiBaseUrl$prefix/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}/statements/${taxYear.asString}/${taxMonth.asString}") } diff --git a/app/uk/gov/hmrc/epayeapi/models/out/MonthlyStatementJson.scala b/app/uk/gov/hmrc/epayeapi/models/out/MonthlyStatementJson.scala index 87977cc..da6b655 100644 --- a/app/uk/gov/hmrc/epayeapi/models/out/MonthlyStatementJson.scala +++ b/app/uk/gov/hmrc/epayeapi/models/out/MonthlyStatementJson.scala @@ -63,7 +63,7 @@ case class MonthlyStatementLinksJson( ) object MonthlyStatementJson { - def apply(empRef: EmpRef, taxYear: TaxYear, taxMonth: TaxMonth, json: EpayeMonthlyStatement): MonthlyStatementJson = + def apply(apiBaseUrl: String, empRef: EmpRef, taxYear: TaxYear, taxMonth: TaxMonth, json: EpayeMonthlyStatement): MonthlyStatementJson = MonthlyStatementJson( taxOfficeNumber = empRef.taxOfficeNumber, taxOfficeReference = empRef.taxOfficeReference, @@ -75,7 +75,7 @@ object MonthlyStatementJson { allocatedPayments = Payments(json.payments), dueDate = json.balance.dueDate, summary = MonthlySummaryJson(json), - _links = MonthlyStatementLinksJson(empRef, taxYear, taxMonth) + _links = MonthlyStatementLinksJson(apiBaseUrl, empRef, taxYear, taxMonth) ) } @@ -111,19 +111,19 @@ object MonthlySummaryJson { } object MonthlyStatementLinksJson { - def apply(empRef: EmpRef, taxYear: TaxYear, taxMonth: TaxMonth): MonthlyStatementLinksJson = + def apply(apiBaseUrl: String, empRef: EmpRef, taxYear: TaxYear, taxMonth: TaxMonth): MonthlyStatementLinksJson = MonthlyStatementLinksJson( empRefs = - Link.empRefsLink(), + Link.empRefsLink(apiBaseUrl), statements = - Link.summaryLink(empRef), + Link.summaryLink(apiBaseUrl, empRef), annualStatement = - Link.anualStatementLink(empRef, taxYear), + Link.anualStatementLink(apiBaseUrl, empRef, taxYear), self = - Link.monthlyStatementLink(empRef, taxYear, taxMonth), + Link.monthlyStatementLink(apiBaseUrl, empRef, taxYear, taxMonth), next = - Link.monthlyStatementLink(empRef, if (taxMonth.isLast) taxYear.next else taxYear, taxMonth.next), + Link.monthlyStatementLink(apiBaseUrl, empRef, if (taxMonth.isLast) taxYear.next else taxYear, taxMonth.next), previous = - Link.monthlyStatementLink(empRef, if (taxMonth.isFirst) taxYear.previous else taxYear, taxMonth.previous) + Link.monthlyStatementLink(apiBaseUrl, empRef, if (taxMonth.isFirst) taxYear.previous else taxYear, taxMonth.previous) ) } diff --git a/app/uk/gov/hmrc/epayeapi/models/out/SummaryJson.scala b/app/uk/gov/hmrc/epayeapi/models/out/SummaryJson.scala index 2955952..250b37f 100644 --- a/app/uk/gov/hmrc/epayeapi/models/out/SummaryJson.scala +++ b/app/uk/gov/hmrc/epayeapi/models/out/SummaryJson.scala @@ -35,7 +35,7 @@ case class SummaryJson( ) object SummaryJson { - def apply(empRef: EmpRef, total: EpayeTotalsResponse): SummaryJson = + def apply(apiBaseUrl: String, empRef: EmpRef, total: EpayeTotalsResponse): SummaryJson = SummaryJson( OutstandingCharges( total.overall, @@ -44,7 +44,7 @@ object SummaryJson { nonRti = total.nonRti.totals.balance.debit ) ), - SummaryLinks(empRef) + SummaryLinks(apiBaseUrl, empRef) ) } @@ -54,9 +54,9 @@ case class SummaryLinks( ) object SummaryLinks { - def apply(empRef: EmpRef): SummaryLinks = SummaryLinks( - Link.empRefsLink(), - Link.summaryLink(empRef) + def apply(apiBaseUrl: String, empRef: EmpRef): SummaryLinks = SummaryLinks( + Link.empRefsLink(apiBaseUrl), + Link.summaryLink(apiBaseUrl, empRef) ) } diff --git a/app/uk/gov/hmrc/epayeapi/modules/AppModule.scala b/app/uk/gov/hmrc/epayeapi/modules/AppModule.scala index ea3de40..e3b5f81 100644 --- a/app/uk/gov/hmrc/epayeapi/modules/AppModule.scala +++ b/app/uk/gov/hmrc/epayeapi/modules/AppModule.scala @@ -39,7 +39,10 @@ class AppModule() extends AbstractModule { @Provides @Singleton def provideEpayeApiConfig(context: AppContext): EpayeApiConfig = { - EpayeApiConfig(context.config.baseUrl("epaye")) + EpayeApiConfig( + context.config.baseUrl("epaye"), + context.apiBaseUrl + ) } @Provides diff --git a/conf/application.conf b/conf/application.conf index 83331d9..22be4ec 100644 --- a/conf/application.conf +++ b/conf/application.conf @@ -189,6 +189,7 @@ Prod { } api { + baseUrl = "https://api.service.hmrc.gov.uk" context = "organisations/paye" status = "PROTOTYPED" } diff --git a/resources/public/api/conf/1.0/examples/AnnualStatement.get.json b/resources/public/api/conf/1.0/examples/AnnualStatement.get.json index 00c3029..912d07c 100644 --- a/resources/public/api/conf/1.0/examples/AnnualStatement.get.json +++ b/resources/public/api/conf/1.0/examples/AnnualStatement.get.json @@ -37,7 +37,7 @@ "isSpecified": false, "_links": { "self": { - "href": "/organisations/paye/840/GZ00064/statements/2016-17/4" + "href": "https://api.service.hmrc.gov.uk/organisations/paye/840/GZ00064/statements/2016-17/4" } } } @@ -45,19 +45,19 @@ }, "_links": { "empRefs": { - "href": "/organisations/paye/" + "href": "https://api.service.hmrc.gov.uk/organisations/paye/" }, "statements": { - "href": "/organisations/paye/840/GZ00064/statements" + "href": "https://api.service.hmrc.gov.uk/organisations/paye/840/GZ00064/statements" }, "self": { - "href": "/organisations/paye/840/GZ00064/statements/2016-17" + "href": "https://api.service.hmrc.gov.uk/organisations/paye/840/GZ00064/statements/2016-17" }, "next": { - "href": "/organisations/paye/840/GZ00064/statements/2017-18" + "href": "https://api.service.hmrc.gov.uk/organisations/paye/840/GZ00064/statements/2017-18" }, "previous": { - "href": "/organisations/paye/840/GZ00064/statements/2015-16" + "href": "https://api.service.hmrc.gov.uk/organisations/paye/840/GZ00064/statements/2015-16" } } } \ No newline at end of file diff --git a/resources/public/api/conf/1.0/examples/Epaye.get.array.json b/resources/public/api/conf/1.0/examples/Epaye.get.array.json index de2c9e8..ef9364e 100644 --- a/resources/public/api/conf/1.0/examples/Epaye.get.array.json +++ b/resources/public/api/conf/1.0/examples/Epaye.get.array.json @@ -6,13 +6,13 @@ "taxOfficeReference": "AB00001", "_links": { "self": { - "href": "/organisations/paye/001/AB00001/" + "href": "https://api.service.hmrc.gov.uk/organisations/paye/001/AB00001" }, "statements": { - "href": "/organisations/paye/001/AB00001/statements/" + "href": "https://api.service.hmrc.gov.uk/organisations/paye/001/AB00001/statements" }, "currentStatement": { - "href": "/organisations/paye/001/AB00001/statements/2017-18" + "href": "https://api.service.hmrc.gov.uk/organisations/paye/001/AB00001/statements/2017-18" } } }, @@ -21,13 +21,13 @@ "taxOfficeReference": "CD00002", "_links": { "self": { - "href": "/organisations/paye/001/CD00002/" + "href": "https://api.service.hmrc.gov.uk/organisations/paye/001/CD00002" }, "statements": { - "href": "/organisations/paye/001/CD00002/statements/" + "href": "https://api.service.hmrc.gov.uk/organisations/paye/001/CD00002/statements" }, "currentStatement": { - "href": "/organisations/paye/001/CD00002/statements/2017-18" + "href": "https://api.service.hmrc.gov.uk/organisations/paye/001/CD00002/statements/2017-18" } } } @@ -35,7 +35,7 @@ }, "_links": { "self": { - "href": "/organisations/paye/" + "href": "https://api.service.hmrc.gov.uk/organisations/paye/" } } } diff --git a/resources/public/api/conf/1.0/examples/MonthlyStatement.get.json b/resources/public/api/conf/1.0/examples/MonthlyStatement.get.json index 7951573..a83a6e5 100644 --- a/resources/public/api/conf/1.0/examples/MonthlyStatement.get.json +++ b/resources/public/api/conf/1.0/examples/MonthlyStatement.get.json @@ -50,24 +50,24 @@ "_links": { "empRefs": { - "href": "/organisations/paye-for-employers/" + "href": "https://api.service.hmrc.gov.uk/organisations/paye/" }, "statements": { - "href": "/organisations/paye-for-employers/001/AB00001/statements/" + "href": "https://api.service.hmrc.gov.uk/organisations/paye/001/AB00001/statements" }, "annualStatement": { - "href": "/organisations/paye-for-employers/001/AB00001/statements/2016-17" + "href": "https://api.service.hmrc.gov.uk/organisations/paye/001/AB00001/statements/2016-17" }, "self": { - "href": "/organisations/paye-for-employers/001/AB00001/statements/2016-17/3" + "href": "https://api.service.hmrc.gov.uk/organisations/paye/001/AB00001/statements/2016-17/3" }, "next": { - "href": "/organisations/paye-for-employers/001/AB00001/statements/2016-17/2" + "href": "https://api.service.hmrc.gov.uk/organisations/paye/001/AB00001/statements/2016-17/2" }, "previous": { - "href": "/organisations/paye-for-employers/001/AB00001/statements/2016-17/4" + "href": "https://api.service.hmrc.gov.uk/organisations/paye/001/AB00001/statements/2016-17/4" } } } diff --git a/resources/public/api/conf/1.0/examples/Summary.get.json b/resources/public/api/conf/1.0/examples/Summary.get.json index bc9d3b1..878b87d 100644 --- a/resources/public/api/conf/1.0/examples/Summary.get.json +++ b/resources/public/api/conf/1.0/examples/Summary.get.json @@ -10,10 +10,10 @@ }, "_links": { "empRefs": { - "href": "/organisations/paye/" + "href": "https://api.service.hmrc.gov.uk/organisations/paye/" }, "self": { - "href": "/organisations/paye/001/AB00001" + "href": "https://api.service.hmrc.gov.uk/organisations/paye/001/AB00001" } } } diff --git a/test/resources/epaye/monthly-statement/out/2017-3.json b/test/resources/epaye/monthly-statement/out/2017-3.json index d21874e..1b7c3a4 100644 --- a/test/resources/epaye/monthly-statement/out/2017-3.json +++ b/test/resources/epaye/monthly-statement/out/2017-3.json @@ -52,22 +52,22 @@ }, "_links": { "empRefs": { - "href": "/organisations/paye/" + "href": "%{apiBaseUrl}/organisations/paye/" }, "statements": { - "href": "/organisations/paye/%{ton}/%{tor}" + "href": "%{apiBaseUrl}/organisations/paye/%{ton}/%{tor}" }, "annualStatement": { - "href": "/organisations/paye/%{ton}/%{tor}/statements/2017-18" + "href": "%{apiBaseUrl}/organisations/paye/%{ton}/%{tor}/statements/2017-18" }, "self": { - "href": "/organisations/paye/%{ton}/%{tor}/statements/2017-18/3" + "href": "%{apiBaseUrl}/organisations/paye/%{ton}/%{tor}/statements/2017-18/3" }, "next": { - "href": "/organisations/paye/%{ton}/%{tor}/statements/2017-18/4" + "href": "%{apiBaseUrl}/organisations/paye/%{ton}/%{tor}/statements/2017-18/4" }, "previous": { - "href": "/organisations/paye/%{ton}/%{tor}/statements/2017-18/2" + "href": "%{apiBaseUrl}/organisations/paye/%{ton}/%{tor}/statements/2017-18/2" } } } diff --git a/test/uk/gov/hmrc/epayeapi/connectors/EpayeConnectorSpec.scala b/test/uk/gov/hmrc/epayeapi/connectors/EpayeConnectorSpec.scala index 427f212..c5065ce 100644 --- a/test/uk/gov/hmrc/epayeapi/connectors/EpayeConnectorSpec.scala +++ b/test/uk/gov/hmrc/epayeapi/connectors/EpayeConnectorSpec.scala @@ -39,13 +39,13 @@ class EpayeConnectorSpec extends UnitSpec with MockitoSugar with ScalaFutures { trait Setup { implicit val hc = HeaderCarrier() val http = mock[WSHttp] - val config = EpayeApiConfig("https://EPAYE") + val config = EpayeApiConfig("https://EPAYE", "http://localhost") val connector = EpayeConnector(config, http, global) val empRef = EmpRefGenerator.getEmpRef - val urlTotals = s"${config.baseUrl}/epaye/${empRef.encodedValue}/api/v1/annual-statement" - val urlTotalsByType = s"${config.baseUrl}/epaye/${empRef.encodedValue}/api/v1/totals/by-type" + val urlTotals = s"${config.epayeBaseUrl}/epaye/${empRef.encodedValue}/api/v1/annual-statement" + val urlTotalsByType = s"${config.epayeBaseUrl}/epaye/${empRef.encodedValue}/api/v1/totals/by-type" def urlAnnualStatement(taxYear: TaxYear): String = - s"${config.baseUrl}/epaye/${empRef.encodedValue}/api/v1/annual-statement/${taxYear.asString}" + s"${config.epayeBaseUrl}/epaye/${empRef.encodedValue}/api/v1/annual-statement/${taxYear.asString}" } "EpayeConnector" should { diff --git a/test/uk/gov/hmrc/epayeapi/controllers/GetEmpRefsSpec.scala b/test/uk/gov/hmrc/epayeapi/controllers/GetEmpRefsSpec.scala index 659bb92..3a98719 100644 --- a/test/uk/gov/hmrc/epayeapi/controllers/GetEmpRefsSpec.scala +++ b/test/uk/gov/hmrc/epayeapi/controllers/GetEmpRefsSpec.scala @@ -52,19 +52,19 @@ class GetEmpRefsSpec extends AppSpec { status(request) shouldBe OK } "return a list of EmpRefs" in new App(build(AuthOk(activeEnrolment))) { - contentAsJson(request) shouldBe Json.toJson(EmpRefsJson(EmpRef(ton.value, tor.value))) + contentAsJson(request) shouldBe Json.toJson(EmpRefsJson(apiBaseUrl, EmpRef(ton.value, tor.value))) } "return 200 OK on inactive enrolments" in new App(build(AuthOk(inactiveEnrolment))) { status(request) shouldBe OK } "return an empty list inactive EmpRefs" in new App(build(AuthOk(inactiveEnrolment))) { - contentAsJson(request) shouldBe Json.toJson(EmpRefsJson.fromSeq(Seq())) + contentAsJson(request) shouldBe Json.toJson(EmpRefsJson.fromSeq(apiBaseUrl, Seq())) } "return 200 OK on different enrolments" in new App(build(AuthOk(differentEnrolment))) { status(request) shouldBe OK } "return an empty list on different enrolments" in new App(build(AuthOk(differentEnrolment))) { - contentAsJson(request) shouldBe Json.toJson(EmpRefsJson.fromSeq(Seq())) + contentAsJson(request) shouldBe Json.toJson(EmpRefsJson.fromSeq(apiBaseUrl, Seq())) } "return 403 Forbidden on insufficient enrolments" in new App(build(AuthFail(new InsufficientEnrolments()))) { status(request) shouldBe FORBIDDEN diff --git a/test/uk/gov/hmrc/epayeapi/controllers/GetSummarySpec.scala b/test/uk/gov/hmrc/epayeapi/controllers/GetSummarySpec.scala index ce92fc2..30844f7 100644 --- a/test/uk/gov/hmrc/epayeapi/controllers/GetSummarySpec.scala +++ b/test/uk/gov/hmrc/epayeapi/controllers/GetSummarySpec.scala @@ -70,7 +70,7 @@ class GetSummarySpec extends AppSpec with BeforeAndAfterEach { "The summary endpoint" should { "return 200 OK on active enrolments" in new App(app.withAuth(activeEnrolment).build) { - val firstUrl = s"${config.baseUrl}" + + val firstUrl = s"${config.epayeBaseUrl}" + s"/epaye" + s"/${empRef.encodedValue}" + s"/api/v1/annual-statement" @@ -103,7 +103,7 @@ class GetSummarySpec extends AppSpec with BeforeAndAfterEach { } contentAsString(request) shouldBe Json.parse( - """ + s""" |{ | "outstandingCharges": { | "amount": 123, @@ -114,10 +114,10 @@ class GetSummarySpec extends AppSpec with BeforeAndAfterEach { | }, | "_links" : { | "empRefs": { - | "href": "/organisations/paye/" + | "href": "$apiBaseUrl/organisations/paye/" | }, | "self": { - | "href": "/organisations/paye/001/AB00001" + | "href": "$apiBaseUrl/organisations/paye/001/AB00001" | } | } |} diff --git a/test/uk/gov/hmrc/epayeapi/controllers/MonthlyStatementSpec.scala b/test/uk/gov/hmrc/epayeapi/controllers/MonthlyStatementSpec.scala index 7833bb8..cf502a9 100644 --- a/test/uk/gov/hmrc/epayeapi/controllers/MonthlyStatementSpec.scala +++ b/test/uk/gov/hmrc/epayeapi/controllers/MonthlyStatementSpec.scala @@ -16,8 +16,6 @@ package uk.gov.hmrc.epayeapi.controllers -import akka.stream.Materializer -import akka.util.Timeout import org.mockito.Matchers._ import org.mockito.Mockito.reset import org.mockito.{Matchers, Mockito} @@ -78,7 +76,7 @@ class MonthlyStatementSpec extends AppSpec with BeforeAndAfterEach { } "return 404 NotFound when the statements are not found" in new App(app.withAuth(activeEnrolment).build) { val epayeUrl = - s"${config.baseUrl}" + + s"${config.epayeBaseUrl}" + s"/epaye/${empRef.encodedValue}" + s"/api/v1" + s"/monthly-statement/${taxYear.asString}/${taxMonth.asString}" @@ -93,7 +91,7 @@ class MonthlyStatementSpec extends AppSpec with BeforeAndAfterEach { "return 200 OK with the found statement" in new App(app.withAuth(activeEnrolment).build) { val inputJsonString: String = getResourceAsString("/epaye/monthly-statement/in/2017-3.json") val epayeUrl = - s"${config.baseUrl}" + + s"${config.epayeBaseUrl}" + s"/epaye/${empRef.encodedValue}" + s"/api/v1" + s"/monthly-statement/${taxYear.asString}/${taxMonth.asString}" @@ -104,14 +102,18 @@ class MonthlyStatementSpec extends AppSpec with BeforeAndAfterEach { } status(request) shouldBe OK - val expectedJsonString = prettyPrint(getResourceAsString("/epaye/monthly-statement/out/2017-3.json") - .replaceAllLiterally("%{ton}", empRef.taxOfficeNumber) - .replaceAllLiterally("%{tor}", empRef.taxOfficeReference)) - contentAsPrettyJson(request) shouldBe expectedJsonString + val expectedJson = + Json.parse( + getResourceAsString("/epaye/monthly-statement/out/2017-3.json") + .replaceAllLiterally("%{ton}", empRef.taxOfficeNumber) + .replaceAllLiterally("%{tor}", empRef.taxOfficeReference) + .replaceAllLiterally("%{apiBaseUrl}", apiBaseUrl) + ) + contentAsJson(request) shouldBe expectedJson } } - def contentAsPrettyJson(result : Future[play.api.mvc.Result]): String = { + def contentAsPrettyJson(result: Future[play.api.mvc.Result]): String = { Json.prettyPrint(contentAsJson(result)) } diff --git a/test/uk/gov/hmrc/epayeapi/models/out/LinkSpecs.scala b/test/uk/gov/hmrc/epayeapi/models/out/LinkSpecs.scala index 0c47372..92b2454 100644 --- a/test/uk/gov/hmrc/epayeapi/models/out/LinkSpecs.scala +++ b/test/uk/gov/hmrc/epayeapi/models/out/LinkSpecs.scala @@ -17,27 +17,31 @@ package uk.gov.hmrc.epayeapi.models.out import common.EmpRefGenerator -import uk.gov.hmrc.domain.EmpRef import uk.gov.hmrc.epayeapi.models.{TaxMonth, TaxYear} import uk.gov.hmrc.play.test.UnitSpec class LinkSpecs extends UnitSpec { val empRef = EmpRefGenerator.getEmpRef + val apiBaseUrl = "[API_BASE_URL]" "Links" should { "generate the right root link" in { - Link.empRefsLink() shouldEqual Link("/organisations/paye/") + Link.empRefsLink(apiBaseUrl) shouldEqual Link(s"$apiBaseUrl/organisations/paye/") } "generate the summary link" in { - Link.summaryLink(empRef) shouldEqual Link(s"/organisations/paye/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}") + Link.summaryLink(apiBaseUrl, empRef) shouldEqual Link(s"$apiBaseUrl/organisations/paye/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}") + } + + "generate the statements link" in { + Link.statementsLink(apiBaseUrl, empRef) shouldEqual Link(s"$apiBaseUrl/organisations/paye/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}/statements") } "generate the annual statement link" in { - Link.anualStatementLink(empRef, TaxYear(2017)) shouldEqual Link(s"/organisations/paye/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}/statements/2017-18") + Link.anualStatementLink(apiBaseUrl, empRef, TaxYear(2017)) shouldEqual Link(s"$apiBaseUrl/organisations/paye/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}/statements/2017-18") } "generate the monthly statement link" in { - Link.monthlyStatementLink(empRef, TaxYear(2017), TaxMonth(TaxYear(2017), 1)) shouldEqual Link(s"/organisations/paye/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}/statements/2017-18/1") + Link.monthlyStatementLink(apiBaseUrl, empRef, TaxYear(2017), TaxMonth(TaxYear(2017), 1)) shouldEqual Link(s"$apiBaseUrl/organisations/paye/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}/statements/2017-18/1") } } } diff --git a/test/unit/AppSpec.scala b/test/unit/AppSpec.scala index e59cb7f..1988a73 100644 --- a/test/unit/AppSpec.scala +++ b/test/unit/AppSpec.scala @@ -67,4 +67,7 @@ abstract class AppSpec // Turning Accumulators into Futures requires materializers implicit def materializer(implicit a: Application): Materializer = inject[Materializer] + + def apiBaseUrl(implicit a: Application): String = + a.configuration.underlying.getString("api.baseUrl") }