FunctionalLogsTest.java

/**
 * Copyright (c) 2022, 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.cgmes.conversion.test;

import com.powsybl.cgmes.conformity.CgmesConformity1Catalog;
import com.powsybl.cgmes.conformity.CgmesConformity1ModifiedCatalog;
import com.powsybl.cgmes.conversion.CgmesImport;
import com.powsybl.cgmes.model.GridModelReference;
import com.powsybl.commons.report.PowsyblCoreReportResourceBundle;
import com.powsybl.commons.test.PowsyblCoreTestReportResourceBundle;
import com.powsybl.commons.report.ReportNode;
import com.powsybl.iidm.network.Importers;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.util.Properties;

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

/**
 * @author Luma Zamarre��o {@literal <zamarrenolm at aia.es>}
 */
class FunctionalLogsTest {
    private Properties importParams;

    @BeforeEach
    void setUp() {
        importParams = new Properties();
        importParams.put(CgmesImport.IMPORT_CGM_WITH_SUBNETWORKS, "false");
    }

    @Test
    void testImportMicroGridBaseCaseBE() throws IOException {
        checkResult("/functional-logs/microGridBaseCaseBE.txt",
                importReport(CgmesConformity1Catalog.microGridBaseCaseBE()));
    }

    @Test
    void testImportMicroGridBaseCaseBETargetDeadbandNegative() throws IOException {
        checkResult("/functional-logs/microGridBaseCaseBE-target-deadband.txt",
                importReport(CgmesConformity1ModifiedCatalog.microGridBaseBETargetDeadbandNegative()));
    }

    @Test
    void testImportMicroGridBaseCaseBEInvalidVoltageBus() throws IOException {
        checkResult("/functional-logs/microGridBaseCaseBE-invalid-voltage-bus.txt",
                importReport(CgmesConformity1ModifiedCatalog.microGridBaseBEInvalidVoltageBus()));
    }

    @Test
    void testImportMiniGridNodeBreaker() throws IOException {
        importParams.put(CgmesImport.CONVERT_BOUNDARY, "true");
        checkResult("/functional-logs/miniGridNodeBreaker.txt",
                importReport(CgmesConformity1Catalog.miniNodeBreaker()));
    }

    private ReportNode importReport(GridModelReference testCase) {
        ReportNode reportNode = ReportNode.newRootReportNode()
                .withResourceBundles(PowsyblCoreTestReportResourceBundle.TEST_BASE_NAME, PowsyblCoreReportResourceBundle.BASE_NAME)
                .withMessageTemplate("testFunctionalLogs")
                .withUntypedValue("name", testCase.name())
                .build();
        Importers.importData("CGMES", testCase.dataSource(), importParams, reportNode);
        return reportNode;
    }

    private void checkResult(String resourceName, ReportNode reportNode) throws IOException {
        StringWriter sw = new StringWriter();
        reportNode.print(sw);
        try (InputStream is = getClass().getResourceAsStream(resourceName)) {
            String expected = new String(is.readAllBytes());
            assertEquals(expected, sw.toString());
        }
    }
}