OnContingencyStateUsageRuleHelperTest.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.io.nc.craccreator.remedialaction;
import com.powsybl.openrao.data.crac.io.nc.objects.ContingencyWithRemedialAction;
import com.powsybl.openrao.data.crac.impl.CracImpl;
import org.junit.jupiter.api.Test;
import java.util.Map;
import java.util.Set;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
* @author Thomas Bouquet {@literal <thomas.bouquet at rte-france.com>}
*/
class OnContingencyStateUsageRuleHelperTest {
@Test
void processContingenciesLinkedToRemedialAction() {
CracImpl crac = new CracImpl("crac");
crac.newContingency().withId("contingency-1").add();
crac.newContingency().withId("contingency-2").add();
crac.newContingency().withId("contingency-3").add();
crac.newContingency().withId("contingency-4").add();
crac.newContingency().withId("contingency-6").add();
ContingencyWithRemedialAction contingency1WithRemedialAction = new ContingencyWithRemedialAction("co1xra", "contingency-1", "remedial-action", "http://entsoe.eu/ns/nc#ElementCombinationConstraintKind.included", true);
ContingencyWithRemedialAction contingency2WithRemedialAction = new ContingencyWithRemedialAction("co2xra", "contingency-2", "remedial-action", "http://entsoe.eu/ns/nc#ElementCombinationConstraintKind.considered", true);
ContingencyWithRemedialAction contingency3WithRemedialAction = new ContingencyWithRemedialAction("co3xra", "contingency-3", "remedial-action", "http://entsoe.eu/ns/nc#ElementCombinationConstraintKind.included", false);
ContingencyWithRemedialAction contingency4WithRemedialAction = new ContingencyWithRemedialAction("co4xra", "contingency-4", "remedial-action", "http://entsoe.eu/ns/nc#ElementCombinationConstraintKind.excluded", true);
ContingencyWithRemedialAction contingency5WithRemedialAction = new ContingencyWithRemedialAction("co5xra", "contingency-5", "remedial-action", "http://entsoe.eu/ns/nc#ElementCombinationConstraintKind.included", true);
ContingencyWithRemedialAction contingency6WithRemedialActionIncluded = new ContingencyWithRemedialAction("co6xra-included", "contingency-6", "remedial-action", "http://entsoe.eu/ns/nc#ElementCombinationConstraintKind.included", true);
ContingencyWithRemedialAction contingency6WithRemedialActionConsidered = new ContingencyWithRemedialAction("co6xra-considered", "contingency-6", "remedial-action", "http://entsoe.eu/ns/nc#ElementCombinationConstraintKind.considered", true);
Map<String, AssociationStatus> contingencyStatusMap = OnContingencyStateUsageRuleHelper.processContingenciesLinkedToRemedialAction(crac, "remedial-action", Set.of(contingency1WithRemedialAction, contingency2WithRemedialAction, contingency3WithRemedialAction, contingency4WithRemedialAction, contingency5WithRemedialAction, contingency6WithRemedialActionIncluded, contingency6WithRemedialActionConsidered));
assertEquals(
Map.of(
"contingency-1", new AssociationStatus(true, ""),
"contingency-2", new AssociationStatus(false, "OnContingencyState usage rule for remedial action remedial-action with contingency contingency-2 ignored because only included combinationConstraintKinds are supported."),
"contingency-3", new AssociationStatus(false, "OnContingencyState usage rule for remedial action remedial-action with contingency contingency-3 ignored because the association is disabled."),
"contingency-4", new AssociationStatus(false, "OnContingencyState usage rule for remedial action remedial-action with contingency contingency-4 ignored because only included combinationConstraintKinds are supported."),
"contingency-5", new AssociationStatus(false, "OnContingencyState usage rule for remedial action remedial-action with contingency contingency-5 ignored because this contingency does not exist or was not imported by Open RAO."),
"contingency-6", new AssociationStatus(false, "OnContingencyState usage rule for remedial action remedial-action with contingency contingency-6 ignored because this contingency has several conflictual links to the remedial action.")
),
contingencyStatusMap
);
}
}