/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.kie.workbench.common.screens.projecteditor.backend.server;
import javax.inject.Inject;
import org.guvnor.common.services.project.model.POM;
import org.guvnor.common.services.project.model.ProjectImports;
import org.guvnor.common.services.project.model.ProjectRepositories;
import org.guvnor.common.services.project.service.POMService;
import org.guvnor.common.services.project.service.ProjectRepositoriesService;
import org.guvnor.common.services.shared.metadata.MetadataService;
import org.guvnor.common.services.shared.metadata.model.Metadata;
import org.guvnor.test.TestFileSystem;
import org.guvnor.test.TestTempFileSystem;
import org.guvnor.test.WeldJUnitRunner;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.workbench.common.screens.projecteditor.model.ProjectScreenModel;
import org.kie.workbench.common.services.shared.kmodule.KModuleModel;
import org.kie.workbench.common.services.shared.kmodule.KModuleService;
import org.kie.workbench.common.services.shared.project.KieProject;
import org.kie.workbench.common.services.shared.project.KieProjectService;
import org.kie.workbench.common.services.shared.project.ProjectImportsService;
import org.kie.workbench.common.services.shared.whitelist.PackageNameWhiteListService;
import org.kie.workbench.common.services.shared.whitelist.WhiteList;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.runners.MockitoJUnitRunner;
import org.uberfire.backend.vfs.Path;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@RunWith(WeldJUnitRunner.class)
public class ProjectScreenModelLoaderTest {
final String projectName = "my project";
private Path pathToPom;
@Mock
private KieProjectService projectService;
@Mock
private Path rootPath;
private Path kmoduleXMLPath;
private Path importsPath;
private Path repositoriesPath;
private Path packageNamesWhiteListPath;
@Mock
private POMService pomService;
@Mock
private MetadataService metadataService;
@Mock
private KModuleService kModuleService;
@Mock
private ProjectImportsService projectImportsService;
@Mock
private ProjectRepositoriesService projectRepositoriesService;
@Mock
private PackageNameWhiteListService whiteListService;
private ProjectScreenModelLoader loader;
private KieProject kieProject;
@Inject
private TestTempFileSystem testFileSystem;
@BeforeClass
public static void setupSystemProperties() {
//These are not needed for the tests
System.setProperty( "org.uberfire.nio.git.daemon.enabled",
"false" );
System.setProperty( "org.uberfire.nio.git.ssh.enabled",
"false" );
System.setProperty( "org.uberfire.sys.repo.monitor.disabled",
"true" );
}
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks( this );
pathToPom = testFileSystem.createTempFile( "myProject/pom.xml" );
kmoduleXMLPath = testFileSystem.createTempFile( "myproject/src/main/resources/META-INF/kmodule.xml" );
importsPath = testFileSystem.createTempFile( "myProject/project.imports" );
repositoriesPath = testFileSystem.createTempFile( "myProject/project.repositories" );
packageNamesWhiteListPath = testFileSystem.createTempFile( "myProject/package-name-white-list" );
makeKieProject();
when( projectService.resolveProject( pathToPom ) ).thenReturn( kieProject );
loader = new ProjectScreenModelLoader( projectService,
pomService,
metadataService,
kModuleService,
projectImportsService,
projectRepositoriesService,
whiteListService );
}
@After
public void tearDown() throws Exception {
testFileSystem.tearDown();
}
private void makeKieProject() {
kieProject = new KieProject( rootPath,
pathToPom,
kmoduleXMLPath,
importsPath,
repositoriesPath,
packageNamesWhiteListPath,
projectName );
}
@Test
public void testLoadPom() throws Exception {
final POM pom = new POM();
when( pomService.load( pathToPom ) ).thenReturn( pom );
final Metadata metadata = new Metadata();
when( metadataService.getMetadata( pathToPom ) ).thenReturn( metadata );
ProjectScreenModel model = loader.load( pathToPom );
assertEquals( pathToPom,
model.getPathToPOM() );
assertEquals( pom,
model.getPOM() );
assertEquals( metadata,
model.getPOMMetaData() );
}
@Test
public void testKModule() throws Exception {
final KModuleModel kModuleModel = new KModuleModel();
when( kModuleService.load( kmoduleXMLPath ) ).thenReturn( kModuleModel );
final Metadata metadata = new Metadata();
when( metadataService.getMetadata( kmoduleXMLPath ) ).thenReturn( metadata );
ProjectScreenModel model = loader.load( pathToPom );
assertEquals( kmoduleXMLPath,
model.getPathToKModule() );
assertEquals( kModuleModel,
model.getKModule() );
assertEquals( metadata,
model.getKModuleMetaData() );
}
@Test
public void testImports() throws Exception {
final ProjectImports projectImports = new ProjectImports();
when( projectImportsService.load( importsPath ) ).thenReturn( projectImports );
final Metadata metadata = new Metadata();
when( metadataService.getMetadata( importsPath ) ).thenReturn( metadata );
ProjectScreenModel model = loader.load( pathToPom );
assertEquals( importsPath,
model.getPathToImports() );
assertEquals( projectImports,
model.getProjectImports() );
assertEquals( metadata,
model.getProjectImportsMetaData() );
}
@Test
public void testRepositories() throws Exception {
final ProjectRepositories projectRepositories = new ProjectRepositories();
when( projectRepositoriesService.load( repositoriesPath ) ).thenReturn( projectRepositories );
ProjectScreenModel model = loader.load( pathToPom );
assertEquals( repositoriesPath,
model.getPathToRepositories() );
assertEquals( projectRepositories,
model.getRepositories() );
}
@Test
public void testWhiteList() throws Exception {
final WhiteList whiteList = new WhiteList();
when( whiteListService.load( packageNamesWhiteListPath ) ).thenReturn( whiteList );
final Metadata metadata = new Metadata();
when( metadataService.getMetadata( packageNamesWhiteListPath ) ).thenReturn( metadata );
ProjectScreenModel model = loader.load( pathToPom );
assertEquals( packageNamesWhiteListPath,
model.getPathToWhiteList() );
assertEquals( whiteList,
model.getWhiteList() );
assertEquals( metadata,
model.getWhiteListMetaData() );
}
@Test
public void testWhiteListNoMetadata() throws Exception {
final WhiteList whiteList = new WhiteList();
testFileSystem.deleteFile( packageNamesWhiteListPath );
when( whiteListService.load( packageNamesWhiteListPath ) ).thenReturn( whiteList );
ProjectScreenModel model = loader.load( pathToPom );
assertEquals( packageNamesWhiteListPath,
model.getPathToWhiteList() );
assertEquals( whiteList,
model.getWhiteList() );
assertNotNull( model.getWhiteListMetaData() );
}
}