Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Full API urls in annual statement links #29

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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._
Expand All @@ -35,19 +35,20 @@ import scala.concurrent.ExecutionContext

@Singleton
case class GetAnnualStatementController @Inject() (
config: EpayeApiConfig,
authConnector: AuthConnector,
epayeConnector: EpayeConnector,
implicit val ec: ExecutionContext,
implicit val mat: Materializer
)
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))
Expand Down
29 changes: 12 additions & 17 deletions app/uk/gov/hmrc/epayeapi/models/out/AnnualStatementJson.scala
Original file line number Diff line number Diff line change
Expand Up @@ -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}

Expand Down Expand Up @@ -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))
)
}
}
Expand All @@ -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)
)
)

Expand Down
20 changes: 10 additions & 10 deletions test/common/Fixtures.scala
Original file line number Diff line number Diff line change
Expand Up @@ -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": {
Expand Down Expand Up @@ -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"
| }
| }
| },
Expand All @@ -215,31 +215,32 @@ 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"
| }
| }
| }
| ]
| },
| "_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"""
Expand All @@ -266,5 +267,4 @@ object Fixtures {
""".stripMargin
}


}
5 changes: 4 additions & 1 deletion test/integration/GetAnnualStatementSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -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 =
Expand All @@ -54,7 +56,8 @@ class GetAnnualStatementSpec extends WordSpec
.get(annualStatementUrl).withAuthHeader()
.thenAssertThat()
.bodyIsOfJson(
Fixtures.expectedAnnualStatementJson(empRef))
Fixtures.expectedAnnualStatementJson(apiBaseUrl, empRef)
)
}
}
}
5 changes: 0 additions & 5 deletions test/uk/gov/hmrc/epayeapi/models/JsonFixtures.scala
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
26 changes: 13 additions & 13 deletions test/uk/gov/hmrc/epayeapi/models/out/AnnualStatementJsonSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -19,26 +19,26 @@ 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)

val taxYear = TaxYear(2016)

"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)
)
}
}
Expand Down Expand Up @@ -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,
Expand All @@ -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
}
}

Expand All @@ -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,
Expand All @@ -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 {
Expand All @@ -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
}
}

Expand Down