Skip to content

Commit 6a4121f

Browse files
committed
facto tests
1 parent 51e310a commit 6a4121f

File tree

3 files changed

+135
-170
lines changed

3 files changed

+135
-170
lines changed
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
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.AbstractLimitViolationEntity;
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 Caroline Jeandat <caroline.jeandat at rte-france.com>
26+
*/
27+
@SpringBootTest
28+
abstract class AbstractLimitViolationTest {
29+
30+
@Test
31+
void testAbstractLimitViolationEntityNewFields() {
32+
testAbstractLimitViolationMapping("10'", 10 * 60, 1200, 1, 1250, TwoSides.TWO, "1'", 1100, 10 * 60, null);
33+
}
34+
35+
@Test
36+
void testAbstractLimitViolationEntityNewFieldsWithPermanentLimitReached() {
37+
testAbstractLimitViolationMapping(LimitViolationUtils.PERMANENT_LIMIT_NAME, Integer.MAX_VALUE, 1100, 1, 1150,
38+
TwoSides.TWO, "10'", 1100, Integer.MAX_VALUE, null);
39+
}
40+
41+
@Test
42+
void testAbstractLimitViolationEntityNewFieldsWithPermanentLimitReachedAndNoTemporaryLimit() {
43+
testAbstractLimitViolationMapping(LimitViolationUtils.PERMANENT_LIMIT_NAME, Integer.MAX_VALUE, 500, 1, 1000,
44+
TwoSides.ONE, null, 500, Integer.MAX_VALUE, null);
45+
}
46+
47+
@Test
48+
void testAbstractLimitViolationEntityNewFieldsWithLastLimitReached() {
49+
testAbstractLimitViolationMapping("N/A", 0, 1100, 1, 3000, TwoSides.TWO, null, 1100, 0, null);
50+
}
51+
52+
@Test
53+
void testAbstractLimitViolationEntityNewFieldsWithLimitReductionEffective() {
54+
// for this test to be relevant, "value" needs to be less that "limit"
55+
testAbstractLimitViolationMapping("10'", 60, 1200, 0.8, 1150, TwoSides.TWO, "1'", 1100, 10 * 60, 60);
56+
}
57+
58+
@Test
59+
void test2wtContingencyLimitViolationEntityNewFieldsWithLimitReductionEffective() {
60+
// for this test to be relevant, "value" needs to be less that "limit"
61+
Network network = EurostagTutorialExample1Factory.createWithFixedCurrentLimits();
62+
// create limit set for two windings transformer
63+
network.getTwoWindingsTransformer(NGEN_NHV1).getOrCreateSelectedOperationalLimitsGroup1().newCurrentLimits()
64+
.setPermanentLimit(100)
65+
.beginTemporaryLimit()
66+
.setName("10'")
67+
.setValue(200)
68+
.setAcceptableDuration(60 * 10)
69+
.endTemporaryLimit()
70+
.beginTemporaryLimit()
71+
.setName("1'")
72+
.setValue(300)
73+
.setAcceptableDuration(60)
74+
.endTemporaryLimit()
75+
.beginTemporaryLimit()
76+
.setName("N/A")
77+
.setValue(Double.MAX_VALUE)
78+
.setAcceptableDuration(0)
79+
.endTemporaryLimit()
80+
.add();
81+
82+
LimitViolation limitViolation = new LimitViolation(NGEN_NHV1, "NGEN_NHV1_name", LimitViolationType.CURRENT,
83+
"10'", 60, 200, 0.8, 180, TwoSides.ONE);
84+
85+
SubjectLimitViolationEntity subjectLimitViolationEntity = new SubjectLimitViolationEntity(NGEN_NHV1,
86+
"NGEN_NHV1_name");
87+
88+
AbstractLimitViolationEntity limitViolationEntity = createLimitViolationEntity(network, limitViolation,
89+
subjectLimitViolationEntity);
90+
91+
assertEquals("1'", limitViolationEntity.getNextLimitName());
92+
assertEquals(100, limitViolationEntity.getPatlLimit());
93+
assertEquals(60 * 10, limitViolationEntity.getAcceptableDuration());
94+
assertEquals(60, limitViolationEntity.getUpcomingAcceptableDuration());
95+
assertEquals(100 * limitViolation.getValue() / limitViolationEntity.getPatlLimit(),
96+
limitViolationEntity.getPatlLoading());
97+
}
98+
99+
private void testAbstractLimitViolationMapping(String limitName, int acceptableDuration, double limit,
100+
double limitReduction, double value, TwoSides side, String expectedNextLimitName, long expectedPatlLimit,
101+
Integer expectedAcceptableDuration, Integer expectedUpcomingAcceptableDuration) {
102+
Network network = EurostagTutorialExample1Factory.createWithFixedCurrentLimits();
103+
LimitViolation limitViolation = new LimitViolation(NHV1_NHV2_1, "NHV1_NHV2_1_name", LimitViolationType.CURRENT,
104+
limitName, acceptableDuration, limit, limitReduction, value, side);
105+
106+
SubjectLimitViolationEntity subjectLimitViolationEntity = new SubjectLimitViolationEntity(NHV1_NHV2_1,
107+
"NHV1_NHV2_1_name");
108+
109+
AbstractLimitViolationEntity limitViolationEntity = createLimitViolationEntity(network, limitViolation,
110+
subjectLimitViolationEntity);
111+
112+
assertEquals(expectedNextLimitName, limitViolationEntity.getNextLimitName());
113+
assertEquals(expectedPatlLimit, limitViolationEntity.getPatlLimit());
114+
assertEquals(expectedAcceptableDuration, limitViolationEntity.getAcceptableDuration());
115+
assertEquals(expectedUpcomingAcceptableDuration, limitViolationEntity.getUpcomingAcceptableDuration());
116+
assertEquals(100 * limitViolation.getValue() / limitViolationEntity.getPatlLimit(),
117+
limitViolationEntity.getPatlLoading());
118+
}
119+
120+
protected abstract AbstractLimitViolationEntity createLimitViolationEntity(Network network,
121+
LimitViolation limitViolation, SubjectLimitViolationEntity subjectLimitViolationEntity);
122+
}

