From fdc9e406bb338d3bf3563484790edf54afd69cbd Mon Sep 17 00:00:00 2001 From: nttdata-rtorsoli Date: Wed, 31 Jan 2024 13:40:11 +0100 Subject: [PATCH 1/2] PIN-4485 BKE- The update of the label of a document is not allowed if the descriptor is not draft --- .../api/impl/ProcessApiServiceImpl.scala | 2 + .../api/impl/ResponseHandlers.scala | 2 + .../catalogprocess/CatalogProcessSpec.scala | 63 ++++++++++++++++++- 3 files changed, 65 insertions(+), 2 deletions(-) diff --git a/src/main/scala/it/pagopa/interop/catalogprocess/api/impl/ProcessApiServiceImpl.scala b/src/main/scala/it/pagopa/interop/catalogprocess/api/impl/ProcessApiServiceImpl.scala index bd607458..6e392ae8 100644 --- a/src/main/scala/it/pagopa/interop/catalogprocess/api/impl/ProcessApiServiceImpl.scala +++ b/src/main/scala/it/pagopa/interop/catalogprocess/api/impl/ProcessApiServiceImpl.scala @@ -583,6 +583,8 @@ final case class ProcessApiServiceImpl( documentUuid <- documentId.toFutureUUID catalogItem <- catalogManagementService.getEServiceById(eServiceUuid) _ <- assertRequesterAllowed(catalogItem.producerId)(organizationId) + descriptor <- assertDescriptorExists(catalogItem, descriptorUuid) + _ <- isDraftDescriptor(descriptor) result <- catalogManagementService .updateEServiceDocument(eServiceId, descriptorUuid.toString, documentUuid.toString, clientSeed) .map(_.toApi) diff --git a/src/main/scala/it/pagopa/interop/catalogprocess/api/impl/ResponseHandlers.scala b/src/main/scala/it/pagopa/interop/catalogprocess/api/impl/ResponseHandlers.scala index 88c12e55..34ac54b3 100644 --- a/src/main/scala/it/pagopa/interop/catalogprocess/api/impl/ResponseHandlers.scala +++ b/src/main/scala/it/pagopa/interop/catalogprocess/api/impl/ResponseHandlers.scala @@ -224,8 +224,10 @@ object ResponseHandlers extends AkkaResponses { )(result: Try[T])(implicit contexts: Seq[(String, String)], logger: LoggerTakingImplicit[ContextFieldsToLog]): Route = result match { case Success(s) => success(s) + case Failure(ex: NotValidDescriptor) => badRequest(ex, logMessage) case Failure(ex: OperationForbidden.type) => forbidden(ex, logMessage) case Failure(ex: EServiceNotFound) => notFound(ex, logMessage) + case Failure(ex: EServiceDescriptorNotFound) => notFound(ex, logMessage) case Failure(ex: DescriptorDocumentNotFound) => notFound(ex, logMessage) case Failure(ex) => internalServerError(ex, logMessage) } diff --git a/src/test/scala/it/pagopa/interop/catalogprocess/CatalogProcessSpec.scala b/src/test/scala/it/pagopa/interop/catalogprocess/CatalogProcessSpec.scala index f9a9871d..2efd21bb 100644 --- a/src/test/scala/it/pagopa/interop/catalogprocess/CatalogProcessSpec.scala +++ b/src/test/scala/it/pagopa/interop/catalogprocess/CatalogProcessSpec.scala @@ -2659,7 +2659,7 @@ class CatalogProcessSpec extends SpecHelper with AnyWordSpecLike with ScalatestR } } "Document update" should { - "succeed" in { + "succeed only on draft descriptor" in { val requesterId = UUID.randomUUID() val descriptorId = UUID.randomUUID() val documentId = UUID.randomUUID() @@ -2668,7 +2668,11 @@ class CatalogProcessSpec extends SpecHelper with AnyWordSpecLike with ScalatestR Seq("bearer" -> bearerToken, USER_ROLES -> "admin", ORGANIZATION_ID_CLAIM -> requesterId.toString) val descriptor = - SpecData.catalogDescriptor.copy(id = descriptorId, docs = Seq(SpecData.catalogDocument.copy(id = documentId))) + SpecData.catalogDescriptor.copy( + id = descriptorId, + state = Draft, + docs = Seq(SpecData.catalogDocument.copy(id = documentId)) + ) val eService = SpecData.catalogItem.copy(descriptors = Seq(descriptor), producerId = requesterId) @@ -2703,6 +2707,36 @@ class CatalogProcessSpec extends SpecHelper with AnyWordSpecLike with ScalatestR status shouldEqual StatusCodes.OK } } + "fail if descriptor is not draft" in { + val requesterId = UUID.randomUUID() + val descriptorId = UUID.randomUUID() + val documentId = UUID.randomUUID() + + implicit val context: Seq[(String, String)] = + Seq("bearer" -> bearerToken, USER_ROLES -> "admin", ORGANIZATION_ID_CLAIM -> requesterId.toString) + + val descriptor = + SpecData.catalogDescriptor.copy(id = descriptorId, docs = Seq(SpecData.catalogDocument.copy(id = documentId))) + + val eService = SpecData.catalogItem.copy(descriptors = Seq(descriptor), producerId = requesterId) + + val seed = UpdateEServiceDescriptorDocumentSeed(prettyName = "prettyNameUpdated") + + (mockCatalogManagementService + .getEServiceById(_: UUID)(_: ExecutionContext, _: ReadModelService)) + .expects(SpecData.catalogItem.id, *, *) + .once() + .returns(Future.successful(eService)) + + Post() ~> service.updateEServiceDocumentById( + SpecData.catalogItem.id.toString, + descriptorId.toString, + documentId.toString, + seed + ) ~> check { + status shouldEqual StatusCodes.BadRequest + } + } "fail if EService does not exist" in { val requesterId = UUID.randomUUID() @@ -2726,6 +2760,31 @@ class CatalogProcessSpec extends SpecHelper with AnyWordSpecLike with ScalatestR status shouldEqual StatusCodes.NotFound } } + "fail if descriptor does not exist" in { + + val requesterId = UUID.randomUUID() + val eService = SpecData.catalogItem.copy(descriptors = Seq.empty, producerId = requesterId) + + implicit val context: Seq[(String, String)] = + Seq("bearer" -> bearerToken, USER_ROLES -> "admin", ORGANIZATION_ID_CLAIM -> requesterId.toString) + + val seed = UpdateEServiceDescriptorDocumentSeed(prettyName = "prettyNameUpdated") + + (mockCatalogManagementService + .getEServiceById(_: UUID)(_: ExecutionContext, _: ReadModelService)) + .expects(SpecData.catalogItem.id, *, *) + .once() + .returns(Future.successful(eService)) + + Post() ~> service.updateEServiceDocumentById( + SpecData.catalogItem.id.toString, + UUID.randomUUID().toString, + UUID.randomUUID().toString, + seed + ) ~> check { + status shouldEqual StatusCodes.NotFound + } + } "fail if requester is not the Producer" in { implicit val context: Seq[(String, String)] = Seq("bearer" -> bearerToken, USER_ROLES -> "admin", ORGANIZATION_ID_CLAIM -> UUID.randomUUID().toString) From 342d0602ed0bbeca1534fe0db0a62f160a50d42b Mon Sep 17 00:00:00 2001 From: nttdata-rtorsoli Date: Fri, 2 Feb 2024 13:55:13 +0100 Subject: [PATCH 2/2] PIN-4485 Corrected test label --- .../it/pagopa/interop/catalogprocess/CatalogProcessSpec.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/scala/it/pagopa/interop/catalogprocess/CatalogProcessSpec.scala b/src/test/scala/it/pagopa/interop/catalogprocess/CatalogProcessSpec.scala index 0c05a0eb..6a2e9901 100644 --- a/src/test/scala/it/pagopa/interop/catalogprocess/CatalogProcessSpec.scala +++ b/src/test/scala/it/pagopa/interop/catalogprocess/CatalogProcessSpec.scala @@ -2748,7 +2748,7 @@ class CatalogProcessSpec extends SpecHelper with AnyWordSpecLike with ScalatestR } } "Document update" should { - "succeed only on draft descriptor" in { + "succeed on draft descriptor" in { val requesterId = UUID.randomUUID() val descriptorId = UUID.randomUUID() val documentId = UUID.randomUUID()