diff --git a/gravitee-rest-api-management/gravitee-rest-api-management-rest/src/main/java/io/gravitee/rest/api/management/rest/resource/EnvironmentResource.java b/gravitee-rest-api-management/gravitee-rest-api-management-rest/src/main/java/io/gravitee/rest/api/management/rest/resource/EnvironmentResource.java index ca97abf794..96504ddc86 100644 --- a/gravitee-rest-api-management/gravitee-rest-api-management-rest/src/main/java/io/gravitee/rest/api/management/rest/resource/EnvironmentResource.java +++ b/gravitee-rest-api-management/gravitee-rest-api-management-rest/src/main/java/io/gravitee/rest/api/management/rest/resource/EnvironmentResource.java @@ -18,14 +18,14 @@ import io.gravitee.common.http.MediaType; import io.gravitee.rest.api.management.rest.resource.auth.OAuth2AuthenticationResource; import io.gravitee.rest.api.management.rest.resource.search.SearchResource; +import io.gravitee.rest.api.model.UpdateEnvironmentEntity; import io.gravitee.rest.api.service.EnvironmentService; import io.swagger.annotations.*; import javax.inject.Inject; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import javax.ws.rs.*; import javax.ws.rs.container.ResourceContext; import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; @@ -44,6 +44,28 @@ public class EnvironmentResource extends AbstractResource { @Inject private EnvironmentService environmentService; + /** + * Create a new Environment. + * @param environmentEntity + * @return + */ + @POST + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @ApiOperation(value = "Create an Environment", tags = {"Environment"}) + @ApiResponses({ + @ApiResponse(code = 201, message = "Environment successfully created"), + @ApiResponse(code = 500, message = "Internal server error")}) + public Response createEnvironment( + @ApiParam(name = "environmentId", required = true) @PathParam("envId") String environmentId, + @ApiParam(name = "environmentEntity", required = true) @Valid @NotNull final UpdateEnvironmentEntity environmentEntity) { + environmentEntity.setId(environmentId); + return Response + .status(Status.CREATED) + .entity(environmentService.createOrUpdate(environmentEntity)) + .build(); + } + /** * Delete an existing Environment. * @param environmentId diff --git a/gravitee-rest-api-management/gravitee-rest-api-management-rest/src/main/java/io/gravitee/rest/api/management/rest/resource/EnvironmentsResource.java b/gravitee-rest-api-management/gravitee-rest-api-management-rest/src/main/java/io/gravitee/rest/api/management/rest/resource/EnvironmentsResource.java index 14bd188edb..903c2dd6d3 100644 --- a/gravitee-rest-api-management/gravitee-rest-api-management-rest/src/main/java/io/gravitee/rest/api/management/rest/resource/EnvironmentsResource.java +++ b/gravitee-rest-api-management/gravitee-rest-api-management-rest/src/main/java/io/gravitee/rest/api/management/rest/resource/EnvironmentsResource.java @@ -15,19 +15,11 @@ */ package io.gravitee.rest.api.management.rest.resource; -import io.gravitee.common.http.MediaType; -import io.gravitee.rest.api.model.NewEnvironmentEntity; -import io.gravitee.rest.api.service.EnvironmentService; -import io.swagger.annotations.*; +import io.swagger.annotations.Api; -import javax.inject.Inject; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.ws.rs.*; +import javax.ws.rs.Path; import javax.ws.rs.container.ResourceContext; import javax.ws.rs.core.Context; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; /** * @author Florent CHAMFROY (florent.chamfroy at graviteesource.com) @@ -39,30 +31,6 @@ public class EnvironmentsResource extends AbstractResource { @Context private ResourceContext resourceContext; - @Inject - private EnvironmentService environmentService; - - /** - * Create a new Environment. - * @param newEnvironmentEntity - * @return - */ - @POST - @Produces(MediaType.APPLICATION_JSON) - @Consumes(MediaType.APPLICATION_JSON) - @ApiOperation(value = "Create an Environment", tags = {"Environment"}) - @ApiResponses({ - @ApiResponse(code = 201, message = "Environment successfully created"), - @ApiResponse(code = 500, message = "Internal server error")}) - public Response createEnvironment( - @ApiParam(name = "newEnvironmentEntity", required = true) - @Valid @NotNull final NewEnvironmentEntity newEnvironmentEntity) { - return Response - .status(Status.CREATED) - .entity(environmentService.create(newEnvironmentEntity)) - .build(); - } - @Path("{envId}") public EnvironmentResource getEnvironmentResource() { return resourceContext.getResource(EnvironmentResource.class); diff --git a/gravitee-rest-api-management/gravitee-rest-api-management-rest/src/main/java/io/gravitee/rest/api/management/rest/resource/GraviteeManagementApplication.java b/gravitee-rest-api-management/gravitee-rest-api-management-rest/src/main/java/io/gravitee/rest/api/management/rest/resource/GraviteeManagementApplication.java index ed970f546f..c85c1ae395 100644 --- a/gravitee-rest-api-management/gravitee-rest-api-management-rest/src/main/java/io/gravitee/rest/api/management/rest/resource/GraviteeManagementApplication.java +++ b/gravitee-rest-api-management/gravitee-rest-api-management-rest/src/main/java/io/gravitee/rest/api/management/rest/resource/GraviteeManagementApplication.java @@ -99,7 +99,7 @@ public Model resolve(Type type, ModelConverterContext context, Iterator domainRestrictions; - - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public List getDomainRestrictions() { - return domainRestrictions; - } - - public void setDomainRestrictions(List domainRestrictions) { - this.domainRestrictions = domainRestrictions; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof NewEnvironmentEntity)) return false; - NewEnvironmentEntity that = (NewEnvironmentEntity) o; - return Objects.equals(name, that.name); - } - - @Override - public int hashCode() { - return Objects.hash(name); - } - - @Override - public String toString() { - return "NewEnvironmentEntity{" + - ", name='" + name + '\'' + - ", description='" + description + '\'' + - ", domain restrictions='" + domainRestrictions + '\'' + - '}'; - } -} diff --git a/gravitee-rest-api-model/src/main/java/io/gravitee/rest/api/model/NewOrganizationEntity.java b/gravitee-rest-api-model/src/main/java/io/gravitee/rest/api/model/NewOrganizationEntity.java deleted file mode 100644 index 5733a94d6c..0000000000 --- a/gravitee-rest-api-model/src/main/java/io/gravitee/rest/api/model/NewOrganizationEntity.java +++ /dev/null @@ -1,84 +0,0 @@ -/** - * Copyright (C) 2015 The Gravitee team (http://gravitee.io) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package io.gravitee.rest.api.model; - -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; - -import java.util.List; -import java.util.Objects; - -/** - * @author Florent CHAMFROY (florent.chamfroy at graviteesource.com) - * @author GraviteeSource Team - */ -public class NewOrganizationEntity { - - @NotNull - @Size(min = 1) - private String name; - - private String description; - - private List domainRestrictions; - - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public List getDomainRestrictions() { - return domainRestrictions; - } - - public void setDomainRestrictions(List domainRestrictions) { - this.domainRestrictions = domainRestrictions; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof NewOrganizationEntity)) return false; - NewOrganizationEntity that = (NewOrganizationEntity) o; - return Objects.equals(name, that.name); - } - - @Override - public int hashCode() { - return Objects.hash(name); - } - - @Override - public String toString() { - return "NewOrganizationEntity{" + - ", name='" + name + '\'' + - ", description='" + description + '\'' + - ", domain restrictions='" + domainRestrictions + '\'' + - '}'; - } -} diff --git a/gravitee-rest-api-service/src/main/java/io/gravitee/rest/api/service/EnvironmentService.java b/gravitee-rest-api-service/src/main/java/io/gravitee/rest/api/service/EnvironmentService.java index 5db91bf8f3..9aad557fc6 100644 --- a/gravitee-rest-api-service/src/main/java/io/gravitee/rest/api/service/EnvironmentService.java +++ b/gravitee-rest-api-service/src/main/java/io/gravitee/rest/api/service/EnvironmentService.java @@ -18,7 +18,6 @@ import java.util.List; import io.gravitee.rest.api.model.EnvironmentEntity; -import io.gravitee.rest.api.model.NewEnvironmentEntity; import io.gravitee.rest.api.model.UpdateEnvironmentEntity; /** @@ -33,9 +32,7 @@ public interface EnvironmentService { EnvironmentEntity findById(String environmentId); - EnvironmentEntity create(NewEnvironmentEntity environment); - - EnvironmentEntity update(UpdateEnvironmentEntity environment); + EnvironmentEntity createOrUpdate(UpdateEnvironmentEntity environment); void delete(String environmentId); diff --git a/gravitee-rest-api-service/src/main/java/io/gravitee/rest/api/service/OrganizationService.java b/gravitee-rest-api-service/src/main/java/io/gravitee/rest/api/service/OrganizationService.java index bd8d78c012..12500c77c4 100644 --- a/gravitee-rest-api-service/src/main/java/io/gravitee/rest/api/service/OrganizationService.java +++ b/gravitee-rest-api-service/src/main/java/io/gravitee/rest/api/service/OrganizationService.java @@ -15,7 +15,6 @@ */ package io.gravitee.rest.api.service; -import io.gravitee.rest.api.model.NewOrganizationEntity; import io.gravitee.rest.api.model.OrganizationEntity; import io.gravitee.rest.api.model.UpdateOrganizationEntity; @@ -31,10 +30,8 @@ public interface OrganizationService { OrganizationEntity findById(String organizationId); - OrganizationEntity create(NewOrganizationEntity organizationEntity); + OrganizationEntity createOrUpdate(UpdateOrganizationEntity organizationEntity); - OrganizationEntity update(UpdateOrganizationEntity organizationEntity); - void delete(String organizationId); void initialize(); diff --git a/gravitee-rest-api-service/src/main/java/io/gravitee/rest/api/service/exceptions/BadOrganizationException.java b/gravitee-rest-api-service/src/main/java/io/gravitee/rest/api/service/exceptions/BadOrganizationException.java new file mode 100644 index 0000000000..623ea477a1 --- /dev/null +++ b/gravitee-rest-api-service/src/main/java/io/gravitee/rest/api/service/exceptions/BadOrganizationException.java @@ -0,0 +1,47 @@ +/** + * Copyright (C) 2015 The Gravitee team (http://gravitee.io) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.gravitee.rest.api.service.exceptions; + +import io.gravitee.common.http.HttpStatusCode; + +import java.util.Map; + +/** + * @author Florent CHAMFROY (forent.chamfroy at graviteesource.com) + * @author GraviteeSource Team + */ +public class BadOrganizationException extends AbstractManagementException { + + @Override + public int getHttpStatusCode() { + return HttpStatusCode.BAD_REQUEST_400; + } + + @Override + public String getMessage() { + return "Organization in Environment is not the same as current organisation"; + } + + @Override + public String getTechnicalCode() { + return "organization.invalid"; + } + + @Override + public Map getParameters() { + return null; + } +} diff --git a/gravitee-rest-api-service/src/main/java/io/gravitee/rest/api/service/impl/EnvironmentServiceImpl.java b/gravitee-rest-api-service/src/main/java/io/gravitee/rest/api/service/impl/EnvironmentServiceImpl.java index 166bd7e58c..175fb31ac0 100644 --- a/gravitee-rest-api-service/src/main/java/io/gravitee/rest/api/service/impl/EnvironmentServiceImpl.java +++ b/gravitee-rest-api-service/src/main/java/io/gravitee/rest/api/service/impl/EnvironmentServiceImpl.java @@ -24,12 +24,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import io.gravitee.common.utils.UUID; import io.gravitee.repository.exceptions.TechnicalException; import io.gravitee.repository.management.api.EnvironmentRepository; import io.gravitee.repository.management.model.Environment; import io.gravitee.rest.api.model.EnvironmentEntity; -import io.gravitee.rest.api.model.NewEnvironmentEntity; import io.gravitee.rest.api.model.UpdateEnvironmentEntity; import io.gravitee.rest.api.service.*; import io.gravitee.rest.api.service.common.GraviteeContext; @@ -90,44 +88,28 @@ public List findAll() { } @Override - public EnvironmentEntity create(final NewEnvironmentEntity environmentEntity) { + public EnvironmentEntity createOrUpdate(final UpdateEnvironmentEntity environmentEntity) { String organizationId = GraviteeContext.getCurrentOrganization(); - // First we check that organization exist - this.organizationService.findById(organizationId); - - try { - String id = UUID.toString(UUID.random()); - Optional checkEnvironment = environmentRepository.findById(id); - if (checkEnvironment.isPresent()) { - throw new EnvironmentAlreadyExistsException(id); - } - - Environment environment = convert(id, organizationId, environmentEntity); - EnvironmentEntity createdEnvironment = convert(environmentRepository.create(environment)); - - //create Default items for environment - apiHeaderService.initialize(createdEnvironment.getId()); - viewService.initialize(createdEnvironment.getId()); - pageService.initialize(createdEnvironment.getId()); - - return createdEnvironment; - } catch (TechnicalException ex) { - LOGGER.error("An error occurs while trying to create environment {}", environmentEntity.getName(), ex); - throw new TechnicalManagementException("An error occurs while trying to create environment " + environmentEntity.getName(), ex); + if (environmentEntity.getOrganizationId() == null || !environmentEntity.getOrganizationId().equals(organizationId)) { + throw new BadOrganizationException(); } - } - - @Override - public EnvironmentEntity update(final UpdateEnvironmentEntity environmentEntity) { try { + // First we check that organization exists + this.organizationService.findById(organizationId); + + Optional environmentOptional = environmentRepository.findById(environmentEntity.getId()); Environment environment = convert(environmentEntity); - Optional environmentOptional = environmentRepository.findById(environment.getId()); if (environmentOptional.isPresent()) { - EnvironmentEntity updatedEnvironmentEntity = convert(environmentRepository.update(environment)); - return updatedEnvironmentEntity; + return convert(environmentRepository.update(environment)); } else { - LOGGER.error("An error occurs while trying to update environment {}", environmentEntity.getName()); - throw new EnvironmentNotFoundException(environmentEntity.getId()); + EnvironmentEntity createdEnvironment = convert(environmentRepository.create(environment)); + + //create Default items for environment + apiHeaderService.initialize(createdEnvironment.getId()); + viewService.initialize(createdEnvironment.getId()); + pageService.initialize(createdEnvironment.getId()); + + return createdEnvironment; } } catch (TechnicalException ex) { @@ -152,16 +134,6 @@ public void delete(final String environmentId) { } } - private Environment convert(final String id, final String organizationId, final NewEnvironmentEntity environmentEntity) { - final Environment environment = new Environment(); - environment.setId(id); - environment.setName(environmentEntity.getName()); - environment.setDescription(environmentEntity.getDescription()); - environment.setOrganization(organizationId); - environment.setDomainRestrictions(environmentEntity.getDomainRestrictions()); - return environment; - } - private Environment convert(final UpdateEnvironmentEntity environmentEntity) { final Environment environment = new Environment(); environment.setId(environmentEntity.getId()); diff --git a/gravitee-rest-api-service/src/main/java/io/gravitee/rest/api/service/impl/OrganizationServiceImpl.java b/gravitee-rest-api-service/src/main/java/io/gravitee/rest/api/service/impl/OrganizationServiceImpl.java index 1ad5ac1d2b..14c7c77c08 100644 --- a/gravitee-rest-api-service/src/main/java/io/gravitee/rest/api/service/impl/OrganizationServiceImpl.java +++ b/gravitee-rest-api-service/src/main/java/io/gravitee/rest/api/service/impl/OrganizationServiceImpl.java @@ -15,17 +15,14 @@ */ package io.gravitee.rest.api.service.impl; -import io.gravitee.common.utils.UUID; import io.gravitee.repository.exceptions.TechnicalException; import io.gravitee.repository.management.api.OrganizationRepository; import io.gravitee.repository.management.model.Organization; -import io.gravitee.rest.api.model.NewOrganizationEntity; import io.gravitee.rest.api.model.OrganizationEntity; import io.gravitee.rest.api.model.UpdateOrganizationEntity; import io.gravitee.rest.api.service.OrganizationService; import io.gravitee.rest.api.service.RoleService; import io.gravitee.rest.api.service.common.GraviteeContext; -import io.gravitee.rest.api.service.exceptions.OrganizationAlreadyExistsException; import io.gravitee.rest.api.service.exceptions.OrganizationNotFoundException; import io.gravitee.rest.api.service.exceptions.TechnicalManagementException; import org.slf4j.Logger; @@ -83,38 +80,20 @@ public List findAll() { } @Override - public OrganizationEntity create(final NewOrganizationEntity organizationEntity) { - try { - String id = UUID.toString(UUID.random()); - Optional checkOrganization = organizationRepository.findById(id); - if (checkOrganization.isPresent()) { - throw new OrganizationAlreadyExistsException(id); - } - - Organization organization = convert(id, organizationEntity); - OrganizationEntity createdOrganization = convert(organizationRepository.create(organization)); - - //create Default role for organization - roleService.initialize(createdOrganization.getId()); - roleService.createOrUpdateSystemRoles(createdOrganization.getId()); - - return createdOrganization; - } catch (TechnicalException ex) { - LOGGER.error("An error occurs while trying to create organization {}", organizationEntity.getName(), ex); - throw new TechnicalManagementException("An error occurs while trying to create organization " + organizationEntity.getName(), ex); - } - } - - @Override - public OrganizationEntity update(final UpdateOrganizationEntity organizationEntity) { + public OrganizationEntity createOrUpdate(final UpdateOrganizationEntity organizationEntity) { try { + Optional organizationOptional = organizationRepository.findById(organizationEntity.getId()); Organization organization = convert(organizationEntity); - Optional organizationOptional = organizationRepository.findById(organization.getId()); if (organizationOptional.isPresent()) { return convert(organizationRepository.update(organization)); } else { - LOGGER.error("An error occurs while trying to update organization {}", organizationEntity.getName()); - throw new OrganizationNotFoundException(organizationEntity.getId()); + OrganizationEntity createdOrganization = convert(organizationRepository.create(organization)); + + //create Default role for organization + roleService.initialize(createdOrganization.getId()); + roleService.createOrUpdateSystemRoles(createdOrganization.getId()); + + return createdOrganization; } } catch (TechnicalException ex) { @@ -137,15 +116,6 @@ public void delete(final String organizationId) { } } - private Organization convert(final String id, final NewOrganizationEntity organizationEntity) { - final Organization organization = new Organization(); - organization.setId(id); - organization.setName(organizationEntity.getName()); - organization.setDescription(organizationEntity.getDescription()); - organization.setDomainRestrictions(organizationEntity.getDomainRestrictions()); - return organization; - } - private Organization convert(final UpdateOrganizationEntity organizationEntity) { final Organization organization = new Organization(); organization.setId(organizationEntity.getId()); diff --git a/gravitee-rest-api-service/src/test/java/io/gravitee/rest/api/service/EnvironmentService_CreateTest.java b/gravitee-rest-api-service/src/test/java/io/gravitee/rest/api/service/EnvironmentService_CreateTest.java index c10e893b11..8ae0bd903b 100644 --- a/gravitee-rest-api-service/src/test/java/io/gravitee/rest/api/service/EnvironmentService_CreateTest.java +++ b/gravitee-rest-api-service/src/test/java/io/gravitee/rest/api/service/EnvironmentService_CreateTest.java @@ -17,11 +17,10 @@ import io.gravitee.repository.exceptions.TechnicalException; import io.gravitee.repository.management.api.EnvironmentRepository; -import io.gravitee.repository.management.api.OrganizationRepository; import io.gravitee.repository.management.model.Environment; -import io.gravitee.repository.management.model.Organization; import io.gravitee.rest.api.model.EnvironmentEntity; -import io.gravitee.rest.api.model.NewEnvironmentEntity; +import io.gravitee.rest.api.model.UpdateEnvironmentEntity; +import io.gravitee.rest.api.service.exceptions.BadOrganizationException; import io.gravitee.rest.api.service.impl.EnvironmentServiceImpl; import org.junit.Test; import org.junit.runner.RunWith; @@ -30,7 +29,6 @@ import org.mockito.junit.MockitoJUnitRunner; import java.util.Arrays; -import java.util.Collections; import java.util.List; import java.util.Optional; @@ -64,23 +62,25 @@ public class EnvironmentService_CreateTest { @Mock private PageService mockPageService; - + @Test public void shouldCreateEnvironment() throws TechnicalException { when(mockOrganizationService.findById(any())).thenReturn(null); when(mockEnvironmentRepository.findById(any())).thenReturn(Optional.empty()); - NewEnvironmentEntity env1 = new NewEnvironmentEntity(); + UpdateEnvironmentEntity env1 = new UpdateEnvironmentEntity(); + env1.setId("env_id"); env1.setName("env_name"); env1.setDescription("env_desc"); List domainRestrictions = Arrays.asList("domain", "restriction"); env1.setDomainRestrictions(domainRestrictions); + env1.setOrganizationId("DEFAULT"); Environment createdEnv = new Environment(); - createdEnv.setId("created_env"); + createdEnv.setId("env_id"); when(mockEnvironmentRepository.create(any())).thenReturn(createdEnv); - EnvironmentEntity environment = environmentService.create(env1); + EnvironmentEntity environment = environmentService.createOrUpdate(env1); assertNotNull("result is null", environment); verify(mockEnvironmentRepository, times(1)) @@ -91,8 +91,55 @@ public void shouldCreateEnvironment() throws TechnicalException { && arg.getDomainRestrictions().equals(domainRestrictions) && arg.getOrganization().equals("DEFAULT") )); - verify(mockAPIHeaderService, times(1)).initialize("created_env"); - verify(mockViewService, times(1)).initialize("created_env"); - verify(mockPageService, times(1)).initialize("created_env"); + verify(mockEnvironmentRepository, never()).update(any()); + verify(mockAPIHeaderService, times(1)).initialize("env_id"); + verify(mockViewService, times(1)).initialize("env_id"); + verify(mockPageService, times(1)).initialize("env_id"); + } + + @Test + public void shouldUpdateEnvironment() throws TechnicalException { + when(mockOrganizationService.findById(any())).thenReturn(null); + when(mockEnvironmentRepository.findById(any())).thenReturn(Optional.of(new Environment())); + + UpdateEnvironmentEntity env1 = new UpdateEnvironmentEntity(); + env1.setId("env_id"); + env1.setName("env_name"); + env1.setDescription("env_desc"); + List domainRestrictions = Arrays.asList("domain", "restriction"); + env1.setDomainRestrictions(domainRestrictions); + env1.setOrganizationId("DEFAULT"); + + Environment updatedEnv = new Environment(); + when(mockEnvironmentRepository.update(any())).thenReturn(updatedEnv); + + EnvironmentEntity environment = environmentService.createOrUpdate(env1); + + assertNotNull("result is null", environment); + verify(mockEnvironmentRepository, times(1)) + .update(argThat(arg -> + arg != null + && arg.getName().equals("env_name") + && arg.getDescription().equals("env_desc") + && arg.getDomainRestrictions().equals(domainRestrictions) + && arg.getOrganization().equals("DEFAULT") + )); + verify(mockEnvironmentRepository, never()).create(any()); + verify(mockAPIHeaderService, never()).initialize("env_id"); + verify(mockViewService, never()).initialize("env_id"); + verify(mockPageService, never()).initialize("env_id"); + } + + @Test(expected = BadOrganizationException.class) + public void shouldHaveBadOrganizationException() throws TechnicalException { + UpdateEnvironmentEntity env1 = new UpdateEnvironmentEntity(); + env1.setOrganizationId("NOT DEFAULT"); + + environmentService.createOrUpdate(env1); + } + + @Test(expected = BadOrganizationException.class) + public void shouldHaveBadOrganizationExceptionWhenNoOrganizationInEntity() throws TechnicalException { + environmentService.createOrUpdate(new UpdateEnvironmentEntity()); } } diff --git a/gravitee-rest-api-service/src/test/java/io/gravitee/rest/api/service/OrganizationService_CreateTest.java b/gravitee-rest-api-service/src/test/java/io/gravitee/rest/api/service/OrganizationService_CreateTest.java index 534d2bc910..00d5ec163e 100644 --- a/gravitee-rest-api-service/src/test/java/io/gravitee/rest/api/service/OrganizationService_CreateTest.java +++ b/gravitee-rest-api-service/src/test/java/io/gravitee/rest/api/service/OrganizationService_CreateTest.java @@ -18,8 +18,8 @@ import io.gravitee.repository.exceptions.TechnicalException; import io.gravitee.repository.management.api.OrganizationRepository; import io.gravitee.repository.management.model.Organization; -import io.gravitee.rest.api.model.NewOrganizationEntity; import io.gravitee.rest.api.model.OrganizationEntity; +import io.gravitee.rest.api.model.UpdateOrganizationEntity; import io.gravitee.rest.api.service.impl.OrganizationServiceImpl; import org.junit.Test; import org.junit.runner.RunWith; @@ -57,17 +57,18 @@ public class OrganizationService_CreateTest { public void shouldCreateOrganization() throws TechnicalException { when(mockOrganizationRepository.findById(any())).thenReturn(Optional.empty()); - NewOrganizationEntity org1 = new NewOrganizationEntity(); + UpdateOrganizationEntity org1 = new UpdateOrganizationEntity(); + org1.setId("org_id"); org1.setName("org_name"); org1.setDescription("org_desc"); List domainRestrictions = Arrays.asList("domain", "restriction"); org1.setDomainRestrictions(domainRestrictions); Organization createdOrganization = new Organization(); - createdOrganization.setId("created_org"); + createdOrganization.setId("org_id"); when(mockOrganizationRepository.create(any())).thenReturn(createdOrganization); - OrganizationEntity organization = organizationService.create(org1); + OrganizationEntity organization = organizationService.createOrUpdate(org1); assertNotNull("result is null", organization); verify(mockOrganizationRepository, times(1)) @@ -77,7 +78,37 @@ public void shouldCreateOrganization() throws TechnicalException { && arg.getDescription().equals("org_desc") && arg.getDomainRestrictions().equals(domainRestrictions) )); - verify(mockRoleService, times(1)).initialize("created_org"); - verify(mockRoleService, times(1)).createOrUpdateSystemRoles("created_org"); + verify(mockOrganizationRepository, never()).update(any()); + verify(mockRoleService, times(1)).initialize("org_id"); + verify(mockRoleService, times(1)).createOrUpdateSystemRoles("org_id"); + } + + @Test + public void shouldUpdateOrganization() throws TechnicalException { + when(mockOrganizationRepository.findById(any())).thenReturn(Optional.of(new Organization())); + + UpdateOrganizationEntity org1 = new UpdateOrganizationEntity(); + org1.setId("org_id"); + org1.setName("org_name"); + org1.setDescription("org_desc"); + List domainRestrictions = Arrays.asList("domain", "restriction"); + org1.setDomainRestrictions(domainRestrictions); + + Organization createdOrganization = new Organization(); + when(mockOrganizationRepository.update(any())).thenReturn(createdOrganization); + + OrganizationEntity organization = organizationService.createOrUpdate(org1); + + assertNotNull("result is null", organization); + verify(mockOrganizationRepository, times(1)) + .update(argThat(arg -> + arg != null + && arg.getName().equals("org_name") + && arg.getDescription().equals("org_desc") + && arg.getDomainRestrictions().equals(domainRestrictions) + )); + verify(mockOrganizationRepository, never()).create(any()); + verify(mockRoleService, never()).initialize("org_id"); + verify(mockRoleService, never()).createOrUpdateSystemRoles("org_id"); } }