CgmesDLImporterTest.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.dl.conversion;

import com.powsybl.iidm.network.*;
import com.powsybl.sld.cgmes.dl.iidm.extensions.*;
import com.powsybl.diagram.test.Networks;
import com.powsybl.triplestore.api.PropertyBags;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;

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

import static org.junit.jupiter.api.Assertions.*;

/**
 *
 * @author Massimo Ferraro {@literal <massimo.ferraro@techrain.eu>}
 */
class CgmesDLImporterTest extends AbstractCgmesDLTest {

    protected static String OTHER_DIAGRAM_NAME = "diagram-1";

    private CgmesDLModel cgmesDLModel;

    @BeforeEach
    public void setUp() {
        super.setUp();
        addOtherDiagram();
        cgmesDLModel = Mockito.mock(CgmesDLModel.class);
        Mockito.when(cgmesDLModel.getTerminalsDiagramData()).thenReturn(terminalsPropertyBags);
        Mockito.when(cgmesDLModel.getBusesDiagramData()).thenReturn(busesPropertyBags);
        Mockito.when(cgmesDLModel.getBusbarsDiagramData()).thenReturn(busbarsPropertyBags);
        Mockito.when(cgmesDLModel.getLinesDiagramData()).thenReturn(linesPropertyBags);
        Mockito.when(cgmesDLModel.getGeneratorsDiagramData()).thenReturn(generatorsPropertyBags);
        Mockito.when(cgmesDLModel.getLoadsDiagramData()).thenReturn(loadsPropertyBags);
        Mockito.when(cgmesDLModel.getShuntsDiagramData()).thenReturn(shuntsPropertyBags);
        Mockito.when(cgmesDLModel.getSwitchesDiagramData()).thenReturn(switchesPropertyBags);
        Mockito.when(cgmesDLModel.getTransformersDiagramData()).thenReturn(tranformersPropertyBags);
        Mockito.when(cgmesDLModel.getHvdcLinesDiagramData()).thenReturn(hvdcLinesPropertyBags);
        Mockito.when(cgmesDLModel.getSvcsDiagramData()).thenReturn(svcsPropertyBags);
        Mockito.when(cgmesDLModel.getVoltageLevelDiagramData()).thenReturn(voltageLevels);
    }

