/*
* 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.guvnor.rest.backend;
import java.net.URI;
import java.util.HashSet;
import org.guvnor.common.services.project.model.GAV;
import org.guvnor.common.services.project.model.MavenRepositoryMetadata;
import org.guvnor.common.services.project.model.MavenRepositorySource;
import org.guvnor.common.services.project.model.POM;
import org.guvnor.common.services.project.model.Project;
import org.guvnor.common.services.project.service.GAVAlreadyExistsException;
import org.guvnor.common.services.project.service.ProjectService;
import org.guvnor.rest.client.JobResult;
import org.guvnor.rest.client.JobStatus;
import org.guvnor.structure.repositories.Repository;
import org.guvnor.structure.repositories.RepositoryService;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.uberfire.backend.server.util.Paths;
import org.uberfire.java.nio.file.FileAlreadyExistsException;
import org.uberfire.java.nio.file.Path;
import org.uberfire.java.nio.fs.file.SimpleFileSystemProvider;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@RunWith( MockitoJUnitRunner.class )
public class JobRequestHelperCreateProjectTest {
public SimpleFileSystemProvider fileSystemProvider;
@Mock
private RepositoryService repositoryService;
@Mock
private ProjectService<? extends Project> projectService;
@InjectMocks
private JobRequestHelper jobRequestHelper = new JobRequestHelper();
@Before
public void setUp() throws Exception {
fileSystemProvider = new SimpleFileSystemProvider();
final Repository repository = mock( Repository.class );
when( repositoryService.getRepository( "myRepository" ) ).thenReturn( repository );
when( repository.getDefaultBranch() ).thenReturn( "master" );
final Path root = fileSystemProvider.getPath( URI.create( "default://master@myRepository/" ) );
when( repository.getBranchRoot( "master" ) ).thenReturn( Paths.convert( root ) );
}
@Test
public void testRepositoryDoesNotExist() throws Exception {
final JobResult jobResult = jobRequestHelper.createProject( "jobId",
"repositoryAlias",
"projectName",
"projectGroupId",
"projectVersion",
"projectDescription" );
assertEquals( "jobId", jobResult.getJobId() );
assertEquals( JobStatus.RESOURCE_NOT_EXIST, jobResult.getStatus() );
assertEquals( "Repository [repositoryAlias] does not exist", jobResult.getResult() );
}
@Test
public void testRepositoryDoesExist() throws Exception {
final JobResult jobResult = jobRequestHelper.createProject( "jobId",
"myRepository",
"projectName",
"projectGroupId",
"projectVersion",
"projectDescription" );
assertEquals( "jobId", jobResult.getJobId() );
assertEquals( JobStatus.SUCCESS, jobResult.getStatus() );
assertNull( jobResult.getResult() );
}
@Test
public void testNewProjectWhenGAVAlreadyExists() throws Exception {
final HashSet<MavenRepositoryMetadata> repositories = new HashSet<>();
repositories.add( new MavenRepositoryMetadata( "id",
"url",
MavenRepositorySource.LOCAL ) );
doThrow( new GAVAlreadyExistsException( new GAV( "projectGroupId:projectName:projectVersion" ),
repositories ) )
.when( projectService ).newProject( any( org.uberfire.backend.vfs.Path.class ),
any( POM.class ),
eq( JobRequestHelper.GUVNOR_BASE_URL ) );
final JobResult jobResult = jobRequestHelper.createProject( "jobId",
"myRepository",
"projectName",
"projectGroupId",
"projectVersion",
"projectDescription" );
assertEquals( "jobId", jobResult.getJobId() );
assertEquals( JobStatus.DUPLICATE_RESOURCE, jobResult.getStatus() );
assertEquals( "Project's GAV [projectGroupId:projectName:projectVersion] already exists at [id : url : LOCAL ]", jobResult.getResult() );
}
@Test
public void testNewProjectWhenFileAlreadyExists() throws Exception {
doThrow( new FileAlreadyExistsException( "myProject" ) )
.when( projectService ).newProject( any( org.uberfire.backend.vfs.Path.class ),
any( POM.class ),
eq( JobRequestHelper.GUVNOR_BASE_URL ) );
final JobResult jobResult = jobRequestHelper.createProject( "jobId",
"myRepository",
"myProject",
"projectGroupId",
"projectVersion",
"projectDescription" );
assertEquals( "jobId", jobResult.getJobId() );
assertEquals( JobStatus.DUPLICATE_RESOURCE, jobResult.getStatus() );
assertEquals( "Project [myProject] already exists", jobResult.getResult() );
}
@Test
public void testWeAreUsingCorrectGAV() throws Exception {
jobRequestHelper.createProject( "jobId",
"myRepository",
"myProject",
"projectGroupId",
"projectVersion",
"projectDescription" );
ArgumentCaptor<POM> pomArgumentCaptor = ArgumentCaptor.forClass( POM.class );
verify( projectService ).newProject( any( org.uberfire.backend.vfs.Path.class ),
pomArgumentCaptor.capture(),
eq( JobRequestHelper.GUVNOR_BASE_URL ) );
final POM pom = pomArgumentCaptor.getValue();
assertEquals( "projectGroupId", pom.getGav().getGroupId() );
assertEquals( "myProject", pom.getGav().getArtifactId() );
assertEquals( "projectVersion", pom.getGav().getVersion() );
assertEquals( "myProject", pom.getName() );
assertEquals( "projectDescription", pom.getDescription() );
}
@Test
public void testProjectGroupNull() throws Exception {
jobRequestHelper.createProject( "jobId",
"myRepository",
"myProject",
null,
"projectVersion",
"projectDescription" );
ArgumentCaptor<POM> pomArgumentCaptor = ArgumentCaptor.forClass( POM.class );
verify( projectService ).newProject( any( org.uberfire.backend.vfs.Path.class ),
pomArgumentCaptor.capture(),
eq( JobRequestHelper.GUVNOR_BASE_URL ) );
final POM pom = pomArgumentCaptor.getValue();
assertEquals( "myProject", pom.getGav().getGroupId() );
}
@Test
public void testProjectGroupEmpty() throws Exception {
jobRequestHelper.createProject( "jobId",
"myRepository",
"myProject",
" ",
"projectVersion",
"projectDescription" );
ArgumentCaptor<POM> pomArgumentCaptor = ArgumentCaptor.forClass( POM.class );
verify( projectService ).newProject( any( org.uberfire.backend.vfs.Path.class ),
pomArgumentCaptor.capture(),
eq( JobRequestHelper.GUVNOR_BASE_URL ) );
final POM pom = pomArgumentCaptor.getValue();
assertEquals( "myProject", pom.getGav().getGroupId() );
}
@Test
public void testProjectVersionNull() throws Exception {
jobRequestHelper.createProject( "jobId",
"myRepository",
"myProject",
"projectGroupId",
null,
"projectDescription" );
ArgumentCaptor<POM> pomArgumentCaptor = ArgumentCaptor.forClass( POM.class );
verify( projectService ).newProject( any( org.uberfire.backend.vfs.Path.class ),
pomArgumentCaptor.capture(),
eq( JobRequestHelper.GUVNOR_BASE_URL ) );
final POM pom = pomArgumentCaptor.getValue();
assertEquals( "1.0", pom.getGav().getVersion() );
}
@Test
public void testProjectVersionEmpty() throws Exception {
jobRequestHelper.createProject( "jobId",
"myRepository",
"myProject",
"projectGroupId",
" ",
"projectDescription" );
ArgumentCaptor<POM> pomArgumentCaptor = ArgumentCaptor.forClass( POM.class );
verify( projectService ).newProject( any( org.uberfire.backend.vfs.Path.class ),
pomArgumentCaptor.capture(),
eq( JobRequestHelper.GUVNOR_BASE_URL ) );
final POM pom = pomArgumentCaptor.getValue();
assertEquals( "1.0", pom.getGav().getVersion() );
}
}