diff --git a/src/main/java/org/gridsuite/modification/server/entities/TabularModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/TabularModificationEntity.java index 19686a2c4..a800e1940 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/TabularModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/TabularModificationEntity.java @@ -20,6 +20,7 @@ import org.gridsuite.modification.server.entities.equipment.modification.GeneratorModificationEntity; import org.gridsuite.modification.server.entities.equipment.modification.LineModificationEntity; import org.gridsuite.modification.server.entities.equipment.modification.LoadModificationEntity; +import org.gridsuite.modification.server.entities.equipment.modification.SubstationModificationEntity; import org.gridsuite.modification.server.entities.equipment.modification.TwoWindingsTransformerModificationEntity; import org.gridsuite.modification.server.entities.equipment.modification.ShuntCompensatorModificationEntity; import org.gridsuite.modification.server.entities.equipment.modification.VoltageLevelModificationEntity; @@ -66,6 +67,9 @@ public TabularModificationEntity(TabularModificationInfos tabularModificationInf case "LINE_MODIFICATION": modifications = tabularModificationInfos.getModifications().stream().map(lineModificationInfos -> new LineModificationEntity((LineModificationInfos) lineModificationInfos)).collect(Collectors.toList()); break; + case "SUBSTATION_MODIFICATION": + modifications = tabularModificationInfos.getModifications().stream().map(subStationModificationInfos -> new SubstationModificationEntity((SubstationModificationInfos) subStationModificationInfos)).collect(Collectors.toList()); + break; default: break; } @@ -111,6 +115,9 @@ public void update(@NonNull ModificationInfos modificationInfos) { case "LINE_MODIFICATION": modifications.addAll(tabularModificationInfos.getModifications().stream().map(lineModificationInfos -> new LineModificationEntity((LineModificationInfos) lineModificationInfos)).collect(Collectors.toList())); break; + case "SUBSTATION_MODIFICATION": + modifications.addAll(tabularModificationInfos.getModifications().stream().map(subStationModificationInfos -> new SubstationModificationEntity((SubstationModificationInfos) subStationModificationInfos)).toList()); + break; default: break; } diff --git a/src/main/java/org/gridsuite/modification/server/modifications/TabularModification.java b/src/main/java/org/gridsuite/modification/server/modifications/TabularModification.java index 7659778a4..3c33787f2 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/TabularModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/TabularModification.java @@ -75,6 +75,7 @@ public void apply(Network network, Reporter subReporter) { case "VOLTAGE_LEVEL_MODIFICATION" -> "voltage levels" + defaultMessage; case "SHUNT_COMPENSATOR_MODIFICATION" -> "shunt compensator" + defaultMessage; case "LINE_MODIFICATION" -> "lines" + defaultMessage; + case "SUBSTATION_MODIFICATION" -> "substations" + defaultMessage; default -> "equipments of unknown type" + defaultMessage; }; diff --git a/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularSubstationModificationsTest.java b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularSubstationModificationsTest.java new file mode 100644 index 000000000..39f06bdf9 --- /dev/null +++ b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularSubstationModificationsTest.java @@ -0,0 +1,96 @@ +/** + * Copyright (c) 2023, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package org.gridsuite.modification.server.modifications.tabularmodifications; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.powsybl.iidm.network.Country; +import com.powsybl.iidm.network.Network; +import lombok.SneakyThrows; +import org.gridsuite.modification.server.dto.*; +import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest; +import org.gridsuite.modification.server.utils.NetworkCreation; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Tag; + +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import static org.junit.Assert.assertEquals; + +/** + * @author AJELLAL Ali + */ +@Tag("IntegrationTest") +public class TabularSubstationModificationsTest extends AbstractNetworkModificationTest { + public static final String MODIFICATION_TYPE = "SUBSTATION_MODIFICATION"; + + @Override + protected Network createNetwork(UUID networkUuid) { + return NetworkCreation.create(networkUuid, true); + } + + @Override + protected ModificationInfos buildModification() { + + List modifications = List.of( + SubstationModificationInfos.builder().equipmentId("s1").equipmentName(new AttributeModification<>("s1", OperationType.SET)).substationCountry(new AttributeModification<>(Country.BE, OperationType.SET)).build(), + SubstationModificationInfos.builder().equipmentId("s2").equipmentName(new AttributeModification<>("s2", OperationType.SET)).substationCountry(new AttributeModification<>(Country.BE, OperationType.SET)).build() + ); + return TabularModificationInfos.builder() + .modificationType(MODIFICATION_TYPE) + .modifications(modifications) + .stashed(false) + .build(); + } + + @Override + protected ModificationInfos buildModificationUpdate() { + List modifications = List.of( + SubstationModificationInfos.builder().equipmentId("s1").equipmentName(new AttributeModification<>("s1", OperationType.SET)).substationCountry(new AttributeModification<>(Country.JP, OperationType.SET)).build(), + SubstationModificationInfos.builder().equipmentId("s2").equipmentName(new AttributeModification<>("s2", OperationType.SET)).substationCountry(new AttributeModification<>(Country.JP, OperationType.SET)).build() + ); + return TabularModificationInfos.builder() + .modificationType(MODIFICATION_TYPE) + .modifications(modifications) + .stashed(false) + .build(); + } + + @Override + protected void assertAfterNetworkModificationCreation() { + assertEquals(Country.BE, getNetwork().getSubstation("s1").getCountry().orElse(Country.AF)); + assertEquals("s1", getNetwork().getSubstation("s1").getOptionalName().orElse("s2")); + assertEquals(Country.BE, getNetwork().getSubstation("s2").getCountry().orElse(Country.AF)); + assertEquals("s2", getNetwork().getSubstation("s2").getOptionalName().orElse("s1")); + } + + @Override + protected void assertAfterNetworkModificationDeletion() { + assertEquals(Country.FR, getNetwork().getSubstation("s1").getCountry().orElse(Country.BE)); + assertEquals("s1", getNetwork().getSubstation("s1").getOptionalName().orElse("s2")); + assertEquals(Country.FR, getNetwork().getSubstation("s2").getCountry().orElse(Country.BE)); + assertEquals("s2", getNetwork().getSubstation("s2").getOptionalName().orElse("s1")); + } + + @Override + @SneakyThrows + protected void testCreationModificationMessage(ModificationInfos modificationInfos) { + assertEquals("TABULAR_MODIFICATION", modificationInfos.getMessageType()); + Map createdValues = mapper.readValue(modificationInfos.getMessageValues(), new TypeReference<>() { }); + Assertions.assertEquals(MODIFICATION_TYPE, createdValues.get("tabularModificationType")); + } + + @Override + @SneakyThrows + protected void testUpdateModificationMessage(ModificationInfos modificationInfos) { + assertEquals("TABULAR_MODIFICATION", modificationInfos.getMessageType()); + Map updatedValues = mapper.readValue(modificationInfos.getMessageValues(), new TypeReference<>() { }); + Assertions.assertEquals(MODIFICATION_TYPE, updatedValues.get("tabularModificationType")); + } +}