Skip to content

Commit

Permalink
Merge pull request #116 from hmrc/DAC6-3352
Browse files Browse the repository at this point in the history
DAC6-3352[BUG]: fix addressLookup observations
  • Loading branch information
Vishakha1903 authored Oct 7, 2024
2 parents 99ad33b + b40c398 commit 954b27c
Show file tree
Hide file tree
Showing 10 changed files with 188 additions and 79 deletions.
47 changes: 31 additions & 16 deletions app/models/AddressLookup.scala
Original file line number Diff line number Diff line change
Expand Up @@ -27,22 +27,25 @@ case class AddressLookup(addressLine1: Option[String],
addressLine4: Option[String],
town: String,
county: Option[String],
postcode: String
postcode: String,
country: Option[String]
) {

val toAddress: Address = {

val line1 = addressLine1.getOrElse("")
val line2 = addressLine2
val line3 = addressLine3
.map(
l => s"$l $town"
)
.getOrElse(town)
val line4 = addressLine4
val safePostcode = Option(postcode)
val line4 = (addressLine3.isEmpty, addressLine4.isEmpty) match {
case (true, true) => county
case (false, true) => Some(town)
case (_, _) => addressLine4
}
val safePostcode = Option(postcode)
val ctry: Country = Country("", "", country.getOrElse(""))

Address(line1, line2, line3, line4, safePostcode, Country.GB)
Address(line1, line2, line3, line4, safePostcode, ctry)
}

}
Expand All @@ -62,19 +65,22 @@ object AddressLookup {
"lines" -> lines,
"town" -> addressLookup.town,
"county" -> addressLookup.county,
"postcode" -> addressLookup.postcode
"postcode" -> addressLookup.postcode,
"country" -> addressLookup.country
)
)
}

