From 742c21171d242bb9f571fc329acbebb2a780e4f1 Mon Sep 17 00:00:00 2001 From: Charly B <47325354+EstherDarkish@users.noreply.github.com> Date: Thu, 5 Sep 2024 16:18:27 +0200 Subject: [PATCH] Add the possibility to trip a busbar section. (#493) * Add the possibility to trip a busbar section. --------- Signed-off-by: BOUTIER Charly --- .../OperatingStatusModification.java | 3 + ...atingStatusModificationTripBusBarTest.java | 91 +++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationTripBusBarTest.java diff --git a/src/main/java/org/gridsuite/modification/server/modifications/OperatingStatusModification.java b/src/main/java/org/gridsuite/modification/server/modifications/OperatingStatusModification.java index 5531b14f1..0f5729430 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/OperatingStatusModification.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/OperatingStatusModification.java @@ -9,6 +9,7 @@ import com.powsybl.commons.report.ReportNode; import com.powsybl.commons.report.TypedValue; import com.powsybl.iidm.modification.tripping.BranchTripping; +import com.powsybl.iidm.modification.tripping.BusbarSectionTripping; import com.powsybl.iidm.modification.tripping.HvdcLineTripping; import com.powsybl.iidm.modification.tripping.ThreeWindingsTransformerTripping; import com.powsybl.iidm.modification.tripping.Tripping; @@ -178,6 +179,8 @@ private boolean connectOneTerminal(Terminal terminal) { public Tripping getTrippingFromIdentifiable(Identifiable identifiable) { if (identifiable instanceof Branch branch) { return new BranchTripping(branch.getId()); + } else if (identifiable instanceof BusbarSection bbs) { + return new BusbarSectionTripping(bbs.getId()); } else if (identifiable instanceof ThreeWindingsTransformer w3t) { return new ThreeWindingsTransformerTripping(w3t.getId()); } else if (identifiable instanceof HvdcLine hvdcLine) { diff --git a/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationTripBusBarTest.java b/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationTripBusBarTest.java new file mode 100644 index 000000000..534ea7257 --- /dev/null +++ b/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationTripBusBarTest.java @@ -0,0 +1,91 @@ +/** + * Copyright (c) 2024, 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; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.powsybl.iidm.network.*; +import com.powsybl.iidm.network.extensions.OperatingStatus; +import lombok.SneakyThrows; +import org.gridsuite.modification.server.dto.ModificationInfos; +import org.gridsuite.modification.server.dto.OperatingStatusModificationInfos; +import org.gridsuite.modification.server.utils.NetworkCreation; +import org.gridsuite.modification.server.utils.TestUtils; +import org.junit.Assert; +import org.junit.jupiter.api.Tag; + +import java.util.Map; +import java.util.UUID; + +import static com.powsybl.iidm.network.extensions.OperatingStatus.Status.FORCED_OUTAGE; +import static com.powsybl.iidm.network.extensions.OperatingStatus.Status.IN_OPERATION; +import static org.junit.jupiter.api.Assertions.assertEquals; + +@Tag("IntegrationTest") +public class OperatingStatusModificationTripBusBarTest extends AbstractNetworkModificationTest { + + private static final String TARGET_BUSBAR_ID = "1.A"; + private static final OperatingStatus.Status TARGET_BUSBAR_STATUS = FORCED_OUTAGE; + private static final OperatingStatus.Status INITIAL_BUSBAR_STATUS = IN_OPERATION; + + @Override + protected Network createNetwork(UUID networkUuid) { + Network network = NetworkCreation.create(networkUuid, true); + // force a branch status different from the expected one, after testCreate + TestUtils.setOperatingStatus(network, TARGET_BUSBAR_ID, INITIAL_BUSBAR_STATUS); + return network; + } + + @Override + protected ModificationInfos buildModification() { + return OperatingStatusModificationInfos.builder() + .stashed(false) + .equipmentId(TARGET_BUSBAR_ID) + .action(OperatingStatusModificationInfos.ActionType.TRIP).build(); + } + + @Override + protected ModificationInfos buildModificationUpdate() { + return OperatingStatusModificationInfos.builder() + .stashed(false) + .equipmentId(TARGET_BUSBAR_ID) + .action(OperatingStatusModificationInfos.ActionType.SWITCH_ON).build(); + } + + @Override + protected void assertAfterNetworkModificationCreation() { + TestUtils.assertOperatingStatus(getNetwork(), TARGET_BUSBAR_ID, TARGET_BUSBAR_STATUS); + assertTerminalsStatusAfterNetworkModification(false); + } + + @Override + protected void assertAfterNetworkModificationDeletion() { + // back to init status + TestUtils.assertOperatingStatus(getNetwork(), TARGET_BUSBAR_ID, INITIAL_BUSBAR_STATUS); + assertTerminalsStatusAfterNetworkModification(true); + } + + @Override + @SneakyThrows + protected void testCreationModificationMessage(ModificationInfos modificationInfos) { + assertEquals("OPERATING_STATUS_MODIFICATION", modificationInfos.getMessageType()); + Map createdValues = mapper.readValue(modificationInfos.getMessageValues(), new TypeReference<>() { }); + assertEquals("TRIP", createdValues.get("action")); + } + + @Override + @SneakyThrows + protected void testUpdateModificationMessage(ModificationInfos modificationInfos) { + assertEquals("OPERATING_STATUS_MODIFICATION", modificationInfos.getMessageType()); + Map updatedValues = mapper.readValue(modificationInfos.getMessageValues(), new TypeReference<>() { }); + assertEquals("SWITCH_ON", updatedValues.get("action")); + } + + private void assertTerminalsStatusAfterNetworkModification(boolean shouldBeConnected) { + BusbarSection busbarSection = getNetwork().getBusbarSection(TARGET_BUSBAR_ID); + Assert.assertEquals(busbarSection.getTerminal().isConnected(), shouldBeConnected); + } +}