/*
* 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.common.services.project.backend.server;
import java.util.HashSet;
import java.util.Set;
import org.guvnor.common.services.backend.util.CommentedOptionFactory;
import org.guvnor.common.services.project.model.MavenRepositoryMetadata;
import org.guvnor.common.services.project.model.MavenRepositorySource;
import org.guvnor.common.services.project.model.Project;
import org.guvnor.common.services.project.model.ProjectRepositories;
import org.guvnor.common.services.project.service.ProjectRepositoriesService;
import org.guvnor.common.services.project.service.ProjectRepositoryResolver;
import org.guvnor.common.services.project.service.ProjectResourceResolver;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.uberfire.backend.server.util.Paths;
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 static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class AbstractProjectRepositoriesServiceImplTest {
@Mock
private IOService ioService;
@Mock
private ProjectRepositoryResolver repositoryResolver;
@Mock
private ProjectResourceResolver resourceResolver;
@Mock
private CommentedOptionFactory commentedOptionFactory;
private ProjectRepositoriesService service;
private ProjectRepositoriesContentHandler contentHandler;
@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() {
contentHandler = spy( new ProjectRepositoriesContentHandler() );
service = new AbstractProjectRepositoriesServiceImpl<Project>( ioService,
repositoryResolver,
contentHandler,
commentedOptionFactory ) {
@Override
protected Project getProject( final Path path ) {
return resourceResolver.resolveProject( path );
}
};
}
@Test
public void testCreateWithoutProject() {
final String xml = "<project-repositories>\n" +
" <repositories>\n" +
" <repository>\n" +
" <include>true</include>\n" +
" <metadata>\n" +
" <id>local</id>\n" +
" <url>local-url</url>\n" +
" <source>LOCAL</source>\n" +
" </metadata>\n" +
" </repository>\n" +
" </repositories>\n" +
"</project-repositories>";
final Path path = mock( Path.class );
when( path.toURI() ).thenReturn( "default://p0/project.repositories" );
final org.uberfire.java.nio.file.Path nioPath = Paths.convert( path );
final Set<MavenRepositoryMetadata> metadata = new HashSet<MavenRepositoryMetadata>();
metadata.add( new MavenRepositoryMetadata( "local",
"local-url",
MavenRepositorySource.LOCAL ) );
when( repositoryResolver.getRemoteRepositoriesMetaData() ).thenReturn( metadata );
when( resourceResolver.resolveProject( path ) ).thenReturn( null );
service.create( path );
verify( resourceResolver,
times( 1 ) ).resolveProject( path );
verify( repositoryResolver,
times( 1 ) ).getRemoteRepositoriesMetaData();
verify( ioService,
times( 1 ) ).startBatch( any( FileSystem.class ),
any( CommentedOption.class ) );
verify( ioService,
times( 1 ) ).write( eq( nioPath ),
eq( xml ) );
verify( ioService,
times( 1 ) ).endBatch();
}
@Test
public void testCreateWithProject() {
final String xml = "<project-repositories>\n" +
" <repositories>\n" +
" <repository>\n" +
" <include>true</include>\n" +
" <metadata>\n" +
" <id>local</id>\n" +
" <url>local-url</url>\n" +
" <source>LOCAL</source>\n" +
" </metadata>\n" +
" </repository>\n" +
" </repositories>\n" +
"</project-repositories>";
final Path path = mock( Path.class );
when( path.toURI() ).thenReturn( "default://p0/project.repositories" );
final org.uberfire.java.nio.file.Path nioPath = Paths.convert( path );
final Project project = mock( Project.class );
final Set<MavenRepositoryMetadata> metadata = new HashSet<MavenRepositoryMetadata>();
metadata.add( new MavenRepositoryMetadata( "local",
"local-url",
MavenRepositorySource.LOCAL ) );
when( repositoryResolver.getRemoteRepositoriesMetaData( eq( project ) ) ).thenReturn( metadata );
when( resourceResolver.resolveProject( path ) ).thenReturn( project );
service.create( path );
verify( resourceResolver,
times( 1 ) ).resolveProject( path );
verify( repositoryResolver,
times( 1 ) ).getRemoteRepositoriesMetaData( eq( project ) );
verify( ioService,
times( 1 ) ).startBatch( any( FileSystem.class ),
any( CommentedOption.class ) );
verify( ioService,
times( 1 ) ).write( eq( nioPath ),
eq( xml ) );
verify( ioService,
times( 1 ) ).endBatch();
}
@Test
public void testLoadExisting() {
final String xml = "<project-repositories>\n" +
" <repositories>\n" +
" <repository>\n" +
" <include>true</include>\n" +
" <metadata>\n" +
" <id>id</id>\n" +
" <url>url</url>\n" +
" <source>LOCAL</source>\n" +
" </metadata>\n" +
" </repository>\n" +
" </repositories>\n" +
"</project-repositories>";
final Path path = mock( Path.class );
when( path.toURI() ).thenReturn( "default://p0/project.repositories" );
final org.uberfire.java.nio.file.Path nioPath = Paths.convert( path );
when( ioService.exists( eq( nioPath ) ) ).thenReturn( true );
when( ioService.readAllString( eq( nioPath ) ) ).thenReturn( xml );
final ProjectRepositories repositories = service.load( path );
assertNotNull( repositories );
assertNotNull( repositories.getRepositories() );
assertEquals( 1,
repositories.getRepositories().size() );
final ProjectRepositories.ProjectRepository repository = repositories.getRepositories().iterator().next();
assertEquals( "id",
repository.getMetadata().getId() );
assertEquals( "url",
repository.getMetadata().getUrl() );
assertEquals( MavenRepositorySource.LOCAL,
repository.getMetadata().getSource() );
assertEquals( true,
repository.isIncluded() );
verify( contentHandler,
times( 1 ) ).toModel( eq( xml ) );
}
@Test
public void testLoadNonExisting() {
final String xml = "<project-repositories>\n" +
" <repositories>\n" +
" <repository>\n" +
" <include>true</include>\n" +
" <metadata>\n" +
" <id>local</id>\n" +
" <url>local-url</url>\n" +
" <source>LOCAL</source>\n" +
" </metadata>\n" +
" </repository>\n" +
" </repositories>\n" +
"</project-repositories>";
final Path path = mock( Path.class );
when( path.toURI() ).thenReturn( "default://p0/project.repositories" );
final org.uberfire.java.nio.file.Path nioPath = Paths.convert( path );
when( ioService.exists( eq( nioPath ) ) ).thenReturn( false );
final Set<MavenRepositoryMetadata> metadata = new HashSet<MavenRepositoryMetadata>();
metadata.add( new MavenRepositoryMetadata( "local",
"local-url",
MavenRepositorySource.LOCAL ) );
when( repositoryResolver.getRemoteRepositoriesMetaData() ).thenReturn( metadata );
final ProjectRepositories repositories = service.load( path );
assertNotNull( repositories );
assertNotNull( repositories.getRepositories() );
assertEquals( 1,
repositories.getRepositories().size() );
final ProjectRepositories.ProjectRepository repository = repositories.getRepositories().iterator().next();
assertEquals( "local",
repository.getMetadata().getId() );
assertEquals( "local-url",
repository.getMetadata().getUrl() );
assertEquals( MavenRepositorySource.LOCAL,
repository.getMetadata().getSource() );
assertEquals( true,
repository.isIncluded() );
verify( ioService,
times( 1 ) ).startBatch( any( FileSystem.class ),
any( CommentedOption.class ) );
verify( ioService,
times( 1 ) ).write( eq( nioPath ),
eq( xml ) );
verify( ioService,
times( 1 ) ).endBatch();
}
@Test
public void testSave() {
final Set<ProjectRepositories.ProjectRepository> repositories = new HashSet<ProjectRepositories.ProjectRepository>();
repositories.add( new ProjectRepositories.ProjectRepository( true,
new MavenRepositoryMetadata( "id",
"url",
MavenRepositorySource.LOCAL ) ) );
final ProjectRepositories projectRepositories = new ProjectRepositories( repositories );
final String xml = "<project-repositories>\n" +
" <repositories>\n" +
" <repository>\n" +
" <include>true</include>\n" +
" <metadata>\n" +
" <id>id</id>\n" +
" <url>url</url>\n" +
" <source>LOCAL</source>\n" +
" </metadata>\n" +
" </repository>\n" +
" </repositories>\n" +
"</project-repositories>";
final Path path = mock( Path.class );
when( path.toURI() ).thenReturn( "default://p0/project.repositories" );
final org.uberfire.java.nio.file.Path nioPath = Paths.convert( path );
service.save( path,
projectRepositories,
"comment" );
verify( ioService,
times( 1 ) ).write( eq( nioPath ),
eq( xml ) );
}
@Test
public void testFiltered() {
final String xml = "<project-repositories>\n" +
" <repositories>\n" +
" <repository>\n" +
" <include>true</include>\n" +
" <metadata>\n" +
" <id>id1</id>\n" +
" <url>url1</url>\n" +
" <source>LOCAL</source>\n" +
" </metadata>\n" +
" </repository>\n" +
" <repository>\n" +
" <include>false</include>\n" +
" <metadata>\n" +
" <id>id2</id>\n" +
" <url>url2</url>\n" +
" <source>LOCAL</source>\n" +
" </metadata>\n" +
" </repository>\n" +
" </repositories>\n" +
"</project-repositories>";
final Path path = mock( Path.class );
when( path.toURI() ).thenReturn( "default://p0/project.repositories" );
final org.uberfire.java.nio.file.Path nioPath = Paths.convert( path );
when( ioService.exists( eq( nioPath ) ) ).thenReturn( true );
when( ioService.readAllString( eq( nioPath ) ) ).thenReturn( xml );
final ProjectRepositories repositories = service.load( path );
assertNotNull( repositories );
assertNotNull( repositories.getRepositories() );
assertEquals( 2,
repositories.getRepositories().size() );
final MavenRepositoryMetadata[] metadatas = repositories.filterByIncluded();
assertEquals( 1,
metadatas.length );
final MavenRepositoryMetadata metadata = metadatas[ 0 ];
assertEquals( "id1",
metadata.getId() );
assertEquals( "url1",
metadata.getUrl() );
assertEquals( MavenRepositorySource.LOCAL,
metadata.getSource() );
}
}