src/test/java/org/gridsuite/securityanalysis/server/ContingencyLimitViolationTest.java

Lines changed: 4 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -7,100 +7,20 @@
77
package org.gridsuite.securityanalysis.server;
88

99
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;
1310
import com.powsybl.security.LimitViolation;
14-
import com.powsybl.security.LimitViolationType;
1511
import org.gridsuite.securityanalysis.server.entities.ContingencyLimitViolationEntity;
1612
import org.gridsuite.securityanalysis.server.entities.SubjectLimitViolationEntity;
17-
import org.junit.jupiter.api.Test;
1813
import org.springframework.boot.test.context.SpringBootTest;
1914

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-
2415
/**
2516
* @author Kevin Le Saulnier <kevin.lesaulnier at rte-france.com>
2617
*/
2718
@SpringBootTest
28-
class ContingencyLimitViolationTest {
29-
@Test
30-
void testContingencyLimitViolationEntityNewFields() {
31-
testContingencyLimitViolationMapping("10'", 10 * 60, 1200, 1, 1250, TwoSides.TWO, "1'", 1100, 10 * 60, null);
32-
}
33-
34-
@Test
35-
void testContingencyLimitViolationEntityNewFieldsWithPermanentLimitReached() {
36-
testContingencyLimitViolationMapping(LimitViolationUtils.PERMANENT_LIMIT_NAME, Integer.MAX_VALUE, 1100, 1, 1150, TwoSides.TWO, "10'", 1100, Integer.MAX_VALUE, null);
37-
}
38-
39-
@Test
40-
void testContingencyLimitViolationEntityNewFieldsWithPermanentLimitReachedAndNoTemporaryLimit() {
41-
testContingencyLimitViolationMapping(LimitViolationUtils.PERMANENT_LIMIT_NAME, Integer.MAX_VALUE, 500, 1, 1000, TwoSides.ONE, null, 500, Integer.MAX_VALUE, null);
42-
}
43-
44-
@Test
45-
void testContingencyLimitViolationEntityNewFieldsWithLastLimitReached() {
46-
testContingencyLimitViolationMapping("N/A", 0, 1100, 1, 3000, TwoSides.TWO, null, 1100, 0, null);
47-
}
48-
49-
@Test
50-
void testContingencyLimitViolationEntityNewFieldsWithLimitReductionEffective() {
51-
// for this test to be relevant, "value" needs to be less that "limit"
52-
testContingencyLimitViolationMapping("10'", 60, 1200, 0.8, 1150, TwoSides.TWO, "1'", 1100, 10 * 60, 60);
53-
}
54-
55-
@Test
56-
void test2wtContingencyLimitViolationEntityNewFieldsWithLimitReductionEffective() {
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-
ContingencyLimitViolationEntity contingencyLimitViolationEntity = ContingencyLimitViolationEntity.toEntity(network, limitViolation, subjectLimitViolationEntity);
84-
85-
assertEquals("1'", contingencyLimitViolationEntity.getNextLimitName());
86-
assertEquals(100, contingencyLimitViolationEntity.getPatlLimit());
87-
assertEquals(60 * 10, contingencyLimitViolationEntity.getAcceptableDuration());
88-
assertEquals(60, contingencyLimitViolationEntity.getUpcomingAcceptableDuration());
89-
assertEquals(100 * limitViolation.getValue() / contingencyLimitViolationEntity.getPatlLimit(), contingencyLimitViolationEntity.getPatlLoading());
90-
}
91-
92-
private void testContingencyLimitViolationMapping(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");
19+
class ContingencyLimitViolationTest extends AbstractLimitViolationTest {
9720

21+
@Override
22+
protected ContingencyLimitViolationEntity createLimitViolationEntity(Network network, LimitViolation limitViolation, SubjectLimitViolationEntity subjectLimitViolationEntity) {
9823
ContingencyLimitViolationEntity contingencyLimitViolationEntity = ContingencyLimitViolationEntity.toEntity(network, limitViolation, subjectLimitViolationEntity);
99-
100-
assertEquals(expectedNextLimitName, contingencyLimitViolationEntity.getNextLimitName());
101-
assertEquals(expectedPatlLimit, contingencyLimitViolationEntity.getPatlLimit());
102-
assertEquals(expectedAcceptableDuration, contingencyLimitViolationEntity.getAcceptableDuration());
103-
assertEquals(expectedUpcomingAcceptableDuration, contingencyLimitViolationEntity.getUpcomingAcceptableDuration());
104-
assertEquals(100 * limitViolation.getValue() / contingencyLimitViolationEntity.getPatlLimit(), contingencyLimitViolationEntity.getPatlLoading());
24+
return contingencyLimitViolationEntity;
10525
}
10626
}

src/test/java/org/gridsuite/securityanalysis/server/PreContingencyLimitViolationTest.java

Lines changed: 9 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -7,97 +7,20 @@
77
package org.gridsuite.securityanalysis.server;
88

99
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;
1310
import com.powsybl.security.LimitViolation;
14-
import com.powsybl.security.LimitViolationType;
11+
1512
import org.gridsuite.securityanalysis.server.entities.PreContingencyLimitViolationEntity;
1613
import org.gridsuite.securityanalysis.server.entities.SubjectLimitViolationEntity;
17-
import org.junit.jupiter.api.Test;
1814
import org.springframework.boot.test.context.SpringBootTest;
1915

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-
16+
/**
17+
* @author Caroline Jeandat <caroline.jeandat at rte-france.com>
18+
*/
2419
@SpringBootTest
25-
class PreContingencyLimitViolationTest {
26-
@Test
27-
void testPreContingencyLimitViolationEntityNewFields() {
28-
testPreContingencyLimitViolationMapping("10'", 10 * 60, 1200, 1, 1250, TwoSides.TWO, "1'", 1100, 10 * 60, null);
29-
}
30-
31-
@Test
32-
void testPreContingencyLimitViolationEntityNewFieldsWithPermanentLimitReached() {
33-
testPreContingencyLimitViolationMapping(LimitViolationUtils.PERMANENT_LIMIT_NAME, Integer.MAX_VALUE, 1100, 1, 1150, TwoSides.TWO, "10'", 1100, Integer.MAX_VALUE, null);
34-
}
35-
36-
@Test
37-
void testPreContingencyLimitViolationEntityNewFieldsWithPermanentLimitReachedAndNoTemporaryLimit() {
38-
testPreContingencyLimitViolationMapping(LimitViolationUtils.PERMANENT_LIMIT_NAME, Integer.MAX_VALUE, 500, 1, 1000, TwoSides.ONE, null, 500, Integer.MAX_VALUE, null);
39-
}
40-
41-
@Test
42-
void testPreContingencyLimitViolationEntityNewFieldsWithLastLimitReached() {
43-
testPreContingencyLimitViolationMapping("N/A", 0, 1100, 1, 3000, TwoSides.TWO, null, 1100, 0, null);
44-
}
45-
46-
@Test
47-
void testPreContingencyLimitViolationEntityNewFieldsWithLimitReductionEffective() {
48-
// for this test to be relevant, "value" needs to be less that "limit"
49-
testPreContingencyLimitViolationMapping("10'", 60, 1200, 0.8, 1150, TwoSides.TWO, "1'", 1100, 10 * 60, 60);
50-
}
51-
52-
@Test
53-
void test2wtPreContingencyLimitViolationEntityNewFieldsWithLimitReductionEffective() {
54-
// for this test to be relevant, "value" needs to be less that "limit"
55-
Network network = EurostagTutorialExample1Factory.createWithFixedCurrentLimits();
56-
// create limit set for two windings transformer
57-
network.getTwoWindingsTransformer(NGEN_NHV1).getOrCreateSelectedOperationalLimitsGroup1().newCurrentLimits()
58-
.setPermanentLimit(100)
59-
.beginTemporaryLimit()
60-
.setName("10'")
61-
.setValue(200)
62-
.setAcceptableDuration(60 * 10)
63-
.endTemporaryLimit()
64-
.beginTemporaryLimit()
65-
.setName("1'")
66-
.setValue(300)
67-
.setAcceptableDuration(60)
68-
.endTemporaryLimit()
69-
.beginTemporaryLimit()
70-
.setName("N/A")
71-
.setValue(Double.MAX_VALUE)
72-
.setAcceptableDuration(0)
73-
.endTemporaryLimit()
74-
.add();
75-
76-
LimitViolation limitViolation = new LimitViolation(NGEN_NHV1, "NGEN_NHV1_name", LimitViolationType.CURRENT, "10'", 60, 200, 0.8, 180, TwoSides.ONE);
77-
78-
SubjectLimitViolationEntity subjectLimitViolationEntity = new SubjectLimitViolationEntity(NGEN_NHV1, "NGEN_NHV1_name");
79-
80-
PreContingencyLimitViolationEntity preContingencyLimitViolationEntity = PreContingencyLimitViolationEntity.toEntity(network, limitViolation, subjectLimitViolationEntity);
81-
82-
assertEquals("1'", preContingencyLimitViolationEntity.getNextLimitName());
83-
assertEquals(100, preContingencyLimitViolationEntity.getPatlLimit());
84-
assertEquals(60 * 10, preContingencyLimitViolationEntity.getAcceptableDuration());
85-
assertEquals(60, preContingencyLimitViolationEntity.getUpcomingAcceptableDuration());
86-
assertEquals(100 * limitViolation.getValue() / preContingencyLimitViolationEntity.getPatlLimit(), preContingencyLimitViolationEntity.getPatlLoading());
87-
}
88-
89-
private void testPreContingencyLimitViolationMapping(String limitName, int acceptableDuration, double limit, double limitReduction, double value, TwoSides side, String expectedNextLimitName, long expectedPatlLimit, Integer expectedAcceptableDuration, Integer expectedUpcomingAcceptableDuration) {
90-
Network network = EurostagTutorialExample1Factory.createWithFixedCurrentLimits();
91-
LimitViolation limitViolation = new LimitViolation(NHV1_NHV2_1, "NHV1_NHV2_1_name", LimitViolationType.CURRENT, limitName, acceptableDuration, limit, limitReduction, value, side);
92-
93-
SubjectLimitViolationEntity subjectLimitViolationEntity = new SubjectLimitViolationEntity(NHV1_NHV2_1, "NHV1_NHV2_1_name");
94-
95-
PreContingencyLimitViolationEntity preContingencyLimitViolationEntity = PreContingencyLimitViolationEntity.toEntity(network, limitViolation, subjectLimitViolationEntity);
96-
97-
assertEquals(expectedNextLimitName, preContingencyLimitViolationEntity.getNextLimitName());
98-
assertEquals(expectedPatlLimit, preContingencyLimitViolationEntity.getPatlLimit());
99-
assertEquals(expectedAcceptableDuration, preContingencyLimitViolationEntity.getAcceptableDuration());
100-
assertEquals(expectedUpcomingAcceptableDuration, preContingencyLimitViolationEntity.getUpcomingAcceptableDuration());
101-
assertEquals(100 * limitViolation.getValue() / preContingencyLimitViolationEntity.getPatlLimit(), preContingencyLimitViolationEntity.getPatlLoading());
20+
class PreContingencyLimitViolationTest extends AbstractLimitViolationTest {
21+
@Override
22+
protected PreContingencyLimitViolationEntity createLimitViolationEntity(Network network, LimitViolation limitViolation, SubjectLimitViolationEntity subjectLimitViolationEntity) {
23+
PreContingencyLimitViolationEntity contingencyLimitViolationEntity = PreContingencyLimitViolationEntity.toEntity(network, limitViolation, subjectLimitViolationEntity);
24+
return contingencyLimitViolationEntity;
10225
}
10326
}

0 commit comments

Comments
 (0)