/*******************************************************************************
*
* Copyright (c) 2010-2011 Sonatype, Inc.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*
*
*
*
*******************************************************************************/
package org.hudsonci.maven.eventspy_30;
import org.hudsonci.maven.eventspy_30.MavenProjectConverter;
import org.hudsonci.maven.model.state.BuildResultDTO;
import org.hudsonci.maven.model.state.BuildSummaryDTO;
import org.hudsonci.maven.model.state.MavenProjectDTO;
import org.apache.maven.execution.BuildFailure;
import org.apache.maven.execution.BuildSuccess;
import org.apache.maven.execution.BuildSummary;
import org.apache.maven.execution.MavenExecutionResult;
import org.apache.maven.lifecycle.LifecycleExecutionException;
import org.apache.maven.project.MavenProject;
import org.junit.Test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.Matchers.notNullValue;
import static org.hamcrest.Matchers.nullValue;
/**
* Model to DTO conversion tests for {@link MavenProjectConverter}.
*
* @author Jamie Whitehouse
*/
public class MavenProjectConverterTest
{
@Test
public void verifyBuildSummaryToBuildResultConversion()
{
BuildResultDTO success =
MavenProjectConverter.convertToBuildResult( new BuildSuccess( createProjectStub(), 0 ) );
assertThat( success, equalTo( BuildResultDTO.SUCCESS ) );
BuildResultDTO failure =
MavenProjectConverter.convertToBuildResult( new BuildFailure( createProjectStub(), 0, null ) );
assertThat( failure, equalTo( BuildResultDTO.FAILURE ) );
BuildResultDTO nullSummary = MavenProjectConverter.convertToBuildResult( null );
assertThat( nullSummary, equalTo( BuildResultDTO.SKIPPED ) );
BuildResultDTO unknownType =
MavenProjectConverter.convertToBuildResult( new BuildSummary( createProjectStub(), 0 )
{
} );
assertThat( unknownType, equalTo( BuildResultDTO.UNKNOWN ) );
}
@Test
public void verifyNonNullBuildSummaryConversion()
{
long duration = 1002003;
BuildSummary summary = new BuildSummary( createProjectStub(), duration )
{
};
BuildSummaryDTO summaryDTO = MavenProjectConverter.convertBuildSummary( summary );
assertThat( summaryDTO.getDuration(), equalTo( duration ) );
// Result conversion tested elsewhere; just ensure that it's been copied into the DTO.
assertThat( summaryDTO.getResult(), instanceOf( BuildResultDTO.class ) );
// TODO: if BuildSummary is instance of BuildFailure there's an exception that can be added
}
@Test
public void failureBuildSummaryCauseIsConverted()
{
BuildSummary summary = new BuildFailure( createProjectStub(), 0,
new LifecycleExecutionException( new IllegalStateException( "Nested exception for testing." ) ) );
BuildSummaryDTO summaryDTO = MavenProjectConverter.convertBuildSummary( summary );
// Content doesn't matter for this test.
assertThat( summaryDTO.getFailureCause(), notNullValue() );
}
@Test
public void failureBuildSummaryWithNullCauseIsConvertedWithoutNPE()
{
BuildSummary summary = new BuildFailure( createProjectStub(), 0, null );
BuildSummaryDTO summaryDTO = MavenProjectConverter.convertBuildSummary( summary );
assertThat( summaryDTO.getFailureCause(), nullValue() );
}
@Test
public void nullBuildSummaryIsConvertedToSkipped()
{
BuildSummaryDTO summaryDTO = MavenProjectConverter.convertBuildSummary( null );
assertThat( summaryDTO.getResult(), equalTo( BuildResultDTO.SKIPPED ) );
}
@Test
public void projectUpdatedWithConvertedBuildSummary()
{
// BuildSummary conversion is tested elsewhere; just ensure that there is
// an association made between the converted value and the MavenProjectDTO.
// Expected initial state.
MavenProjectDTO projectDTO = new MavenProjectDTO();
assertThat( projectDTO.getBuildSummary(), nullValue() );
BuildSummary summary = new BuildSummary( createProjectStub(), 0 )
{
};
MavenProjectConverter.updateWithBuildSummary( projectDTO, summary );
BuildSummaryDTO summaryDTO = projectDTO.getBuildSummary();
assertThat( summaryDTO, notNullValue() );
assertThat( summaryDTO, instanceOf( BuildSummaryDTO.class ) );
}
/**
* Verifies that when {@link MavenExecutionResult#getBuildSummary(MavenProject)} returns null the project is updated
* appropriately.
*/
@Test
public void projectUpdatedToSkippedWhenBuildSummaryIsNull()
{
MavenProjectDTO projectDTO = new MavenProjectDTO();
MavenProjectConverter.updateWithBuildSummary( projectDTO, null );
assertThat( projectDTO.getBuildSummary().getResult(), equalTo( BuildResultDTO.SKIPPED ) );
}
@Test
public void projectWithNoBuildSummaryIsUpdatedWithConvertedBuildResult()
{
MavenProjectDTO projectDTO = new MavenProjectDTO();
// test when no build summary
MavenProjectConverter.updateWithBuildResult( projectDTO, BuildResultDTO.SCHEDULED );
assertThat( projectDTO.getBuildSummary().getResult(), equalTo( BuildResultDTO.SCHEDULED ) );
}
@Test
public void projectWithExistingBuildSummaryIsOverwrittenWithConvertedBuildResult()
{
MavenProjectDTO projectDTO = new MavenProjectDTO();
projectDTO.setBuildSummary( new BuildSummaryDTO().withResult( BuildResultDTO.SUCCESS ).withDuration( 500L ) );
assertThat( projectDTO.getBuildSummary(), notNullValue() );
BuildSummary summary = new BuildFailure( createProjectStub(), 1500, null );
// test when build summary already exists
MavenProjectConverter.updateWithBuildSummary( projectDTO, summary );
assertThat( projectDTO.getBuildSummary().getResult(), equalTo( BuildResultDTO.FAILURE ) );
assertThat( projectDTO.getBuildSummary().getDuration(), equalTo( 1500l ) );
}
@Test
public void verifyMavenProjectBasicConversion()
{
MavenProject project = createProjectStub();
MavenProjectDTO projectDTO = MavenProjectConverter.convertMavenProject( project );
assertThat( projectDTO.getName(), equalTo( project.getName() ) );
assertThat( projectDTO.getId(), equalTo( "org.hudsonci.example:example-project:jar:1.0-SNAPSHOT") );
// TODO: no name set
}
private MavenProject createProjectStub()
{
MavenProject project = new MavenProject();
project.setName( "Project for testing" );
project.setGroupId( "org.hudsonci.example" );
project.setArtifactId( "example-project" );
project.setVersion( "1.0-SNAPSHOT" );
return project;
}
}