LayoutToCgmesExtensionsTest.java
/**
* Copyright (c) 2019, 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 com.powsybl.sld.cgmes.layout;
import com.powsybl.diagram.test.Networks;
import com.powsybl.iidm.network.*;
import com.powsybl.sld.cgmes.dl.iidm.extensions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.mockito.stubbing.Answer;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
import static org.junit.jupiter.api.Assertions.*;
/**
* @author Christian Biasuzzi {@literal <christian.biasuzzi@techrain.eu>}
*/
class LayoutToCgmesExtensionsTest {
private final List<Network> networks = new ArrayList<>();
@BeforeEach
public void setUp() {
createNetworks();
}
private void createNetworks() {
networks.add(Networks.createNetworkWithGenerator());
networks.add(Networks.createNetworkWithLine());
networks.add(Networks.createNetworkWithDanglingLine());
networks.add(Networks.createNetworkWithBusbar());
networks.add(Networks.createNetworkWithBus());
networks.add(Networks.createNetworkWithLoad());
networks.add(Networks.createNetworkWithShuntCompensator());
networks.add(Networks.createNetworkWithStaticVarCompensator());
networks.add(Networks.createNetworkWithSwitch());
networks.add(Networks.createNetworkWithTwoWindingsTransformer());
networks.add(Networks.createNetworkWithThreeWindingsTransformer());
networks.add(Networks.createNetworkWithBusbarAndSwitch());
networks.add(Networks.createNetworkWithPhaseShiftTransformer());
networks.add(Networks.createNetworkWithHvdcLines());
}
private void checkExtensionsSet(Network network) {
network.getVoltageLevelStream().forEach(vl -> {
vl.visitEquipments(new DefaultTopologyVisitor() {
@Override
public void visitDanglingLine(DanglingLine danglingLine) {
assertNotNull(danglingLine.getExtension(LineDiagramData.class));
}
@Override
public void visitGenerator(Generator generator) {
assertNotNull(generator.getExtension(InjectionDiagramData.class));
}
@Override
public void visitShuntCompensator(ShuntCompensator sc) {
assertNotNull(sc.getExtension(InjectionDiagramData.class));
}
@Override
public void visitLoad(Load load) {
assertNotNull(load.getExtension(InjectionDiagramData.class));
}
@Override
public void visitStaticVarCompensator(StaticVarCompensator staticVarCompensator) {
assertNotNull(staticVarCompensator.getExtension(InjectionDiagramData.class));
}
@Override
public void visitLine(Line line, TwoSides side) {
assertNotNull(line.getExtension(LineDiagramData.class));
}
@Override
public void visitBusbarSection(BusbarSection busBarSection) {
assertNotNull(busBarSection.getExtension(NodeDiagramData.class));
}
@Override
public void visitTwoWindingsTransformer(TwoWindingsTransformer transformer, TwoSides side) {
assertNotNull(transformer.getExtension(CouplingDeviceDiagramData.class));
}
@Override
public void visitThreeWindingsTransformer(ThreeWindingsTransformer transformer, ThreeSides side) {
assertNotNull(transformer.getExtension(ThreeWindingsTransformerDiagramData.class));
}
@Override
public void visitHvdcConverterStation(HvdcConverterStation<?> converterStation) {
assertNotNull(converterStation.getExtension(LineDiagramData.class));
}
});
});
}
private void checkExtensionsUnset(Network network) {
network.getVoltageLevelStream().forEach(vl -> {
vl.visitEquipments(new DefaultTopologyVisitor() {
@Override
public void visitDanglingLine(DanglingLine danglingLine) {
assertNull(danglingLine.getExtension(LineDiagramData.class));
}
@Override
public void visitGenerator(Generator generator) {
assertNull(generator.getExtension(InjectionDiagramData.class));
}
@Override
public void visitShuntCompensator(ShuntCompensator sc) {
assertNull(sc.getExtension(InjectionDiagramData.class));
}
@Override
public void visitLoad(Load load) {
assertNull(load.getExtension(InjectionDiagramData.class));
}
@Override
public void visitStaticVarCompensator(StaticVarCompensator staticVarCompensator) {
assertNull(staticVarCompensator.getExtension(InjectionDiagramData.class));
}
@Override
public void visitLine(Line line, TwoSides side) {
assertNull(line.getExtension(LineDiagramData.class));
}
@Override
public void visitBusbarSection(BusbarSection busBarSection) {
assertNull(busBarSection.getExtension(NodeDiagramData.class));
}
@Override
public void visitTwoWindingsTransformer(TwoWindingsTransformer transformer, TwoSides side) {
assertNull(transformer.getExtension(CouplingDeviceDiagramData.class));
}
@Override
public void visitThreeWindingsTransformer(ThreeWindingsTransformer transformer, ThreeSides side) {
assertNull(transformer.getExtension(ThreeWindingsTransformerDiagramData.class));
}
@Override
public void visitHvdcConverterStation(HvdcConverterStation<?> converterStation) {
assertNull(converterStation.getExtension(LineDiagramData.class));
}
});
});
}
@Test
void testCgmesDlExtensionsEmpty() {
networks.forEach(this::checkExtensionsUnset);
}
@Test
void testCgmesDlExtensionsSet() {
networks.forEach(network -> {
LayoutToCgmesExtensionsConverter lconv = new LayoutToCgmesExtensionsConverter();
lconv.convertLayout(network, "new-diagram");
checkExtensionsSet(network);
});
}
@Test
void testCgmesDlExtensionsSetNoname() {
networks.forEach(network -> {
LayoutToCgmesExtensionsConverter lconv = new LayoutToCgmesExtensionsConverter();
lconv.convertLayout(network);
checkExtensionsSet(network);
});
}
@Test
void testCgmesDlExtensionsEmptyNetwork() {
Network network = NetworkFactory.findDefault().createNetwork("testEmpty", "testEmpty");
LayoutToCgmesExtensionsConverter lconv = new LayoutToCgmesExtensionsConverter();
lconv.convertLayout(network, null);
checkExtensionsUnset(network);
}
@Test
void testCgmesDlExtensionsBridgePatternNetwork() {
Network network = Networks.createNetworkWithBridge();
LayoutToCgmesExtensionsConverter lconv = new LayoutToCgmesExtensionsConverter();
lconv.convertLayout(network);
checkExtensionsSet(network);
VoltageLevel vl1 = network.getVoltageLevel("V1");
assertTrue(VoltageLevelDiagramData.checkDiagramData(vl1));
VoltageLevel vl2 = network.getVoltageLevel("V2");
assertFalse(VoltageLevelDiagramData.checkDiagramData(vl2));
VoltageLevel vl3 = network.getVoltageLevel("V3");
assertFalse(VoltageLevelDiagramData.checkDiagramData(vl3));
assertEquals(2, VoltageLevelDiagramData.getInternalNodeDiagramPoints(vl1, vl1.getSubstation().map(Substation::getId).orElse(null)).length);
}
@Test
void testCoverage() {
// Spying Network
Network network = Mockito.spy(Networks.createNetworkWithHvdcLines());
// Spying Substation1
Substation substation = Mockito.spy(network.getSubstation("Substation1"));
// Spying VoltageLevel
VoltageLevel vl1 = Mockito.spy(network.getVoltageLevel("VoltageLevel1"));
// Using Substation1 only
Mockito.doReturn(substation).when(network).getSubstation(Mockito.anyString());
// Using VoltageLevel1 only
Answer<Stream<VoltageLevel>> answer = invocation -> Stream.of(vl1);
Mockito.doAnswer(answer).when(substation).getVoltageLevelStream();
// Faking Converter1 to null
Mockito.doReturn(null).when(vl1).getConnectable("Converter1", VscConverterStation.class);
// Faking Converter3 to null
Mockito.doReturn(null).when(vl1).getConnectable("Converter3", LccConverterStation.class);
LayoutToCgmesExtensionsConverter lconv = new LayoutToCgmesExtensionsConverter();
lconv.convertLayout(network, "new-diagram");
network.getVscConverterStationStream().forEach(vsc -> assertNull(vsc.getExtension(LineDiagramData.class)));
network.getLccConverterStationStream().forEach(lcc -> assertNull(lcc.getExtension(LineDiagramData.class)));
}
}