    private void addOtherDiagram() {
        terminalsPropertyBags.addAll(Arrays.asList(createTerminalPropertyBag(NAMESPACE + "Generator", "1", 4, 20, 1, OTHER_DIAGRAM_NAME),
                                                   createTerminalPropertyBag(NAMESPACE + "Generator", "1", 12, 20, 2, OTHER_DIAGRAM_NAME),
                                                   createTerminalPropertyBag(NAMESPACE + "Load", "1", 4, 20, 1, OTHER_DIAGRAM_NAME),
                                                   createTerminalPropertyBag(NAMESPACE + "Load", "1", 12, 20, 2, OTHER_DIAGRAM_NAME),
                                                   createTerminalPropertyBag(NAMESPACE + "Shunt", "1", 4, 20, 1, OTHER_DIAGRAM_NAME),
                                                   createTerminalPropertyBag(NAMESPACE + "Shunt", "1", 12, 20, 2, OTHER_DIAGRAM_NAME),
                                                   createTerminalPropertyBag(NAMESPACE + "Switch", "1", 4, 20, 1, OTHER_DIAGRAM_NAME),
                                                   createTerminalPropertyBag(NAMESPACE + "Switch", "1", 12, 20, 2, OTHER_DIAGRAM_NAME),
                                                   createTerminalPropertyBag(NAMESPACE + "Switch", "2", 28, 20, 1, OTHER_DIAGRAM_NAME),
                                                   createTerminalPropertyBag(NAMESPACE + "Switch", "2", 36, 20, 2, OTHER_DIAGRAM_NAME),
                                                   createTerminalPropertyBag(NAMESPACE + "Transformer", "1", 4, 20, 1, OTHER_DIAGRAM_NAME),
                                                   createTerminalPropertyBag(NAMESPACE + "Transformer", "1", 12, 20, 2, OTHER_DIAGRAM_NAME),
                                                   createTerminalPropertyBag(NAMESPACE + "Transformer", "2", 28, 20, 1, OTHER_DIAGRAM_NAME),
                                                   createTerminalPropertyBag(NAMESPACE + "Transformer", "2", 36, 20, 2, OTHER_DIAGRAM_NAME),
                                                   createTerminalPropertyBag(NAMESPACE + "Transformer3w", "1", 4, 20, 1, OTHER_DIAGRAM_NAME),
                                                   createTerminalPropertyBag(NAMESPACE + "Transformer3w", "1", 12, 20, 2, OTHER_DIAGRAM_NAME),
                                                   createTerminalPropertyBag(NAMESPACE + "Transformer3w", "2", 28, 20, 1, OTHER_DIAGRAM_NAME),
                                                   createTerminalPropertyBag(NAMESPACE + "Transformer3w", "2", 36, 20, 2, OTHER_DIAGRAM_NAME),
                                                   createTerminalPropertyBag(NAMESPACE + "Transformer3w", "3", 20, 32, 1, OTHER_DIAGRAM_NAME),
                                                   createTerminalPropertyBag(NAMESPACE + "Transformer3w", "3", 20, 40, 2, OTHER_DIAGRAM_NAME),
                                                   createTerminalPropertyBag(NAMESPACE + "Svc", "1", 4, 20, 1, OTHER_DIAGRAM_NAME),
                                                   createTerminalPropertyBag(NAMESPACE + "Svc", "1", 12, 20, 2, OTHER_DIAGRAM_NAME)));
        busesPropertyBags.addAll(Arrays.asList(createBusPropertyBag(NAMESPACE + "Bus", "Bus", NAMESPACE + "VoltageLevel", "VoltageLevel", 40, 10, 1, OTHER_DIAGRAM_NAME),
                                               createBusPropertyBag(NAMESPACE + "Bus", "Bus", NAMESPACE + "VoltageLevel", "VoltageLevel", 40, 80, 2, OTHER_DIAGRAM_NAME)));
        busbarsPropertyBags.addAll(Arrays.asList(createBusbarPropertyBag(NAMESPACE + "Busbar", "Busbar", 40, 10, 1, OTHER_DIAGRAM_NAME),
                                                 createBusbarPropertyBag(NAMESPACE + "Busbar", "Busbar", 40, 80, 2, OTHER_DIAGRAM_NAME)));
        linesPropertyBags.addAll(Arrays.asList(createPropertyBag(NAMESPACE + "Line", "Line", 40, 10, 1, OTHER_DIAGRAM_NAME),
                                               createPropertyBag(NAMESPACE + "Line", "Line", 40, 80, 2, OTHER_DIAGRAM_NAME)));
        danglingLinesPropertyBags.addAll(Arrays.asList(createPropertyBag(NAMESPACE + "DanglingLine", "DanglingLine", 40, 10, 1, OTHER_DIAGRAM_NAME),
                                                       createPropertyBag(NAMESPACE + "DanglingLine", "DanglingLine", 40, 80, 2, OTHER_DIAGRAM_NAME)));
        generatorsPropertyBags.addAll(Arrays.asList(createPropertyBag(NAMESPACE + "Generator", "Generator", 20, 20, 0, 90, OTHER_DIAGRAM_NAME)));
        loadsPropertyBags.addAll(Arrays.asList(createPropertyBag(NAMESPACE + "Load", "Load", 20, 20, 0, 90, OTHER_DIAGRAM_NAME)));
        shuntsPropertyBags.addAll(Arrays.asList(createPropertyBag(NAMESPACE + "Shunt", "Shunt", 20, 20, 0, 90, OTHER_DIAGRAM_NAME)));
        switchesPropertyBags.addAll(Arrays.asList(createSwitchPropertyBag(NAMESPACE + "Switch", "Switch", 20, 20, 90, OTHER_DIAGRAM_NAME)));
        tranformersPropertyBags.addAll(Arrays.asList(createPropertyBag(NAMESPACE + "Transformer", "Transformer", 20, 20, 0, 90, OTHER_DIAGRAM_NAME)));
        tranformers3wPropertyBags.addAll(Arrays.asList(createPropertyBag(NAMESPACE + "Transformer3w", "Transformer3w", 20, 26, 0, 90, OTHER_DIAGRAM_NAME)));
        hvdcLinesPropertyBags.addAll(Arrays.asList(createPropertyBag(NAMESPACE + "HvdcLine", "HvdcLine", 40, 10, 1, OTHER_DIAGRAM_NAME),
                                                   createPropertyBag(NAMESPACE + "HvdcLine", "HvdcLine", 40, 80, 2, OTHER_DIAGRAM_NAME)));
        svcsPropertyBags.addAll(Arrays.asList(createPropertyBag(NAMESPACE + "Svc", "Svc", 20, 20, 0, 90, OTHER_DIAGRAM_NAME)));
    }

