NetworkFactoryMock.java

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

import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.util.Properties;

import com.powsybl.commons.datasource.ReadOnlyDataSource;
import com.powsybl.commons.report.ReportNode;
import com.powsybl.computation.ComputationManager;
import org.mockito.Mockito;

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

    @Override
    public Network createNetwork(String id, String sourceFormat) {
        Network network = Mockito.mock(Network.class);
        Mockito.when(network.getCaseDate())
                .thenReturn(ZonedDateTime.of(2021, 12, 20, 0, 0, 0, 0, ZoneOffset.UTC));
        Load load = Mockito.mock(Load.class);
        Mockito.when(network.getLoad(Mockito.anyString()))
                .thenReturn(load);
        LoadType[] loadType = new LoadType[1];
        loadType[0] = LoadType.UNDEFINED;
        Mockito.doAnswer(invocationOnMock -> {
            loadType[0] = (LoadType) invocationOnMock.getArguments()[0];
            return load;
        }).when(load).setLoadType(Mockito.any(LoadType.class));
        Mockito.when(load.getLoadType())
                .thenAnswer(invocationOnMock -> loadType[0]);

        // When called to be updated, rely on default method, that will call importer
        Mockito.doCallRealMethod().when(network).update(
                Mockito.any(ReadOnlyDataSource.class),
                Mockito.any(ComputationManager.class),
                Mockito.any(ImportConfig.class),
                Mockito.nullable(Properties.class),
                Mockito.any(ImportersLoader.class),
                Mockito.any(ReportNode.class));
        Mockito.doCallRealMethod().when(network).update(
                Mockito.any(ReadOnlyDataSource.class),
                Mockito.nullable(Properties.class),
                Mockito.any(ReportNode.class));
        Mockito.doCallRealMethod().when(network).update(
                Mockito.any(ReadOnlyDataSource.class),
                Mockito.nullable(Properties.class));
        Mockito.doCallRealMethod().when(network).update(
                Mockito.any(ReadOnlyDataSource.class));
        // Allow setting a value for P0
        double[] loadP = new double[1];
        loadP[0] = Double.NaN;
        Mockito.doAnswer(invocationOnMock -> {
            loadP[0] = (double) invocationOnMock.getArguments()[0];
            return load;
        }).when(load).setP0(Mockito.anyDouble());
        Mockito.when(load.getP0())
                .thenAnswer(invocationOnMock -> loadP[0]);

        return network;
    }

    @Override
    public Network merge(String id, Network... networks) {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public Network merge(Network... networks) {
        throw new UnsupportedOperationException("Not yet implemented");
    }
}