From d81bcd65f49faf4f56a4214249e56ab19af40bad Mon Sep 17 00:00:00 2001 From: lpapadopoulos Date: Fri, 17 May 2024 13:40:05 +0300 Subject: [PATCH 1/9] minor change in description --- .../etsi/osl/tmf/gsm674/api/GeographicSiteManagementApi.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApi.java b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApi.java index 380afa7..732a340 100644 --- a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApi.java +++ b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApi.java @@ -41,7 +41,7 @@ public interface GeographicSiteManagementApi { return getRequest().map(r -> r.getHeader("Accept")); } - @Operation(summary = "Creates a 'GeographicSite'", operationId = "createGeographicSite", description = "", tags={ "geographicSite", }) + @Operation(summary = "Creates a 'GeographicSite '", operationId = "createGeographicSite", description = "", tags={ "geographicSite", }) @ApiResponses(value = { @ApiResponse(responseCode = "400", description = "Created" ), @ApiResponse(responseCode = "400", description = "Bad Request" ), @@ -59,7 +59,7 @@ public interface GeographicSiteManagementApi { return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); } - @Operation(summary = "Deletes a 'GeographicSite' by Id", operationId = "deleteGeographicSite", description = "", tags={ "GeographicSite", }) + @Operation(summary = "Deletes a GeographicSite by Id", operationId = "deleteGeographicSite", description = "", tags={ "GeographicSite", }) @ApiResponses(value = { @ApiResponse(responseCode = "204", description = "Deleted" ), @ApiResponse(responseCode = "400", description = "Bad Request" ), -- GitLab From 6c6711c1a7dfaa47d2aca1f75574293e5f7dbf2a Mon Sep 17 00:00:00 2001 From: lpapadopoulos Date: Mon, 27 May 2024 23:25:23 +0300 Subject: [PATCH 2/9] Adding security to the GET operation --- .../api/GeographicSiteManagementApi.java | 2 +- ...GeographicSiteManagementApiController.java | 31 +++++++++++++++++-- .../GeographicSiteManagementRepository.java | 5 +++ .../GeographicSiteManagementService.java | 6 ++++ ...raphicSiteManagementApiControllerTest.java | 23 +++++++------- 5 files changed, 52 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApi.java b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApi.java index 732a340..812091a 100644 --- a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApi.java +++ b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApi.java @@ -127,7 +127,7 @@ public interface GeographicSiteManagementApi { @RequestMapping(value = "/geographicSite/{id}", produces = { "application/json" }, method = RequestMethod.GET) - default ResponseEntity retrieveGeographicSite(@Parameter(description = "Identifier of the Geographic site",required=true) @PathVariable("id") String id) { + default ResponseEntity retrieveGeographicSite(Principal principal,@Parameter(description = "Identifier of the Geographic site",required=true) @PathVariable("id") String id) { return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); } diff --git a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java index 475eaed..22d27e0 100644 --- a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java +++ b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java @@ -2,17 +2,24 @@ package org.etsi.osl.tmf.gsm674.api; import io.swagger.v3.oas.annotations.Parameter; import jakarta.validation.Valid; +import org.etsi.osl.model.nfv.UserRoleType; import org.etsi.osl.tmf.gsm674.model.GeographicSite; import org.etsi.osl.tmf.gsm674.reposervices.GeographicSiteManagementService; +import org.etsi.osl.tmf.pm632.model.Individual; +import org.etsi.osl.tmf.pm632.reposervices.IndividualRepoService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import java.security.Principal; import java.util.List; @Controller @@ -22,9 +29,12 @@ public class GeographicSiteManagementApiController implements GeographicSiteMana private static final String COULD_NOT_SERIALIZE="Couldn't serialize response for content type application/json"; private final GeographicSiteManagementService geographicSiteManagementService; + private final IndividualRepoService individualRepoService; + @Autowired - public GeographicSiteManagementApiController(GeographicSiteManagementService geographicSiteManagementService) { + public GeographicSiteManagementApiController(GeographicSiteManagementService geographicSiteManagementService, IndividualRepoService individualRepoService) { this.geographicSiteManagementService = geographicSiteManagementService; + this.individualRepoService = individualRepoService; } @PreAuthorize("hasAnyAuthority('ROLE_USER')" ) @@ -41,12 +51,27 @@ public class GeographicSiteManagementApiController implements GeographicSiteMana } } - @PreAuthorize("hasAnyAuthority('ROLE_USER')" ) + @PreAuthorize("hasAnyAuthority('ROLE_USER', 'ROLE_ADMIN')") @Override - public ResponseEntity retrieveGeographicSite(@PathVariable("id") String id) { + public ResponseEntity retrieveGeographicSite(Principal principal, @PathVariable("id") String id) { try { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + if ( id.equals( "myuser" ) ) { + + log.debug("principal= " + principal.toString()); + + Individual ind = individualRepoService.findByUsername(principal.getName()); + + GeographicSite gs= geographicSiteManagementService.findGeographicSiteByRelatedPartyId(ind.getId()); + return new ResponseEntity<>(gs,HttpStatus.OK); + + } else if ( authentication.getAuthorities().contains( new SimpleGrantedAuthority( UserRoleType.ROLE_ADMIN.getValue() ) ) ){ + + }else { + return new ResponseEntity< GeographicSite >(HttpStatus.FORBIDDEN ); + } return new ResponseEntity<>(geographicSiteManagementService.findGeographicSiteByUUID(id), HttpStatus.OK); } catch (Exception e) { diff --git a/src/main/java/org/etsi/osl/tmf/gsm674/repo/GeographicSiteManagementRepository.java b/src/main/java/org/etsi/osl/tmf/gsm674/repo/GeographicSiteManagementRepository.java index c65f209..81d3068 100644 --- a/src/main/java/org/etsi/osl/tmf/gsm674/repo/GeographicSiteManagementRepository.java +++ b/src/main/java/org/etsi/osl/tmf/gsm674/repo/GeographicSiteManagementRepository.java @@ -4,11 +4,16 @@ import org.etsi.osl.tmf.gsm674.model.GeographicSite; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.stereotype.Repository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import java.util.Optional; +import java.util.UUID; @Repository public interface GeographicSiteManagementRepository extends CrudRepository, PagingAndSortingRepository { Optional findByUuid(String id); + @Query("SELECT gs FROM GeographicSite gs JOIN gs.relatedParty rp WHERE rp.id = :relatedPartyId") + Optional findByRelatedPartyId(@Param("relatedPartyId") String relatedPartyId); } diff --git a/src/main/java/org/etsi/osl/tmf/gsm674/reposervices/GeographicSiteManagementService.java b/src/main/java/org/etsi/osl/tmf/gsm674/reposervices/GeographicSiteManagementService.java index 1206d82..a13b70d 100644 --- a/src/main/java/org/etsi/osl/tmf/gsm674/reposervices/GeographicSiteManagementService.java +++ b/src/main/java/org/etsi/osl/tmf/gsm674/reposervices/GeographicSiteManagementService.java @@ -37,6 +37,12 @@ public class GeographicSiteManagementService { } + public GeographicSite findGeographicSiteByRelatedPartyId(String uuid){ + Optional gs=geographicSiteManagementRepository.findByRelatedPartyId(uuid); + return gs.orElse(null); + + } + public GeographicSite createGeographicSite(GeographicSite geographicSite){ log.info("Add another geographic site: {}",geographicSite); return geographicSiteManagementRepository.save(geographicSite); diff --git a/src/test/java/org/etsi/osl/services/api/gsm674/GeographicSiteManagementApiControllerTest.java b/src/test/java/org/etsi/osl/services/api/gsm674/GeographicSiteManagementApiControllerTest.java index 04878fd..244136a 100644 --- a/src/test/java/org/etsi/osl/services/api/gsm674/GeographicSiteManagementApiControllerTest.java +++ b/src/test/java/org/etsi/osl/services/api/gsm674/GeographicSiteManagementApiControllerTest.java @@ -14,6 +14,7 @@ import org.mockito.MockitoAnnotations; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import java.security.Principal; import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -53,17 +54,17 @@ class GeographicSiteManagementApiControllerTest { assertEquals(sites, response.getBody()); } - @Test - void testFetchGeographicSite() { - GeographicSite site = new GeographicSite(); - // Add test data to sites list - when(service.findGeographicSiteByUUID("123")).thenReturn(site); - - ResponseEntity response = controller.retrieveGeographicSite("123"); - - assertEquals(HttpStatus.OK, response.getStatusCode()); - assertEquals(site, response.getBody()); - } +// @Test +// void testFetchGeographicSite() { +// GeographicSite site = new GeographicSite(); +// // Add test data to sites list +// when(service.findGeographicSiteByUUID("123")).thenReturn(site); +// +// ResponseEntity response = controller.retrieveGeographicSite("123"); +// +// assertEquals(HttpStatus.OK, response.getStatusCode()); +// assertEquals(site, response.getBody()); +// } @Test void testCreateGeographicSite() { -- GitLab From adcc65d40247757112e2c20adbdfcabcf055cc27 Mon Sep 17 00:00:00 2001 From: lpapadopoulos Date: Tue, 28 May 2024 15:54:53 +0300 Subject: [PATCH 3/9] Fix get operation bug --- .../gsm674/api/GeographicSiteManagementApiController.java | 4 ++-- .../gsm674/reposervices/GeographicSiteManagementService.java | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java index 22d27e0..3153156 100644 --- a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java +++ b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java @@ -65,14 +65,14 @@ public class GeographicSiteManagementApiController implements GeographicSiteMana Individual ind = individualRepoService.findByUsername(principal.getName()); GeographicSite gs= geographicSiteManagementService.findGeographicSiteByRelatedPartyId(ind.getId()); - return new ResponseEntity<>(gs,HttpStatus.OK); + return new ResponseEntity(gs,HttpStatus.OK); } else if ( authentication.getAuthorities().contains( new SimpleGrantedAuthority( UserRoleType.ROLE_ADMIN.getValue() ) ) ){ + return new ResponseEntity(geographicSiteManagementService.findGeographicSiteByUUID(id), HttpStatus.OK); }else { return new ResponseEntity< GeographicSite >(HttpStatus.FORBIDDEN ); } - return new ResponseEntity<>(geographicSiteManagementService.findGeographicSiteByUUID(id), HttpStatus.OK); } catch (Exception e) { log.error(COULD_NOT_SERIALIZE, e); diff --git a/src/main/java/org/etsi/osl/tmf/gsm674/reposervices/GeographicSiteManagementService.java b/src/main/java/org/etsi/osl/tmf/gsm674/reposervices/GeographicSiteManagementService.java index a13b70d..607e1ca 100644 --- a/src/main/java/org/etsi/osl/tmf/gsm674/reposervices/GeographicSiteManagementService.java +++ b/src/main/java/org/etsi/osl/tmf/gsm674/reposervices/GeographicSiteManagementService.java @@ -39,6 +39,11 @@ public class GeographicSiteManagementService { public GeographicSite findGeographicSiteByRelatedPartyId(String uuid){ Optional gs=geographicSiteManagementRepository.findByRelatedPartyId(uuid); + try { + log.info("Found geographic site from related party:{} , geographic site info: {}", uuid, gs.orElse(null).toString()); + }catch(Exception e){ + log.error("Error during fetch of geographic site info: {}", e.getMessage()); + } return gs.orElse(null); } -- GitLab From 5adf8261ead6f2aad00862d8c104a62cdb3152d3 Mon Sep 17 00:00:00 2001 From: lpapadopoulos Date: Tue, 28 May 2024 19:30:30 +0300 Subject: [PATCH 4/9] Add authentication to PATCH --- .../api/GeographicSiteManagementApi.java | 2 +- ...GeographicSiteManagementApiController.java | 15 +++++- ...raphicSiteManagementApiControllerTest.java | 48 +++++++++---------- 3 files changed, 38 insertions(+), 27 deletions(-) diff --git a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApi.java b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApi.java index 812091a..22247eb 100644 --- a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApi.java +++ b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApi.java @@ -109,7 +109,7 @@ public interface GeographicSiteManagementApi { produces = { "application/json" }, consumes = { "application/json" }, method = RequestMethod.PATCH) - default ResponseEntity patchGeographicalSite(@Parameter(description = "Identifier of the Geographic site",required=true) @PathVariable("id") String id,@Parameter(description = "The Service Level Specification to be updated" ,required=true ) @Valid @RequestBody GeographicSite geographicSite) { + default ResponseEntity patchGeographicalSite(Principal principal,@Parameter(description = "Identifier of the Geographic site",required=true) @PathVariable("id") String id,@Parameter(description = "The Service Level Specification to be updated" ,required=true ) @Valid @RequestBody GeographicSite geographicSite) { return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); } diff --git a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java index 3153156..e3025d0 100644 --- a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java +++ b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java @@ -116,12 +116,23 @@ public class GeographicSiteManagementApiController implements GeographicSiteMana @PreAuthorize("hasAnyAuthority('ROLE_USER')" ) @Override - public ResponseEntity patchGeographicalSite( + public ResponseEntity patchGeographicalSite(Principal principal, @Parameter(description = "Identifier of the ServiceOrder", required = true) @PathVariable("id") String id, @Parameter(description = "The ServiceOrder to be updated", required = true) @Valid @RequestBody GeographicSite geographicSite) { try{ - GeographicSite c = geographicSiteManagementService.updateGeographicSite(id, geographicSite); + GeographicSite c; + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + if ( id.equals( "myuser" ) ) { + log.debug("principal= " + principal.toString()); + + Individual ind = individualRepoService.findByUsername(principal.getName()); + GeographicSite gs = geographicSiteManagementService.findGeographicSiteByRelatedPartyId(ind.getId()); + c = geographicSiteManagementService.updateGeographicSite(gs.getUuid(), geographicSite); + }else{ + c = geographicSiteManagementService.updateGeographicSite(id, geographicSite); + + } return new ResponseEntity<>(c, HttpStatus.OK); }catch (Exception e){ log.error(COULD_NOT_SERIALIZE, e); diff --git a/src/test/java/org/etsi/osl/services/api/gsm674/GeographicSiteManagementApiControllerTest.java b/src/test/java/org/etsi/osl/services/api/gsm674/GeographicSiteManagementApiControllerTest.java index 244136a..ad1adef 100644 --- a/src/test/java/org/etsi/osl/services/api/gsm674/GeographicSiteManagementApiControllerTest.java +++ b/src/test/java/org/etsi/osl/services/api/gsm674/GeographicSiteManagementApiControllerTest.java @@ -107,29 +107,29 @@ class GeographicSiteManagementApiControllerTest { assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); } - @Test - void testPatchGeographicalSite() { - String siteId = "siteId"; - GeographicSite updatedSite = new GeographicSite(); - // Set up mock service behavior - when(service.updateGeographicSite(anyString(), any())).thenReturn(updatedSite); - - ResponseEntity response = controller.patchGeographicalSite(siteId, updatedSite); - - assertEquals(HttpStatus.OK, response.getStatusCode()); - assertEquals(updatedSite, response.getBody()); - } - - @Test - void testPatchGeographicalSiteException() { - String siteId = "siteId"; - GeographicSite updatedSite = new GeographicSite(); - // Set up mock service behavior - when(service.updateGeographicSite(anyString(), any())).thenThrow(RuntimeException.class); - - ResponseEntity response = controller.patchGeographicalSite(siteId, updatedSite); - - assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); - } +// @Test +// void testPatchGeographicalSite() { +// String siteId = "siteId"; +// GeographicSite updatedSite = new GeographicSite(); +// // Set up mock service behavior +// when(service.updateGeographicSite(anyString(), any())).thenReturn(updatedSite); +// +// ResponseEntity response = controller.patchGeographicalSite(siteId, updatedSite); +// +// assertEquals(HttpStatus.OK, response.getStatusCode()); +// assertEquals(updatedSite, response.getBody()); +// } +// +// @Test +// void testPatchGeographicalSiteException() { +// String siteId = "siteId"; +// GeographicSite updatedSite = new GeographicSite(); +// // Set up mock service behavior +// when(service.updateGeographicSite(anyString(), any())).thenThrow(RuntimeException.class); +// +// ResponseEntity response = controller.patchGeographicalSite(siteId, updatedSite); +// +// assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); +// } } -- GitLab From 879bfc926ec77a031594474dfb5cbc64b797de64 Mon Sep 17 00:00:00 2001 From: lpapadopoulos Date: Wed, 29 May 2024 13:38:26 +0300 Subject: [PATCH 5/9] Fix unit tests --- ...raphicSiteManagementApiControllerTest.java | 90 +++++++++++-------- 1 file changed, 54 insertions(+), 36 deletions(-) diff --git a/src/test/java/org/etsi/osl/services/api/gsm674/GeographicSiteManagementApiControllerTest.java b/src/test/java/org/etsi/osl/services/api/gsm674/GeographicSiteManagementApiControllerTest.java index ad1adef..4aea003 100644 --- a/src/test/java/org/etsi/osl/services/api/gsm674/GeographicSiteManagementApiControllerTest.java +++ b/src/test/java/org/etsi/osl/services/api/gsm674/GeographicSiteManagementApiControllerTest.java @@ -5,6 +5,9 @@ import org.etsi.osl.tmf.gsm674.model.GeographicSite; import org.etsi.osl.tmf.gsm674.reposervices.GeographicSiteManagementService; import org.junit.jupiter.api.BeforeEach; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.test.context.ActiveProfiles; import org.junit.jupiter.api.Test; @@ -16,8 +19,11 @@ import org.springframework.http.ResponseEntity; import java.security.Principal; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Optional; +import java.util.Set; import java.util.UUID; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -25,8 +31,11 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; - +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; @AutoConfigureMockMvc @ActiveProfiles("testing") class GeographicSiteManagementApiControllerTest { @@ -54,17 +63,26 @@ class GeographicSiteManagementApiControllerTest { assertEquals(sites, response.getBody()); } -// @Test -// void testFetchGeographicSite() { -// GeographicSite site = new GeographicSite(); -// // Add test data to sites list -// when(service.findGeographicSiteByUUID("123")).thenReturn(site); -// -// ResponseEntity response = controller.retrieveGeographicSite("123"); -// -// assertEquals(HttpStatus.OK, response.getStatusCode()); -// assertEquals(site, response.getBody()); -// } + @Test + void testFetchGeographicSite() { + GeographicSite site = new GeographicSite(); + // Add test data to sites list + when(service.findGeographicSiteByUUID("123")).thenReturn(site); +// Mock SecurityContext and Authentication + SecurityContext securityContext = mock(SecurityContext.class); + Set authorities = new HashSet<>(); + authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN")); + Authentication authentication = new UsernamePasswordAuthenticationToken("user", "password", authorities); + + SecurityContextHolder.setContext(securityContext); + + when(securityContext.getAuthentication()).thenReturn(authentication); + + ResponseEntity response = controller.retrieveGeographicSite(null,"123"); + + assertEquals(HttpStatus.OK, response.getStatusCode()); + assertEquals(site, response.getBody()); + } @Test void testCreateGeographicSite() { @@ -107,29 +125,29 @@ class GeographicSiteManagementApiControllerTest { assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); } -// @Test -// void testPatchGeographicalSite() { -// String siteId = "siteId"; -// GeographicSite updatedSite = new GeographicSite(); -// // Set up mock service behavior -// when(service.updateGeographicSite(anyString(), any())).thenReturn(updatedSite); -// -// ResponseEntity response = controller.patchGeographicalSite(siteId, updatedSite); -// -// assertEquals(HttpStatus.OK, response.getStatusCode()); -// assertEquals(updatedSite, response.getBody()); -// } -// -// @Test -// void testPatchGeographicalSiteException() { -// String siteId = "siteId"; -// GeographicSite updatedSite = new GeographicSite(); -// // Set up mock service behavior -// when(service.updateGeographicSite(anyString(), any())).thenThrow(RuntimeException.class); -// -// ResponseEntity response = controller.patchGeographicalSite(siteId, updatedSite); -// -// assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); -// } + @Test + void testPatchGeographicalSite() { + String siteId = "siteId"; + GeographicSite updatedSite = new GeographicSite(); + // Set up mock service behavior + when(service.updateGeographicSite(anyString(), any())).thenReturn(updatedSite); + + ResponseEntity response = controller.patchGeographicalSite(null,siteId, updatedSite); + + assertEquals(HttpStatus.OK, response.getStatusCode()); + assertEquals(updatedSite, response.getBody()); + } + + @Test + void testPatchGeographicalSiteException() { + String siteId = "siteId"; + GeographicSite updatedSite = new GeographicSite(); + // Set up mock service behavior + when(service.updateGeographicSite(anyString(), any())).thenThrow(RuntimeException.class); + + ResponseEntity response = controller.patchGeographicalSite(null,siteId, updatedSite); + + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.getStatusCode()); + } } -- GitLab From f6987a4bd8a4750c006a0356c2f656fbd5f39117 Mon Sep 17 00:00:00 2001 From: lpapadopoulos Date: Wed, 29 May 2024 14:32:07 +0300 Subject: [PATCH 6/9] return new geographic site in case there in not one --- .../tmf/gsm674/api/GeographicSiteManagementApiController.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java index e3025d0..88fcdbc 100644 --- a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java +++ b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java @@ -65,6 +65,7 @@ public class GeographicSiteManagementApiController implements GeographicSiteMana Individual ind = individualRepoService.findByUsername(principal.getName()); GeographicSite gs= geographicSiteManagementService.findGeographicSiteByRelatedPartyId(ind.getId()); + if (gs==null) gs =new GeographicSite(); return new ResponseEntity(gs,HttpStatus.OK); } else if ( authentication.getAuthorities().contains( new SimpleGrantedAuthority( UserRoleType.ROLE_ADMIN.getValue() ) ) ){ -- GitLab From 0d5433e22f14c57f7266ee4f0816547c5b331fc4 Mon Sep 17 00:00:00 2001 From: lpapadopoulos Date: Wed, 29 May 2024 15:14:58 +0300 Subject: [PATCH 7/9] fix geographic site info object with null values --- .../api/GeographicSiteManagementApiController.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java index 88fcdbc..ea1b983 100644 --- a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java +++ b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java @@ -3,7 +3,10 @@ package org.etsi.osl.tmf.gsm674.api; import io.swagger.v3.oas.annotations.Parameter; import jakarta.validation.Valid; import org.etsi.osl.model.nfv.UserRoleType; +import org.etsi.osl.tmf.gsm674.model.GeographicAddressValue; import org.etsi.osl.tmf.gsm674.model.GeographicSite; +import org.etsi.osl.tmf.gsm674.model.GeographicSubAddressValue; +import org.etsi.osl.tmf.gsm674.model.PlaceRefOrValue; import org.etsi.osl.tmf.gsm674.reposervices.GeographicSiteManagementService; import org.etsi.osl.tmf.pm632.model.Individual; import org.etsi.osl.tmf.pm632.reposervices.IndividualRepoService; @@ -20,6 +23,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import java.security.Principal; +import java.util.ArrayList; import java.util.List; @Controller @@ -66,6 +70,13 @@ public class GeographicSiteManagementApiController implements GeographicSiteMana GeographicSite gs= geographicSiteManagementService.findGeographicSiteByRelatedPartyId(ind.getId()); if (gs==null) gs =new GeographicSite(); + GeographicSubAddressValue geographicSubAddressValue=new GeographicSubAddressValue(); + GeographicAddressValue geographicAddressValue=new GeographicAddressValue(); + geographicAddressValue.setGeographicSubAddress(geographicSubAddressValue); + PlaceRefOrValue placeRefOrValue=new PlaceRefOrValue(geographicAddressValue); + List placeRefOrValues=new ArrayList<>(); + placeRefOrValues.add(placeRefOrValue); + gs.setPlace(placeRefOrValues); return new ResponseEntity(gs,HttpStatus.OK); } else if ( authentication.getAuthorities().contains( new SimpleGrantedAuthority( UserRoleType.ROLE_ADMIN.getValue() ) ) ){ -- GitLab From ed6b13fc2cc4b4c930492591fd4014ecbf46b55f Mon Sep 17 00:00:00 2001 From: lpapadopoulos Date: Wed, 29 May 2024 16:12:51 +0300 Subject: [PATCH 8/9] fix null object validation --- .../tmf/gsm674/api/GeographicSiteManagementApiController.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java index ea1b983..76faa05 100644 --- a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java +++ b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java @@ -69,7 +69,8 @@ public class GeographicSiteManagementApiController implements GeographicSiteMana Individual ind = individualRepoService.findByUsername(principal.getName()); GeographicSite gs= geographicSiteManagementService.findGeographicSiteByRelatedPartyId(ind.getId()); - if (gs==null) gs =new GeographicSite(); + if (gs==null) { + gs =new GeographicSite(); GeographicSubAddressValue geographicSubAddressValue=new GeographicSubAddressValue(); GeographicAddressValue geographicAddressValue=new GeographicAddressValue(); geographicAddressValue.setGeographicSubAddress(geographicSubAddressValue); @@ -77,6 +78,7 @@ public class GeographicSiteManagementApiController implements GeographicSiteMana List placeRefOrValues=new ArrayList<>(); placeRefOrValues.add(placeRefOrValue); gs.setPlace(placeRefOrValues); + } return new ResponseEntity(gs,HttpStatus.OK); } else if ( authentication.getAuthorities().contains( new SimpleGrantedAuthority( UserRoleType.ROLE_ADMIN.getValue() ) ) ){ -- GitLab From 58d289314d8afc0e6c962920b27f017af84b3992 Mon Sep 17 00:00:00 2001 From: lpapadopoulos Date: Tue, 11 Jun 2024 15:37:39 +0300 Subject: [PATCH 9/9] enhance code after MR comments --- ...GeographicSiteManagementApiController.java | 47 +++++-------------- ...raphicSiteManagementApiControllerTest.java | 14 ++++++ 2 files changed, 25 insertions(+), 36 deletions(-) diff --git a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java index 76faa05..208a655 100644 --- a/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java +++ b/src/main/java/org/etsi/osl/tmf/gsm674/api/GeographicSiteManagementApiController.java @@ -55,22 +55,14 @@ public class GeographicSiteManagementApiController implements GeographicSiteMana } } - @PreAuthorize("hasAnyAuthority('ROLE_USER', 'ROLE_ADMIN')") + @PreAuthorize("hasAnyAuthority('ROLE_USER', 'ROLE_TESTBED_PROVIDER')") @Override public ResponseEntity retrieveGeographicSite(Principal principal, @PathVariable("id") String id) { - try { - Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - if ( id.equals( "myuser" ) ) { - - log.debug("principal= " + principal.toString()); - - Individual ind = individualRepoService.findByUsername(principal.getName()); - - GeographicSite gs= geographicSiteManagementService.findGeographicSiteByRelatedPartyId(ind.getId()); - if (gs==null) { - gs =new GeographicSite(); + GeographicSite gs= geographicSiteManagementService.findGeographicSiteByRelatedPartyId(id); + if (gs==null) { + gs =new GeographicSite(); GeographicSubAddressValue geographicSubAddressValue=new GeographicSubAddressValue(); GeographicAddressValue geographicAddressValue=new GeographicAddressValue(); geographicAddressValue.setGeographicSubAddress(geographicSubAddressValue); @@ -78,15 +70,8 @@ public class GeographicSiteManagementApiController implements GeographicSiteMana List placeRefOrValues=new ArrayList<>(); placeRefOrValues.add(placeRefOrValue); gs.setPlace(placeRefOrValues); - } - return new ResponseEntity(gs,HttpStatus.OK); - - } else if ( authentication.getAuthorities().contains( new SimpleGrantedAuthority( UserRoleType.ROLE_ADMIN.getValue() ) ) ){ - return new ResponseEntity(geographicSiteManagementService.findGeographicSiteByUUID(id), HttpStatus.OK); - - }else { - return new ResponseEntity< GeographicSite >(HttpStatus.FORBIDDEN ); } + return new ResponseEntity(gs,HttpStatus.OK); } catch (Exception e) { log.error(COULD_NOT_SERIALIZE, e); @@ -94,7 +79,7 @@ public class GeographicSiteManagementApiController implements GeographicSiteMana } } - @PreAuthorize("hasAnyAuthority('ROLE_USER')" ) + @PreAuthorize("hasAnyAuthority('ROLE_USER','ROLE_TESTBED_PROVIDER')" ) @Override public ResponseEntity createGeographicSite( @Parameter(description = "The geographic site to be created", required = true) @Valid @RequestBody GeographicSite geographicSite @@ -113,7 +98,7 @@ public class GeographicSiteManagementApiController implements GeographicSiteMana } } - @PreAuthorize("hasAnyAuthority('ROLE_USER')" ) + @PreAuthorize("hasAnyAuthority('ROLE_USER','ROLE_TESTBED_PROVIDER')" ) @Override public ResponseEntity deleteGeographicSite( @Parameter(description = "Identifier of the geographic site", required = true) @PathVariable("id") String id) { @@ -128,26 +113,16 @@ public class GeographicSiteManagementApiController implements GeographicSiteMana } - @PreAuthorize("hasAnyAuthority('ROLE_USER')" ) + @PreAuthorize("hasAnyAuthority('ROLE_USER','ROLE_TESTBED_PROVIDER')" ) @Override public ResponseEntity patchGeographicalSite(Principal principal, @Parameter(description = "Identifier of the ServiceOrder", required = true) @PathVariable("id") String id, @Parameter(description = "The ServiceOrder to be updated", required = true) @Valid @RequestBody GeographicSite geographicSite) { try{ - GeographicSite c; - Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - if ( id.equals( "myuser" ) ) { - - log.debug("principal= " + principal.toString()); - - Individual ind = individualRepoService.findByUsername(principal.getName()); - GeographicSite gs = geographicSiteManagementService.findGeographicSiteByRelatedPartyId(ind.getId()); - c = geographicSiteManagementService.updateGeographicSite(gs.getUuid(), geographicSite); - }else{ - c = geographicSiteManagementService.updateGeographicSite(id, geographicSite); + GeographicSite c=geographicSiteManagementService.findGeographicSiteByRelatedPartyId(id); + c = geographicSiteManagementService.updateGeographicSite(c.getUuid(), geographicSite); + return new ResponseEntity<>(c, HttpStatus.OK); - } - return new ResponseEntity<>(c, HttpStatus.OK); }catch (Exception e){ log.error(COULD_NOT_SERIALIZE, e); return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); diff --git a/src/test/java/org/etsi/osl/services/api/gsm674/GeographicSiteManagementApiControllerTest.java b/src/test/java/org/etsi/osl/services/api/gsm674/GeographicSiteManagementApiControllerTest.java index 4aea003..4c070ed 100644 --- a/src/test/java/org/etsi/osl/services/api/gsm674/GeographicSiteManagementApiControllerTest.java +++ b/src/test/java/org/etsi/osl/services/api/gsm674/GeographicSiteManagementApiControllerTest.java @@ -1,7 +1,10 @@ package org.etsi.osl.services.api.gsm674; import org.etsi.osl.tmf.gsm674.api.GeographicSiteManagementApiController; +import org.etsi.osl.tmf.gsm674.model.GeographicAddressValue; import org.etsi.osl.tmf.gsm674.model.GeographicSite; +import org.etsi.osl.tmf.gsm674.model.GeographicSubAddressValue; +import org.etsi.osl.tmf.gsm674.model.PlaceRefOrValue; import org.etsi.osl.tmf.gsm674.reposervices.GeographicSiteManagementService; import org.junit.jupiter.api.BeforeEach; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; @@ -66,6 +69,13 @@ class GeographicSiteManagementApiControllerTest { @Test void testFetchGeographicSite() { GeographicSite site = new GeographicSite(); + GeographicSubAddressValue geographicSubAddressValue=new GeographicSubAddressValue(); + GeographicAddressValue geographicAddressValue=new GeographicAddressValue(); + geographicAddressValue.setGeographicSubAddress(geographicSubAddressValue); + PlaceRefOrValue placeRefOrValue=new PlaceRefOrValue(geographicAddressValue); + List placeRefOrValues=new ArrayList<>(); + placeRefOrValues.add(placeRefOrValue); + site.setPlace(placeRefOrValues); // Add test data to sites list when(service.findGeographicSiteByUUID("123")).thenReturn(site); // Mock SecurityContext and Authentication @@ -127,9 +137,13 @@ class GeographicSiteManagementApiControllerTest { @Test void testPatchGeographicalSite() { + String relatedPartyUuid = "relatedPartyUuid"; String siteId = "siteId"; + GeographicSite oldSite = new GeographicSite(); + oldSite.setUuid(relatedPartyUuid); GeographicSite updatedSite = new GeographicSite(); // Set up mock service behavior + when(service.findGeographicSiteByRelatedPartyId(any())).thenReturn(oldSite); when(service.updateGeographicSite(anyString(), any())).thenReturn(updatedSite); ResponseEntity response = controller.patchGeographicalSite(null,siteId, updatedSite); -- GitLab