    private <T> void checkDiagramData(NodeDiagramData.NodeDiagramDataDetails diagramDetails, double x1, double y1,
                                      double x2, double y2) {
        assertNotNull(diagramDetails);
        assertEquals(1, diagramDetails.getPoint1().getSeq(), 0);
        assertEquals(x1, diagramDetails.getPoint1().getX(), 0);
        assertEquals(y1, diagramDetails.getPoint1().getY(), 0);
        assertEquals(2, diagramDetails.getPoint2().getSeq(), 0);
        assertEquals(x2, diagramDetails.getPoint2().getX(), 0);
        assertEquals(y2, diagramDetails.getPoint2().getY(), 0);
    }

    @Test
    void testBuses() {
        CgmesDLImporter cgmesDLImporter = new CgmesDLImporter(Networks.createNetworkWithBus(), cgmesDLModel);
        cgmesDLImporter.importDLData();
        Network network = cgmesDLImporter.getNetworkWithDLData();
        Bus bus = network.getVoltageLevel("VoltageLevel").getBusBreakerView().getBus("Bus");
        NodeDiagramData<Bus> busDiagramData = bus.getExtension(NodeDiagramData.class);

        checkDiagramData(busDiagramData.getData(DEFAULT_DIAGRAM_NAME), 20, 5, 20, 40);
        checkDiagramData(busDiagramData.getData(OTHER_DIAGRAM_NAME), 40, 10, 40, 80);
    }

    @Test
    void testBusbars() {
        CgmesDLImporter cgmesDLImporter = new CgmesDLImporter(Networks.createNetworkWithBusbar(), cgmesDLModel);
        cgmesDLImporter.importDLData();
        Network network = cgmesDLImporter.getNetworkWithDLData();
        BusbarSection busbar = network.getBusbarSection("Busbar");
        NodeDiagramData<BusbarSection> busbarDiagramData = busbar.getExtension(NodeDiagramData.class);

        checkDiagramData(busbarDiagramData.getData(DEFAULT_DIAGRAM_NAME), 20, 5, 20, 40);
        checkDiagramData(busbarDiagramData.getData(OTHER_DIAGRAM_NAME), 40, 10, 40, 80);
    }

    private <T> void checkDiagramData(LineDiagramData<?> diagramData, String diagram, double x1, double y1, double x2, double y2) {
        assertNotNull(diagramData);
        assertEquals(1, diagramData.getPoints(diagram).get(0).getSeq(), 0);
        assertEquals(x1, diagramData.getPoints(diagram).get(0).getX(), 0);
        assertEquals(y1, diagramData.getPoints(diagram).get(0).getY(), 0);
        assertEquals(2, diagramData.getPoints(diagram).get(1).getSeq(), 0);
        assertEquals(x2, diagramData.getPoints(diagram).get(1).getX(), 0);
        assertEquals(y2, diagramData.getPoints(diagram).get(1).getY(), 0);
        assertEquals(1, diagramData.getFirstPoint(diagram).getSeq(), 0);
        assertEquals(x1, diagramData.getFirstPoint(diagram).getX(), 0);
        assertEquals(y1, diagramData.getFirstPoint(diagram).getY(), 0);
        assertEquals(2, diagramData.getLastPoint(diagram).getSeq(), 0);
        assertEquals(x2, diagramData.getLastPoint(diagram).getX(), 0);
        assertEquals(y2, diagramData.getLastPoint(diagram).getY(), 0);
    }

