CgmesMetadataModelsTest.java

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

import com.powsybl.cgmes.model.CgmesMetadataModel;
import com.powsybl.cgmes.model.CgmesSubset;
import com.powsybl.commons.PowsyblException;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.test.NetworkTest1Factory;
import org.junit.jupiter.api.Test;

import java.util.Set;

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

/**
 * @author Luma Zamarre��o {@literal <zamarrenolm at aia.es>}
 */
class CgmesMetadataModelsTest {

    @Test
    void test() {
        Network network = NetworkTest1Factory.create();
        network.newExtension(CgmesMetadataModelsAdder.class)
                .newModel()
                .setSubset(CgmesSubset.STEADY_STATE_HYPOTHESIS)
                .setId("sshId")
                .setDescription("SSH description")
                .setModelingAuthoritySet("http://powsybl.org")
                .setVersion(1)
                .addProfile("http://steady-state-hypothesis")
                .addDependentOn("ssh-dependency1")
                .addDependentOn("ssh-dependency2")
                .add()
                .newModel()
                .setSubset(CgmesSubset.STATE_VARIABLES)
                .setId("svId")
                .setDescription("SV description")
                .setModelingAuthoritySet("http://powsybl.org")
                .setVersion(2)
                .addProfile("http://state-variables")
                .addDependentOn("sv-dependency")
                .add()
                .add();

        CgmesMetadataModels extension = network.getExtension(CgmesMetadataModels.class);
        assertNotNull(extension);

        CgmesMetadataModel ssh = extension.getModelForSubset(CgmesSubset.STEADY_STATE_HYPOTHESIS).orElseThrow();
        assertEquals("SSH description", ssh.getDescription());
        assertEquals("http://powsybl.org", ssh.getModelingAuthoritySet());
        assertEquals(1, ssh.getVersion());
        assertEquals(Set.of("ssh-dependency1", "ssh-dependency2"), ssh.getDependentOn());

        CgmesMetadataModel sv = extension.getModelForSubset(CgmesSubset.STATE_VARIABLES).orElseThrow();
        assertEquals("SV description", sv.getDescription());
        assertEquals("http://powsybl.org", sv.getModelingAuthoritySet());
        assertEquals(2, sv.getVersion());
        assertEquals(Set.of("sv-dependency"), sv.getDependentOn());
    }

    @Test
    void invalid() {
        Network network = NetworkTest1Factory.create();
        CgmesMetadataModelsAdder adder = network.newExtension(CgmesMetadataModelsAdder.class);
        // Expected an exception because the list of models is empty
        assertThrows(PowsyblException.class, adder::add);
    }
}