diff --git a/src/main/java/org/etsi/osl/tmf/so641/api/ServiceOrderApiController.java b/src/main/java/org/etsi/osl/tmf/so641/api/ServiceOrderApiController.java index a83e78cb2ae5f9c06e69da4af97725636814bfcf..446be9d7072cd69730b9766188dfc2c1eb1730dc 100644 --- a/src/main/java/org/etsi/osl/tmf/so641/api/ServiceOrderApiController.java +++ b/src/main/java/org/etsi/osl/tmf/so641/api/ServiceOrderApiController.java @@ -113,7 +113,7 @@ public class ServiceOrderApiController implements ServiceOrderApi { serviceOrder.setRelatedParty(AddUserAsOwnerToRelatedParties.addUser( principal.getName(), //user.getId()+"", - principal.getName(), + null, UserPartRoleType.REQUESTER, extInfo, serviceOrder.getRelatedParty())); @@ -122,7 +122,7 @@ public class ServiceOrderApiController implements ServiceOrderApi { serviceOrder.setRelatedParty(AddUserAsOwnerToRelatedParties.addUser( principal.getName(), //user.getId()+"", - principal.getName(), + null, UserPartRoleType.REQUESTER, extInfo, serviceOrder.getRelatedParty())); diff --git a/src/main/java/org/etsi/osl/tmf/so641/reposervices/ServiceOrderRepoService.java b/src/main/java/org/etsi/osl/tmf/so641/reposervices/ServiceOrderRepoService.java index d0ea929cf4fa1abde4dc3f06851aba1ce5675805..0c9bd56c9e0b712d151593db484136f9476f9bbc 100644 --- a/src/main/java/org/etsi/osl/tmf/so641/reposervices/ServiceOrderRepoService.java +++ b/src/main/java/org/etsi/osl/tmf/so641/reposervices/ServiceOrderRepoService.java @@ -39,6 +39,8 @@ import org.etsi.osl.tmf.common.model.Any; import org.etsi.osl.tmf.common.model.EValueType; import org.etsi.osl.tmf.common.model.UserPartRoleType; import org.etsi.osl.tmf.common.model.service.*; +import org.etsi.osl.tmf.pm632.model.Individual; +import org.etsi.osl.tmf.pm632.reposervices.IndividualRepoService; import org.etsi.osl.tmf.prm669.model.RelatedParty; import org.etsi.osl.tmf.scm633.model.ServiceSpecCharacteristic; import org.etsi.osl.tmf.scm633.model.ServiceSpecCharacteristicValue; @@ -86,6 +88,11 @@ public class ServiceOrderRepoService { @Autowired ServiceRepoService serviceRepoService; + + @Autowired + IndividualRepoService individualRepoService; + + private SessionFactory sessionFactory; @@ -350,8 +357,26 @@ public class ServiceOrderRepoService { } if (serviceOrderCreate.getRelatedParty() != null) { - so.getRelatedParty().addAll(serviceOrderCreate.getRelatedParty()); + + for (RelatedParty rp : serviceOrderCreate.getRelatedParty()) { + + if ( rp.getId() == null ) { + Individual ind = individualRepoService.findByUsername( rp.getName() ); + if ( ind != null ) { + rp.setId(ind.getId()); + } + else { + rp.setId( rp.getName()); + } + } + + so.getRelatedParty().add(rp); + } + + } + + if (serviceOrderCreate.getOrderRelationship() != null) { so.getOrderRelationship().addAll(serviceOrderCreate.getOrderRelationship()); @@ -620,8 +645,17 @@ public class ServiceOrderRepoService { if (serviceOrderUpd.getRelatedParty() != null) { for (RelatedParty n : serviceOrderUpd.getRelatedParty()) { - if (n.getUuid() == null) { - so.addRelatedPartyItem(n); + + var partyFound = false; + for (RelatedParty rp : so.getRelatedParty()) { + if (rp.getId().equals(n.getId())) { + partyFound = true; + } + } + + if (!partyFound) { + n.setRole("MODIFIER"); + so.addRelatedPartyItem(n); } } } diff --git a/src/test/java/org/etsi/osl/services/api/so641/ServiceOrderApiControllerTest.java b/src/test/java/org/etsi/osl/services/api/so641/ServiceOrderApiControllerTest.java index a3991ee67e865f9d7e08eee90f358b738c8b618e..328bac0290bae0c08dfbc507951beea702c9f56a 100644 --- a/src/test/java/org/etsi/osl/services/api/so641/ServiceOrderApiControllerTest.java +++ b/src/test/java/org/etsi/osl/services/api/so641/ServiceOrderApiControllerTest.java @@ -1,14 +1,17 @@ package org.etsi.osl.services.api.so641; import static org.assertj.core.api.Assertions.assertThat; +import static org.hamcrest.CoreMatchers.is; import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.time.OffsetDateTime; import java.time.ZoneOffset; +import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.Set; @@ -16,6 +19,12 @@ import org.apache.commons.io.IOUtils; import org.etsi.osl.services.api.BaseIT; import org.etsi.osl.tmf.JsonUtils; import org.etsi.osl.tmf.common.model.service.ServiceSpecificationRef; +import org.etsi.osl.tmf.pm632.model.ContactMedium; +import org.etsi.osl.tmf.pm632.model.Individual; +import org.etsi.osl.tmf.pm632.model.IndividualCreate; +import org.etsi.osl.tmf.pm632.model.MediumCharacteristic; +import org.etsi.osl.tmf.pm632.reposervices.IndividualRepoService; +import org.etsi.osl.tmf.prm669.model.RelatedParty; import org.etsi.osl.tmf.scm633.model.ServiceSpecification; import org.etsi.osl.tmf.scm633.model.ServiceSpecificationCreate; import org.etsi.osl.tmf.so641.model.ServiceOrder; @@ -58,6 +67,10 @@ public class ServiceOrderApiControllerTest extends BaseIT { @Autowired private ObjectMapper objectMapper; + + + @Autowired + IndividualRepoService individualRepoService; @BeforeAll public void setup(WebApplicationContext context) throws Exception { @@ -78,11 +91,35 @@ public class ServiceOrderApiControllerTest extends BaseIT { @WithMockUser(username="osadmin", roles = {"ADMIN","USER"}) @Test public void testCreateServiceOrder() throws Exception { + - String response = createServiceOrder(); + assertThat( individualRepoService.findAll().size() ).isEqualTo( 0 ); + + + String response = mvc.perform(MockMvcRequestBuilders.get("/party/v4/individual/myuser") + .with( SecurityMockMvcRequestPostProcessors.csrf()) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andReturn().getResponse().getContentAsString(); + + + assertThat( individualRepoService.findAll().size() ).isEqualTo( 1 ); + + + Individual responseIndv = JsonUtils.toJsonObj(response, Individual.class); + + assertThat( responseIndv.getId() ).isNotNull() ; + + response = createServiceOrder(); ServiceOrder responsesServiceOrder = JsonUtils.toJsonObj(response, ServiceOrder.class); assertThat( responsesServiceOrder.getDescription() ).isEqualTo( "A Test Service Order" ); + assertThat( responsesServiceOrder.getRelatedParty().size() ) .isEqualTo( 1 ); + assertThat( responsesServiceOrder.getRelatedParty().stream().findFirst().get().getName() ) .isEqualTo( "osadmin" ); + assertThat( responsesServiceOrder.getRelatedParty().stream().findFirst().get().getId() ) .isEqualTo( responseIndv.getId() ); + assertThat( responsesServiceOrder.getRelatedParty().stream().findFirst().get().getRole() ) .isEqualTo( "REQUESTER" ); } @@ -156,9 +193,49 @@ public class ServiceOrderApiControllerTest extends BaseIT { assertThat(responsesServiceOrder2.getState().toString()).isEqualTo("COMPLETED"); assertThat(responsesServiceOrder2.getDescription()).isEqualTo("New Test Description"); assertThat(responsesServiceOrder2.getCategory()).isEqualTo("New Test Category"); + assertThat( responsesServiceOrder.getRelatedParty().size() ) .isEqualTo( 1 ); + assertThat( responsesServiceOrder.getRelatedParty().stream().findFirst().get().getName() ) .isEqualTo( "osadmin" ); + assertThat( responsesServiceOrder.getRelatedParty().stream().findFirst().get().getId() ) .isEqualTo( individualRepoService.findByUsername("osadmin").getId() ); + assertThat( responsesServiceOrder.getRelatedParty().stream().findFirst().get().getRole() ) .isEqualTo( "REQUESTER" ); + } + + + + @WithMockUser(username="osadminmodifier", roles = {"ADMIN","USER"}) + @Test + public void testPatchServiceOrderModifier() throws Exception { + + String response = createServiceOrder(); + ServiceOrder responsesServiceOrder = JsonUtils.toJsonObj(response, ServiceOrder.class); + String soId = responsesServiceOrder.getId(); + + ServiceOrderUpdate servOrderUpd = new ServiceOrderUpdate(); + servOrderUpd.setState(ServiceOrderStateType.COMPLETED); + servOrderUpd.setCategory("New Test Category1"); + servOrderUpd.setDescription("New Test Description1"); + List rpl = new ArrayList<>(); + RelatedParty rp = new RelatedParty(); + rp.setId("12345"); + rpl.add( rp); + servOrderUpd.setRelatedParty(rpl); + + String response2 = mvc.perform(MockMvcRequestBuilders.patch("/serviceOrdering/v4/serviceOrder/" + soId) + .with( SecurityMockMvcRequestPostProcessors.csrf()) + .contentType(MediaType.APPLICATION_JSON) + .content( JsonUtils.toJson( servOrderUpd ) )) + .andExpect(status().isOk() ) + .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) + .andReturn().getResponse().getContentAsString(); + + ServiceOrder responsesServiceOrder2 = JsonUtils.toJsonObj(response2, ServiceOrder.class); + assertThat(responsesServiceOrder2.getState().toString()).isEqualTo("COMPLETED"); + assertThat(responsesServiceOrder2.getDescription()).isEqualTo("New Test Description1"); + assertThat(responsesServiceOrder2.getCategory()).isEqualTo("New Test Category1"); + assertThat( responsesServiceOrder2.getRelatedParty().size() ) .isEqualTo( 2 ); } + @WithMockUser(username="osadmin", roles = {"ADMIN","USER"}) @Test public void testRetrieveServiceOrder() throws Exception {