Skip to content
Merged
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
18 changes: 18 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
<equalsverifier-version>3.7.1</equalsverifier-version>
<testcontainers.version>1.16.2</testcontainers.version>
<liquibase-hibernate-package>org.gridsuite.modification.server</liquibase-hibernate-package>
<assertj.version>3.24.2</assertj.version>
</properties>

<build>
Expand Down Expand Up @@ -86,6 +87,18 @@
<dependencyManagement>
<dependencies>
<!-- overrides of imports -->
<dependency><!-- TODO: to delete when spring is updated -->
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-guava</artifactId>
<version>${assertj.version}</version>
<scope>test</scope>
</dependency>

<!-- imports -->
<dependency>
Expand Down Expand Up @@ -220,6 +233,11 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-guava</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.junit.vintage</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
@NoArgsConstructor
@Getter
@Setter
@ToString(callSuper = true)
@ToString
@Schema(description = "Current Limits")
public class CurrentLimitsInfos {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString
@JsonInclude(JsonInclude.Include.NON_NULL)
public class CurrentTemporaryLimitCreationInfos {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,7 @@
package org.gridsuite.modification.server.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.*;
import lombok.experimental.SuperBuilder;
import org.gridsuite.modification.server.entities.equipment.modification.VariationFilterEntity;

Expand All @@ -24,6 +21,7 @@
@AllArgsConstructor
@Getter
@Setter
@ToString
@Schema(description = "Filter Infos")
public class FilterInfos {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
@NoArgsConstructor
@Getter
@Setter
@ToString(callSuper = true)
@ToString
@Schema(description = "Scaling creation")
public class ScalingVariationInfos {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
@NoArgsConstructor
@Getter
@Setter
@ToString(callSuper = true)
@ToString
@Schema(description = "TapChanger attributes")
public class TapChangerCreationInfos {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
@NoArgsConstructor
@Getter
@Setter
@ToString(callSuper = true)
@ToString
@JsonInclude(JsonInclude.Include.NON_NULL)
public class TapChangerStepCreationInfos {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,15 @@

import com.fasterxml.jackson.databind.ObjectMapper;
import com.powsybl.iidm.network.IdentifiableType;
import lombok.SneakyThrows;
import nl.jqno.equalsverifier.EqualsVerifier;
import org.gridsuite.modification.server.dto.NetworkModificationResult;
import org.gridsuite.modification.server.dto.NetworkModificationResult.ApplicationStatus;
import org.gridsuite.modification.server.impacts.SimpleElementImpact;
import org.gridsuite.modification.server.utils.TestUtils;
import org.junit.Test;
import org.junit.jupiter.api.Tag;

import java.io.IOException;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
Expand All @@ -27,13 +28,12 @@
/**
* @author Slimane Amar <slimane.amar at rte-france.com>
*/
@Tag("UnitTest")
public class ElementImpactTest {

ObjectMapper mapper = new ObjectMapper();
private ObjectMapper mapper = new ObjectMapper();

@Test
@SneakyThrows
public void testElementImpact() {
public void testElementImpact() throws IOException {
EqualsVerifier.simple().forClass(NetworkModificationResult.class).verify();
EqualsVerifier.simple().forClass(SimpleElementImpact.class).verify();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,39 +6,32 @@
*/
package org.gridsuite.modification.server.Impacts;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.powsybl.iidm.network.IdentifiableType;
import lombok.SneakyThrows;
import org.apache.commons.lang3.tuple.Pair;
import org.gridsuite.modification.server.dto.NetworkModificationResult;
import org.gridsuite.modification.server.dto.NetworkModificationResult.ApplicationStatus;
import org.gridsuite.modification.server.impacts.SimpleElementImpact;
import org.gridsuite.modification.server.impacts.SimpleElementImpact.SimpleImpactType;
import org.gridsuite.modification.server.utils.MatcherJson;
import org.hamcrest.MatcherAssert;
import org.skyscreamer.jsonassert.JSONAssert;
import org.skyscreamer.jsonassert.JSONCompareMode;

import java.util.*;
import java.util.stream.Collectors;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.gridsuite.modification.server.utils.assertions.Assertions.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

/**
* @author Slimane Amar <slimane.amar at rte-france.com>
*/
public final class TestImpactUtils {

private TestImpactUtils() {
}

@SneakyThrows
public static void testEmptyImpacts(ObjectMapper mapper, String resultAsString) {
Optional<NetworkModificationResult> networkModificationResult = mapper.readValue(resultAsString, new TypeReference<>() {
});
public static void testEmptyImpacts(ObjectMapper mapper, String resultAsString) throws JsonProcessingException {
Optional<NetworkModificationResult> networkModificationResult = mapper.readValue(resultAsString, new TypeReference<>() { });
assertTrue(networkModificationResult.isPresent());
testEmptyImpacts(mapper, networkModificationResult.get());
}
Expand All @@ -56,69 +49,60 @@ private static void testEmptyImpacts(ObjectMapper mapper, ApplicationStatus appl
.applicationStatus(applicationStatusExpected)
.networkImpacts(List.of())
.build();

MatcherAssert.assertThat(networkModificationResult, new MatcherJson<>(mapper, resultExpected));
assertThat(networkModificationResult).recursivelyEquals(resultExpected);
}

@SneakyThrows
public static void testElementImpacts(ObjectMapper mapper, String resultAsString, int nbImpacts, Set<String> substationIds) {
Optional<NetworkModificationResult> networkModificationResult = mapper.readValue(resultAsString, new TypeReference<>() {
});
public static void testElementImpacts(ObjectMapper mapper, String resultAsString, int nbImpacts, Set<String> substationIds) throws JsonProcessingException {
Optional<NetworkModificationResult> networkModificationResult = mapper.readValue(resultAsString, new TypeReference<>() { });
assertTrue(networkModificationResult.isPresent());

assertEquals(ApplicationStatus.ALL_OK, networkModificationResult.get().getApplicationStatus());
assertEquals(new TreeSet<>(substationIds), networkModificationResult.get().getImpactedSubstationsIds());
assertEquals(nbImpacts, networkModificationResult.get().getNetworkImpacts().size());
}

@SneakyThrows
public static void testElementImpacts(ObjectMapper mapper, String resultAsString, List<SimpleElementImpact> elementImpactsExpected) {
Optional<NetworkModificationResult> networkModificationResult = mapper.readValue(resultAsString, new TypeReference<>() {
});
public static void testElementImpacts(ObjectMapper mapper, String resultAsString, List<SimpleElementImpact> elementImpactsExpected) throws JsonProcessingException {
Optional<NetworkModificationResult> networkModificationResult = mapper.readValue(resultAsString, new TypeReference<>() { });
assertTrue(networkModificationResult.isPresent());
NetworkModificationResult resultExpected = NetworkModificationResult.builder()
.applicationStatus(ApplicationStatus.ALL_OK)
.networkImpacts(elementImpactsExpected)
.build();
JSONAssert.assertEquals(mapper.writeValueAsString(resultExpected), resultAsString, JSONCompareMode.NON_EXTENSIBLE);
assertThat(networkModificationResult.get()).recursivelyEquals(resultExpected);
}

public static void testElementCreationImpact(ObjectMapper mapper, String resultAsString, IdentifiableType elementType, String elementId, Set<String> substationIds) {
public static void testElementCreationImpact(ObjectMapper mapper, String resultAsString, IdentifiableType elementType, String elementId, Set<String> substationIds) throws JsonProcessingException {
testElementImpact(SimpleImpactType.CREATION, mapper, resultAsString, elementType, elementId, substationIds);
}

public static void testElementModificationImpact(ObjectMapper mapper, String resultAsString, IdentifiableType elementType, String elementId, Set<String> substationIds) {
public static void testElementModificationImpact(ObjectMapper mapper, String resultAsString, IdentifiableType elementType, String elementId, Set<String> substationIds) throws JsonProcessingException {
testElementImpact(SimpleImpactType.MODIFICATION, mapper, resultAsString, elementType, elementId, substationIds);
}

public static void testElementDeletionImpact(ObjectMapper mapper, String resultAsString, IdentifiableType elementType, String elementId, Set<String> substationIds) {
public static void testElementDeletionImpact(ObjectMapper mapper, String resultAsString, IdentifiableType elementType, String elementId, Set<String> substationIds) throws JsonProcessingException {
testElementImpact(SimpleImpactType.DELETION, mapper, resultAsString, elementType, elementId, substationIds);
}

@SneakyThrows
public static void testElementImpact(SimpleImpactType impactType, ObjectMapper mapper, String resultAsString, IdentifiableType elementType, String elementId, Set<String> substationIds) {
Optional<NetworkModificationResult> networkModificationResult = mapper.readValue(resultAsString, new TypeReference<>() {
});
public static void testElementImpact(SimpleImpactType impactType, ObjectMapper mapper, String resultAsString, IdentifiableType elementType, String elementId, Set<String> substationIds) throws JsonProcessingException {
Optional<NetworkModificationResult> networkModificationResult = mapper.readValue(resultAsString, new TypeReference<>() { });
assertTrue(networkModificationResult.isPresent());
NetworkModificationResult resultExpected = NetworkModificationResult.builder()
.applicationStatus(ApplicationStatus.ALL_OK)
.networkImpacts(List.of(createElementImpact(impactType, elementType, elementId, new TreeSet<>(substationIds))))
.networkImpacts(List.of(createElementImpact(impactType, elementType, elementId, new HashSet<>(substationIds))))
.build();
assertThat(networkModificationResult.get(), new MatcherJson<>(mapper, resultExpected));
assertThat(networkModificationResult.get()).recursivelyEquals(resultExpected);
}

@SneakyThrows
public static void testConnectableDeletionImpacts(ObjectMapper mapper, String resultAsString,
IdentifiableType connectableType, String connectableId,
String breakerId, String disconnectorId, String substationId) {
Optional<NetworkModificationResult> networkModificationResult = mapper.readValue(resultAsString, new TypeReference<>() {
});
String breakerId, String disconnectorId, String substationId) throws JsonProcessingException {
Optional<NetworkModificationResult> networkModificationResult = mapper.readValue(resultAsString, new TypeReference<>() { });
assertTrue(networkModificationResult.isPresent());
NetworkModificationResult resultExpected = NetworkModificationResult.builder()
.applicationStatus(ApplicationStatus.ALL_OK)
.networkImpacts(createConnectableDeletionImpacts(connectableType, connectableId, breakerId, disconnectorId, substationId))
.build();
assertThat(networkModificationResult.get(), new MatcherJson<>(mapper, resultExpected));
assertThat(networkModificationResult.get()).recursivelyEquals(resultExpected);
}

private static List<SimpleElementImpact> createConnectableDeletionImpacts(IdentifiableType connectableType, String connectableId,
Expand All @@ -130,50 +114,45 @@ private static List<SimpleElementImpact> createConnectableDeletionImpacts(Identi
);
}

@SneakyThrows
public static void testBranchCreationImpacts(ObjectMapper mapper, String resultAsString,
IdentifiableType branchType, String branchId,
String breakerId1, String disconnectorId1, String substationId1,
String breakerId2, String disconnectorId2, String substationId2) {
String breakerId2, String disconnectorId2, String substationId2) throws JsonProcessingException {
testBranchImpacts(mapper, SimpleImpactType.CREATION, resultAsString, branchType, branchId, breakerId1, disconnectorId1, substationId1, breakerId2, disconnectorId2, substationId2);
}

@SneakyThrows
public static void testBranchCreationImpacts(ObjectMapper mapper, String resultAsString, IdentifiableType elementType, String elementId, Set<String> substationIds) {
public static void testBranchCreationImpacts(ObjectMapper mapper, String resultAsString, IdentifiableType elementType, String elementId, Set<String> substationIds) throws JsonProcessingException {
List<SimpleElementImpact> impacts = List.of(
createElementImpact(SimpleImpactType.CREATION, elementType, elementId, new TreeSet<>(substationIds)),
createElementImpact(SimpleImpactType.MODIFICATION, elementType, elementId, new TreeSet<>(substationIds)) // case with newCurrentLimits1
);
testElementImpacts(mapper, resultAsString, impacts);
}

@SneakyThrows
public static void testBranchDeletionImpacts(ObjectMapper mapper, String resultAsString,
IdentifiableType branchType, String branchId,
String breakerId1, String disconnectorId1, String substationId1,
String breakerId2, String disconnectorId2, String substationId2) {
String breakerId2, String disconnectorId2, String substationId2) throws JsonProcessingException {
testBranchImpacts(mapper, SimpleImpactType.DELETION, resultAsString, branchType, branchId, breakerId1, disconnectorId1, substationId1, breakerId2, disconnectorId2, substationId2);
}

@SneakyThrows
public static void testBranchImpacts(ObjectMapper mapper, SimpleImpactType impactType, String resultAsString,
IdentifiableType branchType, String branchId,
String breakerId1, String disconnectorId1, String substationId1,
String breakerId2, String disconnectorId2, String substationId2) {
Optional<NetworkModificationResult> networkModificationResult = mapper.readValue(resultAsString, new TypeReference<>() {
});
String breakerId2, String disconnectorId2, String substationId2) throws JsonProcessingException {
Optional<NetworkModificationResult> networkModificationResult = mapper.readValue(resultAsString, new TypeReference<>() { });
assertTrue(networkModificationResult.isPresent());
NetworkModificationResult resultExpected = NetworkModificationResult.builder()
.applicationStatus(ApplicationStatus.ALL_OK)
.networkImpacts(createBranchImpacts(impactType, branchType, branchId, breakerId1, disconnectorId1, substationId1, breakerId2, disconnectorId2, substationId2))
.build();
assertThat(networkModificationResult.get(), new MatcherJson<>(mapper, resultExpected));
assertThat(networkModificationResult.get()).recursivelyEquals(resultExpected);
}

private static List<SimpleElementImpact> createBranchImpacts(SimpleImpactType impactType, IdentifiableType branchType, String branchId,
String breakerId1, String disconnectorId1, String substationId1,
String breakerId2, String disconnectorId2, String substationId2) {
LinkedList<SimpleElementImpact> impacts = new LinkedList<>(List.of(createElementImpact(impactType, branchType, branchId, new TreeSet<>(List.of(substationId1, substationId2)))));
LinkedList<SimpleElementImpact> impacts = new LinkedList<>(List.of(createElementImpact(impactType, branchType, branchId, new HashSet<>(List.of(substationId1, substationId2)))));
List<SimpleElementImpact> switchImpacts = List.of(
createElementImpact(impactType, IdentifiableType.SWITCH, breakerId1, Set.of(substationId1)),
createElementImpact(impactType, IdentifiableType.SWITCH, disconnectorId1, Set.of(substationId1)),
Expand All @@ -189,20 +168,18 @@ private static List<SimpleElementImpact> createBranchImpacts(SimpleImpactType im
return impacts;
}

@SneakyThrows
public static void test3WTDeletionImpacts(ObjectMapper mapper, String resultAsString, String w3tId,
String breakerId1, String disconnectorId1,
String breakerId2, String disconnectorId2,
String breakerId3, String disconnectorId3,
String substationId) {
Optional<NetworkModificationResult> networkModificationResult = mapper.readValue(resultAsString, new TypeReference<>() {
});
String substationId) throws JsonProcessingException {
Optional<NetworkModificationResult> networkModificationResult = mapper.readValue(resultAsString, new TypeReference<>() { });
assertTrue(networkModificationResult.isPresent());
NetworkModificationResult resultExpected = NetworkModificationResult.builder()
.applicationStatus(ApplicationStatus.ALL_OK)
.networkImpacts(create3wtDeletionImpacts(w3tId, breakerId1, disconnectorId1, breakerId2, disconnectorId2, breakerId3, disconnectorId3, substationId))
.build();
assertThat(networkModificationResult.get(), new MatcherJson<>(mapper, resultExpected));
assertThat(networkModificationResult.get()).recursivelyEquals(resultExpected);
}

private static List<SimpleElementImpact> create3wtDeletionImpacts(String w3tId,
Expand Down
Loading