    @Test
    void testLines() {
        CgmesDLImporter cgmesDLImporter = new CgmesDLImporter(Networks.createNetworkWithLine(), cgmesDLModel);
        cgmesDLImporter.importDLData();
        Network network = cgmesDLImporter.getNetworkWithDLData();
        Line line = network.getLine("Line");
        LineDiagramData<Line> lineDiagramData = line.getExtension(LineDiagramData.class);

        checkDiagramData(lineDiagramData, DEFAULT_DIAGRAM_NAME, 20, 5, 20, 40);
        checkDiagramData(lineDiagramData, OTHER_DIAGRAM_NAME, 40, 10, 40, 80);
    }

    @Test
    void testDanglingLines() {
        Mockito.when(cgmesDLModel.getLinesDiagramData()).thenReturn(danglingLinesPropertyBags);
        CgmesDLImporter cgmesDLImporter = new CgmesDLImporter(Networks.createNetworkWithDanglingLine(), cgmesDLModel);
        cgmesDLImporter.importDLData();
        Network network = cgmesDLImporter.getNetworkWithDLData();
        DanglingLine danglingLine = network.getDanglingLine("DanglingLine");
        LineDiagramData<DanglingLine> danglingLineDiagramData = danglingLine.getExtension(LineDiagramData.class);

        checkDiagramData(danglingLineDiagramData, DEFAULT_DIAGRAM_NAME, 20, 5, 20, 40);
        checkDiagramData(danglingLineDiagramData, OTHER_DIAGRAM_NAME, 40, 10, 40, 80);
    }

    @Test
    void testHvdcLines() {
        CgmesDLImporter cgmesDLImporter = new CgmesDLImporter(Networks.createNetworkWithHvdcLine(), cgmesDLModel);
        cgmesDLImporter.importDLData();
        Network network = cgmesDLImporter.getNetworkWithDLData();
        HvdcLine hdcvLine = network.getHvdcLine("HvdcLine");
        LineDiagramData<HvdcLine> hvdcLineDiagramData = hdcvLine.getExtension(LineDiagramData.class);

        checkDiagramData(hvdcLineDiagramData, DEFAULT_DIAGRAM_NAME, 20, 5, 20, 40);
        checkDiagramData(hvdcLineDiagramData, OTHER_DIAGRAM_NAME, 40, 10, 40, 80);
    }

    private <T> void checkDiagramData(InjectionDiagramData.InjectionDiagramDetails diagramDetails, double x, double y,
                                      double tx1, double ty1, double tx2, double ty2) {
        assertNotNull(diagramDetails);
        assertEquals(0, diagramDetails.getPoint().getSeq(), 0);
        assertEquals(x, diagramDetails.getPoint().getX(), 0);
        assertEquals(y, diagramDetails.getPoint().getY(), 0);
        assertEquals(90, diagramDetails.getRotation(), 0);

        List<DiagramPoint> points = diagramDetails.getTerminalPoints();
        assertEquals(1, points.get(0).getSeq(), 0);
        assertEquals(tx1, points.get(0).getX(), 0);
        assertEquals(ty1, points.get(0).getY(), 0);
        assertEquals(2, points.get(1).getSeq(), 0);
        assertEquals(tx2, points.get(1).getX(), 0);
        assertEquals(ty2, points.get(1).getY(), 0);
    }

    @Test
    void testGenerators() {
        CgmesDLImporter cgmesDLImporter = new CgmesDLImporter(Networks.createNetworkWithGenerator(), cgmesDLModel);
        cgmesDLImporter.importDLData();
        Network network = cgmesDLImporter.getNetworkWithDLData();
        Generator generator = network.getGenerator("Generator");
        InjectionDiagramData<Generator> generatorDiagramData = generator.getExtension(InjectionDiagramData.class);

        checkDiagramData(generatorDiagramData.getData(DEFAULT_DIAGRAM_NAME), 10, 10, 2, 10, 6, 10);
        checkDiagramData(generatorDiagramData.getData(OTHER_DIAGRAM_NAME), 20, 20, 4, 20, 12, 20);
    }

