FeederInfoProviderTest.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/.
 * SPDX-License-Identifier: MPL-2.0
 */
package com.powsybl.sld.svg;

import com.powsybl.diagram.test.Networks;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.VoltageLevel;
import com.powsybl.sld.builders.NetworkGraphBuilder;
import com.powsybl.sld.iidm.AbstractTestCaseIidm;
import com.powsybl.sld.library.ComponentLibrary;
import com.powsybl.sld.library.ConvergenceComponentLibrary;
import com.powsybl.sld.model.graphs.VoltageLevelGraph;
import com.powsybl.sld.model.nodes.FeederNode;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.util.List;

import static com.powsybl.sld.library.ComponentTypeName.ARROW_ACTIVE;
import static com.powsybl.sld.library.ComponentTypeName.ARROW_REACTIVE;
import static org.junit.jupiter.api.Assertions.*;

/**
 * @author Giovanni Ferrari {@literal <giovanni.ferrari at techrain.eu>}
 * @author Thomas Adam {@literal <tadam at silicom.fr>}
 */
class FeederInfoProviderTest extends AbstractTestCaseIidm {

    private VoltageLevel vl2;

    @BeforeEach
    public void setUp() {
        network = Networks.createNetworkWithSvcVscScDl();
        graphBuilder = new NetworkGraphBuilder(network);
        vl = network.getVoltageLevel("vl");
        vl2 = network.getVoltageLevel("vl2");
    }

    @Test
    void test() {
        ComponentLibrary componentLibrary = new ConvergenceComponentLibrary();
        svgParameters.setFeederInfoSymmetry(true);

        // build first voltage level graph
        VoltageLevelGraph g = graphBuilder.buildVoltageLevelGraph(vl.getId());
        voltageLevelGraphLayout(g); // to have cell orientations (bottom / up)

        assertEquals(toString("/feederInfoTest.svg"), toSVG(g, "/feederInfoTest.svg", componentLibrary, layoutParameters, svgParameters, getDefaultDiagramLabelProvider(), getDefaultDiagramStyleProvider()));

        Network network2 = Network.create("testCase2", "test2");
        DefaultLabelProvider wrongLabelProvider = new DefaultLabelProvider(network2, componentLibrary, layoutParameters, svgParameters);
        List<FeederInfo> feederInfos = wrongLabelProvider.getFeederInfos((FeederNode) g.getNode("svc"));
        assertTrue(feederInfos.isEmpty());

        DefaultLabelProvider labelProvider = new DefaultLabelProvider(network, componentLibrary, layoutParameters, svgParameters);
        List<FeederInfo> feederInfos1 = labelProvider.getFeederInfos((FeederNode) g.getNode("svc"));
        assertEquals(2, feederInfos1.size());
        assertEquals(ARROW_ACTIVE, feederInfos1.get(0).getComponentType());
        assertEquals(ARROW_REACTIVE, feederInfos1.get(1).getComponentType());
        assertTrue(feederInfos1.get(0).getRightLabel().isPresent());
        assertTrue(feederInfos1.get(1).getRightLabel().isPresent());
        assertFalse(feederInfos1.get(0).getLeftLabel().isPresent());
        assertFalse(feederInfos1.get(1).getLeftLabel().isPresent());

        List<FeederInfo> feederInfosVsc1 = labelProvider.getFeederInfos((FeederNode) g.getNode("vsc"));
        assertEquals(2, feederInfosVsc1.size());
        assertEquals(ARROW_ACTIVE, feederInfosVsc1.get(0).getComponentType());
        assertEquals(ARROW_REACTIVE, feederInfosVsc1.get(1).getComponentType());
        assertTrue(feederInfosVsc1.get(0).getRightLabel().isPresent());
        assertTrue(feederInfosVsc1.get(1).getRightLabel().isPresent());
        assertFalse(feederInfosVsc1.get(0).getLeftLabel().isPresent());
        assertFalse(feederInfosVsc1.get(1).getLeftLabel().isPresent());

        // build second voltage level graph
        VoltageLevelGraph g2 = graphBuilder.buildVoltageLevelGraph(vl2.getId());
        voltageLevelGraphLayout(g2); // to have cell orientations (bottom / up)

        List<FeederInfo> feederInfosVsc2 = labelProvider.getFeederInfos((FeederNode) g2.getNode("vsc2"));
        assertEquals(2, feederInfosVsc2.size());
        assertEquals(ARROW_ACTIVE, feederInfosVsc2.get(0).getComponentType());
        assertEquals(ARROW_REACTIVE, feederInfosVsc2.get(1).getComponentType());
        assertTrue(feederInfosVsc2.get(0).getRightLabel().isPresent());
        assertTrue(feederInfosVsc2.get(1).getRightLabel().isPresent());
        assertFalse(feederInfosVsc2.get(0).getLeftLabel().isPresent());
        assertFalse(feederInfosVsc2.get(1).getLeftLabel().isPresent());

        List<FeederInfo> feederInfos3 = labelProvider.getFeederInfos((FeederNode) g.getNode("C1"));
        assertEquals(2, feederInfos3.size());
        assertEquals(ARROW_ACTIVE, feederInfos3.get(0).getComponentType());
        assertEquals(ARROW_REACTIVE, feederInfos3.get(1).getComponentType());
        assertTrue(feederInfos3.get(0).getRightLabel().isPresent());
        assertTrue(feederInfos3.get(1).getRightLabel().isPresent());
        assertFalse(feederInfos3.get(0).getLeftLabel().isPresent());
        assertFalse(feederInfos3.get(1).getLeftLabel().isPresent());

        List<FeederInfo> feederInfos4 = labelProvider.getFeederInfos((FeederNode) g.getNode("dl1"));
        assertEquals(2, feederInfos4.size());
        assertEquals(ARROW_ACTIVE, feederInfos4.get(0).getComponentType());
        assertEquals(ARROW_REACTIVE, feederInfos4.get(1).getComponentType());
        assertTrue(feederInfos4.get(0).getRightLabel().isPresent());
        assertTrue(feederInfos4.get(1).getRightLabel().isPresent());
        assertFalse(feederInfos4.get(0).getLeftLabel().isPresent());
        assertFalse(feederInfos4.get(1).getLeftLabel().isPresent());

        // Reverse order
        svgParameters.setFeederInfoSymmetry(false);
        List<FeederInfo> feederInfos5 = labelProvider.getFeederInfos((FeederNode) g.getNode("dl1"));
        assertEquals(ARROW_REACTIVE, feederInfos5.get(0).getComponentType());
        assertEquals(ARROW_ACTIVE, feederInfos5.get(1).getComponentType());
    }
}