diff --git a/src/main/java/net/geant/nmaas/portal/api/bulk/BulkController.java b/src/main/java/net/geant/nmaas/portal/api/bulk/BulkController.java index 462384d16939f203d8459a25964efefdd68c3a15..45713f6c1cb3eba96d97eef12402dd5ca0b661e1 100644 --- a/src/main/java/net/geant/nmaas/portal/api/bulk/BulkController.java +++ b/src/main/java/net/geant/nmaas/portal/api/bulk/BulkController.java @@ -197,7 +197,6 @@ public class BulkController { if (removeApps) { bulkApplicationService.deleteAppInstancesFromBulk(bulk.get()); } -// bulkDeploymentRepository.delete(bulk.get()); bulk.get().setDeleted(true); bulk.get().setState(BulkDeploymentState.REMOVED); bulkDeploymentRepository.save(bulk.get()); @@ -213,7 +212,7 @@ public class BulkController { @GetMapping("/refresh/{id}") @PreAuthorize("hasRole('ROLE_SYSTEM_ADMIN') || hasRole('ROLE_GROUP_MANAGER')") public ResponseEntity<BulkDeploymentViewS> getRefreshedState(@PathVariable Long id) { - return ResponseEntity.ok(mapToView(this.bulkApplicationService.updateState(id))); + return ResponseEntity.ok(mapToView(bulkApplicationService.updateState(id))); } @GetMapping("/queue/{id}") diff --git a/src/main/java/net/geant/nmaas/portal/service/impl/DashboardServiceImpl.java b/src/main/java/net/geant/nmaas/portal/service/impl/DashboardServiceImpl.java index 3ff7e127998e89caafc05c910a4c0854cc653818..fa863c48e88eff76ce1649c704b4af6e1cddf66e 100644 --- a/src/main/java/net/geant/nmaas/portal/service/impl/DashboardServiceImpl.java +++ b/src/main/java/net/geant/nmaas/portal/service/impl/DashboardServiceImpl.java @@ -27,7 +27,6 @@ import java.util.List; import java.util.Map; import java.util.Optional; - @Service @RequiredArgsConstructor @Slf4j @@ -41,7 +40,6 @@ public class DashboardServiceImpl implements DashboardService { private final ApplicationBaseRepository applicationBaseRepository; private final UserLoginRegisterService userLoginRegisterService; - @Override public DashboardView getSystemDashboard(OffsetDateTime startDate, OffsetDateTime endDate) { log.info("Processing dashboard data request for period {} - {}", startDate, endDate); diff --git a/src/test/java/net/geant/nmaas/portal/api/bulk/BulkControllerTest.java b/src/test/java/net/geant/nmaas/portal/api/bulk/BulkControllerTest.java index 376fc1b6858471da45da12a65b6659347e9b9e77..acba6d77ed335a7c4dc7f71a8e68d8c99d215d71 100644 --- a/src/test/java/net/geant/nmaas/portal/api/bulk/BulkControllerTest.java +++ b/src/test/java/net/geant/nmaas/portal/api/bulk/BulkControllerTest.java @@ -11,6 +11,7 @@ import net.geant.nmaas.portal.service.BulkDomainService; import net.geant.nmaas.portal.service.UserService; import org.junit.jupiter.api.Test; import org.modelmapper.ModelMapper; +import org.springframework.dao.PermissionDeniedDataAccessException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.mock.web.MockMultipartFile; @@ -23,10 +24,12 @@ import java.util.List; import java.util.Objects; import java.util.Optional; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; @@ -91,22 +94,19 @@ public class BulkControllerTest { when(principalMock.getName()).thenReturn("user"); when(userService.findByUsername("user")).thenReturn(Optional.of(new User("user"))); - ResponseEntity<BulkDeploymentViewS> response = bulkController.uploadApplications(principalMock, "applicationName", 2, file); + bulkController.uploadApplications(principalMock, "applicationName", 2, file); }); } @Test void shouldGetDomainBulksAsGroupManager() { when(principalMock.getName()).thenReturn("user"); - User user = new User("user"); - user.setId(10L); - when(userService.findByUsername("user")).thenReturn(Optional.of(user)); - when(userService.findById(10L)).thenReturn(Optional.of(user)); BulkDeployment viewS = new BulkDeployment(); viewS.setType(BulkType.DOMAIN); - viewS.setCreator(user); + viewS.setCreator(setUpMockUser("user", 10L)); viewS.setDeleted(false); when(bulkDeploymentRepository.findByType(BulkType.DOMAIN)).thenReturn(List.of(viewS)); + assertEquals(1, Objects.requireNonNull(bulkController.getDomainDeploymentRecordsRestrictedToOwner(principalMock).getBody()).size()); } @@ -136,4 +136,91 @@ public class BulkControllerTest { assertEquals(1, Objects.requireNonNull(bulkController.getAppDeploymentRecordsRestrictedToOwner(principalMock).getBody()).size()); } + @Test + void shouldNotRemoveNotFoundBulkDeployment() { + when(principalMock.getName()).thenReturn("user"); + setUpMockUser("user", 10L); + when(bulkDeploymentRepository.findById(5L)).thenReturn(Optional.empty()); + + ResponseEntity<Void> response = bulkController.removeBulkDeployment(5L, false, principalMock); + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND); + } + + @Test + void shouldRemoveBulkDeployment() { + when(principalMock.getName()).thenReturn("user"); + + BulkDeployment bulk = new BulkDeployment(); + bulk.setId(5L); + bulk.setType(BulkType.APPLICATION); + bulk.setCreator(setUpMockUser("user", 10L)); + bulk.setDeleted(false); + when(bulkDeploymentRepository.findById(5L)).thenReturn(Optional.of(bulk)); + + ResponseEntity<Void> response = bulkController.removeBulkDeployment(5L, false, principalMock); + + verifyNoInteractions(bulkApplicationService); + verify(bulkDeploymentRepository).save(any()); + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); + } + + @Test + void shouldRemoveBulkDeploymentWithApplications() { + when(principalMock.getName()).thenReturn("user"); + + BulkDeployment bulk = new BulkDeployment(); + bulk.setId(5L); + bulk.setType(BulkType.APPLICATION); + bulk.setCreator(setUpMockUser("user", 10L)); + bulk.setDeleted(false); + when(bulkDeploymentRepository.findById(5L)).thenReturn(Optional.of(bulk)); + + ResponseEntity<Void> response = bulkController.removeBulkDeployment(5L, true, principalMock); + + verify(bulkApplicationService).deleteAppInstancesFromBulk(bulk); + verify(bulkDeploymentRepository).save(any()); + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); + } + + @Test + void shouldForbidRemovalOfBulkDeploymentForNonCreator() { + when(principalMock.getName()).thenReturn("user"); + setUpMockUser("user", 10L); + + BulkDeployment bulk = new BulkDeployment(); + bulk.setId(5L); + bulk.setType(BulkType.APPLICATION); + bulk.setCreator(setUpMockUser("creator", 11L)); + bulk.setDeleted(false); + when(bulkDeploymentRepository.findById(5L)).thenReturn(Optional.of(bulk)); + + assertThrows(PermissionDeniedDataAccessException.class, () -> + bulkController.removeBulkDeployment(5L, true, principalMock) + ); + + verifyNoInteractions(bulkApplicationService); + verify(bulkDeploymentRepository, times(0)).save(any()); + } + + @Test + void shouldGetBulkDeploymentRefreshedState() { + BulkDeployment bulk = new BulkDeployment(); + bulk.setId(5L); + bulk.setType(BulkType.APPLICATION); + bulk.setCreator(setUpMockUser("creator", 11L)); + bulk.setDeleted(false); + when(bulkApplicationService.updateState(5L)).thenReturn(bulk); + + ResponseEntity<BulkDeploymentViewS> response = bulkController.getRefreshedState(5L); + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); + } + + private User setUpMockUser(String username, long id) { + User user = new User(username); + user.setId(id); + when(userService.findByUsername(username)).thenReturn(Optional.of(user)); + when(userService.findById(id)).thenReturn(Optional.of(user)); + return user; + } + } \ No newline at end of file diff --git a/src/test/java/net/geant/nmaas/portal/api/configuration/InitScriptsControllerTest.java b/src/test/java/net/geant/nmaas/portal/api/configuration/InitScriptsControllerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..870572a8fffa1f2940bfdd81219759c903a1a22a --- /dev/null +++ b/src/test/java/net/geant/nmaas/portal/api/configuration/InitScriptsControllerTest.java @@ -0,0 +1,32 @@ +package net.geant.nmaas.portal.api.configuration; + +import net.geant.nmaas.nmservice.deployment.containerorchestrators.kubernetes.components.helm.InitScriptsStateService; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +public class InitScriptsControllerTest { + + private final InitScriptsStateService service = mock(InitScriptsStateService.class); + + private final InitScriptsController controller = new InitScriptsController(service); + + @Test + void shouldEnableFlagOnStart() { + assertThat(controller.isInitInProgress()).isFalse(); + controller.startInitScripts(); + assertThat(controller.isInitInProgress()).isTrue(); + } + + @Test + void shouldDisableFlagOnEnd() { + assertThat(controller.isInitInProgress()).isFalse(); + controller.endInitScripts(); + assertThat(controller.isInitInProgress()).isFalse(); + verify(service, times(1)).executeHelmRepoUpdate(); + } + +}