Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,12 @@
import io.gravitee.cockpit.api.command.v1.designer.DeployModelCommand;
import io.gravitee.cockpit.api.command.v1.designer.DeployModelCommandPayload;
import io.gravitee.cockpit.api.command.v1.designer.DeployModelReply;
import io.gravitee.definition.model.DefinitionVersion;
import io.gravitee.exchange.api.command.CommandHandler;
import io.gravitee.rest.api.model.EnvironmentEntity;
import io.gravitee.rest.api.model.UserEntity;
import io.gravitee.rest.api.model.api.ApiEntityResult;
import io.gravitee.rest.api.model.v4.api.ApiEntity;
import io.gravitee.rest.api.service.EnvironmentService;
import io.gravitee.rest.api.service.UserService;
import io.gravitee.rest.api.service.cockpit.model.DeploymentMode;
Expand Down Expand Up @@ -86,8 +88,15 @@ public Single<DeployModelReply> handle(DeployModelCommand command) {
executionContext.getEnvironmentId(),
apiCrossId
);

if (optApiId.isPresent()) {
final String apiId = optApiId.get();
final ApiEntity api = apiSearchService.findById(executionContext, apiId);

if (api.getDefinitionVersion() == DefinitionVersion.V4) {
return Single.just(new DeployModelReply(command.getId(), "API migrated from v2 to v4. Update not yet supported."));
}

var message = permissionChecker.checkUpdatePermission(
executionContext,
user.getId(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import io.gravitee.cockpit.api.command.v1.designer.DeployModelCommand;
import io.gravitee.cockpit.api.command.v1.designer.DeployModelCommandPayload;
import io.gravitee.cockpit.api.command.v1.designer.DeployModelReply;
import io.gravitee.definition.model.DefinitionVersion;
import io.gravitee.exchange.api.command.CommandStatus;
import io.gravitee.rest.api.model.EnvironmentEntity;
import io.gravitee.rest.api.model.UserEntity;
Expand Down Expand Up @@ -208,6 +209,34 @@ public void creates_an_API_PUBLISHED_mode() throws InterruptedException {
obs.assertValue(reply -> reply.getCommandId().equals(command.getId()) && reply.getCommandStatus().equals(CommandStatus.SUCCEEDED));
}

@Test
public void should_return_error_when_updating_migrated_v4_api() throws InterruptedException {
DeployModelCommandPayload payload = createDeployPayload(DeployModelCommandPayload.DeploymentMode.API_DOCUMENTED);

DeployModelCommand command = new DeployModelCommand(payload);

String apiId = "api#id";
when(apiSearchService.findIdByEnvironmentIdAndCrossId(ENVIRONMENT_ID, payload.modelId())).thenReturn(Optional.of(apiId));
when(apiSearchService.findById(EXECUTION_CONTEXT, apiId)).thenReturn(
io.gravitee.rest.api.model.v4.api.ApiEntity.builder().definitionVersion(DefinitionVersion.V4).build()
);

UserEntity user = createUserEntity(payload);
when(userService.findBySource(any(), eq("cockpit"), eq(payload.userId()), eq(true))).thenReturn(user);

cut
.handle(command)
.test()
.await()
.assertNoErrors()
.assertValue(
reply ->
reply.getCommandId().equals(command.getId()) &&
reply.getCommandStatus().equals(CommandStatus.ERROR) &&
reply.getErrorDetails().equals("API migrated from v2 to v4. Update not yet supported.")
);
}

@Test
public void updates_an_API_DOCUMENTED() throws InterruptedException {
DeployModelCommandPayload payload = createDeployPayload(DeployModelCommandPayload.DeploymentMode.API_DOCUMENTED);
Expand All @@ -216,6 +245,9 @@ public void updates_an_API_DOCUMENTED() throws InterruptedException {

String apiId = "api#id";
when(apiSearchService.findIdByEnvironmentIdAndCrossId(ENVIRONMENT_ID, payload.modelId())).thenReturn(Optional.of(apiId));
when(apiSearchService.findById(EXECUTION_CONTEXT, apiId)).thenReturn(
io.gravitee.rest.api.model.v4.api.ApiEntity.builder().definitionVersion(DefinitionVersion.V2).build()
);

UserEntity user = createUserEntity(payload);
when(userService.findBySource(any(), eq("cockpit"), eq(payload.userId()), eq(true))).thenReturn(user);
Expand Down Expand Up @@ -254,6 +286,9 @@ public void updates_an_API_MOCKED_mode() throws InterruptedException {

String apiId = "api#id";
when(apiSearchService.findIdByEnvironmentIdAndCrossId(ENVIRONMENT_ID, payload.modelId())).thenReturn(Optional.of(apiId));
when(apiSearchService.findById(EXECUTION_CONTEXT, apiId)).thenReturn(
io.gravitee.rest.api.model.v4.api.ApiEntity.builder().definitionVersion(DefinitionVersion.V2).build()
);

UserEntity user = createUserEntity(payload);
when(userService.findBySource(any(), eq("cockpit"), eq(payload.userId()), eq(true))).thenReturn(user);
Expand Down Expand Up @@ -292,6 +327,9 @@ public void updates_an_API_PUBLISHED_mode() throws InterruptedException {

String apiId = "api#id";
when(apiSearchService.findIdByEnvironmentIdAndCrossId(ENVIRONMENT_ID, payload.modelId())).thenReturn(Optional.of(apiId));
when(apiSearchService.findById(EXECUTION_CONTEXT, apiId)).thenReturn(
io.gravitee.rest.api.model.v4.api.ApiEntity.builder().definitionVersion(DefinitionVersion.V2).build()
);

UserEntity user = createUserEntity(payload);
when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.userId(), true)).thenReturn(user);
Expand Down Expand Up @@ -422,6 +460,9 @@ public void fails_to_update_due_to_permission_issues() throws InterruptedExcepti

String apiId = "api#id";
when(apiSearchService.findIdByEnvironmentIdAndCrossId(ENVIRONMENT_ID, payload.modelId())).thenReturn(Optional.of(apiId));
when(apiSearchService.findById(EXECUTION_CONTEXT, apiId)).thenReturn(
io.gravitee.rest.api.model.v4.api.ApiEntity.builder().definitionVersion(DefinitionVersion.V2).build()
);

UserEntity user = createUserEntity(payload);
when(userService.findBySource(ORGANIZATION_ID, "cockpit", payload.userId(), true)).thenReturn(user);
Expand Down