1 package org.apache.maven.shared.release.phase;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import static org.mockito.Mockito.*;
23
24 import java.util.Collections;
25 import java.util.List;
26
27 import org.apache.maven.project.MavenProject;
28 import org.apache.maven.scm.ScmFile;
29 import org.apache.maven.scm.ScmFileSet;
30 import org.apache.maven.scm.ScmFileStatus;
31 import org.apache.maven.scm.ScmVersion;
32 import org.apache.maven.scm.command.checkin.CheckInScmResult;
33 import org.apache.maven.scm.manager.ScmManager;
34 import org.apache.maven.scm.manager.ScmManagerStub;
35 import org.apache.maven.scm.provider.ScmProvider;
36 import org.apache.maven.scm.repository.ScmRepository;
37 import org.apache.maven.shared.release.config.ReleaseDescriptor;
38 import org.apache.maven.shared.release.env.DefaultReleaseEnvironment;
39 import org.apache.maven.shared.release.util.ReleaseUtil;
40
41
42
43
44
45
46 public class ScmCommitDevelopmentPhaseTest
47 extends AbstractReleaseTestCase
48 {
49 private static final String COMMIT_MESSAGE = "[maven-release-manager] prepare for next development iteration";
50
51 private static final String ROLLBACK_PREFIX =
52 "[maven-release-manager] rollback changes from release preparation of ";
53
54 private List<MavenProject> reactorProjects;
55
56 private MavenProject rootProject;
57
58 private ReleaseDescriptor descriptor;
59
60 private ScmProvider scmProviderMock;
61
62 protected void setUp()
63 throws Exception
64 {
65 super.setUp();
66
67 phase = (ReleasePhase) lookup( ReleasePhase.ROLE, "scm-commit-development" );
68
69 reactorProjects = createReactorProjects();
70 rootProject = ReleaseUtil.getRootProject( reactorProjects );
71 descriptor = createReleaseDescriptor( rootProject );
72 }
73
74 public void testIsCorrectImplementation()
75 {
76 assertEquals( ScmCommitDevelopmentPhase.class, phase.getClass() );
77 }
78
79 public void testNoCommitOrRollbackRequired()
80 throws Exception
81 {
82 ReleaseDescriptor descriptor = createReleaseDescriptor( rootProject );
83 List<MavenProject> reactorProjects = createReactorProjects();
84
85 descriptor.setRemoteTagging( false );
86 descriptor.setSuppressCommitBeforeTagOrBranch( true );
87 descriptor.setUpdateWorkingCopyVersions( false );
88
89 prepareNoCheckin();
90
91 phase.execute( descriptor, new DefaultReleaseEnvironment(), reactorProjects );
92
93 verifyNoCheckin();
94 }
95
96 public void testCommitsNextVersions()
97 throws Exception
98 {
99 descriptor.setUpdateWorkingCopyVersions( true );
100
101 prepareCheckin( COMMIT_MESSAGE );
102
103 phase.execute( descriptor, new DefaultReleaseEnvironment(), reactorProjects );
104
105 verifyCheckin( COMMIT_MESSAGE );
106 }
107
108 public void testCommitsRollbackPrepare()
109 throws Exception
110 {
111 descriptor.setUpdateWorkingCopyVersions( false );
112
113 String message = ROLLBACK_PREFIX + descriptor.getScmReleaseLabel();
114
115 prepareCheckin( message );
116
117 phase.execute( descriptor, new DefaultReleaseEnvironment(), reactorProjects );
118
119 verifyCheckin( message );
120 }
121
122 private void prepareCheckin( String message )
123 throws Exception
124 {
125 ScmFileSet fileSet = new ScmFileSet( rootProject.getFile().getParentFile(), rootProject.getFile() );
126 scmProviderMock = mock( ScmProvider.class );
127 when( scmProviderMock.checkIn( isA( ScmRepository.class ),
128 argThat( new IsScmFileSetEquals( fileSet ) ),
129 isNull( ScmVersion.class ),
130 eq( message ) ) ).thenReturn( new CheckInScmResult( "...", Collections.singletonList( new ScmFile( rootProject
131 .getFile().getPath(), ScmFileStatus.CHECKED_IN ) ) ) );
132 ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
133 stub.setScmProvider( scmProviderMock );
134 }
135
136 private void verifyCheckin( String message ) throws Exception
137 {
138 ScmFileSet fileSet = new ScmFileSet( rootProject.getFile().getParentFile(), rootProject.getFile() );
139 verify( scmProviderMock ).checkIn( isA( ScmRepository.class ),
140 argThat( new IsScmFileSetEquals( fileSet ) ),
141 isNull( ScmVersion.class ),
142 eq( message ) );
143 verifyNoMoreInteractions( scmProviderMock );
144 }
145
146 private void prepareNoCheckin()
147 throws Exception
148 {
149 scmProviderMock = mock( ScmProvider.class );
150 ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.ROLE );
151 stub.setScmProvider( scmProviderMock );
152 }
153
154 private void verifyNoCheckin()
155 {
156 verifyNoMoreInteractions( scmProviderMock );
157 }
158
159 private List<MavenProject> createReactorProjects()
160 throws Exception
161 {
162 return createReactorProjects( "scm-commit/", "single-pom" );
163 }
164
165 private static ReleaseDescriptor createReleaseDescriptor( MavenProject rootProject )
166 {
167 ReleaseDescriptor descriptor = new ReleaseDescriptor();
168 descriptor.setScmSourceUrl( "scm-url" );
169 descriptor.setScmReleaseLabel( "release-label" );
170 descriptor.setWorkingDirectory( rootProject.getFile().getParentFile().getAbsolutePath() );
171 return descriptor;
172 }
173 }