NetworkActionTest.java

/*
 * 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 com.powsybl.openrao.data.crac.api;

import com.powsybl.action.*;
import com.powsybl.openrao.data.crac.api.networkaction.NetworkAction;
import com.powsybl.openrao.data.crac.api.networkaction.SwitchPair;
import org.junit.jupiter.api.Test;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;

/**
 * @author Thomas Bouquet {@literal <thomas.bouquet at rte-france.com>}
 */
class NetworkActionTest {
    @Test
    void compatibility() {
        NetworkAction hvdcFrEs200Mw = mockHvdcAction(-200d);
        NetworkAction hvdcEsFr200Mw = mockHvdcAction(200d);
        NetworkAction alignedPsts = mockNetworkAction(mockPhaseTapChangerTapPositionAction("pst-fr-1", 4), mockPhaseTapChangerTapPositionAction("pst-fr-2", 4), mockPhaseTapChangerTapPositionAction("pst-fr-3", 4));
        NetworkAction switchPairAndPst = mockNetworkAction(mockPhaseTapChangerTapPositionAction("pst-fr-2", -2), mockSwitchPair());

        assertTrue(hvdcFrEs200Mw.isCompatibleWith(hvdcFrEs200Mw));
        assertFalse(hvdcFrEs200Mw.isCompatibleWith(hvdcEsFr200Mw));
        assertTrue(hvdcFrEs200Mw.isCompatibleWith(alignedPsts));
        assertTrue(hvdcFrEs200Mw.isCompatibleWith(switchPairAndPst));
        assertTrue(hvdcEsFr200Mw.isCompatibleWith(hvdcEsFr200Mw));
        assertTrue(hvdcEsFr200Mw.isCompatibleWith(alignedPsts));
        assertTrue(hvdcEsFr200Mw.isCompatibleWith(switchPairAndPst));
        assertTrue(alignedPsts.isCompatibleWith(alignedPsts));
        assertFalse(alignedPsts.isCompatibleWith(switchPairAndPst));
        assertTrue(switchPairAndPst.isCompatibleWith(switchPairAndPst));
    }

    private NetworkAction mockHvdcAction(double setpoint) {
        return new NetworkActionUtils.NetworkActionImplTest(Set.of(mockSwitchActionOpen("switch-fr"), mockSwitchActionOpen("switch-es"), mockGeneratorAction("generator-fr-1", setpoint / 2d), mockGeneratorAction("generator-fr-2", setpoint / 2d), mockGeneratorAction("generator-es-1", -setpoint / 2d), mockGeneratorAction("generator-es-2", -setpoint / 2d)));
    }

    private NetworkAction mockNetworkAction(Action... elementaryActions) {
        return new NetworkActionUtils.NetworkActionImplTest(new HashSet<>(List.of(elementaryActions)));
    }

    private SwitchAction mockSwitchActionOpen(String switchId) {
        return new SwitchActionBuilder().withId("id").withNetworkElementId(switchId).withOpen(true).build();
    }

    private GeneratorAction mockGeneratorAction(String networkElementId, double setpoint) {
        return new GeneratorActionBuilder().withId("id").withGeneratorId(networkElementId).withActivePowerValue(setpoint).withActivePowerRelativeValue(false).build();
    }

    private PhaseTapChangerTapPositionAction mockPhaseTapChangerTapPositionAction(String pstId, int setpoint) {
        return new PhaseTapChangerTapPositionActionBuilder().withId("id").withNetworkElementId(pstId).withTapPosition(setpoint).withRelativeValue(false).build();
    }

    private SwitchPair mockSwitchPair() {
        return new NetworkActionUtils.SwitchPairImplTest(NetworkActionUtils.createNetworkElement("switch-fr"), NetworkActionUtils.createNetworkElement("switch-es"));
    }
}