From 010e1bf94eee8482f824067662b9375d064409d5 Mon Sep 17 00:00:00 2001 From: Michel Barret Date: Fri, 17 Jan 2025 16:38:23 +0100 Subject: [PATCH] fix: fix plan mapping **Issue** [APIM-8360](https://gravitee.atlassian.net/browse/APIM-8360) ## Description I apply it only for 4.6 because [another PR to master](https://github.com/gravitee-io/gravitee-api-management/pull/10413) will completly rework it (cherry picked from commit 482b40dd606b3c0d9b392cca9d8bf17616b5883f) --- .../infra/adapter/GraviteeDefinitionAdapter.java | 6 ++++++ .../api/ApiExportDomainServiceImpl.java | 13 +++++++++++++ .../api/ApiExportDomainServiceImplTest.java | 15 ++++++++++++++- 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/apim/infra/adapter/GraviteeDefinitionAdapter.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/apim/infra/adapter/GraviteeDefinitionAdapter.java index 0c35c384f64..b9169709f75 100644 --- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/apim/infra/adapter/GraviteeDefinitionAdapter.java +++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/apim/infra/adapter/GraviteeDefinitionAdapter.java @@ -16,7 +16,10 @@ package io.gravitee.apim.infra.adapter; import io.gravitee.apim.core.api.model.import_definition.GraviteeDefinition; +import io.gravitee.apim.core.api.model.import_definition.PlanExport; import io.gravitee.rest.api.model.v4.api.ExportApiEntity; +import io.gravitee.rest.api.model.v4.plan.BasePlanEntity; +import io.gravitee.rest.api.model.v4.plan.GenericPlanEntity; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.factory.Mappers; @@ -30,4 +33,7 @@ public interface GraviteeDefinitionAdapter { @Mapping(target = "api", source = "apiEntity") GraviteeDefinition map(ExportApiEntity source); + + @Mapping(target = "type", source = "planType") + PlanExport genericPlanMap(GenericPlanEntity source); } diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/apim/infra/domain_service/api/ApiExportDomainServiceImpl.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/apim/infra/domain_service/api/ApiExportDomainServiceImpl.java index b3a6e716e86..9306746286f 100644 --- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/apim/infra/domain_service/api/ApiExportDomainServiceImpl.java +++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/main/java/io/gravitee/apim/infra/domain_service/api/ApiExportDomainServiceImpl.java @@ -20,6 +20,7 @@ import io.gravitee.apim.core.audit.model.AuditInfo; import io.gravitee.apim.infra.adapter.GraviteeDefinitionAdapter; import io.gravitee.rest.api.model.v4.api.ApiEntity; +import io.gravitee.rest.api.model.v4.plan.BasePlanEntity; import io.gravitee.rest.api.service.common.ExecutionContext; import io.gravitee.rest.api.service.v4.ApiImportExportService; import java.util.Set; @@ -40,6 +41,18 @@ public GraviteeDefinition export(String apiId, AuditInfo auditInfo) { if (exportEntity.getApiEntity() instanceof ApiEntity v4) { graviteeDefinition.getApi().setType(v4.getType()); } + if (exportEntity.getPlans() != null) { + for (var source : exportEntity.getPlans()) { + if (source instanceof BasePlanEntity v4Plan) { + graviteeDefinition + .getPlans() + .stream() + .filter(p -> p.getId().equals(v4Plan.getId())) + .findFirst() + .ifPresent(target -> target.setSecurity(v4Plan.getSecurity())); + } + } + } return graviteeDefinition; } } diff --git a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/apim/infra/domain_service/api/ApiExportDomainServiceImplTest.java b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/apim/infra/domain_service/api/ApiExportDomainServiceImplTest.java index e990947ac6b..97c0d55ed9e 100644 --- a/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/apim/infra/domain_service/api/ApiExportDomainServiceImplTest.java +++ b/gravitee-apim-rest-api/gravitee-apim-rest-api-service/src/test/java/io/gravitee/apim/infra/domain_service/api/ApiExportDomainServiceImplTest.java @@ -20,11 +20,17 @@ import static org.mockito.Mockito.when; import io.gravitee.apim.core.api.model.import_definition.GraviteeDefinition; +import io.gravitee.apim.core.api.model.import_definition.PlanExport; import io.gravitee.apim.core.audit.model.AuditInfo; +import io.gravitee.apim.core.plan.model.Plan; import io.gravitee.definition.model.v4.ApiType; +import io.gravitee.definition.model.v4.plan.PlanSecurity; import io.gravitee.rest.api.model.v4.api.ApiEntity; import io.gravitee.rest.api.model.v4.api.ExportApiEntity; +import io.gravitee.rest.api.model.v4.plan.BasePlanEntity; +import io.gravitee.rest.api.model.v4.plan.PlanType; import io.gravitee.rest.api.service.v4.ApiImportExportService; +import java.util.Set; import java.util.UUID; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -47,12 +53,19 @@ void exportServiceMustMapTypeWhenExportV4() { String apiId = UUID.randomUUID().toString(); ApiEntity api = new ApiEntity(); api.setType(ApiType.PROXY); - when(exportService.exportApi(any(), any(), any(), any())).thenReturn(new ExportApiEntity(api, null, null, null, null, null)); + BasePlanEntity plan = new BasePlanEntity(); + plan.setId(UUID.randomUUID().toString()); + plan.setSecurity(new PlanSecurity()); + plan.setType(PlanType.API); + when(exportService.exportApi(any(), any(), any(), any())) + .thenReturn(new ExportApiEntity(api, null, null, null, Set.of(plan), null)); // When GraviteeDefinition export = sut.export(apiId, AuditInfo.builder().build()); // Then assertThat(export.getApi().getType()).isEqualTo(ApiType.PROXY); + assertThat(export.getPlans()).map(PlanExport::getType).first().isEqualTo(Plan.PlanType.API); + assertThat(export.getPlans()).map(PlanExport::getSecurity).first().isNotNull(); } }