Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@

package org.gridsuite.monitor.worker.server.services;

import org.apache.commons.collections4.CollectionUtils;
import org.gridsuite.modification.dto.ModificationInfos;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
Expand All @@ -37,20 +37,17 @@ public NetworkModificationRestService(@Value("${gridsuite.services.network-modif
}

public List<ModificationInfos> getModifications(List<UUID> modificationsUuids) {
List<ModificationInfos> modifications = new ArrayList<>();

UriComponentsBuilder uriBuilder = UriComponentsBuilder
.fromUriString(DELIMITER + NETWORK_MODIFICATION_SERVER_API_VERSION + DELIMITER +
"network-composite-modification" + DELIMITER + "{uuid}" + DELIMITER + "network-modifications?onlyMetadata=false");

modificationsUuids.forEach(uuid -> {
String path = this.networkModificationServerBaseUri + uriBuilder.buildAndExpand(uuid).toUriString();
if (CollectionUtils.isNotEmpty(modificationsUuids)) {
String path = this.networkModificationServerBaseUri + UriComponentsBuilder.fromPath(DELIMITER + NETWORK_MODIFICATION_SERVER_API_VERSION + DELIMITER +
"network-composite-modifications" + DELIMITER + "network-modifications")
.queryParam("uuids", modificationsUuids.toArray())
.queryParam("onlyMetadata", "false")
.buildAndExpand()
.toUriString();
ModificationInfos[] modificationInfos = networkModificationServerRest.getForObject(path, ModificationInfos[].class);
if (modificationInfos != null) {
modifications.addAll(Arrays.asList(modificationInfos));
}
});

return modifications;
return modificationInfos != null ? Arrays.asList(modificationInfos) : List.of();
} else {
return List.of();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import org.springframework.test.web.client.response.MockRestResponseCreators;
import org.springframework.web.client.HttpServerErrorException;

import java.util.Arrays;
import java.util.List;
import java.util.UUID;

Expand Down Expand Up @@ -55,37 +54,39 @@ void tearDown() {

@Test
void getModifications() {
UUID[] modificationUuids = {MODIFICATION_1_UUID, MODIFICATION_2_UUID};

ModificationInfos modificationInfos1 = LoadModificationInfos.builder().equipmentId("load1").q0(new AttributeModification<>(300., OperationType.SET)).build();
ModificationInfos modificationInfos2 = LoadModificationInfos.builder().equipmentId("load2").q0(new AttributeModification<>(null, OperationType.UNSET)).build();

ModificationInfos[] modificationInfos = {modificationInfos1, modificationInfos2};
List<ModificationInfos> modificationInfos = List.of(modificationInfos1, modificationInfos2);
ModificationInfos[] modificationsArray = modificationInfos.toArray(ModificationInfos[]::new);

for (int i = 0; i < modificationUuids.length; i++) {
ModificationInfos[] modificationsArray = {modificationInfos[i]};
try {
server.expect(MockRestRequestMatchers.method(HttpMethod.GET))
.andExpect(MockRestRequestMatchers.requestTo("http://network-modification-server/v1/network-composite-modification/" + modificationUuids[i] + "/network-modifications?onlyMetadata=false"))
.andRespond(MockRestResponseCreators.withSuccess()
.contentType(MediaType.APPLICATION_JSON)
.body(objectMapper.writeValueAsString(modificationsArray)));
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
try {
server.expect(MockRestRequestMatchers.method(HttpMethod.GET))
.andExpect(MockRestRequestMatchers.requestTo("http://network-modification-server/v1/network-composite-modifications/network-modifications?uuids=" + MODIFICATION_1_UUID + "&uuids=" + MODIFICATION_2_UUID + "&onlyMetadata=false"))
.andRespond(MockRestResponseCreators.withSuccess()
.contentType(MediaType.APPLICATION_JSON)
.body(objectMapper.writeValueAsString(modificationsArray)));
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}

List<ModificationInfos> resultListModifications = networkModificationRestService.getModifications(Arrays.asList(modificationUuids));
assertThat(resultListModifications).usingRecursiveComparison().isEqualTo(Arrays.asList(modificationInfos));
List<ModificationInfos> resultListModifications = networkModificationRestService.getModifications(List.of(MODIFICATION_1_UUID, MODIFICATION_2_UUID));
assertThat(resultListModifications).usingRecursiveComparison().isEqualTo(modificationInfos);
}

@Test
void getModificationsNotFound() {
server.expect(MockRestRequestMatchers.method(HttpMethod.GET))
.andExpect(MockRestRequestMatchers.requestTo("http://network-modification-server/v1/network-composite-modification/" + MODIFICATION_ERROR_UUID + "/network-modifications?onlyMetadata=false"))
.andExpect(MockRestRequestMatchers.requestTo("http://network-modification-server/v1/network-composite-modifications/network-modifications?uuids=" + MODIFICATION_ERROR_UUID + "&onlyMetadata=false"))
.andRespond(MockRestResponseCreators.withServerError());

List<UUID> modificationsUuids = List.of(MODIFICATION_ERROR_UUID);
assertThatThrownBy(() -> networkModificationRestService.getModifications(modificationsUuids)).isInstanceOf(HttpServerErrorException.InternalServerError.class);
}

@Test
void getEmptyModifications() {
List<ModificationInfos> resultListModifications = networkModificationRestService.getModifications(List.of());
assertThat(resultListModifications).isEmpty();
}
}