UcteAliasesCreationTest.java

/*
 * Copyright (c) 2020, 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.ucte.util;

import com.powsybl.commons.datasource.ReadOnlyDataSource;
import com.powsybl.commons.datasource.ResourceDataSource;
import com.powsybl.commons.datasource.ResourceSet;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.NetworkFactory;
import com.powsybl.ucte.converter.UcteImporter;
import org.apache.commons.io.FilenameUtils;
import org.junit.jupiter.api.Test;

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

/**
 * @author Sebastien Murgey {@literal <sebastien.murgey at rte-france.com>}
 */
class UcteAliasesCreationTest {

    private static Network loadNetworkFromResourceFile(String filePath) {
        ReadOnlyDataSource dataSource = new ResourceDataSource(FilenameUtils.getBaseName(filePath), new ResourceSet(FilenameUtils.getPath(filePath), FilenameUtils.getName(filePath)));
        return new UcteImporter().importData(dataSource, NetworkFactory.findDefault(), null);
    }

    @Test
    void checkAliasesCreationWhenImportingMergedFile() {
        Network network = loadNetworkFromResourceFile("/uxTestGridForMerging.uct");

        // Dangling lines are there but paired
        assertNotNull(network.getIdentifiable("BBBBBB11 XXXXXX11 1"));
        assertTrue(network.getDanglingLine("BBBBBB11 XXXXXX11 1").isPaired());
        assertNotNull(network.getIdentifiable("FFFFFF11 XXXXXX11 1"));
        assertTrue(network.getDanglingLine("FFFFFF11 XXXXXX11 1").isPaired());

        // No aliases on element name
        assertNull(network.getIdentifiable("BBBBBB11 XXXXXX11 ABCDE"));
        assertNull(network.getIdentifiable("FFFFFF11 XXXXXX11 ABCDE"));

        UcteAliasesCreation.createAliases(network);

        // Aliases on element name have been created
        assertNotNull(network.getIdentifiable("BBBBBB11 XXXXXX11 ABCDE"));
        assertNotNull(network.getIdentifiable("FFFFFF11 XXXXXX11 ABCDE"));

        // Aliases on disappeared dangling lines have been created
        assertNotNull(network.getIdentifiable("BBBBBB11 XXXXXX11 1"));
        assertNotNull(network.getIdentifiable("FFFFFF11 XXXXXX11 1"));

        // They are all referencing the same identifiable
        assertEquals(network.getIdentifiable("BBBBBB11 XXXXXX11 ABCDE"), network.getIdentifiable("FFFFFF11 XXXXXX11 ABCDE"));
        assertEquals(network.getIdentifiable("BBBBBB11 XXXXXX11 ABCDE"), network.getDanglingLine("BBBBBB11 XXXXXX11 1").getTieLine().orElse(null));
        assertEquals(network.getIdentifiable("FFFFFF11 XXXXXX11 ABCDE"), network.getDanglingLine("FFFFFF11 XXXXXX11 1").getTieLine().orElse(null));
    }

    @Test
    void checkAliasesCreationBeforeIidmMerging() {
        Network networkFR = loadNetworkFromResourceFile("/frTestGridForMerging.uct");
        Network networkBE = loadNetworkFromResourceFile("/beTestGridForMerging.uct");

        UcteAliasesCreation.createAliases(networkBE);
        UcteAliasesCreation.createAliases(networkFR);

        // Aliases on element name have been created
        assertNotNull(networkBE.getIdentifiable("BBBBBB11 XXXXXX11 ABCDE"));
        assertNotNull(networkFR.getIdentifiable("FFFFFF11 XXXXXX11 ABCDE"));

        Network merge = Network.merge(networkBE, networkFR);

        // Aliases on element name have been kept after merge
        assertNotNull(merge.getIdentifiable("BBBBBB11 XXXXXX11 ABCDE"));
        assertNotNull(merge.getIdentifiable("FFFFFF11 XXXXXX11 ABCDE"));

        // Aliases on disappeared dangling lines have been created after merge
        assertNotNull(merge.getIdentifiable("BBBBBB11 XXXXXX11 1"));
        assertNotNull(merge.getIdentifiable("FFFFFF11 XXXXXX11 1"));

        // They are all referencing the same identifiable
        assertEquals(merge.getIdentifiable("BBBBBB11 XXXXXX11 ABCDE"), merge.getDanglingLine("BBBBBB11 XXXXXX11 1"));
        assertEquals(merge.getIdentifiable("FFFFFF11 XXXXXX11 ABCDE"), merge.getDanglingLine("FFFFFF11 XXXXXX11 1"));
    }

