Skip to content

Commit 1e0afe9

Browse files
Add tests for ElementUtils.operationalLimitsGroupToMapDataCurrentLimits
1 parent b32f39d commit 1e0afe9

File tree

2 files changed

+198
-0
lines changed

2 files changed

+198
-0
lines changed
Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
package org.gridsuite.network.map.utils;
2+
3+
import com.powsybl.iidm.network.OperationalLimitsGroup;
4+
import org.assertj.core.api.WithAssertions;
5+
import org.assertj.core.api.junit.jupiter.SoftAssertionsExtension;
6+
import org.gridsuite.network.map.dto.common.CurrentLimitsData;
7+
import org.gridsuite.network.map.dto.common.TemporaryLimitData;
8+
import org.gridsuite.network.map.dto.utils.ElementUtils;
9+
import org.junit.jupiter.api.AfterEach;
10+
import org.junit.jupiter.api.DisplayName;
11+
import org.junit.jupiter.api.Nested;
12+
import org.junit.jupiter.api.Test;
13+
import org.junit.jupiter.api.extension.ExtendWith;
14+
import org.mockito.Mockito;
15+
import org.mockito.junit.jupiter.MockitoExtension;
16+
17+
import java.util.ArrayList;
18+
import java.util.Collection;
19+
import java.util.List;
20+
21+
@ExtendWith({ SoftAssertionsExtension.class, MockitoExtension.class })
22+
class ElementUtilsTest implements WithAssertions {
23+
/** Tests for {@link ElementUtils#operationalLimitsGroupToMapDataCurrentLimits(OperationalLimitsGroup)} */
24+
@Nested
25+
@DisplayName("fn operationalLimitsGroupToMapDataCurrentLimits(…)")
26+
class OperationalLimitsGroupToMapDataCurrentLimits {
27+
private Collection<Object> mocks = new ArrayList<>();
28+
29+
@AfterEach
30+
void setDown() {
31+
if (!mocks.isEmpty()) {
32+
Mockito.verifyNoMoreInteractions(mocks.toArray(Object[]::new));
33+
mocks.clear();
34+
}
35+
}
36+
37+
/* All cases possibles:
38+
* null -> null
39+
* operationalLimitsGroup(currentLimits=empty, *=any) -> null
40+
* operationalLimitsGroup(currentLimits={PermanentLimit=NaN, TemporaryLimits=null, *=any}, *=any) -> null
41+
* operationalLimitsGroup(currentLimits={PermanentLimit=NaN, TemporaryLimits=[], *=any}, *=any) -> null
42+
* operationalLimitsGroup(currentLimits={permanentLimit=NaN, temporaryLimits=[any], *=any}, *=any) -> (id=*, applicability=null, permanentLimit=null, temporaryLimits=[any])
43+
* operationalLimitsGroup(currentLimits={PermanentLimit=_non_NaN_, TemporaryLimits=null, *=any}, *=any) -> (id=*, applicability=null, permanentLimit=*, temporaryLimits=null)
44+
* operationalLimitsGroup(currentLimits={PermanentLimit=_non_NaN_, TemporaryLimits=[], *=any}, *=any) -> (id=*, applicability=null, permanentLimit=*, temporaryLimits=null)
45+
* operationalLimitsGroup(currentLimits={PermanentLimit=_non_NaN_, TemporaryLimits=[any], *=any}, *=any) -> (id=*, applicability=null, permanentLimit=*, temporaryLimits=[any])
46+
*/
47+
48+
@Test
49+
void nullInput() {
50+
assertThat(ElementUtils.operationalLimitsGroupToMapDataCurrentLimits(null)).isNull();
51+
}
52+
53+
@Test
54+
void emptyCurrentLimits() {
55+
final var mock = MockUtils.mockOperationalLimitsGroup("id", null);
56+
mocks.add(mock);
57+
assertThat(ElementUtils.operationalLimitsGroupToMapDataCurrentLimits(mock)).isNull();
58+
Mockito.verify(mock).getCurrentLimits();
59+
}
60+
61+
@Test
62+
void nanPermLimitAndNullTempLimit() {
63+
final var clMock = MockUtils.mockCurrentLimits(Double.NaN, null);
64+
mocks.add(clMock);
65+
final var olgMock = MockUtils.mockOperationalLimitsGroup("id", clMock);
66+
mocks.add(olgMock);
67+
assertThat(ElementUtils.operationalLimitsGroupToMapDataCurrentLimits(olgMock)).isNull();
68+
Mockito.verify(olgMock, Mockito.times(2)).getCurrentLimits();
69+
Mockito.verify(olgMock).getId();
70+
Mockito.verify(clMock).getPermanentLimit();
71+
Mockito.verify(clMock).getTemporaryLimits();
72+
}
73+
74+
@Test
75+
void nanPermLimitAndEmptyTempLimit() {
76+
final var clMock = MockUtils.mockCurrentLimits(Double.NaN, List.of());
77+
mocks.add(clMock);
78+
final var olgMock = MockUtils.mockOperationalLimitsGroup("id", clMock);
79+
mocks.add(olgMock);
80+
assertThat(ElementUtils.operationalLimitsGroupToMapDataCurrentLimits(olgMock)).isNull();
81+
Mockito.verify(olgMock, Mockito.times(2)).getCurrentLimits();
82+
Mockito.verify(olgMock).getId();
83+
Mockito.verify(clMock).getPermanentLimit();
84+
Mockito.verify(clMock).getTemporaryLimits();
85+
}
86+
87+
@Test
88+
void nanPermLimitAndNonEmptyTempLimit() {
89+
final var tlMock = MockUtils.mockTemporaryLimits(123, "testLimit", 456.789);
90+
mocks.add(tlMock);
91+
final var clMock = MockUtils.mockCurrentLimits(Double.NaN, List.of(tlMock));
92+
mocks.add(clMock);
93+
final var olgMock = MockUtils.mockOperationalLimitsGroup("my id", clMock);
94+
mocks.add(olgMock);
95+
assertThat(ElementUtils.operationalLimitsGroupToMapDataCurrentLimits(olgMock)).isEqualTo(CurrentLimitsData.builder()
96+
.id("my id").applicability(null).permanentLimit(null).temporaryLimits(List.of(TemporaryLimitData.builder()
97+
.acceptableDuration(123).name("testLimit").value(456.789).build())).build());
98+
Mockito.verify(olgMock, Mockito.times(2)).getCurrentLimits();
99+
Mockito.verify(olgMock).getId();
100+
Mockito.verify(clMock).getPermanentLimit();
101+
Mockito.verify(clMock, Mockito.times(2)).getTemporaryLimits();
102+
Mockito.verify(tlMock, Mockito.times(2)).getAcceptableDuration();
103+
Mockito.verify(tlMock).getName();
104+
Mockito.verify(tlMock, Mockito.times(2)).getValue();
105+
}
106+
107+
@Test
108+
void nonNanPermLimitAndNullTempLimit() {
109+
final var clMock = MockUtils.mockCurrentLimits(0.123, null);
110+
mocks.add(clMock);
111+
final var olgMock = MockUtils.mockOperationalLimitsGroup("my id", clMock);
112+
mocks.add(olgMock);
113+
assertThat(ElementUtils.operationalLimitsGroupToMapDataCurrentLimits(olgMock)).isEqualTo(CurrentLimitsData.builder()
114+
.id("my id").applicability(null).permanentLimit(0.123).temporaryLimits(null).build());
115+
Mockito.verify(olgMock, Mockito.times(2)).getCurrentLimits();
116+
Mockito.verify(olgMock).getId();
117+
Mockito.verify(clMock, Mockito.times(2)).getPermanentLimit();
118+
Mockito.verify(clMock).getTemporaryLimits();
119+
}
120+
121+
@Test
122+
void nonNanPermLimitAndEmptyTempLimit() {
123+
final var clMock = MockUtils.mockCurrentLimits(0.123, List.of());
124+
mocks.add(clMock);
125+
final var olgMock = MockUtils.mockOperationalLimitsGroup("my id", clMock);
126+
mocks.add(olgMock);
127+
assertThat(ElementUtils.operationalLimitsGroupToMapDataCurrentLimits(olgMock)).isEqualTo(CurrentLimitsData.builder()
128+
.id("my id").applicability(null).permanentLimit(0.123).temporaryLimits(null).build());
129+
Mockito.verify(olgMock, Mockito.times(2)).getCurrentLimits();
130+
Mockito.verify(olgMock).getId();
131+
Mockito.verify(clMock, Mockito.times(2)).getPermanentLimit();
132+
Mockito.verify(clMock).getTemporaryLimits();
133+
}
134+
135+
@Test
136+
void nonNanPermLimitAndNonEmptyTempLimit() {
137+
final var tlMock = MockUtils.mockTemporaryLimits(123, "testLimit", 456.789);
138+
mocks.add(tlMock);
139+
final var clMock = MockUtils.mockCurrentLimits(0.0, List.of(tlMock));
140+
mocks.add(clMock);
141+
final var olgMock = MockUtils.mockOperationalLimitsGroup("my id", clMock);
142+
mocks.add(olgMock);
143+
assertThat(ElementUtils.operationalLimitsGroupToMapDataCurrentLimits(olgMock)).isEqualTo(CurrentLimitsData.builder()
144+
.id("my id").applicability(null).permanentLimit(0.0).temporaryLimits(List.of(TemporaryLimitData.builder()
145+
.acceptableDuration(123).name("testLimit").value(456.789).build())).build());
146+
Mockito.verify(olgMock, Mockito.times(2)).getCurrentLimits();
147+
Mockito.verify(olgMock).getId();
148+
Mockito.verify(clMock, Mockito.times(2)).getPermanentLimit();
149+
Mockito.verify(clMock, Mockito.times(2)).getTemporaryLimits();
150+
Mockito.verify(tlMock, Mockito.times(2)).getAcceptableDuration();
151+
Mockito.verify(tlMock).getName();
152+
Mockito.verify(tlMock, Mockito.times(2)).getValue();
153+
}
154+
}
155+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package org.gridsuite.network.map.utils;
2+
3+
import com.powsybl.iidm.network.CurrentLimits;
4+
import com.powsybl.iidm.network.LoadingLimits.TemporaryLimit;
5+
import com.powsybl.iidm.network.OperationalLimitsGroup;
6+
import org.mockito.Mockito;
7+
import org.mockito.quality.Strictness;
8+
9+
import java.util.List;
10+
import java.util.Optional;
11+
12+
public final class MockUtils {
13+
private MockUtils() {
14+
throw new InstantiationError("Utility Class cannot be instantiated.");
15+
}
16+
17+
public static TemporaryLimit mockTemporaryLimits(final int acceptableDuration, final String name, final double value) {
18+
TemporaryLimit mock = Mockito.mock(TemporaryLimit.class);
19+
Mockito.when(mock.getAcceptableDuration()).thenReturn(acceptableDuration);
20+
Mockito.when(mock.getName()).thenReturn(name);
21+
Mockito.when(mock.getValue()).thenReturn(value);
22+
return mock;
23+
}
24+
25+
public static CurrentLimits mockCurrentLimits(double permanentLimit, List<TemporaryLimit> temporaryLimits) {
26+
CurrentLimits mock = Mockito.mock(CurrentLimits.class);
27+
//Mockito.when(mock.getLimitType()).thenCallRealMethod();
28+
Mockito.when(mock.getPermanentLimit()).thenReturn(permanentLimit);
29+
Mockito.when(mock.getTemporaryLimits()).thenReturn(temporaryLimits);
30+
return mock;
31+
}
32+
33+
public static OperationalLimitsGroup mockOperationalLimitsGroup(final String id, double permanentLimit, List<TemporaryLimit> temporaryLimits) {
34+
return mockOperationalLimitsGroup(id, mockCurrentLimits(permanentLimit, temporaryLimits));
35+
}
36+
37+
public static OperationalLimitsGroup mockOperationalLimitsGroup(final String id, final CurrentLimits cl) {
38+
OperationalLimitsGroup mock = Mockito.mock(OperationalLimitsGroup.class, Mockito.withSettings().strictness(Strictness.LENIENT));
39+
Mockito.when(mock.getId()).thenReturn(id);
40+
Mockito.when(mock.getCurrentLimits()).thenReturn(Optional.ofNullable(cl));
41+
return mock;
42+
}
43+
}

0 commit comments

Comments
 (0)