    @Test
    void testLoads() {
        CgmesDLImporter cgmesDLImporter = new CgmesDLImporter(Networks.createNetworkWithLoad(), cgmesDLModel);
        cgmesDLImporter.importDLData();
        Network network = cgmesDLImporter.getNetworkWithDLData();
        Load load = network.getLoad("Load");
        InjectionDiagramData<Load> loadDiagramData = load.getExtension(InjectionDiagramData.class);

        checkDiagramData(loadDiagramData.getData(DEFAULT_DIAGRAM_NAME), 10, 10, 2, 10, 6, 10);
        checkDiagramData(loadDiagramData.getData(OTHER_DIAGRAM_NAME), 20, 20, 4, 20, 12, 20);
    }

    @Test
    void testShunts() {
        CgmesDLImporter cgmesDLImporter = new CgmesDLImporter(Networks.createNetworkWithShuntCompensator(), cgmesDLModel);
        cgmesDLImporter.importDLData();
        Network network = cgmesDLImporter.getNetworkWithDLData();
        ShuntCompensator shunt = network.getShuntCompensator("Shunt");
        InjectionDiagramData<ShuntCompensator> shuntDiagramData = shunt.getExtension(InjectionDiagramData.class);

        checkDiagramData(shuntDiagramData.getData(DEFAULT_DIAGRAM_NAME), 10, 10, 2, 10, 6, 10);
        checkDiagramData(shuntDiagramData.getData(OTHER_DIAGRAM_NAME), 20, 20, 4, 20, 12, 20);
    }

    @Test
    void testSvcs() {
        CgmesDLImporter cgmesDLImporter = new CgmesDLImporter(Networks.createNetworkWithStaticVarCompensator(), cgmesDLModel);
        cgmesDLImporter.importDLData();
        Network network = cgmesDLImporter.getNetworkWithDLData();
        StaticVarCompensator svc = network.getStaticVarCompensator("Svc");
        InjectionDiagramData<StaticVarCompensator> svcDiagramData = svc.getExtension(InjectionDiagramData.class);

        checkDiagramData(svcDiagramData.getData(DEFAULT_DIAGRAM_NAME), 10, 10, 2, 10, 6, 10);
        checkDiagramData(svcDiagramData.getData(OTHER_DIAGRAM_NAME), 20, 20, 4, 20, 12, 20);
    }

    private <T> void checkDiagramData(CouplingDeviceDiagramData.CouplingDeviceDiagramDetails diagramDataDetails, double x, double y,
                                      double tx1, double ty1, double tx2, double ty2, double tx3, double ty3, double tx4, double ty4) {
        assertNotNull(diagramDataDetails);
        assertEquals(0, diagramDataDetails.getPoint().getSeq(), 0);
        assertEquals(x, diagramDataDetails.getPoint().getX(), 0);
        assertEquals(y, diagramDataDetails.getPoint().getY(), 0);
        assertEquals(90, diagramDataDetails.getRotation(), 0);

        List<DiagramPoint> pointsT1 = diagramDataDetails.getTerminalPoints(DiagramTerminal.TERMINAL1);
        List<DiagramPoint> pointsT2 = diagramDataDetails.getTerminalPoints(DiagramTerminal.TERMINAL2);
        assertEquals(1, pointsT1.get(0).getSeq(), 0);
        assertEquals(tx1, pointsT1.get(0).getX(), 0);
        assertEquals(ty1, pointsT1.get(0).getY(), 0);
        assertEquals(2, pointsT1.get(1).getSeq(), 0);
        assertEquals(tx2, pointsT1.get(1).getX(), 0);
        assertEquals(ty2, pointsT1.get(1).getY(), 0);
        assertEquals(1, pointsT2.get(0).getSeq(), 0);
        assertEquals(tx3, pointsT2.get(0).getX(), 0);
        assertEquals(ty3, pointsT2.get(0).getY(), 0);
        assertEquals(2, pointsT2.get(1).getSeq(), 0);
        assertEquals(tx4, pointsT2.get(1).getX(), 0);
        assertEquals(ty4, pointsT2.get(1).getY(), 0);
    }

