LimitReductionBuilderTest.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/.
 * SPDX-License-Identifier: MPL-2.0
 */
package com.powsybl.security.limitreduction;

import com.powsybl.contingency.ContingencyContext;
import com.powsybl.iidm.criteria.LineCriterion;
import com.powsybl.iidm.criteria.NetworkElementCriterion;
import com.powsybl.iidm.criteria.TieLineCriterion;
import com.powsybl.iidm.criteria.TwoWindingsTransformerCriterion;
import com.powsybl.iidm.criteria.duration.AbstractTemporaryDurationCriterion;
import com.powsybl.iidm.criteria.duration.EqualityTemporaryDurationCriterion;
import com.powsybl.iidm.criteria.duration.LimitDurationCriterion;
import com.powsybl.iidm.criteria.duration.PermanentDurationCriterion;
import com.powsybl.iidm.network.LimitType;
import org.junit.jupiter.api.Test;

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

/**
 * @author Olivier Perrin {@literal <olivier.perrin at rte-france.com>}
 */
class LimitReductionBuilderTest {

    @Test
    void defaultValuesTest() {
        LimitReduction limitReduction = LimitReduction.builder(LimitType.APPARENT_POWER, 0.5).build();
        assertEquals(LimitType.APPARENT_POWER, limitReduction.getLimitType());
        assertEquals(0.5, limitReduction.getValue(), 0.01);
        assertFalse(limitReduction.isMonitoringOnly());
        assertEquals(ContingencyContext.all(), limitReduction.getContingencyContext());
        assertTrue(limitReduction.getNetworkElementCriteria().isEmpty());
        assertTrue(limitReduction.getDurationCriteria().isEmpty());
    }

    @Test
    void allValuesTest() {
        NetworkElementCriterion nec0 = new TieLineCriterion(null, null);
        NetworkElementCriterion nec1 = new LineCriterion(null, null);
        NetworkElementCriterion nec2 = new TwoWindingsTransformerCriterion(null, null);
        LimitDurationCriterion ldc0 = new PermanentDurationCriterion();
        LimitDurationCriterion ldc1 = new EqualityTemporaryDurationCriterion(300);
        LimitReduction limitReduction = LimitReduction.builder(LimitType.CURRENT, 0.9)
                .withMonitoringOnly(true)
                .withContingencyContext(ContingencyContext.none())
                .withNetworkElementCriteria(nec0)
                .withNetworkElementCriteria(nec1, nec2) // replace previously defined NetworkElementCriteria
                .withLimitDurationCriteria(ldc0)
                .withLimitDurationCriteria(ldc1) // replace previously defined LimitDurationCriterion
                .build();
        assertEquals(LimitType.CURRENT, limitReduction.getLimitType());
        assertEquals(0.9, limitReduction.getValue(), 0.01);
        assertTrue(limitReduction.isMonitoringOnly());
        assertEquals(ContingencyContext.none(), limitReduction.getContingencyContext());
        assertEquals(2, limitReduction.getNetworkElementCriteria().size());
        assertEquals(NetworkElementCriterion.NetworkElementCriterionType.LINE,
                limitReduction.getNetworkElementCriteria().get(0).getNetworkElementCriterionType());
        assertEquals(NetworkElementCriterion.NetworkElementCriterionType.TWO_WINDINGS_TRANSFORMER,
                limitReduction.getNetworkElementCriteria().get(1).getNetworkElementCriterionType());
        assertEquals(1, limitReduction.getDurationCriteria().size());
        assertEquals(AbstractTemporaryDurationCriterion.TemporaryDurationCriterionType.EQUALITY,
                ((AbstractTemporaryDurationCriterion) limitReduction.getDurationCriteria().get(0)).getComparisonType());
    }
}