Skip to content

Commit

Permalink
APIS-6891: Subproject for integration tests (#115)
Browse files Browse the repository at this point in the history
* APIS-6891: Subproject for integration tests

* APIS-6891: build.sbt fixes
  • Loading branch information
johnsgp authored Mar 6, 2024
1 parent 7d681cd commit 657bae7
Show file tree
Hide file tree
Showing 13 changed files with 117 additions and 161 deletions.
6 changes: 3 additions & 3 deletions .scalafmt.conf
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version="3.5.3"
version="3.7.17"
runner.dialect = "scala213"

maxColumn = 180
Expand Down Expand Up @@ -31,9 +31,9 @@ newlines.implicitParamListModifierPrefer = before
newlines.avoidForSimpleOverflow = [tooLong, punct, slc]

rewrite.rules = [SortModifiers]
rewrite.imports.sort = ascii
rewrite.rules = [AsciiSortImports]

verticalMultiline.atDefnSite = true
verticalMultiline.newlineAfterOpenParen = true

includeNoParensInSelectChains = true
includeNoParensInSelectChains = true
Original file line number Diff line number Diff line change
Expand Up @@ -17,34 +17,34 @@
package uk.gov.hmrc.apisubscriptionfields

import java.util.UUID
import scala.concurrent.duration._
import scala.concurrent.{Await, Future}

import cats.data.NonEmptyList
import org.scalatest.featurespec.AnyFeatureSpec
import org.scalatest.matchers.should.Matchers
import org.scalatest.{BeforeAndAfterAll, GivenWhenThen}
import org.scalatestplus.play.guice.GuiceOneServerPerSuite

import play.api.Application
import play.api.inject.guice.GuiceApplicationBuilder
import play.api.libs.json.Json
import play.api.mvc._
import play.api.mvc.request.RequestTarget
import play.api.test.FakeRequest
import play.api.test.Helpers._
import uk.gov.hmrc.apisubscriptionfields.model._

import scala.concurrent.duration._
import scala.concurrent.{Await, Future}
import cats.data.NonEmptyList
import uk.gov.hmrc.apisubscriptionfields.controller.Helper
import uk.gov.hmrc.mongo.MongoComponent

import org.scalatest.matchers.should.Matchers
import org.scalatest.GivenWhenThen
import org.scalatest.BeforeAndAfterAll
import org.scalatest.featurespec.AnyFeatureSpec
import uk.gov.hmrc.apisubscriptionfields.controller.Helper
import uk.gov.hmrc.apisubscriptionfields.model._

trait AcceptanceTestSpec extends AnyFeatureSpec
with GivenWhenThen
with BeforeAndAfterAll
with Matchers
with GuiceOneServerPerSuite
with FieldDefinitionTestData
with Helper {
with GivenWhenThen
with BeforeAndAfterAll
with Matchers
with GuiceOneServerPerSuite
with FieldDefinitionTestData
with Helper {

protected val ValidRequest = FakeRequest()
.withHeaders(RequestHeaders.ACCEPT_HMRC_JSON_HEADER)
Expand Down Expand Up @@ -81,8 +81,8 @@ trait AcceptanceTestSpec extends AnyFeatureSpec
s"/field/application/$clientId/context/$apiContext/version/$apiVersionNbr"

override def fakeApplication(): Application = new GuiceApplicationBuilder().configure(Map(
"metrics.jvm" -> false,
"run.mode" -> "Stub",
"metrics.jvm" -> false,
"run.mode" -> "Stub",
"Test.microservice.services.api-subscription-fields.host" -> ExternalServicesConfig.Host,
"Test.microservice.services.api-subscription-fields.port" -> ExternalServicesConfig.Port
))
Expand All @@ -103,11 +103,11 @@ trait AcceptanceTestSpec extends AnyFeatureSpec
}

private def dropDatabase(): Unit = {
await( app.injector.instanceOf[MongoComponent].database.drop().toFuture())
await(app.injector.instanceOf[MongoComponent].database.drop().toFuture())
}

def createRequest(method: String, path: String) =
ValidRequest
.withMethod(method)
.withTarget( RequestTarget(uriString ="", path= path, queryString = Map.empty))
}
.withTarget(RequestTarget(uriString = "", path = path, queryString = Map.empty))
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,54 +16,54 @@

package uk.gov.hmrc.apisubscriptionfields

import org.scalatest.OptionValues
import org.scalatest.BeforeAndAfterAll
import scala.concurrent.duration._
import scala.concurrent.{Await, Future}

import org.scalatest.{BeforeAndAfterAll, OptionValues}

import play.api.libs.json.Json
import play.api.mvc._
import play.api.mvc.request.RequestTarget
import play.api.test.FakeRequest
import play.api.test.Helpers._
import uk.gov.hmrc.apiplatform.modules.common.domain.models._

import uk.gov.hmrc.apisubscriptionfields.model._
import scala.concurrent.Future
import scala.concurrent.Await
import scala.concurrent.duration._
import uk.gov.hmrc.apisubscriptionfields.utils.ApplicationLogger
import uk.gov.hmrc.apiplatform.modules.common.domain.models._

class ApiSubscriptionFieldsHappySpec extends AcceptanceTestSpec
with OptionValues
with JsonFormatters
with SubscriptionFieldsTestData
with FieldDefinitionTestData
with BeforeAndAfterAll
with ApplicationLogger {
with OptionValues
with JsonFormatters
with SubscriptionFieldsTestData
with FieldDefinitionTestData
with BeforeAndAfterAll
with ApplicationLogger {

override def beforeAll(): Unit = {
super.beforeAll()

val putRequest = validDefinitionPutRequest(NelOfFieldDefinitions)
.withTarget( RequestTarget(uriString="", path=definitionEndpoint(fakeRawContext, fakeRawVersion), queryString = Map.empty))
.withTarget(RequestTarget(uriString = "", path = definitionEndpoint(fakeRawContext, fakeRawVersion), queryString = Map.empty))

Await.result(route(app, putRequest).get, 10.seconds)
}

override def afterAll(): Unit = {
val request = ValidRequest
.withMethod(DELETE)
.withTarget( RequestTarget(uriString="", path=definitionEndpoint(fakeRawContext, fakeRawVersion), queryString = Map.empty))
.withTarget(RequestTarget(uriString = "", path = definitionEndpoint(fakeRawContext, fakeRawVersion), queryString = Map.empty))

route(app, request)

super.afterAll()
}


Feature("Subscription-Fields") {

appLogger.logger.info(s"App.mode = ${app.mode.toString}")

Scenario("the API is called to store some values for a new subscription field") {
val request: Request[AnyContentAsJson] = createSubscriptionFieldsRequest()
val request: Request[AnyContentAsJson] = createSubscriptionFieldsRequest()

When("a PUT request with data is sent to the API")
val result: Option[Future[Result]] = route(app, request)
Expand All @@ -75,7 +75,7 @@ class ApiSubscriptionFieldsHappySpec extends AcceptanceTestSpec
status(resultFuture) shouldBe CREATED

And("the response body should be a valid response")
val sfr = contentAsJson(resultFuture).validate[SubscriptionFields]
val sfr = contentAsJson(resultFuture).validate[SubscriptionFields]
val fieldsId = sfr.get.fieldsId

sfr.isSuccess shouldBe true
Expand All @@ -87,7 +87,7 @@ class ApiSubscriptionFieldsHappySpec extends AcceptanceTestSpec
.withJsonBody(Json.toJson(makeSubscriptionFieldsRequest(SampleFields1)))
}

def createSubscriptionFields()= {
def createSubscriptionFields() = {
route(app, createSubscriptionFieldsRequest())
}

Expand All @@ -108,7 +108,7 @@ class ApiSubscriptionFieldsHappySpec extends AcceptanceTestSpec
status(resultFuture) shouldBe OK

And("the response body should be a valid response")
val sfr = contentAsJson(resultFuture).validate[SubscriptionFields]
val sfr = contentAsJson(resultFuture).validate[SubscriptionFields]
val fieldsId = sfr.get.fieldsId

sfr.isSuccess shouldBe true
Expand All @@ -132,7 +132,7 @@ class ApiSubscriptionFieldsHappySpec extends AcceptanceTestSpec
status(resultFuture) shouldBe OK

And("the response body should be a valid response")
val sfr = contentAsJson(resultFuture).validate[BulkSubscriptionFieldsResponse]
val sfr = contentAsJson(resultFuture).validate[BulkSubscriptionFieldsResponse]
val fieldsId = sfr.get.subscriptions.head.fieldsId

sfr.isSuccess shouldBe true
Expand All @@ -145,7 +145,7 @@ class ApiSubscriptionFieldsHappySpec extends AcceptanceTestSpec

createSubscriptionFields()

val requestId = createRequest(GET, subscriptionFieldsEndpoint(fakeRawClientId, fakeRawContext, fakeRawVersion))
val requestId = createRequest(GET, subscriptionFieldsEndpoint(fakeRawClientId, fakeRawContext, fakeRawVersion))

When("an id GET request with data is sent to the API")
val result: Option[Future[Result]] = route(app, requestId)
Expand All @@ -164,7 +164,6 @@ class ApiSubscriptionFieldsHappySpec extends AcceptanceTestSpec

val requestFieldsId = createRequest(GET, fieldsIdEndpoint(fieldsId.value))


When("a fieldsId GET request with data is sent to the API")
val resultFieldsId: Option[Future[Result]] = route(app, requestFieldsId)

Expand Down Expand Up @@ -193,11 +192,10 @@ class ApiSubscriptionFieldsHappySpec extends AcceptanceTestSpec
result shouldBe defined
val resultFuture = result.value


status(resultFuture) shouldBe OK

And("the response body should be a valid response")
val sfr = contentAsJson(resultFuture).validate[BulkSubscriptionFieldsResponse]
val sfr = contentAsJson(resultFuture).validate[BulkSubscriptionFieldsResponse]
val fieldsId = sfr.get.subscriptions.head.fieldsId

sfr.isSuccess shouldBe true
Expand All @@ -221,7 +219,7 @@ class ApiSubscriptionFieldsHappySpec extends AcceptanceTestSpec
status(resultFuture) shouldBe OK

And("the response body should be a valid response")
val sfr = contentAsJson(resultFuture).validate[SubscriptionFields]
val sfr = contentAsJson(resultFuture).validate[SubscriptionFields]
val fieldsId = sfr.get.fieldsId

sfr.isSuccess shouldBe true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,16 @@

package uk.gov.hmrc.apisubscriptionfields

import scala.concurrent.Future

import org.scalatest.OptionValues

import play.api.libs.json.Json
import play.api.mvc._
import play.api.test.Helpers._
import uk.gov.hmrc.apisubscriptionfields.model.ErrorCode
import uk.gov.hmrc.apisubscriptionfields.model.JsErrorResponse
import uk.gov.hmrc.apisubscriptionfields.utils.ApplicationLogger

import scala.concurrent.Future
import uk.gov.hmrc.apisubscriptionfields.model.{ErrorCode, JsErrorResponse}
import uk.gov.hmrc.apisubscriptionfields.utils.ApplicationLogger

class ApiSubscriptionFieldsUnhappySpec extends AcceptanceTestSpec
with OptionValues
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,5 @@ package uk.gov.hmrc.apisubscriptionfields

object ExternalServicesConfig {
val Port: Int = 11111
val Host = "localhost"
val Host = "localhost"
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,27 +16,28 @@

package uk.gov.hmrc.apisubscriptionfields

import scala.concurrent.Future

import org.scalatest.OptionValues

import play.api.mvc._
import play.api.mvc.request.RequestTarget
import play.api.test.Helpers._

import uk.gov.hmrc.apisubscriptionfields.model._
import scala.concurrent.Future

class SubscriptionFieldDefinitionsHappySpec extends AcceptanceTestSpec
with OptionValues
with SubscriptionFieldsTestData
with FieldDefinitionTestData
with JsonFormatters {

with OptionValues
with SubscriptionFieldsTestData
with FieldDefinitionTestData
with JsonFormatters {

Feature("Fields-Definition") {


Scenario("the API is called to store some new fields definitions") {
Given("Definitiions are created ")
val putRequest = validDefinitionPutRequest(NelOfFieldDefinitions)
.withTarget( RequestTarget(uriString="", path=definitionEndpoint(fakeRawContext, fakeRawVersion), queryString = Map.empty))
.withTarget(RequestTarget(uriString = "", path = definitionEndpoint(fakeRawContext, fakeRawVersion), queryString = Map.empty))

When("a PUT request with data is sent to the API")
val putResult: Option[Future[Result]] = route(app, putRequest)
Expand All @@ -54,14 +55,11 @@ class SubscriptionFieldDefinitionsHappySpec extends AcceptanceTestSpec
sfr.get shouldBe ApiFieldDefinitions(FakeContext, FakeVersion, NelOfFieldDefinitions)
}




Scenario("the API is called to GET a known fields definition") {

Then("a request with a known fields definition")
val request = ValidRequest
.withMethod(GET)
.withMethod(GET)
.withTarget(RequestTarget(uriString = "", path = definitionEndpoint(fakeRawContext, fakeRawVersion), queryString = Map.empty))

When("a GET request with data is sent to the API")
Expand Down Expand Up @@ -106,8 +104,8 @@ class SubscriptionFieldDefinitionsHappySpec extends AcceptanceTestSpec
Scenario("the API is called to update some existing fields definitions") {

Given("a request with valid payload")
val request = validDefinitionPutRequest(NelOfFieldDefinitions)
.withTarget( RequestTarget(uriString="", path=definitionEndpoint(fakeRawContext, fakeRawVersion), queryString = Map.empty))
val request = validDefinitionPutRequest(NelOfFieldDefinitions)
.withTarget(RequestTarget(uriString = "", path = definitionEndpoint(fakeRawContext, fakeRawVersion), queryString = Map.empty))

When("a PUT request with data is sent to the API")
val result: Option[Future[Result]] = route(app, request)
Expand All @@ -129,7 +127,7 @@ class SubscriptionFieldDefinitionsHappySpec extends AcceptanceTestSpec
Given("a request with valid payload")
val request = ValidRequest
.withMethod(DELETE)
.withTarget( RequestTarget(uriString="", path=definitionEndpoint(fakeRawContext, fakeRawVersion), queryString = Map.empty))
.withTarget(RequestTarget(uriString = "", path = definitionEndpoint(fakeRawContext, fakeRawVersion), queryString = Map.empty))

When("a DELETE request sent to the API")
val result: Option[Future[Result]] = route(app, request)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,16 @@

package uk.gov.hmrc.apisubscriptionfields

import scala.concurrent.Future

import org.scalatest.OptionValues

import play.api.libs.json.Json
import play.api.mvc._
import play.api.mvc.request.RequestTarget
import play.api.test.Helpers._
import uk.gov.hmrc.apisubscriptionfields.model.ErrorCode
import uk.gov.hmrc.apisubscriptionfields.model.JsErrorResponse

import scala.concurrent.Future
import uk.gov.hmrc.apisubscriptionfields.model.{ErrorCode, JsErrorResponse}

class SubscriptionFieldDefinitionsUnhappySpec extends AcceptanceTestSpec
with OptionValues
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,12 @@

package uk.gov.hmrc.apisubscriptionfields.controller

import uk.gov.hmrc.apisubscriptionfields.model.{Types, FieldDefinition}
import cats.data.{NonEmptyList => NEL}

import uk.gov.hmrc.apisubscriptionfields.model.{FieldDefinition, Types}

trait Helper {
def makeSubscriptionFieldsRequest(fields: Types.Fields): SubscriptionFieldsRequest = SubscriptionFieldsRequest(fields)
def makeSubscriptionFieldsRequest(fields: Types.Fields): SubscriptionFieldsRequest = SubscriptionFieldsRequest(fields)
def makeFieldDefinitionsRequest(definitions: NEL[FieldDefinition]): FieldDefinitionsRequest = FieldDefinitionsRequest(definitions)
}

Expand Down
Loading

0 comments on commit 657bae7

Please sign in to comment.