    @Test
    void testSwitches() {
        CgmesDLImporter cgmesDLImporter = new CgmesDLImporter(Networks.createNetworkWithSwitch(), cgmesDLModel);
        cgmesDLImporter.importDLData();
        Network network = cgmesDLImporter.getNetworkWithDLData();
        Switch sw = network.getSwitch("Switch");
        CouplingDeviceDiagramData<Switch> shuntDiagramData = sw.getExtension(CouplingDeviceDiagramData.class);

        checkDiagramData(shuntDiagramData.getData(DEFAULT_DIAGRAM_NAME), 10, 10, 2, 10, 6, 10, 14, 10, 18, 10);
        checkDiagramData(shuntDiagramData.getData(OTHER_DIAGRAM_NAME), 20, 20, 4, 20, 12, 20, 28, 20, 36, 20);
    }

    @Test
    void testTransformers() {
        CgmesDLImporter cgmesDLImporter = new CgmesDLImporter(Networks.createNetworkWithTwoWindingsTransformer(), cgmesDLModel);
        cgmesDLImporter.importDLData();
        Network network = cgmesDLImporter.getNetworkWithDLData();
        TwoWindingsTransformer transformer = network.getTwoWindingsTransformer("Transformer");
        CouplingDeviceDiagramData<TwoWindingsTransformer> transformerDiagramData = transformer.getExtension(CouplingDeviceDiagramData.class);

        checkDiagramData(transformerDiagramData.getData(DEFAULT_DIAGRAM_NAME), 10, 10, 2, 10, 6, 10, 14, 10, 18, 10);
        checkDiagramData(transformerDiagramData.getData(OTHER_DIAGRAM_NAME), 20, 20, 4, 20, 12, 20, 28, 20, 36, 20);
    }

    private <T> void checkDiagramData(ThreeWindingsTransformerDiagramData.ThreeWindingsTransformerDiagramDataDetails diagramDataDetails, double x, double y,
                                      double tx1, double ty1, double tx2, double ty2, double tx3, double ty3, double tx4, double ty4, double tx5,
                                      double ty5, double tx6, double ty6) {
        assertNotNull(diagramDataDetails);
        assertEquals(0, diagramDataDetails.getPoint().getSeq(), 0);
        assertEquals(x, diagramDataDetails.getPoint().getX(), 0);
        assertEquals(y, diagramDataDetails.getPoint().getY(), 0);
        assertEquals(90, diagramDataDetails.getRotation(), 0);
        assertEquals(1, diagramDataDetails.getTerminalPoints(DiagramTerminal.TERMINAL1).get(0).getSeq(), 0);
        assertEquals(tx1, diagramDataDetails.getTerminalPoints(DiagramTerminal.TERMINAL1).get(0).getX(), 0);
        assertEquals(ty1, diagramDataDetails.getTerminalPoints(DiagramTerminal.TERMINAL1).get(0).getY(), 0);
        assertEquals(2, diagramDataDetails.getTerminalPoints(DiagramTerminal.TERMINAL1).get(1).getSeq(), 0);
        assertEquals(tx2, diagramDataDetails.getTerminalPoints(DiagramTerminal.TERMINAL1).get(1).getX(), 0);
        assertEquals(ty2, diagramDataDetails.getTerminalPoints(DiagramTerminal.TERMINAL1).get(1).getY(), 0);
        assertEquals(1, diagramDataDetails.getTerminalPoints(DiagramTerminal.TERMINAL2).get(0).getSeq(), 0);
        assertEquals(tx3, diagramDataDetails.getTerminalPoints(DiagramTerminal.TERMINAL2).get(0).getX(), 0);
        assertEquals(ty3, diagramDataDetails.getTerminalPoints(DiagramTerminal.TERMINAL2).get(0).getY(), 0);
        assertEquals(2, diagramDataDetails.getTerminalPoints(DiagramTerminal.TERMINAL2).get(1).getSeq(), 0);
        assertEquals(tx4, diagramDataDetails.getTerminalPoints(DiagramTerminal.TERMINAL2).get(1).getX(), 0);
        assertEquals(ty4, diagramDataDetails.getTerminalPoints(DiagramTerminal.TERMINAL2).get(1).getY(), 0);
        assertEquals(1, diagramDataDetails.getTerminalPoints(DiagramTerminal.TERMINAL3).get(0).getSeq(), 0);
        assertEquals(tx5, diagramDataDetails.getTerminalPoints(DiagramTerminal.TERMINAL3).get(0).getX(), 0);
        assertEquals(ty5, diagramDataDetails.getTerminalPoints(DiagramTerminal.TERMINAL3).get(0).getY(), 0);
        assertEquals(2, diagramDataDetails.getTerminalPoints(DiagramTerminal.TERMINAL3).get(1).getSeq(), 0);
        assertEquals(tx6, diagramDataDetails.getTerminalPoints(DiagramTerminal.TERMINAL3).get(1).getX(), 0);
        assertEquals(ty6, diagramDataDetails.getTerminalPoints(DiagramTerminal.TERMINAL3).get(1).getY(), 0);
    }

