ConnectVoltageLevelOnLineTest.java
/**
* Copyright (c) 2022, 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/.
* SPDX-License-Identifier: MPL-2.0
*/
package com.powsybl.iidm.modification.topology;
import com.powsybl.commons.PowsyblException;
import com.powsybl.commons.report.PowsyblCoreReportResourceBundle;
import com.powsybl.commons.test.PowsyblCoreTestReportResourceBundle;
import com.powsybl.commons.report.ReportNode;
import com.powsybl.computation.local.LocalComputationManager;
import com.powsybl.iidm.modification.AbstractNetworkModification;
import com.powsybl.iidm.modification.NetworkModification;
import com.powsybl.iidm.network.BusbarSection;
import com.powsybl.iidm.network.Line;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.extensions.BusbarSectionPositionAdder;
import com.powsybl.iidm.network.test.EurostagTutorialExample1Factory;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.time.ZonedDateTime;
import static com.powsybl.iidm.modification.topology.TopologyTestUtils.*;
import static org.junit.jupiter.api.Assertions.*;
/**
* @author Miora Vedelago {@literal <miora.ralambotiana at rte-france.com>}
*/
class ConnectVoltageLevelOnLineTest extends AbstractModificationTest {
@Test
void attachVoltageLevelOnLineNbTest() throws IOException {
Network network = createNbNetworkWithBusbarSection();
ReportNode reportNode = ReportNode.newRootReportNode()
.withResourceBundles(PowsyblCoreTestReportResourceBundle.TEST_BASE_NAME, PowsyblCoreReportResourceBundle.BASE_NAME)
.withMessageTemplate("reportAttachVoltageLevelOnLineNbTest")
.build();
NetworkModification modification = new ConnectVoltageLevelOnLineBuilder()
.withBusbarSectionOrBusId(BBS)
.withLine(network.getLine("CJ"))
.build();
modification.apply(network, new DefaultNamingStrategy(), false, reportNode);
writeXmlTest(network, "/fictitious-line-split-vl.xml");
}
@Test
void connectVoltageLevelOnLineNbBbTest() throws IOException {
Network network = createNbBbNetwork();
ReportNode reportNode = ReportNode.newRootReportNode()
.withResourceBundles(PowsyblCoreTestReportResourceBundle.TEST_BASE_NAME, PowsyblCoreReportResourceBundle.BASE_NAME)
.withMessageTemplate("reportConnectVoltageLevelOnLineNbBbTest")
.build();
NetworkModification modification = new ConnectVoltageLevelOnLineBuilder()
.withBusbarSectionOrBusId(BBS)
.withLine(network.getLine("NHV1_NHV2_1"))
.build();
modification.apply(network, new DefaultNamingStrategy(), reportNode);
writeXmlTest(network, "/eurostag-line-split-nb-vl.xml");
}
@Test
void connectVoltageLevelOnLineBbTest() throws IOException {
Network network = createBbNetwork();
ReportNode reportNode = ReportNode.newRootReportNode()
.withResourceBundles(PowsyblCoreTestReportResourceBundle.TEST_BASE_NAME, PowsyblCoreReportResourceBundle.BASE_NAME)
.withMessageTemplate("reportConnectVoltageLevelOnLineBbTest")
.build();
NetworkModification modification = new ConnectVoltageLevelOnLineBuilder()
.withBusbarSectionOrBusId("bus")
.withLine(network.getLine("NHV1_NHV2_1"))
.build();
modification.apply(network, new DefaultNamingStrategy(), LocalComputationManager.getDefault(), reportNode);
writeXmlTest(network, "/eurostag-line-split-bb-vl.xml");
}
@Test
void testConstructor() {
Network network = createNbBbNetwork();
Line line = network.getLine("NHV1_NHV2_1");
ConnectVoltageLevelOnLine modification = new ConnectVoltageLevelOnLineBuilder().withBusbarSectionOrBusId(BBS).withLine(line).build();
assertEquals(BBS, modification.getBbsOrBusId());
assertEquals(50, modification.getPositionPercent(), 0.0);
assertSame(line, modification.getLine());
assertEquals(line.getId() + "_1", modification.getLine1Id());
assertNull(modification.getLine1Name());
assertEquals(line.getId() + "_2", modification.getLine2Id());
assertNull(modification.getLine2Name());
}
@Test
void testSetters() {
Network network = createNbBbNetwork();
Line line = network.getLine("NHV1_NHV2_1");
ConnectVoltageLevelOnLine modification = new ConnectVoltageLevelOnLineBuilder().withBusbarSectionOrBusId(BBS).withLine(line).build();
modification.setPositionPercent(40.0)
.setLine1Id(line.getId() + "_A")
.setLine1Name("A")
.setLine2Id(line.getId() + "_B")
.setLine2Name("B");
assertEquals(40, modification.getPositionPercent(), 0.0);
assertEquals(line.getId() + "_A", modification.getLine1Id());
assertEquals("A", modification.getLine1Name());
assertEquals(line.getId() + "_B", modification.getLine2Id());
assertEquals("B", modification.getLine2Name());
}
@Test
void testCompleteBuilder() throws IOException {
Network network = createNbNetworkWithBusbarSection();
BusbarSection bbs = network.getBusbarSection("bbs");
bbs.newExtension(BusbarSectionPositionAdder.class)
.withBusbarIndex(1)
.withSectionIndex(1)
.add();
NetworkModification modification = new ConnectVoltageLevelOnLineBuilder()
.withPositionPercent(40)
.withBusbarSectionOrBusId(BBS)
.withLine1Id("FICT1L")
.withLine1Name("FICT1LName")
.withLine2Id("FICT2L")
.withLine2Name("FICT2LName")
.withLine(network.getLine("CJ"))
.build();
modification.apply(network, new DefaultNamingStrategy(), LocalComputationManager.getDefault());
writeXmlTest(network, "/fictitious-line-split-vl-complete.xml");
}
@Test
void testIncompleteBuilder() throws IOException {
Network network = createNbNetworkWithBusbarSection();
NetworkModification modification = new ConnectVoltageLevelOnLineBuilder()
.withBusbarSectionOrBusId(BBS)
.withLine(network.getLine("CJ"))
.build();
modification.apply(network, LocalComputationManager.getDefault());
writeXmlTest(network, "/fictitious-line-split-vl.xml");
}
@Test
void testExceptions() {
Network network1 = createNbNetworkWithBusbarSection();
ReportNode reportNode = ReportNode.newRootReportNode()
.withResourceBundles(PowsyblCoreTestReportResourceBundle.TEST_BASE_NAME, PowsyblCoreReportResourceBundle.BASE_NAME)
.withMessageTemplate("reportTestUndefinedBbs")
.build();
NetworkModification modification2 = new ConnectVoltageLevelOnLineBuilder()
.withBusbarSectionOrBusId("NOT_EXISTING")
.withLine(network1.getLine("CJ"))
.build();
ReportNode subReportNodeNb = reportNode.newReportNode()
.withMessageTemplate("nodeBreaker")
.add();
assertDoesNotThrow(() -> modification2.apply(network1, false, ReportNode.NO_OP));
PowsyblException exception2 = assertThrows(PowsyblException.class, () -> modification2.apply(network1, true, subReportNodeNb));
assertEquals("Bus or busbar section NOT_EXISTING not found", exception2.getMessage());
ReportNode firstReport = reportNode.getChildren().get(0);
assertEquals("core.iidm.modification.notFoundBusOrBusbarSection", firstReport.getChildren().get(0).getMessageKey());
assertEquals("nodeBreaker", firstReport.getMessageKey());
Network network2 = createBbNetwork();
NetworkModification modification3 = new ConnectVoltageLevelOnLineBuilder()
.withBusbarSectionOrBusId("NOT_EXISTING")
.withLine(network2.getLine("NHV1_NHV2_1"))
.build();
ReportNode subReportNodeBb = reportNode.newReportNode()
.withMessageTemplate("busBreaker")
.add();
assertDoesNotThrow(() -> modification3.apply(network2, false, ReportNode.NO_OP));
PowsyblException exception3 = assertThrows(PowsyblException.class, () -> modification3.apply(network2, true, subReportNodeBb));
assertEquals("Bus or busbar section NOT_EXISTING not found", exception3.getMessage());
ReportNode secondReport = reportNode.getChildren().get(1);
assertEquals("core.iidm.modification.notFoundBusOrBusbarSection", secondReport.getChildren().get(0).getMessageKey());
assertEquals("busBreaker", secondReport.getMessageKey());
}
@Test
void testIgnore() throws IOException {
Network network = EurostagTutorialExample1Factory.create().setCaseDate(ZonedDateTime.parse("2013-01-15T18:45:00.000+01:00"));
NetworkModification modification1 = new ConnectVoltageLevelOnLineBuilder()
.withBusbarSectionOrBusId("NOT_EXISTING")
.withLine(network.getLine("NHV1_NHV2_1"))
.build();
modification1.apply(network, new DefaultNamingStrategy());
NetworkModification modification2 = new ConnectVoltageLevelOnLineBuilder()
.withBusbarSectionOrBusId("LOAD")
.withLine(network.getLine("NHV1_NHV2_1"))
.build();
modification2.apply(network, new DefaultNamingStrategy(), LocalComputationManager.getDefault());
writeXmlTest(network, "/eurostag-tutorial-example1.xml");
}
@Test
void testWithReportNode() throws IOException {
Network network = createNbNetworkWithBusbarSection();
ReportNode report = ReportNode.newRootReportNode()
.withResourceBundles(PowsyblCoreTestReportResourceBundle.TEST_BASE_NAME, PowsyblCoreReportResourceBundle.BASE_NAME)
.withMessageTemplate("reportTestConnectVoltageLevelOnLine")
.build();
new ConnectVoltageLevelOnLineBuilder()
.withBusbarSectionOrBusId(BBS)
.withLine(network.getLine("CJ"))
.build().apply(network, new DefaultNamingStrategy(), true, report);
testReportNode(report, "/reportNode/connect-voltage-level-on-line-NB-report.txt");
}
@Test
void testGetName() {
Network network2 = createBbNetwork();
AbstractNetworkModification networkModification = new ConnectVoltageLevelOnLineBuilder()
.withBusbarSectionOrBusId("NOT_EXISTING")
.withLine(network2.getLine("NHV1_NHV2_1"))
.build();
assertEquals("ConnectVoltageLevelOnLine", networkModification.getName());
}
}