Skip to content

Commit 7d3b34c

Browse files
committed
add test for PreContingencyLimitViolation's new fields
1 parent 7ae4ff4 commit 7d3b34c

File tree

1 file changed

+106
-0
lines changed

1 file changed

+106
-0
lines changed
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
/**
2+
* Copyright (c) 2025, RTE (http://www.rte-france.com)
3+
* This Source Code Form is subject to the terms of the Mozilla Public
4+
* License, v. 2.0. If a copy of the MPL was not distributed with this
5+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
6+
*/
7+
package org.gridsuite.securityanalysis.server;
8+
9+
import com.powsybl.iidm.network.Network;
10+
import com.powsybl.iidm.network.TwoSides;
11+
import com.powsybl.iidm.network.test.EurostagTutorialExample1Factory;
12+
import com.powsybl.iidm.network.util.LimitViolationUtils;
13+
import com.powsybl.security.LimitViolation;
14+
import com.powsybl.security.LimitViolationType;
15+
import org.gridsuite.securityanalysis.server.entities.PreContingencyLimitViolationEntity;
16+
import org.gridsuite.securityanalysis.server.entities.SubjectLimitViolationEntity;
17+
import org.junit.jupiter.api.Test;
18+
import org.springframework.boot.test.context.SpringBootTest;
19+
20+
import static com.powsybl.iidm.network.test.EurostagTutorialExample1Factory.NGEN_NHV1;
21+
import static com.powsybl.iidm.network.test.EurostagTutorialExample1Factory.NHV1_NHV2_1;
22+
import static org.junit.jupiter.api.Assertions.assertEquals;
23+
24+
/**
25+
* @author Kevin Le Saulnier <kevin.lesaulnier at rte-france.com>
26+
*/
27+
@SpringBootTest
28+
class PreContingencyLimitViolationTest {
29+
@Test
30+
void testPreContingencyLimitViolationEntityNewFields() {
31+
testPreContingencyLimitViolationMapping("10'", 10 * 60, 1200, 1, 1250, TwoSides.TWO, "1'", 1100, 10 * 60, null);
32+
}
33+
34+
@Test
35+
void testPreContingencyLimitViolationEntityNewFieldsWithPermanentLimitReached() {
36+
testPreContingencyLimitViolationMapping(LimitViolationUtils.PERMANENT_LIMIT_NAME, Integer.MAX_VALUE, 1100, 1, 1150, TwoSides.TWO, "10'", 1100, Integer.MAX_VALUE, null);
37+
}
38+
39+
@Test
40+
void testPreContingencyLimitViolationEntityNewFieldsWithPermanentLimitReachedAndNoTemporaryLimit() {
41+
testPreContingencyLimitViolationMapping(LimitViolationUtils.PERMANENT_LIMIT_NAME, Integer.MAX_VALUE, 500, 1, 1000, TwoSides.ONE, null, 500, Integer.MAX_VALUE, null);
42+
}
43+
44+
@Test
45+
void testPreContingencyLimitViolationEntityNewFieldsWithLastLimitReached() {
46+
testPreContingencyLimitViolationMapping("N/A", 0, 1100, 1, 3000, TwoSides.TWO, null, 1100, 0, null);
47+
}
48+
49+
@Test
50+
void testPreContingencyLimitViolationEntityNewFieldsWithLimitReductionEffective() {
51+
// for this test to be relevant, "value" needs to be less that "limit"
52+
testPreContingencyLimitViolationMapping("10'", 60, 1200, 0.8, 1150, TwoSides.TWO, "1'", 1100, 10 * 60, 60);
53+
}
54+
55+
@Test
56+
void test2wtPreContingencyLimitViolationEntityNewFieldsWithLimitReductionEffective() {
57+
// for this test to be relevant, "value" needs to be less that "limit"
58+
Network network = EurostagTutorialExample1Factory.createWithFixedCurrentLimits();
59+
// create limit set for two windings transformer
60+
network.getTwoWindingsTransformer(NGEN_NHV1).getOrCreateSelectedOperationalLimitsGroup1().newCurrentLimits()
61+
.setPermanentLimit(100)
62+
.beginTemporaryLimit()
63+
.setName("10'")
64+
.setValue(200)
65+
.setAcceptableDuration(60 * 10)
66+
.endTemporaryLimit()
67+
.beginTemporaryLimit()
68+
.setName("1'")
69+
.setValue(300)
70+
.setAcceptableDuration(60)
71+
.endTemporaryLimit()
72+
.beginTemporaryLimit()
73+
.setName("N/A")
74+
.setValue(Double.MAX_VALUE)
75+
.setAcceptableDuration(0)
76+
.endTemporaryLimit()
77+
.add();
78+
79+
LimitViolation limitViolation = new LimitViolation(NGEN_NHV1, "NGEN_NHV1_name", LimitViolationType.CURRENT, "10'", 60, 200, 0.8, 180, TwoSides.ONE);
80+
81+
SubjectLimitViolationEntity subjectLimitViolationEntity = new SubjectLimitViolationEntity(NGEN_NHV1, "NGEN_NHV1_name");
82+
83+
PreContingencyLimitViolationEntity preContingencyLimitViolationEntity = PreContingencyLimitViolationEntity.toEntity(network, limitViolation, subjectLimitViolationEntity);
84+
85+
assertEquals("1'", preContingencyLimitViolationEntity.getNextLimitName());
86+
assertEquals(100, preContingencyLimitViolationEntity.getPatlLimit());
87+
assertEquals(60 * 10, preContingencyLimitViolationEntity.getAcceptableDuration());
88+
assertEquals(60, preContingencyLimitViolationEntity.getUpcomingAcceptableDuration());
89+
assertEquals(100 * limitViolation.getValue() / preContingencyLimitViolationEntity.getPatlLimit(), preContingencyLimitViolationEntity.getPatlLoading());
90+
}
91+
92+
private void testPreContingencyLimitViolationMapping(String limitName, int acceptableDuration, double limit, double limitReduction, double value, TwoSides side, String expectedNextLimitName, long expectedPatlLimit, Integer expectedAcceptableDuration, Integer expectedUpcomingAcceptableDuration) {
93+
Network network = EurostagTutorialExample1Factory.createWithFixedCurrentLimits();
94+
LimitViolation limitViolation = new LimitViolation(NHV1_NHV2_1, "NHV1_NHV2_1_name", LimitViolationType.CURRENT, limitName, acceptableDuration, limit, limitReduction, value, side);
95+
96+
SubjectLimitViolationEntity subjectLimitViolationEntity = new SubjectLimitViolationEntity(NHV1_NHV2_1, "NHV1_NHV2_1_name");
97+
98+
PreContingencyLimitViolationEntity preContingencyLimitViolationEntity = PreContingencyLimitViolationEntity.toEntity(network, limitViolation, subjectLimitViolationEntity);
99+
100+
assertEquals(expectedNextLimitName, preContingencyLimitViolationEntity.getNextLimitName());
101+
assertEquals(expectedPatlLimit, preContingencyLimitViolationEntity.getPatlLimit());
102+
assertEquals(expectedAcceptableDuration, preContingencyLimitViolationEntity.getAcceptableDuration());
103+
assertEquals(expectedUpcomingAcceptableDuration, preContingencyLimitViolationEntity.getUpcomingAcceptableDuration());
104+
assertEquals(100 * limitViolation.getValue() / preContingencyLimitViolationEntity.getPatlLimit(), preContingencyLimitViolationEntity.getPatlLoading());
105+
}
106+
}

0 commit comments

Comments
 (0)