/*
* 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.structure.backend.repositories;
import java.util.ArrayList;
import java.util.HashMap;
import org.guvnor.structure.repositories.NewBranchEvent;
import org.guvnor.structure.repositories.Repository;
import org.guvnor.structure.repositories.impl.git.GitRepository;
import org.guvnor.structure.server.config.ConfigGroup;
import org.guvnor.structure.server.config.ConfigurationService;
import org.guvnor.structure.server.repositories.RepositoryFactory;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.uberfire.backend.vfs.Path;
import static org.guvnor.structure.server.config.ConfigType.*;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@RunWith( MockitoJUnitRunner.class )
public class ConfiguredRepositoriesTest {
@Mock
ConfigurationService configurationService;
@Mock
RepositoryFactory repositoryFactory;
private ConfiguredRepositories configuredRepositories;
@Before
public void setUp() throws Exception {
final ArrayList<ConfigGroup> configGroups = new ArrayList<>();
configGroups.add( addRepository( "single", "master" ) );
configGroups.add( addRepository( "multibranch", "master", "dev", "release" ) );
when( configurationService.getConfiguration( REPOSITORY ) ).thenReturn( configGroups );
configuredRepositories = new ConfiguredRepositories( configurationService,
repositoryFactory,
SystemRepository.SYSTEM_REPO );
configuredRepositories.loadRepositories();
}
private ConfigGroup addRepository( final String alias,
final String... branches ) {
final ConfigGroup configGroup = new ConfigGroup();
final GitRepository repository = new GitRepository( alias );
final HashMap<String, Path> branchMap = new HashMap<>();
for ( String branch : branches ) {
branchMap.put( branch, mock( Path.class ) );
}
repository.setBranches( branchMap );
repository.setRoot( branchMap.get( "master" ) );
when( repositoryFactory.newRepository( configGroup ) ).thenReturn( repository );
return configGroup;
}
@Test
public void testLoadRepositories() throws Exception {
assertEquals( 2, configuredRepositories.getAllConfiguredRepositories().size() );
}
@Test
public void testLoadSingle() throws Exception {
final Repository single = configuredRepositories.getRepositoryByRepositoryAlias( "single" );
assertEquals( 1, single.getBranches().size() );
assertNotNull( single.getBranchRoot( "master" ) );
}
@Test
public void testLoadMultiBranch() throws Exception {
final Repository single = configuredRepositories.getRepositoryByRepositoryAlias( "multibranch" );
assertEquals( 3, single.getBranches().size() );
assertNotNull( single.getBranchRoot( "master" ) );
assertNotNull( single.getBranchRoot( "dev" ) );
assertNotNull( single.getBranchRoot( "release" ) );
}
@Test
public void testRemoveSingle() throws Exception {
final Path root = configuredRepositories.getRepositoryByRepositoryAlias( "single" ).getRoot();
assertNotNull( configuredRepositories.getRepositoryByRootPath( root ) );
assertNotNull( configuredRepositories.remove( "single" ) );
assertFalse( configuredRepositories.containsAlias( "single" ) );
assertNull( configuredRepositories.getRepositoryByRootPath( root ) );
}
@Test
public void testRemoveMultiBranch() throws Exception {
final Path devRoot = configuredRepositories.getRepositoryByRepositoryAlias( "multibranch" ).getBranchRoot( "dev" );
assertNotNull( configuredRepositories.getRepositoryByRootPath( devRoot ) );
assertNotNull( configuredRepositories.remove( "multibranch" ) );
assertFalse( configuredRepositories.containsAlias( "multibranch" ) );
assertNull( configuredRepositories.getRepositoryByRootPath( devRoot ) );
}
@Test
public void testNewBranch() throws Exception {
final Path branchPath = mock( Path.class );
final NewBranchEvent changedEvent = new NewBranchEvent( "single",
"mybranch",
branchPath,
System.currentTimeMillis() );
configuredRepositories.onNewBranch( changedEvent );
// Root for both is the default root
assertEquals( configuredRepositories.getRepositoryByRepositoryAlias( "single" ).getRoot(),
configuredRepositories.getRepositoryByRootPath( branchPath ).getRoot() );
final Repository single = configuredRepositories.getRepositoryByRepositoryAlias( "single" );
assertEquals( 2, single.getBranches().size() );
assertEquals( branchPath, single.getBranchRoot( "mybranch" ) );
}
}