Skip to content
Open
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 @@ -67,6 +67,15 @@ public ResponseEntity<PersistedProcessConfig> getProcessConfig(
return processConfig.map(config -> ResponseEntity.ok().body(config)).orElseGet(() -> ResponseEntity.notFound().build());
}

@GetMapping(value = "/metadata", produces = MediaType.APPLICATION_JSON_VALUE)
@Operation(summary = "Get process configs")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "process configs were returned")})
public ResponseEntity<List<PersistedProcessConfig>> getProcessConfigsMetadata(@RequestParam("ids") List<UUID> processConfigIds) {
List<PersistedProcessConfig> processConfigs = processConfigService.getProcessConfigsMetadata(processConfigIds);
return ResponseEntity.ok().body(processConfigs);
}

@PutMapping(value = "/{uuid}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@Operation(summary = "Update process config")
@ApiResponses(value = {
Expand All @@ -80,6 +89,19 @@ public ResponseEntity<Void> updateProcessConfig(
ResponseEntity.notFound().build();
}

@PostMapping(value = "/duplication", produces = MediaType.APPLICATION_JSON_VALUE)
@Operation(summary = "Duplicate a process config")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "process config was duplicated"),
@ApiResponse(responseCode = "404", description = "process config to duplicate was not found")})
public ResponseEntity<UUID> duplicateProcessConfig(
@Parameter(description = "process config UUID to duplicate") @RequestParam("duplicateFrom") UUID sourceProcessConfigUuid) {
Optional<UUID> newProcessConfigUuid = processConfigService.duplicateProcessConfig(sourceProcessConfigUuid);
return newProcessConfigUuid
.map(configUuid -> ResponseEntity.ok().body(configUuid))
.orElseGet(() -> ResponseEntity.notFound().build());
}

