AbstractAliasesTest.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.iidm.network.tck;

import com.powsybl.commons.PowsyblException;
import com.powsybl.iidm.network.Generator;
import com.powsybl.iidm.network.Load;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.test.EurostagTutorialExample1Factory;
import com.powsybl.iidm.network.test.FourSubstationsNodeBreakerFactory;
import com.powsybl.iidm.network.test.NetworkTest1Factory;
import org.junit.jupiter.api.Test;

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

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

    @Test
    public void canAddAliases() {
        Network network = NetworkTest1Factory.create();
        Load load = network.getLoad("load1");
        assertTrue(load.getAliases().isEmpty());
        load.addAlias("Load alias");

        assertEquals(1, load.getAliases().size());
        assertTrue(load.getAliases().contains("Load alias"));
        assertNotNull(network.getLoad("Load alias"));
        assertEquals(network.getLoad("Load alias"), load);
        assertFalse(network.getLoad("load1").getAliasType("Load alias").isPresent());

        String alias = "alias2";
        load.addAlias(alias, null);
        assertTrue(load.getAliases().contains(alias));
        assertTrue(load.getAliasType(alias).isEmpty());

        alias = "alias3";
        load.addAlias(alias, "");
        assertTrue(load.getAliases().contains(alias));
        assertTrue(load.getAliasType(alias).isEmpty());
    }

    @Test
    public void canAddAliasesWithTypes() {
        Network network = NetworkTest1Factory.create();
        Load load = network.getLoad("load1");
        assertTrue(load.getAliases().isEmpty());
        assertFalse(load.getAliasFromType("alias type").isPresent());
        load.addAlias("Load alias", "alias type");

        assertEquals(1, load.getAliases().size());
        assertTrue(load.getAliasFromType("alias type").isPresent());
        assertTrue(load.getAliases().contains("Load alias"));
        assertEquals("Load alias", load.getAliasFromType("alias type").orElse(null));
        assertNotNull(network.getLoad("Load alias"));
        assertEquals(network.getLoad("Load alias"), load);
        assertEquals("alias type", network.getLoad("load1").getAliasType("Load alias").orElse(null));
    }

    @Test
    public void canRemoveAliases() {
        Network network = NetworkTest1Factory.create();
        Load load = network.getLoad("load1");
        assertTrue(load.getAliases().isEmpty());
        load.addAlias("Load alias");

        assertEquals(1, load.getAliases().size());
        assertTrue(load.getAliases().contains("Load alias"));

        load.removeAlias("Load alias");
        assertTrue(load.getAliases().isEmpty());
    }

    @Test
    public void silentlyIgnoreAffectingObjectsIdAsAlias() {
        Network network = NetworkTest1Factory.create();
        Load load = network.getLoad("load1");
        assertTrue(load.getAliases().isEmpty());
        load.addAlias("load1");
        assertTrue(load.getAliases().isEmpty());
        assertEquals(load, network.getLoad("load1"));
    }

    @Test
    public void silentlyIgnoreAffectingTwiceSameIdToAnObject() {
        Network network = NetworkTest1Factory.create();
        Load load = network.getLoad("load1");
        assertTrue(load.getAliases().isEmpty());
        load.addAlias("Load alias");
        load.addAlias("Load alias");

        assertEquals(1, load.getAliases().size());
        assertTrue(load.getAliases().contains("Load alias"));
    }

    @Test
    public void ensureAliasUnicityFromId() {
        Network network = NetworkTest1Factory.create();
        Load load = network.getLoad("load1");
        load.addAlias("generator1", true);
        assertFalse(load.getAliases().contains("generator1"));
        assertTrue(load.getAliases().contains("generator1#0"));
    }

    @Test
    public void ensureAliasUnicityFromAlias() {
        Network network = NetworkTest1Factory.create();
        Load load = network.getLoad("load1");
        Generator generator = network.getGenerator("generator1");

        load.addAlias("alias");
        generator.addAlias("alias", true);

        assertTrue(load.getAliases().contains("alias"));
        assertFalse(generator.getAliases().contains("alias"));
        assertTrue(generator.getAliases().contains("alias#0"));
    }

    @Test
    public void failWhenDuplicatedAlias() {
        Network network = NetworkTest1Factory.create();
        Load load = network.getLoad("load1");
        Generator generator = network.getGenerator("generator1");
        load.addAlias("Alias");
        assertThrows(PowsyblException.class, () -> generator.addAlias("Alias"));
    }

    @Test
    public void failWhenAliasEqualToAnId() {
        Network network = NetworkTest1Factory.create();
        Generator generator = network.getGenerator("generator1");
        assertThrows(PowsyblException.class, () -> generator.addAlias("load1"));
    }

    @Test
    public void failWhenRemovingNonExistingAlias() {
        Network network = NetworkTest1Factory.create();
        Load load = network.getLoad("load1");
        assertThrows(PowsyblException.class, () -> load.removeAlias("Load alias"));
    }

    @Test
    public void failWhenAliasTypeIsNull() {
        Network network = NetworkTest1Factory.create();
        Load load = network.getLoad("load1");
        assertThrows(PowsyblException.class, () -> load.getAliasFromType(null));
    }

    @Test
    public void failWhenAliasTypeIsEmpty() {
        Network network = NetworkTest1Factory.create();
        Load load = network.getLoad("load1");
        assertThrows(PowsyblException.class, () -> load.getAliasFromType(""));
    }

    @Test
    public void mergeFailWhenAliasEqualsToAnIdOfOtherNetwork() {
        Network network = EurostagTutorialExample1Factory.create();
        Network otherNetwork = FourSubstationsNodeBreakerFactory.create();
        otherNetwork.getGenerator("GH1").addAlias("NHV2_NLOAD");
        assertThrows(PowsyblException.class, () -> Network.merge(network, otherNetwork));
    }

    @Test
    public void mergeFailWhenAliasEqualsToAnAliasOfOtherNetwork() {
        Network network = EurostagTutorialExample1Factory.create();
        Network otherNetwork = FourSubstationsNodeBreakerFactory.create();
        network.getTwoWindingsTransformer("NHV2_NLOAD").addAlias("Alias");
        otherNetwork.getGenerator("GH1").addAlias("Alias");
        assertThrows(PowsyblException.class, () -> Network.merge(network, otherNetwork));
    }
}