CondenserImportExportTest.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.conversion.test;

import com.powsybl.commons.datasource.ResourceDataSource;
import com.powsybl.commons.datasource.ResourceSet;
import com.powsybl.commons.test.AbstractSerDeTest;
import com.powsybl.iidm.network.Generator;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.extensions.ReferencePriorities;
import com.powsybl.iidm.network.extensions.ReferencePriority;
import org.junit.jupiter.api.Test;

import java.io.IOException;

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

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

class CondenserImportExportTest extends AbstractSerDeTest {

    @Test
    void cgmes2condenserConversionTest() {
        Network network = Network.read("condenser2_EQ.xml", getClass().getResourceAsStream("/issues/condenser2_EQ.xml"));
        assertEquals(1, network.getGeneratorCount());
        Generator g = network.getGenerators().iterator().next();
        assertEquals(0, g.getMinP());
        assertEquals(0, g.getMaxP());
        assertTrue(g.isCondenser());
    }

    @Test
    void cgmes2condenserExportTest() throws IOException {
        Network network = Network.read("condenser2_EQ.xml", getClass().getResourceAsStream("/issues/condenser2_EQ.xml"));
        String eq = ConversionUtil.writeCgmesProfile(network, "EQ", tmpDir);
        // No generating unit is referred, no generating unit is defined
        assertFalse(eq.contains("cim:RotatingMachine.GeneratingUnit rdf:resource="));
        assertFalse(eq.contains("cim:GeneratingUnit rdf:ID"));
        assertTrue(eq.contains("cim:SynchronousMachine.type rdf:resource=\"http://iec.ch/TC57/2013/CIM-schema-cim16#SynchronousMachineKind.condenser"));
    }

    @Test
    void cgmes3condenserConversionTest() {
        Network network = Network.read("condenser3_EQ.xml", getClass().getResourceAsStream("/issues/condenser3_EQ.xml"));
        assertEquals(1, network.getGeneratorCount());
        Generator g = network.getGenerators().iterator().next();
        assertEquals(0, g.getMinP());
        assertEquals(0, g.getMaxP());
        assertTrue(g.isCondenser());
    }

    @Test
    void cgmes3condenserExportTest() throws IOException {
        Network network = Network.read("condenser3_EQ.xml", getClass().getResourceAsStream("/issues/condenser3_EQ.xml"));
        String eq = ConversionUtil.writeCgmesProfile(network, "EQ", tmpDir);
        // No generating unit is referred, no generating unit is defined
        assertFalse(eq.contains("cim:RotatingMachine.GeneratingUnit rdf:resource="));
        assertFalse(eq.contains("cim:GeneratingUnit rdf:ID"));
        assertTrue(eq.contains("cim:SynchronousMachine.type rdf:resource=\"http://iec.ch/TC57/CIM100#SynchronousMachineKind.condenser"));
    }

    @Test
    void cgmes3condenserReferencePriorityTest() throws IOException {
        Network network = Network.read(new ResourceDataSource("condenser3",
                new ResourceSet("/issues", "condenser3_EQ.xml", "condenser3_SSH.xml")));
        Generator g = network.getGenerator("Condenser1");
        ReferencePriority referencePriority = ReferencePriorities.get(network).iterator().next();
        assertNotNull(referencePriority);
        assertEquals(g.getTerminal(), referencePriority.getTerminal());

        String eq = ConversionUtil.writeCgmesProfile(network, "EQ", tmpDir);
        // No generating unit is referred, no generating unit is defined
        assertFalse(eq.contains("cim:RotatingMachine.GeneratingUnit rdf:resource="));
        assertFalse(eq.contains("cim:GeneratingUnit rdf:ID"));
        assertTrue(eq.contains("cim:SynchronousMachine.type rdf:resource=\"http://iec.ch/TC57/CIM100#SynchronousMachineKind.condenser"));
        String ssh = ConversionUtil.writeCgmesProfile(network, "SSH", tmpDir);
        assertTrue(ssh.contains("cim:SynchronousMachine.referencePriority>1<"));
    }
}