    @Test
    void testTransformers3w() {
        Mockito.when(cgmesDLModel.getTransformersDiagramData()).thenReturn(tranformers3wPropertyBags);
        CgmesDLImporter cgmesDLImporter = new CgmesDLImporter(Networks.createNetworkWithThreeWindingsTransformer(), cgmesDLModel);
        cgmesDLImporter.importDLData();
        Network network = cgmesDLImporter.getNetworkWithDLData();
        ThreeWindingsTransformer transformer = network.getThreeWindingsTransformer("Transformer3w");
        ThreeWindingsTransformerDiagramData transformerDiagramData = transformer.getExtension(ThreeWindingsTransformerDiagramData.class);

        checkDiagramData(transformerDiagramData.getData(DEFAULT_DIAGRAM_NAME), 10, 13, 2, 10, 6, 10, 14, 10, 18, 10, 10, 16, 10, 20);
        checkDiagramData(transformerDiagramData.getData(OTHER_DIAGRAM_NAME), 20, 26, 4, 20, 12, 20, 28, 20, 36, 20, 20, 32, 20, 40);
    }

    @Test
    void testRemoveExtensions() {
        Mockito.when(cgmesDLModel.getTransformersDiagramData()).thenReturn(tranformers3wPropertyBags);
        CgmesDLImporter cgmesDLImporter = new CgmesDLImporter(Networks.createNetworkWithLoad(), cgmesDLModel);
        cgmesDLImporter.importDLData();
        Network network = cgmesDLImporter.getNetworkWithDLData();
        Load load = network.getLoad("Load");

        assertNotNull(load.getExtension(InjectionDiagramData.class));
        CgmesDLUtils.removeIidmCgmesExtensions(network);
        CgmesDLUtils.clearCgmesDl(network);
        assertNull(load.getExtension(InjectionDiagramData.class));
    }

    @Test
    void testVoltageLevels() {
        voltageLevels = new PropertyBags(Arrays.asList(createVoltageLevelPropertyBag(NAMESPACE + "2", "2", "Breaker1", 0, 0, 0)));
        Mockito.when(cgmesDLModel.getVoltageLevelDiagramData()).thenReturn(voltageLevels);
        Network network = Networks.createNetworkWithDoubleBusbarSections();
        Map<String, Set<String>> nodesSwitchesForks = new HashMap<>();
        nodesSwitchesForks.put("2", Arrays.asList("Breaker1", "Disconnector1", "Disconnector2").stream().collect(Collectors.toSet()));
        Mockito.when(cgmesDLModel.findCgmesConnectivityNodesSwitchesForks()).thenReturn(nodesSwitchesForks);
        CgmesDLImporter cgmesDLImporter = new CgmesDLImporter(network, cgmesDLModel);
        cgmesDLImporter.importDLData();
        Network network1 = cgmesDLImporter.getNetworkWithDLData();
        VoltageLevel voltageLevel = network1.getVoltageLevel("VoltageLevel1");
        assertTrue(VoltageLevelDiagramData.checkDiagramData(voltageLevel));
    }

}