/*
* 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 org.guvnor.common.services.backend.util.CommentedOptionFactory;
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.DeploymentMode;
import org.guvnor.common.services.project.service.POMService;
import org.guvnor.common.services.project.service.ProjectRepositoriesService;
import org.guvnor.common.services.project.service.ProjectRepositoryResolver;
import org.guvnor.common.services.shared.metadata.model.Metadata;
import org.guvnor.test.TestFileSystem;
import org.jboss.errai.security.shared.api.identity.User;
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.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.runners.MockitoJUnitRunner;
import org.uberfire.backend.vfs.Path;
import org.uberfire.io.IOService;
import org.uberfire.java.nio.base.options.CommentedOption;
import org.uberfire.java.nio.file.FileSystem;
import org.uberfire.rpc.SessionInfo;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class ProjectScreenModelSaverTest {
@Mock
private POMService pomService;
@Mock
private KModuleService kModuleService;
@Mock
private ProjectImportsService importsService;
@Mock
private ProjectRepositoriesService repositoriesService;
@Mock
private PackageNameWhiteListService whiteListService;
@Mock
private KieProjectService projectService;
@Mock
private ProjectRepositoryResolver repositoryResolver;
@Mock
private User identity;
@Mock
private SessionInfo sessionInfo;
@Mock
private CommentedOptionFactory commentedOptionFactory;
@Mock
private IOService ioService;
private Path pathToPom;
private ProjectScreenModelSaver saver;
private TestFileSystem 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 {
testFileSystem = new TestFileSystem();
saver = new ProjectScreenModelSaver( pomService,
kModuleService,
importsService,
repositoriesService,
whiteListService,
ioService,
projectService,
repositoryResolver,
commentedOptionFactory );
pathToPom = testFileSystem.createTempFile( "testproject/pom.xml" );
}
@After
public void tearDown() throws Exception {
testFileSystem.tearDown();
}
@Test
public void testPatchSave() throws Exception {
final CommentedOption commentedOption = new CommentedOption( "hello" );
when( commentedOptionFactory.makeCommentedOption( "message" ) ).thenReturn( commentedOption );
saver.save( pathToPom,
new ProjectScreenModel(),
DeploymentMode.FORCED,
"message" );
verify( ioService ).startBatch( any( FileSystem.class ),
eq( commentedOption ) );
verify( ioService ).endBatch();
}
@Test
public void testPOMSave() throws Exception {
final ProjectScreenModel model = new ProjectScreenModel();
final POM pom = new POM();
model.setPOM( pom );
final Metadata pomMetaData = new Metadata();
model.setPOMMetaData( pomMetaData );
saver.save( pathToPom,
model,
DeploymentMode.FORCED,
"message" );
verify( pomService ).save( eq( pathToPom ),
eq( pom ),
eq( pomMetaData ),
eq( "message" ) );
}
@Test
public void testKModuleSave() throws Exception {
final ProjectScreenModel model = new ProjectScreenModel();
final KModuleModel kModule = new KModuleModel();
model.setKModule( kModule );
final Path pathToKModule = mock( Path.class );
model.setPathToKModule( pathToKModule );
final Metadata metadata = new Metadata();
model.setKModuleMetaData( metadata );
saver.save( pathToPom,
model,
DeploymentMode.FORCED,
"message kmodule" );
verify( kModuleService ).save( eq( pathToKModule ),
eq( kModule ),
eq( metadata ),
eq( "message kmodule" ) );
}
@Test
public void testImportsSave() throws Exception {
final ProjectScreenModel model = new ProjectScreenModel();
final ProjectImports projectImports = new ProjectImports();
model.setProjectImports( projectImports );
final Path pathToImports = mock( Path.class );
model.setPathToImports( pathToImports );
final Metadata metadata = new Metadata();
model.setProjectImportsMetaData( metadata );
saver.save( pathToPom,
model,
DeploymentMode.FORCED,
"message imports" );
verify( importsService ).save( eq( pathToImports ),
eq( projectImports ),
eq( metadata ),
eq( "message imports" ) );
}
@Test
public void testRepositoriesSave() throws Exception {
final ProjectScreenModel model = new ProjectScreenModel();
final ProjectRepositories projectRepositories = new ProjectRepositories();
model.setRepositories( projectRepositories );
final Path pathToRepositories = mock( Path.class );
model.setPathToRepositories( pathToRepositories );
saver.save( pathToPom,
model,
DeploymentMode.FORCED,
"message repositories" );
verify( repositoriesService ).save( eq( pathToRepositories ),
eq( projectRepositories ),
eq( "message repositories" ) );
}
@Test
public void testWhiteListSave() throws Exception {
final ProjectScreenModel model = new ProjectScreenModel();
final WhiteList whiteList = new WhiteList();
model.setWhiteList( whiteList );
final Path pathToWhiteList = mock( Path.class );
model.setPathToWhiteList( pathToWhiteList );
final Metadata metadata = new Metadata();
model.setWhiteListMetaData( metadata );
saver.save( pathToPom,
model,
DeploymentMode.FORCED,
"message white list" );
verify( whiteListService ).save( eq( pathToWhiteList ),
eq( whiteList ),
eq( metadata ),
eq( "message white list" ) );
}
}