blob: 1ab39ead2ca04f1464df2110e41f97f20aa1b005 [file] [log] [blame]
package org.apache.maven.scm.provider.accurev.command.status;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
import static org.apache.maven.scm.ScmFileMatcher.assertHasScmFile;
import static org.apache.maven.scm.ScmFileMatcher.scmFile;
import static org.hamcrest.CoreMatchers.hasItems;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
import static org.mockito.ArgumentMatchers.anyListOf;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.when;
import static org.mockito.hamcrest.MockitoHamcrest.argThat;
import java.io.File;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import org.apache.maven.scm.CommandParameters;
import org.apache.maven.scm.ScmFile;
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.ScmFileStatus;
import org.apache.maven.scm.command.status.StatusScmResult;
import org.apache.maven.scm.provider.accurev.AccuRevStat;
import org.apache.maven.scm.provider.accurev.CategorisedElements;
import org.apache.maven.scm.provider.accurev.command.AbstractAccuRevCommandTest;
import org.hamcrest.Matchers;
import org.junit.Test;
public class AccuRevStatusCommandTest
extends AbstractAccuRevCommandTest
{
@Test
public void testStatus()
throws Exception
{
final ScmFileSet testFileSet = getScmFileSet();
File keptFile = new File( "kept/file" );
File keptAdded = new File( "kept/added" );
// this is the special one, it is returned by both the kept and defunct stat calls, so the command
// needs to filter it out.
File keptDefunct = new File( "kept/defunct" );
File modifiedFile = new File( "modified/file" );
File modifiedAdded = new File( "modified/added" );
File missingFile = new File( "missing/file" );
File externalFile = new File( "external/file" );
when( accurev.stat( eq( basedir ), anyListOf( File.class ), eq( AccuRevStat.DEFUNCT ) ) ).thenReturn(
Arrays.asList( keptDefunct ) );
when( accurev.stat( eq( basedir ), anyListOf( File.class ), eq( AccuRevStat.MODIFIED ) ) ).thenReturn(
Arrays.asList( modifiedFile,modifiedAdded ) );
when( accurev.stat( eq( basedir ), anyListOf( File.class ), eq( AccuRevStat.KEPT ) ) ).thenReturn(
Arrays.asList(
keptDefunct,
keptFile,
keptAdded ) );
when( accurev.stat( eq( basedir ), anyListOf( File.class ), eq( AccuRevStat.MISSING ) ) ).thenReturn(
Arrays.asList( missingFile ) );
when( accurev.stat( eq( basedir ), anyListOf( File.class ), eq( AccuRevStat.EXTERNAL ) ) ).thenReturn(
Arrays.asList( externalFile ) );
CategorisedElements catElems = new CategorisedElements();
catElems.getMemberElements().addAll( Arrays.asList( modifiedFile, keptFile ) );
catElems.getNonMemberElements().addAll( Arrays.asList( modifiedAdded, keptAdded ) );
when(
accurev.statBackingStream( eq( basedir ), (Collection<File>) argThat( hasItems( modifiedFile,
modifiedAdded, keptFile,
keptAdded ) ) ) )
.thenReturn(
catElems );
AccuRevStatusCommand command = new AccuRevStatusCommand( getLogger() );
CommandParameters commandParameters = new CommandParameters();
StatusScmResult result = command.status( repo, testFileSet, commandParameters );
assertThat( result.isSuccess(), is( true ) );
assertThat( result.getChangedFiles().size(), is( 7 ) );
assertThat( (List<ScmFile>) result.getChangedFiles(),
not( Matchers.<ScmFile>hasItem( scmFile( "kept/defunct", ScmFileStatus.MODIFIED ) ) ) );
assertHasScmFile( result.getChangedFiles(), "kept/file", ScmFileStatus.MODIFIED );
assertHasScmFile( result.getChangedFiles(), "kept/added", ScmFileStatus.ADDED );
assertHasScmFile( result.getChangedFiles(), "kept/defunct", ScmFileStatus.DELETED );
assertHasScmFile( result.getChangedFiles(), "modified/file", ScmFileStatus.MODIFIED );
assertHasScmFile( result.getChangedFiles(), "modified/added", ScmFileStatus.ADDED );
assertHasScmFile( result.getChangedFiles(), "missing/file", ScmFileStatus.MISSING );
assertHasScmFile( result.getChangedFiles(), "external/file", ScmFileStatus.UNKNOWN );
}
@Test
public void testFailure()
throws Exception
{
final ScmFileSet testFileSet = getScmFileSet();
when( accurev.stat( basedir, testFileSet.getFileList(), AccuRevStat.MODIFIED ) ).thenReturn( null );
AccuRevStatusCommand command = new AccuRevStatusCommand( getLogger() );
CommandParameters commandParameters = new CommandParameters();
StatusScmResult result = command.status( repo, testFileSet, commandParameters );
assertThat( result.isSuccess(), is( false ) );
assertThat( result.getProviderMessage(), notNullValue() );
}
}