Skip to content

Commit

Permalink
Remove repeat code from unit test
Browse files Browse the repository at this point in the history
  • Loading branch information
TomJKing committed Jul 9, 2024
1 parent 3ea86c6 commit f6a7e7b
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 52 deletions.
2 changes: 1 addition & 1 deletion project/Dependencies.scala
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,4 @@ object Dependencies {
lazy val tapirSwaggerUI = "com.softwaremill.sttp.tapir" %% "tapir-swagger-ui-bundle" % tapirVersion

lazy val scalaTest = "org.scalatest" %% "scalatest" % "3.2.18"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import java.util.UUID
import scala.concurrent.ExecutionContext.Implicits.global

class LoadController(graphqlApiService: GraphQlApiService) extends BaseController {
private val appConfig = ApplicationConfig.appConfig
private val s3Config = ApplicationConfig.appConfig.s3

def endpoints: List[Endpoint[String, Unit, BackendException.AuthenticationError, LoadDetails, Any]] = List(initiateLoadEndpoint.endpoint)

Expand All @@ -35,8 +35,8 @@ class LoadController(graphqlApiService: GraphQlApiService) extends BaseControlle
.out(jsonBody[LoadDetails])

private def loadDetails(consignmentId: UUID, userId: UUID): IO[LoadDetails] = {
val recordsS3Bucket = AWSS3LoadDestination(s"${appConfig.s3.recordsUploadBucket}", s"$userId/$consignmentId")
val metadataS3Bucket = AWSS3LoadDestination(s"${appConfig.s3.metadataUploadBucket}", s"$consignmentId/dataload/data-load-metadata.csv")
val recordsS3Bucket = AWSS3LoadDestination(s"${s3Config.recordsUploadBucket}", s"$userId/$consignmentId")
val metadataS3Bucket = AWSS3LoadDestination(s"${s3Config.metadataUploadBucket}", s"$consignmentId/dataload/data-load-metadata.csv")
IO(LoadDetails(consignmentId, recordsLoadDestination = recordsS3Bucket, metadataLoadDestination = metadataS3Bucket))
}

Expand Down
2 changes: 1 addition & 1 deletion src/test/resources/application.conf
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ auth {
s3 {
metadataUploadBucket = "s3BucketNameMetadata"
recordsUploadBucket = "s3BucketNameRecords"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,17 +27,8 @@ class GraphQlApiServiceSpec extends BaseSpec {
"'addConsignment'" should "return the consignment id of the created consignment" in {
val addConsignmentData = AddConsignment(Some(UUID.fromString(consignmentId)), None)

doAnswer(() => new BearerAccessToken("token"))
.when(mockKeycloakToken)
.bearerAccessToken

doAnswer(() => Future(new BearerAccessToken("token")))
.when(keycloak)
.serviceAccountToken[Identity](any[String], any[String])(any[SttpBackend[Identity, Any]], any[ClassTag[Identity[_]]], any[TdrKeycloakDeployment])

doAnswer(() => Future(GraphQlResponse[ac.Data](Option(ac.Data(addConsignmentData)), Nil)))
.when(addConsignmentClient)
.getResult[Identity](any[BearerAccessToken], any[Document], any[Option[ac.Variables]])(any[SttpBackend[Identity, Any]], any[ClassTag[Identity[_]]])
mockKeycloak()
mockAddConsignmentClient(Some(ac.Data(addConsignmentData)))

val response = GraphQlApiService.apply(addConsignmentClient, startUploadClient).addConsignment(mockKeycloakToken).unsafeRunSync()

Expand All @@ -46,13 +37,8 @@ class GraphQlApiServiceSpec extends BaseSpec {
}

"'addConsignment'" should "throw an exception when no consignment added" in {
doAnswer(() => Future(new BearerAccessToken("token")))
.when(keycloak)
.serviceAccountToken[Identity](any[String], any[String])(any[SttpBackend[Identity, Any]], any[ClassTag[Identity[_]]], any[TdrKeycloakDeployment])

doAnswer(() => Future(GraphQlResponse[ac.Data](None, Nil)))
.when(addConsignmentClient)
.getResult[Identity](any[BearerAccessToken], any[Document], any[Option[ac.Variables]])(any[SttpBackend[Identity, Any]], any[ClassTag[Identity[_]]])
mockKeycloak()
mockAddConsignmentClient(None)

val exception = intercept[RuntimeException] {
GraphQlApiService.apply(addConsignmentClient, startUploadClient).addConsignment(mockKeycloakToken).unsafeRunSync()
Expand All @@ -63,54 +49,49 @@ class GraphQlApiServiceSpec extends BaseSpec {
"'startUpload'" should "return parent folder name if provided" in {
val startUploadData = "parentFolder"

doAnswer(() => new BearerAccessToken("token"))
.when(mockKeycloakToken)
.bearerAccessToken

doAnswer(() => Future(new BearerAccessToken("token")))
.when(keycloak)
.serviceAccountToken[Identity](any[String], any[String])(any[SttpBackend[Identity, Any]], any[ClassTag[Identity[_]]], any[TdrKeycloakDeployment])

doAnswer(() => Future(GraphQlResponse[su.Data](Option(su.Data(startUploadData)), Nil)))
.when(startUploadClient)
.getResult[Identity](any[BearerAccessToken], any[Document], any[Option[su.Variables]])(any[SttpBackend[Identity, Any]], any[ClassTag[Identity[_]]])
mockKeycloak()
mockStartUploadClient(Some(su.Data(startUploadData)))

val response =
GraphQlApiService.apply(addConsignmentClient, startUploadClient).startUpload(mockKeycloakToken, UUID.fromString(consignmentId), Some("parentFolder")).unsafeRunSync()

response shouldBe "parentFolder"
response shouldBe startUploadData
}

"'startUpload'" should "return empty string if no parent folder provided" in {
doAnswer(() => new BearerAccessToken("token"))
.when(mockKeycloakToken)
.bearerAccessToken

doAnswer(() => Future(new BearerAccessToken("token")))
.when(keycloak)
.serviceAccountToken[Identity](any[String], any[String])(any[SttpBackend[Identity, Any]], any[ClassTag[Identity[_]]], any[TdrKeycloakDeployment])

doAnswer(() => Future(GraphQlResponse[su.Data](Option(su.Data("")), Nil)))
.when(startUploadClient)
.getResult[Identity](any[BearerAccessToken], any[Document], any[Option[su.Variables]])(any[SttpBackend[Identity, Any]], any[ClassTag[Identity[_]]])
mockKeycloak()
mockStartUploadClient(Some(su.Data("")))

val response = GraphQlApiService.apply(addConsignmentClient, startUploadClient).startUpload(mockKeycloakToken, UUID.fromString(consignmentId)).unsafeRunSync()

response shouldBe ""
}

"'startUpload'" should "throw an exception when no consignment added" in {
mockKeycloak()
mockStartUploadClient(None)

val exception = intercept[RuntimeException] {
GraphQlApiService.apply(addConsignmentClient, startUploadClient).startUpload(mockKeycloakToken, UUID.fromString(consignmentId)).unsafeRunSync()
}
exception.getMessage should equal(s"Load not started for consignment: 6e3b76c4-1745-4467-8ac5-b4dd736e1b3e")
}

def mockKeycloak(): Future[BearerAccessToken] = {
doAnswer(() => Future(new BearerAccessToken("token")))
.when(keycloak)
.serviceAccountToken[Identity](any[String], any[String])(any[SttpBackend[Identity, Any]], any[ClassTag[Identity[_]]], any[TdrKeycloakDeployment])
}

def mockAddConsignmentClient(response: Option[ac.Data]): Future[GraphQlResponse[ac.Data]] = {
doAnswer(() => Future(GraphQlResponse[ac.Data](response, Nil)))
.when(addConsignmentClient)
.getResult[Identity](any[BearerAccessToken], any[Document], any[Option[ac.Variables]])(any[SttpBackend[Identity, Any]], any[ClassTag[Identity[_]]])
}

doAnswer(() => Future(GraphQlResponse[su.Data](None, Nil)))
def mockStartUploadClient(response: Option[su.Data]): Future[GraphQlResponse[su.Data]] = {
doAnswer(() => Future(GraphQlResponse[su.Data](response, Nil)))
.when(startUploadClient)
.getResult[Identity](any[BearerAccessToken], any[Document], any[Option[su.Variables]])(any[SttpBackend[Identity, Any]], any[ClassTag[Identity[_]]])

val exception = intercept[RuntimeException] {
GraphQlApiService.apply(addConsignmentClient, startUploadClient).startUpload(mockKeycloakToken, UUID.fromString(consignmentId)).unsafeRunSync()
}
exception.getMessage should equal(s"Load not started for consignment: 6e3b76c4-1745-4467-8ac5-b4dd736e1b3e")
}
}

0 comments on commit f6a7e7b

Please sign in to comment.