CgmesImportPreAndPostProcessorsTest.java

/**
 * Copyright (c) 2019, 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;

import com.google.common.jimfs.Configuration;
import com.google.common.jimfs.Jimfs;
import com.powsybl.cgmes.conformity.CgmesConformity1Catalog;
import com.powsybl.cgmes.model.CgmesModel;
import com.powsybl.cgmes.model.GridModelReferenceResources;
import com.powsybl.commons.parameters.Parameter;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.NetworkFactory;
import com.powsybl.triplestore.api.TripleStore;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.nio.file.FileSystem;
import java.util.*;

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

/**
 * @author Geoffroy Jamgotchian {@literal <geoffroy.jamgotchian at rte-france.com>}
 */
class CgmesImportPreAndPostProcessorsTest {

    class FakeCgmesImportPostProcessor implements CgmesImportPostProcessor {

        private final String name;

        FakeCgmesImportPostProcessor(String name) {
            this.name = Objects.requireNonNull(name);
        }

        @Override
        public String getName() {
            return name;
        }

        @Override
        public void process(Network network, TripleStore tripleStore) {
            activatedPostProcessorNames.add(getName());
        }
    }

    class FakeCgmesImportPreProcessor implements CgmesImportPreProcessor {

        private final String name;

        FakeCgmesImportPreProcessor(String name) {
            this.name = Objects.requireNonNull(name);
        }

        @Override
        public String getName() {
            return name;
        }

        @Override
        public void process(CgmesModel cgmes) {
            activatedPreProcessorNames.add(getName());
        }
    }

    private FileSystem fileSystem;
    private GridModelReferenceResources modelResources;
    private Properties importParams;

    private final List<String> activatedPreProcessorNames = new ArrayList<>();
    private final List<String> activatedPostProcessorNames = new ArrayList<>();

    @BeforeEach
    void setUp() {
        fileSystem = Jimfs.newFileSystem(Configuration.unix());
        modelResources = CgmesConformity1Catalog.microGridBaseCaseBE();
        importParams = new Properties();
        importParams.put(CgmesImport.IMPORT_CGM_WITH_SUBNETWORKS, "false");
    }

    @AfterEach
    void tearDown() throws IOException {
        fileSystem.close();
        activatedPostProcessorNames.clear();
    }

    @Test
    void testParameters() {
        CgmesImport cgmesImport = new CgmesImport(Collections.emptyList(), List.of(new FakeCgmesImportPostProcessor("foo")));
        Parameter parameter = cgmesImport.getParameters().stream()
                .filter(p -> p.getName().equals("iidm.import.cgmes.post-processors"))
                .findFirst()
                .orElseThrow();
        assertEquals(List.of("foo"), parameter.getPossibleValues());
    }

    @Test
    void testEmpty() {
        CgmesImport cgmesImport = new CgmesImport(Collections.emptyList(), Collections.singletonList(new FakeCgmesImportPostProcessor("foo")));
        cgmesImport.importData(modelResources.dataSource(), NetworkFactory.findDefault(), importParams);
        assertTrue(activatedPostProcessorNames.isEmpty());
    }

    @Test
    void testList() {
        CgmesImport cgmesImport = new CgmesImport(Collections.emptyList(), Arrays.asList(new FakeCgmesImportPostProcessor("foo"),
                                                                                new FakeCgmesImportPostProcessor("bar"),
                                                                                new FakeCgmesImportPostProcessor("baz")));
        importParams.put(CgmesImport.POST_PROCESSORS, "foo,baz");
        cgmesImport.importData(modelResources.dataSource(), NetworkFactory.findDefault(), importParams);
        assertEquals(Arrays.asList("foo", "baz"), activatedPostProcessorNames);
    }

    @Test
    void testListPre() {
        CgmesImport cgmesImport = new CgmesImport(Arrays.asList(new FakeCgmesImportPreProcessor("foo"),
                new FakeCgmesImportPreProcessor("bar"),
                new FakeCgmesImportPreProcessor("baz")), Collections.emptyList());
        importParams.put(CgmesImport.PRE_PROCESSORS, "foo,baz");
        cgmesImport.importData(modelResources.dataSource(), NetworkFactory.findDefault(), importParams);
        assertEquals(Arrays.asList("foo", "baz"), activatedPreProcessorNames);
    }
}