CracCreationReportTest.java
/*
* Copyright (c) 2021, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package com.powsybl.openrao.data.crac.io.commons.api;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.read.ListAppender;
import com.powsybl.contingency.Contingency;
import com.powsybl.openrao.commons.logs.RaoBusinessLogs;
import com.powsybl.openrao.data.crac.api.Crac;
import com.powsybl.openrao.data.crac.api.CracCreationReport;
import com.powsybl.openrao.data.crac.api.cnec.AngleCnec;
import com.powsybl.openrao.data.crac.api.cnec.FlowCnec;
import com.powsybl.openrao.data.crac.api.cnec.VoltageCnec;
import com.powsybl.openrao.data.crac.api.networkaction.NetworkAction;
import com.powsybl.openrao.data.crac.api.rangeaction.PstRangeAction;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.Set;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotSame;
/**
* @author Peter Mitri {@literal <peter.mitri at rte-france.com>}
*/
class CracCreationReportTest {
private CracCreationReport cracCreationReport;
@BeforeEach
public void setUp() {
cracCreationReport = new CracCreationReport();
}
@Test
void testError() {
cracCreationReport.error("message");
assertEquals(1, cracCreationReport.getReport().size());
assertEquals("[ERROR] message", cracCreationReport.getReport().get(0));
}
@Test
void testRemoved() {
cracCreationReport.removed("message");
assertEquals(1, cracCreationReport.getReport().size());
assertEquals("[REMOVED] message", cracCreationReport.getReport().get(0));
}
@Test
void testAdded() {
cracCreationReport.added("message");
assertEquals(1, cracCreationReport.getReport().size());
assertEquals("[ADDED] message", cracCreationReport.getReport().get(0));
}
@Test
void testAltered() {
cracCreationReport.altered("message");
assertEquals(1, cracCreationReport.getReport().size());
assertEquals("[ALTERED] message", cracCreationReport.getReport().get(0));
}
@Test
void testWarn() {
cracCreationReport.warn("message");
assertEquals(1, cracCreationReport.getReport().size());
assertEquals("[WARN] message", cracCreationReport.getReport().get(0));
}
@Test
void testInfo() {
cracCreationReport.info("message");
assertEquals(1, cracCreationReport.getReport().size());
assertEquals("[INFO] message", cracCreationReport.getReport().get(0));
}
@Test
void testTextReport() {
cracCreationReport.error("message1");
cracCreationReport.info("message2");
cracCreationReport.altered("message3");
cracCreationReport.warn("message4");
cracCreationReport.info("message5");
cracCreationReport.removed("message6");
assertEquals(6, cracCreationReport.getReport().size());
assertEquals("[ERROR] message1", cracCreationReport.getReport().get(0));
assertEquals("[INFO] message2", cracCreationReport.getReport().get(1));
assertEquals("[ALTERED] message3", cracCreationReport.getReport().get(2));
assertEquals("[WARN] message4", cracCreationReport.getReport().get(3));
assertEquals("[INFO] message5", cracCreationReport.getReport().get(4));
assertEquals("[REMOVED] message6", cracCreationReport.getReport().get(5));
assertEquals(
String.join("\n", "[ERROR] message1", "[INFO] message2",
"[ALTERED] message3", "[WARN] message4", "[INFO] message5", "[REMOVED] message6"),
cracCreationReport.toString());
}
@Test
void testCopyConstructor() {
cracCreationReport.error("message1");
cracCreationReport.info("message2");
CracCreationReport cracCreationReport2 = new CracCreationReport(cracCreationReport);
assertNotSame(cracCreationReport.getReport(), cracCreationReport2.getReport());
assertEquals(cracCreationReport.getReport(), cracCreationReport2.getReport());
}
private ListAppender<ILoggingEvent> getLogs(Class clazz) {
Logger logger = (Logger) LoggerFactory.getLogger(clazz);
ListAppender<ILoggingEvent> listAppender = new ListAppender<>();
listAppender.start();
logger.addAppender(listAppender);
return listAppender;
}
@Test
void testPrintReport() {
cracCreationReport.warn("message1");
cracCreationReport.error("message2");
ListAppender<ILoggingEvent> listAppender = getLogs(RaoBusinessLogs.class);
cracCreationReport.printCreationReport();
List<ILoggingEvent> logsList = listAppender.list;
assertEquals(2, logsList.size());
assertEquals("[INFO] [WARN] message1", logsList.get(0).toString());
assertEquals("[INFO] [ERROR] message2", logsList.get(1).toString());
}
@Test
void testAddSuccessfulImportMessage() {
Crac crac = Mockito.mock(Crac.class);
Contingency contingency1 = Mockito.mock(Contingency.class);
Contingency contingency2 = Mockito.mock(Contingency.class);
Contingency contingency3 = Mockito.mock(Contingency.class);
FlowCnec flowCnec1 = Mockito.mock(FlowCnec.class);
FlowCnec flowCnec2 = Mockito.mock(FlowCnec.class);
FlowCnec flowCnec3 = Mockito.mock(FlowCnec.class);
FlowCnec flowCnec4 = Mockito.mock(FlowCnec.class);
AngleCnec angleCnec1 = Mockito.mock(AngleCnec.class);
AngleCnec angleCnec2 = Mockito.mock(AngleCnec.class);
VoltageCnec voltageCnec = Mockito.mock(VoltageCnec.class);
PstRangeAction pstRangeAction = Mockito.mock(PstRangeAction.class);
NetworkAction networkAction1 = Mockito.mock(NetworkAction.class);
NetworkAction networkAction2 = Mockito.mock(NetworkAction.class);
Mockito.when(crac.getContingencies()).thenReturn(Set.of(contingency1, contingency2, contingency3));
Mockito.when(crac.getFlowCnecs()).thenReturn(Set.of(flowCnec1, flowCnec2, flowCnec3, flowCnec4));
Mockito.when(crac.getAngleCnecs()).thenReturn(Set.of(angleCnec1, angleCnec2));
Mockito.when(crac.getVoltageCnecs()).thenReturn(Set.of(voltageCnec));
Mockito.when(crac.getRemedialActions()).thenReturn(Set.of(pstRangeAction, networkAction1, networkAction2));
Mockito.when(crac.getRangeActions()).thenReturn(Set.of(pstRangeAction));
Mockito.when(crac.getNetworkActions()).thenReturn(Set.of(networkAction1, networkAction2));
cracCreationReport.addSuccessfulImportMessage(crac);
assertEquals(1, cracCreationReport.getReport().size());
assertEquals("CRAC was successfully imported with 3 contingencies, 4 FlowCNECs, 2 AngleCNECs, 1 VoltageCNECs and 3 remedial actions (1 range actions and 2 network actions).", cracCreationReport.getReport().get(0));
}
}