PostProcessorReportNodeTest.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/.
 * SPDX-License-Identifier: MPL-2.0
 */
package com.powsybl.iidm.network;

import com.powsybl.commons.report.*;
import com.powsybl.commons.test.AbstractSerDeTest;
import com.powsybl.commons.test.PowsyblCoreTestReportResourceBundle;
import com.powsybl.computation.ComputationManager;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;

import java.io.IOException;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.util.Collections;
import java.util.Optional;

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

/**
 * @author Coline Piloquet {@literal <coline.piloquet at rte-france.com>}
 */
class PostProcessorReportNodeTest extends AbstractSerDeTest {
    private final Importer testImporter = new TestImporter();
    private final ImportPostProcessorMock importPostProcessorMock = new ImportPostProcessorMock();
    private final ImportersLoader loader = new ImportersLoaderList(Collections.singletonList(testImporter), Collections.singletonList(importPostProcessorMock));
    private final ComputationManager computationManager = Mockito.mock(ComputationManager.class);
    private final Importer importer1 = Importer.addPostProcessors(loader, testImporter, computationManager, "testReportNode");

    @Test
    void postProcessorWithReportNode() throws IOException {

        ReportNode reportRoot = ReportNode.newRootReportNode()
                .withResourceBundles(PowsyblCoreTestReportResourceBundle.TEST_BASE_NAME, PowsyblCoreReportResourceBundle.BASE_NAME)
                .withMessageTemplate("testPostProcessor")
                .build();
        Network network1 = importer1.importData(null, new NetworkFactoryMock(), null, reportRoot);
        assertNotNull(network1);

        Optional<ReportNode> report = reportRoot.getChildren().stream().findFirst();
        assertTrue(report.isPresent());

        roundTripTest(reportRoot, ReportNodeSerializer::write, ReportNodeDeserializer::read, "/postProcessorReportNodeTest.json");
    }

    @Test
    void postProcessorWithoutReportNode() throws Exception {
        Network network1 = importer1.importData(null, new NetworkFactoryMock(), null);
        importPostProcessorMock.process(network1, computationManager);
        assertNotNull(network1);
        assertEquals(ZonedDateTime.of(2021, 12, 20, 0, 0, 0, 0, ZoneOffset.UTC), network1.getCaseDate());
    }
}