ProjectTest.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.powerfactory.model;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.time.Instant;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
/**
* @author Geoffroy Jamgotchian {@literal <geoffroy.jamgotchian at rte-france.com>}
*/
class ProjectTest extends AbstractPowerFactoryTest {
private DataObject prj;
private Project project;
@Override
@BeforeEach
public void setUp() throws IOException {
super.setUp();
DataClass clsIntPrj = DataClass.init("IntPrj")
.addAttribute(new DataAttribute("pCase", DataAttributeType.OBJECT));
DataClass clsIntPrjfolder = DataClass.init("IntPrjfolder");
DataClass clsIntCase = DataClass.init("IntCase")
.addAttribute(new DataAttribute("iStudyTime", DataAttributeType.INTEGER64));
prj = new DataObject(4L, clsIntPrj, index)
.setLocName("TestProject")
.setObjectAttributeValue("pCase", 6L);
var studyCasesFolder = new DataObject(5L, clsIntPrjfolder, index)
.setLocName("Study Cases");
studyCasesFolder.setParent(prj);
Instant studyTime = Instant.parse("2021-10-30T09:35:25Z");
var studyCase = new DataObject(6L, clsIntCase, index)
.setLocName("TestStudyCase")
.setLongAttributeValue("iStudyTime", studyTime.getEpochSecond());
studyCase.setParent(studyCasesFolder);
var netModel = new DataObject(7L, clsIntPrjfolder, index)
.setLocName("Network Model");
netModel.setParent(prj);
var netData = new DataObject(8L, clsIntPrjfolder, index)
.setLocName("Network Data");
netData.setParent(netModel);
elmNet.setParent(netData);
project = new Project("TestProject", prj, index);
}
@Test
void test() {
assertEquals("TestProject", project.getName());
assertSame(index, project.getIndex());
assertSame(prj, project.getRootObject());
StudyCase studyCase = project.getActiveStudyCase();
assertNotNull(studyCase);
assertSame(index, studyCase.getIndex());
assertEquals("TestProject - TestStudyCase", studyCase.getName());
Instant studyTime = Instant.parse("2021-10-30T09:35:25Z");
assertEquals(studyTime, studyCase.getTime());
assertEquals(1, studyCase.getElmNets().size());
assertTrue(project.getIndex().getBackwardLinks(elmNet.getId()).isEmpty());
assertEquals(List.of(objFoo), project.getIndex().getBackwardLinks(objBar.getId()));
assertEquals(List.of(objFoo), project.getIndex().getBackwardLinks(objBaz.getId()));
}
@Test
void jsonTest() throws IOException {
var project2 = roundTripTest(project, Project::writeJson, Project::readJson, "/project.json");
assertEquals("TestProject", project2.getName());
}
@Test
void loaderTest() {
var loader = new JsonProjectLoader();
assertEquals(Project.class, loader.getDataClass());
assertEquals("json", loader.getExtension());
assertTrue(loader.test(getClass().getResourceAsStream("/project.json")));
assertTrue(loader.test(new ByteArrayInputStream(new byte[] {}))); // FIXME
Project project2 = loader.doLoad("project.json", getClass().getResourceAsStream("/project.json"));
assertNotNull(project2);
}
}