From f6a7e7b54eb31cf19750acf10452c4966f357666 Mon Sep 17 00:00:00 2001 From: TomJKing Date: Tue, 9 Jul 2024 08:34:22 +0100 Subject: [PATCH] Remove repeat code from unit test --- project/Dependencies.scala | 2 +- .../api/controllers/LoadController.scala | 6 +- src/test/resources/application.conf | 2 +- .../services/GraphQlApiServiceSpec.scala | 75 +++++++------------ 4 files changed, 33 insertions(+), 52 deletions(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 1f6ae8f..990405e 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -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" -} \ No newline at end of file +} diff --git a/src/main/scala/uk/gov/nationalarchives/tdr/transfer/service/api/controllers/LoadController.scala b/src/main/scala/uk/gov/nationalarchives/tdr/transfer/service/api/controllers/LoadController.scala index 4a91cb3..693aac6 100644 --- a/src/main/scala/uk/gov/nationalarchives/tdr/transfer/service/api/controllers/LoadController.scala +++ b/src/main/scala/uk/gov/nationalarchives/tdr/transfer/service/api/controllers/LoadController.scala @@ -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) @@ -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)) } diff --git a/src/test/resources/application.conf b/src/test/resources/application.conf index 8a4d372..fc2d940 100644 --- a/src/test/resources/application.conf +++ b/src/test/resources/application.conf @@ -15,4 +15,4 @@ auth { s3 { metadataUploadBucket = "s3BucketNameMetadata" recordsUploadBucket = "s3BucketNameRecords" -} \ No newline at end of file +} diff --git a/src/test/scala/uk/gov/nationalarchives/tdr/transfer/service/services/GraphQlApiServiceSpec.scala b/src/test/scala/uk/gov/nationalarchives/tdr/transfer/service/services/GraphQlApiServiceSpec.scala index 38c5d00..e5c8d22 100644 --- a/src/test/scala/uk/gov/nationalarchives/tdr/transfer/service/services/GraphQlApiServiceSpec.scala +++ b/src/test/scala/uk/gov/nationalarchives/tdr/transfer/service/services/GraphQlApiServiceSpec.scala @@ -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() @@ -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() @@ -63,36 +49,18 @@ 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() @@ -100,17 +68,30 @@ class GraphQlApiServiceSpec extends BaseSpec { } "'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") } }