StaticVarCompensatorModificationTest.java
/**
* Copyright (c) 2023, 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.StaticVarCompensator;
import com.powsybl.iidm.network.test.FourSubstationsNodeBreakerFactory;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.util.OptionalDouble;
import static org.junit.jupiter.api.Assertions.*;
/**
* @author Nicolas PIERRE {@literal <nicolas.pierre at artelys.com>}
*/
class StaticVarCompensatorModificationTest {
private Network network;
private StaticVarCompensator svc;
@BeforeEach
public void setUp() {
network = FourSubstationsNodeBreakerFactory.create();
assertTrue(network.getStaticVarCompensatorCount() > 0);
svc = network.getStaticVarCompensators().iterator().next();
svc.setReactivePowerSetpoint(0);
svc.setVoltageSetpoint(0);
}
@Test
void testConstructorCoherence() {
// Ok
String id = svc.getId();
assertDoesNotThrow(
() -> new StaticVarCompensatorModification(id, null, 10.));
assertDoesNotThrow(
() -> new StaticVarCompensatorModification(id, 10., null));
assertDoesNotThrow(
() -> new StaticVarCompensatorModification(id, 10., 10.));
// Warn log but ok
assertDoesNotThrow(
() -> new StaticVarCompensatorModification(id, null, null));
}
@Test
void testApplyChecks() {
StaticVarCompensatorModification modif1 = new StaticVarCompensatorModification("UNKNOWN_ID",
1., 2.);
assertThrows(PowsyblException.class, () -> modif1.apply(network, true, ReportNode.NO_OP),
"An invalid ID should fail to apply.");
assertDoesNotThrow(() -> modif1.apply(network, false, ReportNode.NO_OP),
"An invalid ID should not throw if throwException is false.");
StaticVarCompensatorModification modif2 = new StaticVarCompensatorModification(svc.getId(),
1., 2.);
modif2.apply(network, true, ReportNode.NO_OP);
assertEquals(1, svc.getVoltageSetpoint(), "Failed to modify network during apply.");
assertEquals(2, svc.getReactivePowerSetpoint(), "Failed to modify network during apply.");
}
@Test
void testGetters() {
StaticVarCompensatorModification modif = new StaticVarCompensatorModification("UNKNOWN_ID",
1., null);
assertEquals(OptionalDouble.empty(), modif.getOptionalReactivePowerSetpoint());
assertNull(modif.getReactivePowerSetpoint());
assertEquals(OptionalDouble.of(1.), modif.getOptionalVoltageSetpoint());
assertEquals(1., modif.getVoltageSetpoint());
}
@Test
void testGetName() {
AbstractNetworkModification networkModification = new StaticVarCompensatorModification("ID", 1.0, 1.);
assertEquals("StaticVarCompensatorModification", networkModification.getName());
}
@Test
void testHasImpact() {
NetworkModification modification1 = new StaticVarCompensatorModification("UNKNOWN_ID", 1., 2.);
assertEquals(NetworkModificationImpact.CANNOT_BE_APPLIED, modification1.hasImpactOnNetwork(network));
NetworkModification modification2 = new StaticVarCompensatorModification("SVC", 0., 0.);
assertEquals(NetworkModificationImpact.NO_IMPACT_ON_NETWORK, modification2.hasImpactOnNetwork(network));
NetworkModification modification3 = new StaticVarCompensatorModification("SVC", 1., 0.);
assertEquals(NetworkModificationImpact.HAS_IMPACT_ON_NETWORK, modification3.hasImpactOnNetwork(network));
NetworkModification modification4 = new StaticVarCompensatorModification("SVC", 0., 1.);
assertEquals(NetworkModificationImpact.HAS_IMPACT_ON_NETWORK, modification4.hasImpactOnNetwork(network));
NetworkModification modification5 = new StaticVarCompensatorModification("SVC", null, null);
assertEquals(NetworkModificationImpact.NO_IMPACT_ON_NETWORK, modification5.hasImpactOnNetwork(network));
}
}