|
7 | 7 | package org.gridsuite.modification.modifications; |
8 | 8 |
|
9 | 9 | import com.fasterxml.jackson.core.type.TypeReference; |
10 | | -import com.powsybl.iidm.network.Line; |
11 | | -import com.powsybl.iidm.network.Network; |
12 | | -import com.powsybl.iidm.network.ThreeSides; |
| 10 | +import com.powsybl.iidm.network.*; |
13 | 11 | import com.powsybl.iidm.network.extensions.ConnectablePosition; |
14 | 12 | import com.powsybl.iidm.network.extensions.Measurement; |
15 | 13 | import com.powsybl.iidm.network.extensions.Measurements; |
|
20 | 18 | import org.gridsuite.modification.utils.NetworkCreation; |
21 | 19 | import org.junit.jupiter.api.Test; |
22 | 20 |
|
23 | | -import java.util.Collection; |
24 | | -import java.util.List; |
25 | | -import java.util.Map; |
26 | | -import java.util.UUID; |
| 21 | +import java.util.*; |
27 | 22 |
|
28 | 23 | import static org.assertj.core.api.Assertions.assertThat; |
29 | 24 | import static org.gridsuite.modification.NetworkModificationException.Type.LINE_NOT_FOUND; |
| 25 | +import static org.gridsuite.modification.dto.OperationalLimitsGroupInfos.Applicability.*; |
| 26 | +import static org.gridsuite.modification.dto.OperationalLimitsGroupModificationType.MODIFY_OR_ADD; |
30 | 27 | import static org.junit.jupiter.api.Assertions.*; |
31 | 28 |
|
32 | 29 | /** |
@@ -163,6 +160,153 @@ void testConnection() { |
163 | 160 | changeLineConnectionState(getNetwork().getLine("line1"), true); |
164 | 161 | } |
165 | 162 |
|
| 163 | + @Test |
| 164 | + void testApplicabilityChangeFromSide1ToSide2() { |
| 165 | + Line line = getNetwork().getLine("line1"); |
| 166 | + OperationalLimitsGroup limitsGroup = line.newOperationalLimitsGroup1("NewLimitsGroup1"); |
| 167 | + limitsGroup.newCurrentLimits() |
| 168 | + .setPermanentLimit(10.0) |
| 169 | + .beginTemporaryLimit().setName("IT10").setValue(15.0).setAcceptableDuration(600).endTemporaryLimit() |
| 170 | + .add(); |
| 171 | + |
| 172 | + assertNotNull(line.getOperationalLimitsGroup1("NewLimitsGroup1")); |
| 173 | + assertTrue(line.getOperationalLimitsGroup2("NewLimitsGroup1").isEmpty()); |
| 174 | + |
| 175 | + // Change from Side 1 -> Side 2 |
| 176 | + OperationalLimitsGroupModificationInfos opLimitsGroupInfos = OperationalLimitsGroupModificationInfos.builder() |
| 177 | + .id("NewLimitsGroup1").applicability(SIDE2).modificationType(MODIFY_OR_ADD).build(); |
| 178 | + opLimitsGroupInfos.setCurrentLimits(new CurrentLimitsModificationInfos()); |
| 179 | + LineModificationInfos lineModificationInfos = LineModificationInfos.builder() |
| 180 | + .equipmentId("line1") |
| 181 | + .enableOLGModification(true) |
| 182 | + .operationalLimitsGroups(Collections.singletonList(opLimitsGroupInfos)).build(); |
| 183 | + |
| 184 | + lineModificationInfos.toModification().apply(getNetwork()); |
| 185 | + assertTrue(line.getOperationalLimitsGroup1("NewLimitsGroup1").isEmpty()); |
| 186 | + assertNotNull(line.getOperationalLimitsGroup2("NewLimitsGroup1")); |
| 187 | + |
| 188 | + // Test on the copy of the limit set |
| 189 | + OperationalLimitsGroup opLimitsGroupOnLine = line.getOperationalLimitsGroup2("NewLimitsGroup1").get(); |
| 190 | + assertTrue(opLimitsGroupOnLine.getCurrentLimits().isPresent()); |
| 191 | + CurrentLimits currentLimits = opLimitsGroupOnLine.getCurrentLimits().get(); |
| 192 | + assertEquals(10.0, currentLimits.getPermanentLimit()); |
| 193 | + assertNotNull(currentLimits.getTemporaryLimit(600)); |
| 194 | + LoadingLimits.TemporaryLimit temporaryLimit = currentLimits.getTemporaryLimit(600); |
| 195 | + assertEquals(15.0, temporaryLimit.getValue()); |
| 196 | + assertEquals(600, temporaryLimit.getAcceptableDuration()); |
| 197 | + assertEquals("IT10", temporaryLimit.getName()); |
| 198 | + } |
| 199 | + |
| 200 | + @Test |
| 201 | + void testApplicabilityChangeFromSide2ToEquipment() { |
| 202 | + Line line = getNetwork().getLine("line1"); |
| 203 | + // Change from Side 2 -> Equipment |
| 204 | + line.newOperationalLimitsGroup2("NewLimitsGroup2").newCurrentLimits() |
| 205 | + .setPermanentLimit(10.0) |
| 206 | + .beginTemporaryLimit().setName("IT10").setValue(15.0).setAcceptableDuration(600).endTemporaryLimit() |
| 207 | + .add(); |
| 208 | + |
| 209 | + OperationalLimitsGroupModificationInfos opLimitsGroupInfos2 = OperationalLimitsGroupModificationInfos.builder() |
| 210 | + .id("NewLimitsGroup2").applicability(EQUIPMENT).modificationType(MODIFY_OR_ADD).build(); |
| 211 | + opLimitsGroupInfos2.setCurrentLimits(new CurrentLimitsModificationInfos()); |
| 212 | + |
| 213 | + LineModificationInfos lineModificationInfos2 = LineModificationInfos.builder() |
| 214 | + .equipmentId("line1") |
| 215 | + .enableOLGModification(true) |
| 216 | + .operationalLimitsGroups(Collections.singletonList(opLimitsGroupInfos2)).build(); |
| 217 | + lineModificationInfos2.toModification().apply(getNetwork()); |
| 218 | + |
| 219 | + lineModificationInfos2.toModification().apply(getNetwork()); |
| 220 | + assertNotNull(line.getOperationalLimitsGroup1("NewLimitsGroup2")); |
| 221 | + assertNotNull(line.getOperationalLimitsGroup2("NewLimitsGroup2")); |
| 222 | + } |
| 223 | + |
| 224 | + @Test |
| 225 | + void testApplicabilityChangeFromEquipmentToSide2() { |
| 226 | + Line line = getNetwork().getLine("line1"); |
| 227 | + line.newOperationalLimitsGroup1("NewLimitsGroup3").newCurrentLimits() |
| 228 | + .setPermanentLimit(10.0) |
| 229 | + .add(); |
| 230 | + line.newOperationalLimitsGroup2("NewLimitsGroup3").newCurrentLimits() |
| 231 | + .setPermanentLimit(10.0) |
| 232 | + .add(); |
| 233 | + OperationalLimitsGroupModificationInfos opLimitsGroupInfos3 = OperationalLimitsGroupModificationInfos.builder() |
| 234 | + .id("NewLimitsGroup3").applicability(SIDE2).modificationType(MODIFY_OR_ADD).build(); |
| 235 | + opLimitsGroupInfos3.setCurrentLimits(new CurrentLimitsModificationInfos()); |
| 236 | + LineModificationInfos lineModificationInfos3 = LineModificationInfos.builder() |
| 237 | + .enableOLGModification(true) |
| 238 | + .equipmentId("line1") |
| 239 | + .operationalLimitsGroups(Collections.singletonList(opLimitsGroupInfos3)).build(); |
| 240 | + |
| 241 | + lineModificationInfos3.toModification().apply(getNetwork()); |
| 242 | + assertNotNull(line.getOperationalLimitsGroup2("NewLimitsGroup3")); |
| 243 | + assertTrue(line.getOperationalLimitsGroup1("NewLimitsGroup3").isEmpty()); |
| 244 | + } |
| 245 | + |
| 246 | + @Test |
| 247 | + void testApplicabilityChangeFromSide2ToSide1() { |
| 248 | + Line line = getNetwork().getLine("line1"); |
| 249 | + line.newOperationalLimitsGroup2("NewLimitsGroup4").newCurrentLimits() |
| 250 | + .setPermanentLimit(10.0) |
| 251 | + .add(); |
| 252 | + OperationalLimitsGroupModificationInfos opLimitsGroupInfos4 = OperationalLimitsGroupModificationInfos.builder() |
| 253 | + .id("NewLimitsGroup4").applicability(SIDE2).modificationType(MODIFY_OR_ADD).build(); |
| 254 | + opLimitsGroupInfos4.setCurrentLimits(new CurrentLimitsModificationInfos()); |
| 255 | + LineModificationInfos lineModificationInfos4 = LineModificationInfos.builder() |
| 256 | + .enableOLGModification(true) |
| 257 | + .equipmentId("line1") |
| 258 | + .operationalLimitsGroups(Collections.singletonList(opLimitsGroupInfos4)).build(); |
| 259 | + |
| 260 | + lineModificationInfos4.toModification().apply(getNetwork()); |
| 261 | + assertNotNull(line.getOperationalLimitsGroup1("NewLimitsGroup4")); |
| 262 | + assertTrue(line.getOperationalLimitsGroup1("NewLimitsGroup4").isEmpty()); |
| 263 | + } |
| 264 | + |
| 265 | + @Test |
| 266 | + void testApplicabilityChangeFromSide1ToEquipment() { |
| 267 | + Line line = getNetwork().getLine("line1"); |
| 268 | + line.newOperationalLimitsGroup1("NewLimitsGroup5").newCurrentLimits() |
| 269 | + .setPermanentLimit(10.0) |
| 270 | + .add(); |
| 271 | + OperationalLimitsGroupModificationInfos opLimitsGroupInfos5 = OperationalLimitsGroupModificationInfos.builder() |
| 272 | + .id("NewLimitsGroup5").applicability(EQUIPMENT).modificationType(MODIFY_OR_ADD).build(); |
| 273 | + opLimitsGroupInfos5.setCurrentLimits(new CurrentLimitsModificationInfos()); |
| 274 | + |
| 275 | + LineModificationInfos lineModificationInfos5 = LineModificationInfos.builder() |
| 276 | + .equipmentId("line1") |
| 277 | + .enableOLGModification(true) |
| 278 | + .operationalLimitsGroups(Collections.singletonList(opLimitsGroupInfos5)).build(); |
| 279 | + lineModificationInfos5.toModification().apply(getNetwork()); |
| 280 | + |
| 281 | + lineModificationInfos5.toModification().apply(getNetwork()); |
| 282 | + assertNotNull(line.getOperationalLimitsGroup1("NewLimitsGroup5")); |
| 283 | + assertNotNull(line.getOperationalLimitsGroup2("NewLimitsGroup5")); |
| 284 | + } |
| 285 | + |
| 286 | + @Test |
| 287 | + void testApplicabilityChangeFromEquipmentToSide1() { |
| 288 | + Line line = getNetwork().getLine("line1"); |
| 289 | + line.newOperationalLimitsGroup1("NewLimitsGroup5").newCurrentLimits() |
| 290 | + .setPermanentLimit(10.0) |
| 291 | + .add(); |
| 292 | + line.newOperationalLimitsGroup2("NewLimitsGroup5").newCurrentLimits() |
| 293 | + .setPermanentLimit(10.0) |
| 294 | + .add(); |
| 295 | + OperationalLimitsGroupModificationInfos opLimitsGroupInfos5 = OperationalLimitsGroupModificationInfos.builder() |
| 296 | + .id("NewLimitsGroup5").applicability(SIDE1).modificationType(MODIFY_OR_ADD).build(); |
| 297 | + opLimitsGroupInfos5.setCurrentLimits(new CurrentLimitsModificationInfos()); |
| 298 | + |
| 299 | + LineModificationInfos lineModificationInfos5 = LineModificationInfos.builder() |
| 300 | + .equipmentId("line1") |
| 301 | + .enableOLGModification(true) |
| 302 | + .operationalLimitsGroups(Collections.singletonList(opLimitsGroupInfos5)).build(); |
| 303 | + lineModificationInfos5.toModification().apply(getNetwork()); |
| 304 | + |
| 305 | + lineModificationInfos5.toModification().apply(getNetwork()); |
| 306 | + assertNotNull(line.getOperationalLimitsGroup1("NewLimitsGroup5")); |
| 307 | + assertTrue(line.getOperationalLimitsGroup2("NewLimitsGroup5").isEmpty()); |
| 308 | + } |
| 309 | + |
166 | 310 | @Test |
167 | 311 | void testConnectWhenNoSwitchesOpened() { |
168 | 312 | getNetwork().getSwitch("v3dl1").setOpen(true); |
|
0 commit comments