JsonDynamicSecurityAnalysisParametersTest.java

/**
 * Copyright (c) 2023, 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/.
 * SPDX-License-Identifier: MPL-2.0
 */
package com.powsybl.security.dynamic.json;

import com.powsybl.commons.test.AbstractSerDeTest;
import com.powsybl.commons.test.ComparisonUtils;
import com.powsybl.security.dynamic.DynamicSecurityAnalysisParameters;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.io.InputStream;

import static org.junit.jupiter.api.Assertions.*;

/**
 * @author Laurent Issertial {@literal <laurent.issertial at rte-france.com>}
 */
class JsonDynamicSecurityAnalysisParametersTest extends AbstractSerDeTest {

    @Test
    void roundTrip() throws IOException {
        DynamicSecurityAnalysisParameters parameters = new DynamicSecurityAnalysisParameters();
        parameters.getDynamicSimulationParameters().setStopTime(20.5);
        parameters.getDynamicContingenciesParameters().setContingenciesStartTime(5.5);
        roundTripTest(parameters, JsonDynamicSecurityAnalysisParameters::write, JsonDynamicSecurityAnalysisParameters::read, "/DynamicSecurityAnalysisParametersV1.json");
    }

    @Test
    void writeExtension() throws IOException {
        DynamicSecurityAnalysisParameters parameters = new DynamicSecurityAnalysisParameters();
        parameters.addExtension(DynamicSecurityDummyExtension.class, new DynamicSecurityDummyExtension());
        writeTest(parameters, JsonDynamicSecurityAnalysisParameters::write, ComparisonUtils::assertTxtEquals, "/DynamicSecurityAnalysisParametersWithExtension.json");
    }

    @Test
    void updateDynamicSimulationParameters() {
        DynamicSecurityAnalysisParameters parameters = new DynamicSecurityAnalysisParameters();
        parameters.getDynamicSimulationParameters().setStopTime(8);
        JsonDynamicSecurityAnalysisParameters.update(parameters, getClass().getResourceAsStream("/DynamicSecurityAnalysisParametersIncomplete.json"));
        assertEquals(8, parameters.getDynamicSimulationParameters().getStopTime());
    }

    @Test
    void readExtension() {
        DynamicSecurityAnalysisParameters parameters = JsonDynamicSecurityAnalysisParameters.read(getClass().getResourceAsStream("/DynamicSecurityAnalysisParametersWithExtension.json"));
        assertEquals(1, parameters.getExtensions().size());
        assertNotNull(parameters.getExtension(DynamicSecurityDummyExtension.class));
        assertNotNull(parameters.getExtensionByName("dummy-extension"));
    }

    @Test
    void readError() {
        InputStream inputStream = getClass().getResourceAsStream("/DynamicSecurityAnalysisParametersInvalid.json");
        assertThrows(IllegalStateException.class, () -> JsonDynamicSecurityAnalysisParameters.read(inputStream), "Unexpected field: unexpected");
    }

    @Test
    void updateExtensions() {
        DynamicSecurityAnalysisParameters parameters = new DynamicSecurityAnalysisParameters();
        DynamicSecurityDummyExtension extension = new DynamicSecurityDummyExtension();
        extension.setParameterBoolean(false);
        extension.setParameterString("test");
        extension.setParameterDouble(2.8);
        DynamicSecurityDummyExtension oldExtension = new DynamicSecurityDummyExtension(extension);
        parameters.addExtension(DynamicSecurityDummyExtension.class, extension);
        JsonDynamicSecurityAnalysisParameters.update(parameters, getClass().getResourceAsStream("/DynamicSecurityAnalysisParametersExtensionUpdate.json"));
        DynamicSecurityDummyExtension updatedExtension = parameters.getExtension(DynamicSecurityDummyExtension.class);
        Assertions.assertEquals(oldExtension.isParameterBoolean(), updatedExtension.isParameterBoolean());
        Assertions.assertEquals(oldExtension.getParameterDouble(), updatedExtension.getParameterDouble(), 0.01);
        Assertions.assertNotEquals(oldExtension.getParameterString(), updatedExtension.getParameterString());
    }
}