TestThreeWindingsTransformerModification.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.iidm.modification;
import com.powsybl.commons.PowsyblException;
import com.powsybl.commons.report.ReportNode;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.ThreeWindingsTransformer;
import com.powsybl.iidm.network.test.ThreeWindingsTransformerNetworkFactory;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
* @author Luma Zamarre��o {@literal <zamarrenolm at aia.es>}
* @author Jos�� Antonio Marqu��s {@literal <marquesja at aia.es>}
*/
class TestThreeWindingsTransformerModification {
private Network network;
private ThreeWindingsTransformer t3wt;
@BeforeEach
public void setUp() {
network = ThreeWindingsTransformerNetworkFactory.create();
assertTrue(network.getThreeWindingsTransformerCount() > 0);
t3wt = network.getThreeWindingsTransformers().iterator().next();
}
@Test
void testThreeWindingsTransformerModification() {
double ratedU0 = t3wt.getRatedU0();
double structuralRatioLeg1 = getStructuralRatio(t3wt.getLeg1(), ratedU0);
double structuralRatioLeg2 = getStructuralRatio(t3wt.getLeg2(), ratedU0);
double structuralRatioLeg3 = getStructuralRatio(t3wt.getLeg3(), ratedU0);
double newRatedU0 = 135.0;
assertNotEquals(ratedU0, newRatedU0);
ThreeWindingsTransformerModification t3wtModification = new ThreeWindingsTransformerModification(t3wt.getId(), newRatedU0);
assertEquals(ratedU0, t3wt.getRatedU0());
t3wtModification.apply(network);
assertEquals(newRatedU0, t3wt.getRatedU0());
assertEquals(structuralRatioLeg1, getStructuralRatio(t3wt.getLeg1(), t3wt.getRatedU0()));
assertEquals(structuralRatioLeg2, getStructuralRatio(t3wt.getLeg2(), t3wt.getRatedU0()));
assertEquals(structuralRatioLeg3, getStructuralRatio(t3wt.getLeg3(), t3wt.getRatedU0()));
}
private static double getStructuralRatio(ThreeWindingsTransformer.Leg leg, double ratedU0) {
return leg.getRatedU() / ratedU0;
}
@Test
void testApplyChecks() {
ThreeWindingsTransformerModification t3wtModification = new ThreeWindingsTransformerModification("UNKNOWN_ID", Double.NaN);
assertThrows(PowsyblException.class, () -> t3wtModification.apply(network, true, ReportNode.NO_OP),
"An invalid ID should fail to apply.");
assertDoesNotThrow(() -> t3wtModification.apply(network, false, ReportNode.NO_OP),
"An invalid ID should not throw if throwException is false.");
}
@Test
void testGetters() {
ThreeWindingsTransformerModification t3wtModification = new ThreeWindingsTransformerModification(t3wt.getId(), 135.0);
assertEquals(t3wt.getId(), t3wtModification.getTransformerId());
assertEquals(135, t3wtModification.getRatedU0());
}
@Test
void testGetName() {
AbstractNetworkModification networkModification = new ThreeWindingsTransformerModification("ID", 10.);
assertEquals("ThreeWindingsTransformerModification", networkModification.getName());
}
@Test
void testHasImpact() {
ThreeWindingsTransformerModification modification1 = new ThreeWindingsTransformerModification("TWT_NOT_EXISTING", 135.0);
assertEquals(NetworkModificationImpact.CANNOT_BE_APPLIED, modification1.hasImpactOnNetwork(network));
ThreeWindingsTransformerModification modification2 = new ThreeWindingsTransformerModification(t3wt.getId(), 135.0);
assertEquals(NetworkModificationImpact.HAS_IMPACT_ON_NETWORK, modification2.hasImpactOnNetwork(network));
ThreeWindingsTransformerModification modification3 = new ThreeWindingsTransformerModification(t3wt.getId(), 132.0);
assertEquals(NetworkModificationImpact.NO_IMPACT_ON_NETWORK, modification3.hasImpactOnNetwork(network));
}
}