diff --git a/app/uk/gov/hmrc/epayeapi/controllers/GetAnnualStatementController.scala b/app/uk/gov/hmrc/epayeapi/controllers/GetAnnualStatementController.scala index 054b0b8..8755cb6 100644 --- a/app/uk/gov/hmrc/epayeapi/controllers/GetAnnualStatementController.scala +++ b/app/uk/gov/hmrc/epayeapi/controllers/GetAnnualStatementController.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.TaxYear import uk.gov.hmrc.epayeapi.models.in._ @@ -35,6 +35,7 @@ import scala.concurrent.ExecutionContext @Singleton case class GetAnnualStatementController @Inject() ( + config: EpayeApiConfig, authConnector: AuthConnector, epayeConnector: EpayeConnector, implicit val ec: ExecutionContext, @@ -42,12 +43,12 @@ case class GetAnnualStatementController @Inject() ( ) extends ApiController { - def getAnnualStatement(empRef: EmpRef, taxYear:TaxYear): EssentialAction = + def getAnnualStatement(empRef: EmpRef, taxYear: TaxYear): EssentialAction = EmpRefAction(empRef) { Action.async { request => epayeConnector.getAnnualStatement(empRef, taxYear, hc(request)).map { case EpayeSuccess(epayeAnnualStatement) => - Ok(Json.toJson(AnnualStatementJson(empRef, taxYear, epayeAnnualStatement))) + Ok(Json.toJson(AnnualStatementJson(config.apiBaseUrl, empRef, taxYear, epayeAnnualStatement))) 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/AnnualStatementJson.scala b/app/uk/gov/hmrc/epayeapi/models/out/AnnualStatementJson.scala index 5d16b70..49c6a97 100644 --- a/app/uk/gov/hmrc/epayeapi/models/out/AnnualStatementJson.scala +++ b/app/uk/gov/hmrc/epayeapi/models/out/AnnualStatementJson.scala @@ -18,7 +18,6 @@ package uk.gov.hmrc.epayeapi.models.out import org.joda.time.LocalDate import uk.gov.hmrc.domain.EmpRef -import uk.gov.hmrc.epayeapi.models import uk.gov.hmrc.epayeapi.models.in.{EpayeAnnualStatement, LineItem} import uk.gov.hmrc.epayeapi.models.{TaxMonth, TaxYear} @@ -95,18 +94,19 @@ case class MonthlyChargesJson( object MonthlyChargesJson { - def from(lineItem: LineItem, empRef: EmpRef, taxYear: TaxYear): Option[MonthlyChargesJson] = { + def from(apiBaseUrl: String, lineItem: LineItem, empRef: EmpRef, taxYear: TaxYear): Option[MonthlyChargesJson] = { for { - taxMonth <- lineItem.taxMonth + epayeTaxMonth <- lineItem.taxMonth + taxMonth = TaxMonth(taxYear, epayeTaxMonth.month) } yield MonthlyChargesJson( - taxMonth = models.TaxMonth(taxYear, taxMonth.month), + taxMonth = taxMonth, amount = lineItem.charges.debit, clearedByCredits = lineItem.cleared.credit, clearedByPayments = lineItem.cleared.payment, balance = lineItem.balance.debit, dueDate = lineItem.dueDate, isSpecified = lineItem.isSpecified, - _links = SelfLink(Link(s"${AnnualStatementJson.baseUrlFor(empRef)}/statements/${taxYear.asString}/${taxMonth.month}")) + _links = SelfLink(Link.monthlyStatementLink(apiBaseUrl, empRef, taxYear, taxMonth)) ) } } @@ -131,25 +131,20 @@ case class AnnualStatementJson( ) object AnnualStatementJson { - val baseUrl = "/organisations/paye" - - def baseUrlFor(empRef: EmpRef): String = - s"$baseUrl/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}" - - def apply(empRef: EmpRef, taxYear: TaxYear, epayeAnnualStatement: EpayeAnnualStatement): AnnualStatementJson = + def apply(apiBaseUrl: String, empRef: EmpRef, taxYear: TaxYear, epayeAnnualStatement: EpayeAnnualStatement): AnnualStatementJson = AnnualStatementJson( taxYear = taxYear, _embedded = EmbeddedRtiChargesJson( EarlierYearUpdateJson.extractFrom(epayeAnnualStatement.rti.lineItems), - epayeAnnualStatement.rti.lineItems.flatMap(MonthlyChargesJson.from(_, empRef, taxYear)) + epayeAnnualStatement.rti.lineItems.flatMap(MonthlyChargesJson.from(apiBaseUrl, _, empRef, taxYear)) ), nonRtiCharges = epayeAnnualStatement.nonRti.lineItems.flatMap(NonRtiChargesJson.from(_, taxYear)), _links = AnnualStatementLinksJson( - empRefs = Link(baseUrl), - statements = Link(s"${baseUrlFor(empRef)}/statements"), - self = Link(s"${baseUrlFor(empRef)}/statements/${taxYear.asString}"), - next = Link(s"${baseUrlFor(empRef)}/statements/${taxYear.next.asString}"), - previous = Link(s"${baseUrlFor(empRef)}/statements/${taxYear.previous.asString}") + empRefs = Link.empRefsLink(apiBaseUrl), + statements = Link.statementsLink(apiBaseUrl, empRef), + self = Link.anualStatementLink(apiBaseUrl, empRef, taxYear), + next = Link.anualStatementLink(apiBaseUrl, empRef, taxYear.next), + previous = Link.anualStatementLink(apiBaseUrl, empRef, taxYear.previous) ) ) diff --git a/test/common/Fixtures.scala b/test/common/Fixtures.scala index d88480d..9fb6b4d 100644 --- a/test/common/Fixtures.scala +++ b/test/common/Fixtures.scala @@ -156,7 +156,7 @@ object Fixtures { |} """.stripMargin - def expectedAnnualStatementJson(empRef: EmpRef): JsValue = Json.parse( + def expectedAnnualStatementJson(apiBaseUrl: String, empRef: EmpRef): JsValue = Json.parse( s""" |{ | "taxYear": { @@ -197,7 +197,7 @@ object Fixtures { | "isSpecified": false, | "_links": { | "self": { - | "href": "/organisations/paye/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}/statements/2017-18/7" + | "href": "$apiBaseUrl/organisations/paye/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}/statements/2017-18/7" | } | } | }, @@ -215,7 +215,7 @@ object Fixtures { | "isSpecified": true, | "_links": { | "self": { - | "href": "/organisations/paye/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}/statements/2017-18/3" + | "href": "$apiBaseUrl/organisations/paye/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}/statements/2017-18/3" | } | } | } @@ -223,23 +223,24 @@ object Fixtures { | }, | "_links": { | "empRefs": { - | "href": "/organisations/paye" + | "href": "$apiBaseUrl/organisations/paye/" | }, | "statements": { - | "href": "/organisations/paye/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}/statements" + | "href": "$apiBaseUrl/organisations/paye/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}/statements" | }, | "self": { - | "href": "/organisations/paye/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}/statements/2017-18" + | "href": "$apiBaseUrl/organisations/paye/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}/statements/2017-18" | }, | "next": { - | "href": "/organisations/paye/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}/statements/2018-19" + | "href": "$apiBaseUrl/organisations/paye/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}/statements/2018-19" | }, | "previous": { - | "href": "/organisations/paye/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}/statements/2016-17" + | "href": "$apiBaseUrl/organisations/paye/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}/statements/2016-17" | } | } |} - """.stripMargin) + """.stripMargin + ) def authorisedEnrolmentJson(empRef: EmpRef): String = { s""" @@ -266,5 +267,4 @@ object Fixtures { """.stripMargin } - } diff --git a/test/integration/GetAnnualStatementSpec.scala b/test/integration/GetAnnualStatementSpec.scala index 4754b47..78a54b5 100644 --- a/test/integration/GetAnnualStatementSpec.scala +++ b/test/integration/GetAnnualStatementSpec.scala @@ -39,6 +39,8 @@ class GetAnnualStatementSpec extends WordSpec "AnnualStatement API should return a statement " should { "containing EYU data" in { + val apiBaseUrl = app.configuration.underlying.getString("api.baseUrl") + val empRef = EmpRefGenerator.getEmpRef val annualStatementUrl = @@ -54,7 +56,8 @@ class GetAnnualStatementSpec extends WordSpec .get(annualStatementUrl).withAuthHeader() .thenAssertThat() .bodyIsOfJson( - Fixtures.expectedAnnualStatementJson(empRef)) + Fixtures.expectedAnnualStatementJson(apiBaseUrl, empRef) + ) } } } diff --git a/test/uk/gov/hmrc/epayeapi/models/JsonFixtures.scala b/test/uk/gov/hmrc/epayeapi/models/JsonFixtures.scala index 54d5424..1e219ef 100644 --- a/test/uk/gov/hmrc/epayeapi/models/JsonFixtures.scala +++ b/test/uk/gov/hmrc/epayeapi/models/JsonFixtures.scala @@ -29,11 +29,6 @@ object JsonFixtures { lazy val annualStatement: String = getResourceAsString("/epaye/annual-statement/annual-statement.json") } - val baseUrl = "/organisations/paye" - - def baseUrlFor(empRef: EmpRef): String = - s"$baseUrl/${empRef.taxOfficeNumber}/${empRef.taxOfficeReference}" - val emptyEpayeAnnualStatement = EpayeAnnualStatement( rti = AnnualStatementTable( diff --git a/test/uk/gov/hmrc/epayeapi/models/out/AnnualStatementJsonSpec.scala b/test/uk/gov/hmrc/epayeapi/models/out/AnnualStatementJsonSpec.scala index 67ac0ad..d712c98 100644 --- a/test/uk/gov/hmrc/epayeapi/models/out/AnnualStatementJsonSpec.scala +++ b/test/uk/gov/hmrc/epayeapi/models/out/AnnualStatementJsonSpec.scala @@ -19,12 +19,12 @@ package uk.gov.hmrc.epayeapi.models.out import common.EmpRefGenerator import org.joda.time.LocalDate import org.scalatest.{Matchers, WordSpec} -import uk.gov.hmrc.domain.EmpRef -import uk.gov.hmrc.epayeapi.models.JsonFixtures.{baseUrl, baseUrlFor, emptyEpayeAnnualStatement} +import uk.gov.hmrc.epayeapi.models.JsonFixtures.emptyEpayeAnnualStatement import uk.gov.hmrc.epayeapi.models.in._ import uk.gov.hmrc.epayeapi.models.{TaxMonth, TaxYear} class AnnualStatementJsonSpec extends WordSpec with Matchers { + val apiBaseUrl = "[API_BASE_URL]" val empRef = EmpRefGenerator.getEmpRef val dueDate = new LocalDate(2017, 5, 22) @@ -32,13 +32,13 @@ class AnnualStatementJsonSpec extends WordSpec with Matchers { "AnnualStatementJson.apply._links" should { "contain the right links" in { - AnnualStatementJson(empRef, taxYear, emptyEpayeAnnualStatement)._links shouldBe + AnnualStatementJson(apiBaseUrl, empRef, taxYear, emptyEpayeAnnualStatement)._links shouldBe AnnualStatementLinksJson( - empRefs = Link(baseUrl), - statements = Link(s"${baseUrlFor(empRef)}/statements"), - self = Link(s"${baseUrlFor(empRef)}/statements/${taxYear.asString}"), - next = Link(s"${baseUrlFor(empRef)}/statements/${taxYear.next.asString}"), - previous = Link(s"${baseUrlFor(empRef)}/statements/${taxYear.previous.asString}") + empRefs = Link.empRefsLink(apiBaseUrl), + statements = Link.statementsLink(apiBaseUrl, empRef), + self = Link.anualStatementLink(apiBaseUrl, empRef, taxYear), + next = Link.anualStatementLink(apiBaseUrl, empRef, taxYear.next), + previous = Link.anualStatementLink(apiBaseUrl, empRef, taxYear.previous) ) } } @@ -72,7 +72,7 @@ class AnnualStatementJsonSpec extends WordSpec with Matchers { ) ) - AnnualStatementJson(empRef, taxYear, epayeAnnualStatement)._embedded.earlierYearUpdate shouldBe + AnnualStatementJson(apiBaseUrl, empRef, taxYear, epayeAnnualStatement)._embedded.earlierYearUpdate shouldBe Some(EarlierYearUpdateJson( amount = 100, clearedByCredits = 20, @@ -82,7 +82,7 @@ class AnnualStatementJsonSpec extends WordSpec with Matchers { )) } "return a None if it is not present" in { - AnnualStatementJson(empRef, taxYear, emptyEpayeAnnualStatement)._embedded.earlierYearUpdate shouldBe None + AnnualStatementJson(apiBaseUrl, empRef, taxYear, emptyEpayeAnnualStatement)._embedded.earlierYearUpdate shouldBe None } } @@ -102,7 +102,7 @@ class AnnualStatementJsonSpec extends WordSpec with Matchers { codeText = None ) - MonthlyChargesJson.from(lineItem, empRef, taxYear) shouldBe + MonthlyChargesJson.from(apiBaseUrl, lineItem, empRef, taxYear) shouldBe Some(MonthlyChargesJson( taxMonth = TaxMonth(taxYear, taxMonth.month), amount = 100, @@ -111,7 +111,7 @@ class AnnualStatementJsonSpec extends WordSpec with Matchers { balance = 100 - 10 - 20, dueDate = dueDate, isSpecified = true, - _links = SelfLink(Link(s"${baseUrlFor(empRef)}/statements/${taxYear.asString}/${taxMonth.asString}")) + _links = SelfLink(Link.monthlyStatementLink(apiBaseUrl, empRef, taxYear, taxMonth)) )) } "return a None if the taxMonth field is None" in { @@ -127,7 +127,7 @@ class AnnualStatementJsonSpec extends WordSpec with Matchers { codeText = None ) - MonthlyChargesJson.from(lineItem, empRef, taxYear) shouldBe None + MonthlyChargesJson.from(apiBaseUrl, lineItem, empRef, taxYear) shouldBe None } }