    @Test
    void checkAliasesCreationAfterIidmMerging() {
        Network networkFR = loadNetworkFromResourceFile("/frTestGridForMerging.uct");
        Network networkBE = loadNetworkFromResourceFile("/beTestGridForMerging.uct");
        Network merge = Network.merge(networkBE, networkFR);

        // No aliases on dangling lines element name
        assertNull(merge.getIdentifiable("BBBBBB11 XXXXXX11 ABCDE"));
        assertNull(merge.getIdentifiable("FFFFFF11 XXXXXX11 ABCDE"));

        // Aliases on disappeared dangling lines ids are created
        assertNotNull(merge.getIdentifiable("BBBBBB11 XXXXXX11 1"));
        assertNotNull(merge.getIdentifiable("FFFFFF11 XXXXXX11 1"));
        assertEquals("BBBBBB11 XXXXXX11 1", merge.getIdentifiable("BBBBBB11 XXXXXX11 1").getId());
        assertEquals("FFFFFF11 XXXXXX11 1", merge.getIdentifiable("FFFFFF11 XXXXXX11 1").getId());

        UcteAliasesCreation.createAliases(merge);

        // Aliases on element name have been created
        assertNotNull(merge.getIdentifiable("BBBBBB11 XXXXXX11 ABCDE"));
        assertNotNull(merge.getIdentifiable("FFFFFF11 XXXXXX11 ABCDE"));

        // Aliases on disappeared dangling lines are still there
        assertNotNull(merge.getIdentifiable("BBBBBB11 XXXXXX11 1"));
        assertNotNull(merge.getIdentifiable("FFFFFF11 XXXXXX11 1"));

        // They are all referencing the same identifiable
        assertEquals(merge.getIdentifiable("BBBBBB11 XXXXXX11 ABCDE"), merge.getIdentifiable("FFFFFF11 XXXXXX11 ABCDE"));
        assertEquals(merge.getIdentifiable("BBBBBB11 XXXXXX11 ABCDE"), merge.getDanglingLine("BBBBBB11 XXXXXX11 1").getTieLine().orElse(null));
        assertEquals(merge.getIdentifiable("FFFFFF11 XXXXXX11 ABCDE"), merge.getDanglingLine("FFFFFF11 XXXXXX11 1").getTieLine().orElse(null));
    }

    @Test
    void checkThatItDoesNotCreateDuplicatedAliasesNorThrow() {
        Network network = loadNetworkFromResourceFile("/aliasesDuplicationTest.uct");
        UcteAliasesCreation.createAliases(network);

        // Devices exist
        assertNotNull(network.getIdentifiable("FFFFFF11 FFFFFF12 1"));
        assertNotNull(network.getIdentifiable("FFFFFF11 FFFFFF12 2"));
        assertNotNull(network.getIdentifiable("FFFFFF11 FFFFFF12 3"));

        // Duplicated aliases does not exist
        assertNull(network.getIdentifiable("FFFFFF11 FFFFFF12 N/A"));

        // Non duplicated alias exists
        assertNotNull(network.getIdentifiable("FFFFFF11 FFFFFF12 Unique"));
    }
}