From 969357fbdf3f9998b9da7fedc92ae15fb275af60 Mon Sep 17 00:00:00 2001 From: Kamil MARUT Date: Fri, 13 Mar 2026 16:33:32 +0100 Subject: [PATCH] feat: handle q measurement modification in shunt compensator Signed-off-by: Kamil MARUT --- pom.xml | 2 +- .../ShuntCompensatorModificationEntity.java | 2 ++ .../ShuntCompensatorModificationTest.java | 26 +++++++++++++++---- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 1feb3bf3f..ed57a8ed0 100644 --- a/pom.xml +++ b/pom.xml @@ -52,7 +52,7 @@ gridsuite org.gridsuite:network-modification-server - 0.71.0 + 0.72.0 1.39.0 diff --git a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/ShuntCompensatorModificationEntity.java b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/ShuntCompensatorModificationEntity.java index b75b149b0..84ecdd9e2 100644 --- a/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/ShuntCompensatorModificationEntity.java +++ b/src/main/java/org/gridsuite/modification/server/entities/equipment/modification/ShuntCompensatorModificationEntity.java @@ -119,6 +119,8 @@ public ShuntCompensatorModificationInfos toModificationInfos() { .maxSusceptance(IAttributeModificationEmbeddable.toAttributeModification(getMaxSusceptance())) .maximumSectionCount(IAttributeModificationEmbeddable.toAttributeModification(getMaximumSectionCount())) .sectionCount(IAttributeModificationEmbeddable.toAttributeModification(getSectionCount())) + .qMeasurementValue(IAttributeModificationEmbeddable.toAttributeModification(getQMeasurementValue())) + .qMeasurementValidity(IAttributeModificationEmbeddable.toAttributeModification(getQMeasurementValidity())) // properties .properties(CollectionUtils.isEmpty(getProperties()) ? null : getProperties().stream() diff --git a/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorModificationTest.java index 7143d97e1..83e5b163a 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorModificationTest.java @@ -7,10 +7,12 @@ package org.gridsuite.modification.server.modifications; import com.fasterxml.jackson.core.type.TypeReference; -import com.powsybl.iidm.network.Network; -import com.powsybl.iidm.network.ShuntCompensatorLinearModel; -import com.powsybl.iidm.network.VoltageLevel; +import com.powsybl.iidm.network.*; import com.powsybl.iidm.network.extensions.ConnectablePosition; +import com.powsybl.iidm.network.extensions.Measurement; +import com.powsybl.iidm.network.extensions.Measurements; +import org.apache.commons.collections4.CollectionUtils; +import org.assertj.core.api.Assertions; import org.gridsuite.modification.NetworkModificationException; import org.gridsuite.modification.dto.*; import org.gridsuite.modification.server.utils.NetworkCreation; @@ -18,6 +20,7 @@ import org.springframework.http.MediaType; import org.springframework.test.web.servlet.ResultActions; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.UUID; @@ -27,8 +30,8 @@ import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.NetworkUtil.createShuntCompensator; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; @@ -40,6 +43,8 @@ class ShuntCompensatorModificationTest extends AbstractInjectionModificationTest { private static final String PROPERTY_NAME = "property-name"; private static final String PROPERTY_VALUE = "property-value"; + private static final Double MEASUREMENT_Q_VALUE = -10.0; + private static final Boolean MEASUREMENT_Q_VALID = false; @Override protected Network createNetwork(UUID networkUuid) { @@ -279,6 +284,8 @@ protected ModificationInfos buildModification() { .maxQAtNominalV(new AttributeModification<>(15.0, OperationType.SET)) .maximumSectionCount(new AttributeModification<>(1, OperationType.SET)) .sectionCount(new AttributeModification<>(1, OperationType.SET)) + .qMeasurementValue(new AttributeModification<>(MEASUREMENT_Q_VALUE, OperationType.SET)) + .qMeasurementValidity(new AttributeModification<>(MEASUREMENT_Q_VALID, OperationType.SET)) .properties(List.of(FreePropertyInfos.builder().name(PROPERTY_NAME).value(PROPERTY_VALUE).build())) .build(); @@ -300,6 +307,7 @@ protected void assertAfterNetworkModificationCreation() { assertNotNull(model); assertEquals(2.9629E-4, model.getBPerSection(), 0.0001); assertEquals(PROPERTY_VALUE, getNetwork().getShuntCompensator("v7shunt").getProperty(PROPERTY_NAME)); + assertMeasurements(shuntCompensator); } @Override @@ -347,4 +355,12 @@ void testConnection() throws Exception { .build(); assertChangeConnectionState(getNetwork().getShuntCompensator("v2shunt"), shuntModificationInfos, true); } + + private void assertMeasurements(ShuntCompensator shuntCompensator) { + Measurements measurements = (Measurements) shuntCompensator.getExtension(Measurements.class); + assertNotNull(measurements); + Collection reactivePowerMeasurements = measurements.getMeasurements(Measurement.Type.REACTIVE_POWER).stream().toList(); + assertFalse(CollectionUtils.isEmpty(reactivePowerMeasurements)); + Assertions.assertThat(reactivePowerMeasurements).allMatch(m -> m.getValue() == MEASUREMENT_Q_VALUE && m.isValid() == MEASUREMENT_Q_VALID); + } }