implicit val addressLookupReads: Reads[AddressLookup] =
(
(JsPath \ "address" \ "lines").read[List[String]] and
(JsPath \ "address" \ "town").read[String] and
(JsPath \ "address" \ "county").readNullable[String] and
(JsPath \ "address" \ "postcode").read[String]
) {
(lines, town, county, postcode) =>
((JsPath \ "address" \ "lines").read[List[String]] and
(JsPath \ "address" \ "town").read[String] and
(JsPath \ "address" \ "county").readNullable[String] and
(JsPath \ "address" \ "postcode").read[String] and
(
(JsPath \ "address" \ "country").readNullable[String] orElse
(JsPath \ "address" \ "country" \ "name").readNullable[String]
)) {
(lines, town, county, postcode, countryName) =>
val addressLines: (Option[String], Option[String], Option[String], Option[String]) =
lines.size match {
case 0 =>
Expand All @@ -87,7 +93,16 @@ object AddressLookup {
(Some(lines.head), Some(lines(1)), Some(lines(2)), None)
case numberOfLines if numberOfLines >= 4 => (Some(lines.head), Some(lines(1)), Some(lines(2)), Some(lines(3)))
}
AddressLookup(addressLines._1, addressLines._2, addressLines._3, addressLines._4, town, county, postcode)
AddressLookup(
addressLines._1,
addressLines._2,
addressLines._3,
addressLines._4,
town,
county,
postcode,
countryName
)
}

implicit val addressesLookupReads: Reads[Seq[AddressLookup]] = Reads {
Expand Down
6 changes: 4 additions & 2 deletions app/utils/AddressHelper.scala
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ object AddressHelper {
address.addressLine4,
address.town,
address.postcode,
address.county
address.county,
address.country
)
.collect {
case s: String => s
Expand Down Expand Up @@ -62,7 +63,8 @@ object AddressHelper {
address.addressLine4,
address.town,
address.postcode,
address.county
address.county,
address.country
)
toFormattedAddress(lines)
}
Expand Down
3 changes: 2 additions & 1 deletion test-utils/generators/ModelGenerators.scala
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,8 @@ trait ModelGenerators extends RegexConstants with Generators {
postCode <- arbitrary[String]
town <- arbitrary[String]
county <- arbitrary[Option[String]]
} yield AddressLookup(addressLine1, addressLine2, addressLine3, addressLine4, town, county, postCode)
country <- arbitrary[Option[String]]
} yield AddressLookup(addressLine1, addressLine2, addressLine3, addressLine4, town, county, postCode, country)
}

implicit val arbitraryAddressResponse: Arbitrary[AddressResponse] = Arbitrary {
Expand Down
2 changes: 1 addition & 1 deletion test/base/SpecBase.scala
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ trait SpecBase extends AnyFreeSpec with Matchers with TryValues with OptionValue

val testAddress: Address = Address("value 1", Some("value 2"), "value 3", Some("value 4"), Some("XX9 9XX"), Country.GB)
val testAddressResponse: AddressResponse = AddressResponse("value 1", Some("value 2"), Some("value 3"), Some("value 4"), Some("XX9 9XX"), Country.GB.code)
val testAddressLookup: AddressLookup = AddressLookup(Some("1 Address line 1"), None, None, None, "Town", None, "ZZ1 1ZZ")
val testAddressLookup: AddressLookup = AddressLookup(Some("1 Address line 1"), None, None, None, "Town", None, "ZZ1 1ZZ", Some("United Kingdom"))

implicit val hc: HeaderCarrier = HeaderCarrier()
def emptyUserAnswers: UserAnswers = UserAnswers(userAnswersId)
Expand Down
134 changes: 99 additions & 35 deletions test/connectors/AddressLookupConnectorSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import com.github.tomakehurst.wiremock.client.WireMock.{aResponse, post, urlEqua
import com.github.tomakehurst.wiremock.stubbing.StubMapping
import generators.Generators
import helpers.WireMockServerHandler
import models.AddressLookup
import models.{AddressLookup, Country}
import org.scalatestplus.scalacheck.ScalaCheckPropertyChecks
import play.api.Application
import play.api.http.Status._
Expand Down Expand Up @@ -88,7 +88,7 @@ class AddressLookupConnectorSpec extends SpecBase with WireMockServerHandler wit
stubResponse(addressLookupUrl, OK, addressJson)

val addressLookupResult = Seq(
AddressLookup(Some("1 Address line 1 Road"), None, Some("Address line 2 Road"), None, "Town", Some("County"), postcode)
AddressLookup(Some("1 Address line 1 Road"), None, Some("Address line 2 Road"), None, "Town", Some("County"), postcode, Some("United Kingdom"))
)

val result = connector.addressLookupByPostcode(postcode)
Expand Down Expand Up @@ -918,31 +918,71 @@ class AddressLookupConnectorSpec extends SpecBase with WireMockServerHandler wit
stubResponse(addressLookupUrl, OK, addressesJson)

val addressLookupResult = Vector(
AddressLookup(Some("2 Other place"), None, Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("3 Other place"), None, Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("4 Other place"), None, Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("5 Other place"), None, Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("6 Other place"), None, Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("Flat 1"), Some("7 Other place"), Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("Flat 2"), Some("7 Other place"), Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("Flat 3"), Some("7 Other place"), Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("8 Other place"), None, Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("9 Other place"), None, Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("10 Other place"), None, Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("Suite 1"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("Unit 1"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("Suite 2"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("Unit 2"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("Suite 3"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("Apartment 301"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("Apartment 302"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("Apartment 400"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("99-99a"), Some("Back High Street"), Some("Gosforth"), None, "Newcastle upon Tyne", Some("County"), postcode),
AddressLookup(Some("135 Back High Street"), None, Some("Gosforth"), None, "Newcastle upon Tyne", Some("County"), postcode),
AddressLookup(Some("Efer House 137a"), Some("Back High Street"), Some("Gosforth"), None, "Newcastle upon Tyne", Some("County"), postcode),
AddressLookup(Some("141 Back High Street"), None, Some("Gosforth"), None, "Newcastle upon Tyne", Some("County"), postcode),
AddressLookup(Some("143 Back High Street"), None, Some("Gosforth"), None, "Newcastle upon Tyne", Some("County"), postcode),
AddressLookup(Some("153 Back High Street"), None, Some("Gosforth"), None, "Newcastle upon Tyne", Some("County"), postcode)
AddressLookup(Some("2 Other place"), None, Some("Some District"), None, "Town", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("3 Other place"), None, Some("Some District"), None, "Town", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("4 Other place"), None, Some("Some District"), None, "Town", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("5 Other place"), None, Some("Some District"), None, "Town", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("6 Other place"), None, Some("Some District"), None, "Town", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("Flat 1"), Some("7 Other place"), Some("Some District"), None, "Town", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("Flat 2"), Some("7 Other place"), Some("Some District"), None, "Town", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("Flat 3"), Some("7 Other place"), Some("Some District"), None, "Town", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("8 Other place"), None, Some("Some District"), None, "Town", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("9 Other place"), None, Some("Some District"), None, "Town", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("10 Other place"), None, Some("Some District"), None, "Town", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("Suite 1"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("Unit 1"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("Suite 2"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("Unit 2"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("Suite 3"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("Apartment 301"),
Some("11 Waterloo Street"),
Some("Some District"),
None,
"Town",
Some("County"),
postcode,
Some("United Kingdom")
),
AddressLookup(Some("Apartment 302"),
Some("11 Waterloo Street"),
Some("Some District"),
None,
"Town",
Some("County"),
postcode,
Some("United Kingdom")
),
AddressLookup(Some("Apartment 400"),
Some("11 Waterloo Street"),
Some("Some District"),
None,
"Town",
Some("County"),
postcode,
Some("United Kingdom")
),
AddressLookup(Some("99-99a"),
Some("Back High Street"),
Some("Gosforth"),
None,
"Newcastle upon Tyne",
Some("County"),
postcode,
Some("United Kingdom")
),
AddressLookup(Some("135 Back High Street"), None, Some("Gosforth"), None, "Newcastle upon Tyne", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("Efer House 137a"),
Some("Back High Street"),
Some("Gosforth"),
None,
"Newcastle upon Tyne",
Some("County"),
postcode,
Some("United Kingdom")
),
AddressLookup(Some("141 Back High Street"), None, Some("Gosforth"), None, "Newcastle upon Tyne", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("143 Back High Street"), None, Some("Gosforth"), None, "Newcastle upon Tyne", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("153 Back High Street"), None, Some("Gosforth"), None, "Newcastle upon Tyne", Some("County"), postcode, Some("United Kingdom"))
)

val result = connector.addressLookupByPostcode(postcode)
Expand Down Expand Up @@ -1205,14 +1245,38 @@ class AddressLookupConnectorSpec extends SpecBase with WireMockServerHandler wit
stubResponse(addressLookupUrl, OK, addressesJsonv2)

val addressLookupResult = Vector(
AddressLookup(Some("Suite 1"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("Unit 1"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("Suite 2"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("Unit 2"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("Suite 3"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("Apartment 301"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("Apartment 302"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode),
AddressLookup(Some("Apartment 400"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode)
AddressLookup(Some("Suite 1"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("Unit 1"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("Suite 2"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("Unit 2"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("Suite 3"), Some("11 Waterloo Street"), Some("Some District"), None, "Town", Some("County"), postcode, Some("United Kingdom")),
AddressLookup(Some("Apartment 301"),
Some("11 Waterloo Street"),
Some("Some District"),
None,
"Town",
Some("County"),
postcode,
Some("United Kingdom")
),
AddressLookup(Some("Apartment 302"),
Some("11 Waterloo Street"),
Some("Some District"),
None,
"Town",
Some("County"),
postcode,
Some("United Kingdom")
),
AddressLookup(Some("Apartment 400"),
Some("11 Waterloo Street"),
Some("Some District"),
None,
"Town",
Some("County"),
postcode,
Some("United Kingdom")
)
)

val result = connector.addressLookupByPostcode(postcode)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,18 +45,20 @@ class IsThisAddressControllerSpec extends SpecBase with MockitoSugar {
"1 address street",
addressLine2 = None,
addressLine3 = "Address town",
addressLine4 = None,
addressLine4 = Some("Wessex"),
postCode = Some("postcode"),
country = Country("valid", "GB", "United Kingdom")
)

val addressLookup: AddressLookup = AddressLookup(Some("1 address street"),
addressLine2 = None,
addressLine3 = None,
addressLine4 = None,
town = "Address town",
county = Some("Wessex"),
postcode = "postcode"
val addressLookup: AddressLookup = AddressLookup(
Some("1 address street"),
addressLine2 = None,
addressLine3 = None,
addressLine4 = None,
town = "Address town",
county = Some("Wessex"),
postcode = "postcode",
country = Some("United Kingdom")
)

val userAnswers: UserAnswers = emptyUserAnswers.set(AddressLookupPage, Seq(addressLookup)).success.value
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,8 @@ class PostcodeControllerSpec extends SpecBase with MockitoSugar {
val mockAddressLookupConnector = mock[AddressLookupConnector]

val addresses: Seq[AddressLookup] = Seq(
AddressLookup(Some("1 Address line 1"), None, None, None, "Town", None, "ZZ1 1ZZ"),
AddressLookup(Some("2 Address line 1"), None, None, None, "Town", None, "ZZ1 1ZZ")
AddressLookup(Some("1 Address line 1"), None, None, None, "Town", None, "ZZ1 1ZZ", Some("Jersey")),
AddressLookup(Some("2 Address line 1"), None, None, None, "Town", None, "ZZ1 1ZZ", None)
)

when(mockSessionRepository.set(any())) thenReturn Future.successful(true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ class SelectAddressControllerSpec extends SpecBase with MockitoSugar {
private val ua = emptyUserAnswers.set(NameOfFinancialInstitutionPage, contactName).get

val addresses: Seq[AddressLookup] = Seq(
AddressLookup(Some("1 Address line 1"), None, None, None, "Town", None, "ZZ1 1ZZ"),
AddressLookup(Some("2 Address line 1"), None, None, None, "Town", None, "ZZ1 1ZZ")
AddressLookup(Some("1 Address line 1"), None, None, None, "Town", None, "ZZ1 1ZZ", None),
AddressLookup(Some("2 Address line 1"), None, None, None, "Town", None, "ZZ1 1ZZ", None)
)

val addressOptions: Seq[RadioItem] = Seq(
Expand Down
Loading

0 comments on commit 954b27c

Please sign in to comment.