JsonNcCracCreationParametersTest.java
/*
* Copyright (c) 2024, 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.nc.craccreator.parameters;
import com.powsybl.openrao.commons.OpenRaoException;
import com.powsybl.openrao.data.crac.api.parameters.CracCreationParameters;
import com.powsybl.openrao.data.crac.api.parameters.JsonCracCreationParameters;
import com.powsybl.openrao.data.crac.io.nc.parameters.Border;
import com.powsybl.openrao.data.crac.io.nc.parameters.NcCracCreationParameters;
import com.powsybl.openrao.data.crac.io.nc.parameters.JsonNcCracCreationParameters;
import org.junit.jupiter.api.Test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import java.util.Set;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* @author Mohamed Ben-rejeb {@literal <mohamed.ben-rejeb at rte-france.com>}
*/
class JsonNcCracCreationParametersTest {
private static final JsonNcCracCreationParameters JSON_NC_CRAC_CREATION_PARAMETERS = new JsonNcCracCreationParameters();
@Test
void basicData() {
assertEquals("NcCracCreatorParameters", JSON_NC_CRAC_CREATION_PARAMETERS.getExtensionName());
assertEquals(NcCracCreationParameters.class, JSON_NC_CRAC_CREATION_PARAMETERS.getExtensionClass());
assertEquals("crac-creation-parameters", JSON_NC_CRAC_CREATION_PARAMETERS.getCategoryName());
}
@Test
void deserializeDefaultSweParameters() {
CracCreationParameters importedParameters = JsonCracCreationParameters.read(getClass().getResourceAsStream("/parameters/nc-crac-parameters.json"));
NcCracCreationParameters ncCracCreationParameters = importedParameters.getExtension(NcCracCreationParameters.class);
assertNotNull(ncCracCreationParameters);
assertEquals("10Y1001C--00095L", ncCracCreationParameters.getCapacityCalculationRegionEicCode());
assertEquals(Set.of("REE"), ncCracCreationParameters.getTsosWhichDoNotUsePatlInFinalState());
assertEquals(Map.of("curative 1", 300, "curative 2", 600, "curative 3", 1200), ncCracCreationParameters.getCurativeInstants());
assertEquals(Set.of(new Border("ES-FR", "10YDOM--ES-FR--D", "RTE"), new Border("ES-PT", "10YDOM--ES-PT--T", "REN")), ncCracCreationParameters.getBorders());
assertEquals(Map.of("REE", Set.of("curative 1", "curative 2"), "REN", Set.of("curative 1")), ncCracCreationParameters.getRestrictedCurativeBatchesPerTso());
}
@Test
void deserializeParametersWithExtraCurativeInstantField() {
OpenRaoException importException;
try (InputStream inputStream = getClass().getResourceAsStream("/parameters/nc-crac-parameters-curative-instants-nok-1.json")) {
importException = assertThrows(OpenRaoException.class, () -> JsonCracCreationParameters.read(inputStream));
} catch (IOException e) {
throw new RuntimeException(e);
}
assertEquals("Unexpected field in curative-instants: unknown-curative-instant-field", importException.getMessage());
}
@Test
void deserializeParametersWithMissingCurativeInstantField() {
OpenRaoException importException;
try (InputStream inputStream = getClass().getResourceAsStream("/parameters/nc-crac-parameters-curative-instants-nok-2.json")) {
importException = assertThrows(OpenRaoException.class, () -> JsonCracCreationParameters.read(inputStream));
} catch (IOException e) {
throw new RuntimeException(e);
}
assertEquals("Incomplete data for curative instant; please provide both a name and an application-time", importException.getMessage());
}
@Test
void deserializeParametersWithUnknownField() {
OpenRaoException importException;
try (InputStream inputStream = getClass().getResourceAsStream("/parameters/nc-crac-parameters-with-unknown-field.json")) {
importException = assertThrows(OpenRaoException.class, () -> JsonCracCreationParameters.read(inputStream));
} catch (IOException e) {
throw new RuntimeException(e);
}
assertEquals("Unexpected field: unknown-field", importException.getMessage());
}
@Test
void serializeDefaultParameters() {
CracCreationParameters parameters = new CracCreationParameters();
NcCracCreationParameters csaParameters = new NcCracCreationParameters();
parameters.addExtension(NcCracCreationParameters.class, csaParameters);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
JsonCracCreationParameters.write(parameters, outputStream);
ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
CracCreationParameters importedParameters = JsonCracCreationParameters.read(inputStream);
assertEquals(1, importedParameters.getExtensions().size());
NcCracCreationParameters ncCracCreationParameters = importedParameters.getExtension(NcCracCreationParameters.class);
assertNotNull(ncCracCreationParameters);
assertEquals("10Y1001C--00095L", ncCracCreationParameters.getCapacityCalculationRegionEicCode());
assertTrue(ncCracCreationParameters.getTsosWhichDoNotUsePatlInFinalState().isEmpty());
assertEquals(Map.of("curative 1", 300, "curative 2", 600, "curative 3", 1200), ncCracCreationParameters.getCurativeInstants());
assertTrue(ncCracCreationParameters.getBorders().isEmpty());
assertEquals(Map.of("REE", Set.of("curative 1")), ncCracCreationParameters.getRestrictedCurativeBatchesPerTso());
}
}