@DeleteMapping(value = "/{uuid}", produces = MediaType.APPLICATION_JSON_VALUE)
@Operation(summary = "Delete process config")
@ApiResponses(value = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ public ProcessConfigService(ProcessConfigRepository processConfigRepository, Sec

@Transactional
public UUID createProcessConfig(ProcessConfig processConfig) {
return doCreateProcessConfig(processConfig);
}

private UUID doCreateProcessConfig(ProcessConfig processConfig) {
switch (processConfig) {
case SecurityAnalysisConfig sac -> {
return processConfigRepository.save(securityAnalysisConfigMapper.toEntity(sac)).getId();
Expand All @@ -49,6 +53,11 @@ public Optional<PersistedProcessConfig> getProcessConfig(UUID processConfigUuid)
return processConfigRepository.findById(processConfigUuid).map(this::toPersistedProcessConfig);
}

@Transactional(readOnly = true)
public List<PersistedProcessConfig> getProcessConfigsMetadata(List<UUID> processConfigUuids) {
return processConfigRepository.findAllById(processConfigUuids).stream().map(this::toPersistedProcessConfig).toList();
}

@Transactional
public boolean updateProcessConfig(UUID processConfigUuid, ProcessConfig processConfig) {
return processConfigRepository.findById(processConfigUuid)
Expand All @@ -66,6 +75,12 @@ public boolean updateProcessConfig(UUID processConfigUuid, ProcessConfig process
.orElse(false);
}

@Transactional
public Optional<UUID> duplicateProcessConfig(UUID sourceProcessConfigUuid) {
return processConfigRepository.findById(sourceProcessConfigUuid)
.map(sourceEntity -> doCreateProcessConfig(toProcessConfig(sourceEntity)));
}

@Transactional
public boolean deleteProcessConfig(UUID processConfigUuid) {
if (processConfigRepository.existsById(processConfigUuid)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,39 @@ void getSecurityAnalysisConfigNotFound() throws Exception {
verify(processConfigService).getProcessConfig(any(UUID.class));
}

@Test
void getProcessConfigsMetadata() throws Exception {
UUID processConfigId1 = UUID.randomUUID();
UUID processConfigId2 = UUID.randomUUID();

SecurityAnalysisConfig securityAnalysisConfig1 = new SecurityAnalysisConfig(
UUID.randomUUID(),
List.of(UUID.randomUUID(), UUID.randomUUID()),
UUID.randomUUID()
);
SecurityAnalysisConfig securityAnalysisConfig2 = new SecurityAnalysisConfig(
UUID.randomUUID(),
List.of(UUID.randomUUID(), UUID.randomUUID()),
UUID.randomUUID()
);

List<PersistedProcessConfig> expectedResult = List.of(
new PersistedProcessConfig(processConfigId1, securityAnalysisConfig1),
new PersistedProcessConfig(processConfigId2, securityAnalysisConfig2)
);

when(processConfigService.getProcessConfigsMetadata(List.of(processConfigId1, processConfigId2)))
.thenReturn(expectedResult);

mockMvc.perform(get("/v1/process-configs/metadata")
.param("ids", processConfigId1.toString(), processConfigId2.toString()))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andExpect(content().json(objectMapper.writeValueAsString(expectedResult)));

verify(processConfigService).getProcessConfigsMetadata(List.of(processConfigId1, processConfigId2));
}

@Test
void updateSecurityAnalysisConfig() throws Exception {
UUID processConfigId = UUID.randomUUID();
Expand Down Expand Up @@ -150,6 +183,35 @@ void updateSecurityAnalysisConfigNotFound() throws Exception {
verify(processConfigService).updateProcessConfig(any(UUID.class), any(ProcessConfig.class));
}

@Test
void duplicateSecurityAnalysisConfig() throws Exception {
UUID processConfigId = UUID.randomUUID();
UUID newProcessConfigId = UUID.randomUUID();

when(processConfigService.duplicateProcessConfig(processConfigId))
.thenReturn(Optional.of(newProcessConfigId));

mockMvc.perform(post("/v1/process-configs/duplication?duplicateFrom={uuid}", processConfigId))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$").value(newProcessConfigId.toString()));

verify(processConfigService).duplicateProcessConfig(processConfigId);
}

@Test
void duplicateSecurityAnalysisConfigNotFound() throws Exception {
UUID processConfigId = UUID.randomUUID();

when(processConfigService.duplicateProcessConfig(processConfigId))
.thenReturn(Optional.empty());

mockMvc.perform(post("/v1/process-configs/duplication?duplicateFrom={uuid}", processConfigId))
.andExpect(status().isNotFound());

verify(processConfigService).duplicateProcessConfig(processConfigId);
}

@Test
void deleteSecurityAnalysisConfig() throws Exception {
UUID processConfigId = UUID.randomUUID();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,38 @@
assertThat(processConfig).isEmpty();
}

@Test
void getProcessConfigsMetadata() {
UUID processConfigId1 = UUID.randomUUID();
UUID processConfigId2 = UUID.randomUUID();

SecurityAnalysisConfig securityAnalysisConfig1 = new SecurityAnalysisConfig(
UUID.randomUUID(),
List.of(UUID.randomUUID(), UUID.randomUUID()),
UUID.randomUUID()
);
SecurityAnalysisConfig securityAnalysisConfig2 = new SecurityAnalysisConfig(
UUID.randomUUID(),
List.of(UUID.randomUUID(), UUID.randomUUID()),
UUID.randomUUID()
);

SecurityAnalysisConfigEntity entity1 = securityAnalysisConfigMapper.toEntity(securityAnalysisConfig1);
entity1.setId(processConfigId1);
SecurityAnalysisConfigEntity entity2 = securityAnalysisConfigMapper.toEntity(securityAnalysisConfig2);
entity2.setId(processConfigId2);

when(processConfigRepository.findAllById(List.of(processConfigId1, processConfigId2)))
.thenReturn(List.of(entity1, entity2));

List<PersistedProcessConfig> persistedProcessConfigList = processConfigService.getProcessConfigsMetadata(List.of(processConfigId1, processConfigId2));

assertThat(persistedProcessConfigList).isEqualTo(List.of(
new PersistedProcessConfig(processConfigId1, securityAnalysisConfig1),
new PersistedProcessConfig(processConfigId2, securityAnalysisConfig2)
));
}

@Test
void updateSecurityAnalysisConfig() {
UUID processConfigId = UUID.randomUUID();
Expand Down Expand Up @@ -144,6 +176,41 @@
verify(processConfigRepository).findById(processConfigId);
}

@Test
void duplicateSecurityAnalysisConfig() {
UUID processConfigId = UUID.randomUUID();
UUID expectedNewProcessConfigId = UUID.randomUUID();

when(processConfigRepository.findById(processConfigId))
.thenReturn(Optional.of(mock(SecurityAnalysisConfigEntity.class)));
when(processConfigRepository.save(any(SecurityAnalysisConfigEntity.class)))
.thenAnswer(invocation -> {
SecurityAnalysisConfigEntity entity = invocation.getArgument(0);
entity.setId(expectedNewProcessConfigId);
return entity;
});

Optional<UUID> newProcessConfigId = processConfigService.duplicateProcessConfig(processConfigId);

assertThat(newProcessConfigId).isPresent();
assertThat(newProcessConfigId.get()).isEqualTo(expectedNewProcessConfigId);

Check warning on line 196 in monitor-server/src/test/java/org/gridsuite/monitor/server/services/processconfig/ProcessConfigServiceTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use assertThat(actual).contains(expected) instead.

See more on https://sonarcloud.io/project/issues?id=org.gridsuite%3Amonitor-core&issues=AZ0Lmpn5J3eRK4OmZ2zT&open=AZ0Lmpn5J3eRK4OmZ2zT&pullRequest=74

verify(processConfigRepository).findById(processConfigId);
ArgumentCaptor<SecurityAnalysisConfigEntity> captor = ArgumentCaptor.forClass(SecurityAnalysisConfigEntity.class);
verify(processConfigRepository).save(captor.capture());
}

@Test
void duplicateSecurityAnalysisConfigNotFound() {
UUID processConfigId = UUID.randomUUID();

when(processConfigRepository.findById(processConfigId)).thenReturn(Optional.empty());

Optional<UUID> newProcessConfigId = processConfigService.duplicateProcessConfig(processConfigId);
assertThat(newProcessConfigId).isEmpty();
verify(processConfigRepository).findById(processConfigId);
}

@Test
void deleteSecurityAnalysisConfig() {
UUID processConfigId = UUID.randomUUID();
Expand Down
Loading