1 package org.apache.maven.plugins.release;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 import static org.hamcrest.CoreMatchers.instanceOf;
24 import static org.hamcrest.CoreMatchers.is;
25 import static org.hamcrest.CoreMatchers.notNullValue;
26 import static org.junit.Assert.assertThat;
27
28 import static org.mockito.Matchers.isA;
29 import static org.mockito.Mockito.doThrow;
30 import static org.mockito.Mockito.mock;
31 import static org.mockito.Mockito.verify;
32 import static org.mockito.Mockito.verifyNoMoreInteractions;
33
34 import java.io.File;
35 import java.util.Collections;
36 import java.util.List;
37 import java.util.Properties;
38
39 import org.apache.maven.execution.MavenSession;
40 import org.apache.maven.plugin.MojoExecutionException;
41 import org.apache.maven.plugin.MojoFailureException;
42 import org.apache.maven.plugin.testing.AbstractMojoTestCase;
43 import org.apache.maven.project.MavenProject;
44 import org.apache.maven.shared.release.ReleaseExecutionException;
45 import org.apache.maven.shared.release.ReleaseFailureException;
46 import org.apache.maven.shared.release.ReleaseManager;
47 import org.apache.maven.shared.release.ReleasePrepareRequest;
48 import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder;
49 import org.apache.maven.shared.release.env.ReleaseEnvironment;
50 import org.mockito.ArgumentCaptor;
51
52
53
54
55
56
57 public class PrepareReleaseMojoTest
58 extends AbstractMojoTestCase
59 {
60 private void setDefaults( PrepareReleaseMojo mojo )
61 throws IllegalAccessException
62 {
63 setVariableValueToObject( mojo, "updateWorkingCopyVersions", Boolean.TRUE );
64 }
65
66 public void testPrepare()
67 throws Exception
68 {
69 File testFile = getTestFile( "target/test-classes/mojos/prepare/prepare.xml" );
70 final PrepareReleaseMojo mojo = (PrepareReleaseMojo) lookupMojo( "prepare", testFile );
71 setDefaults( mojo );
72 mojo.setBasedir( testFile.getParentFile() );
73 mojo.setPomFileName( "pom.xml" );
74 mojo.session = new MavenSession( null, null, null, null, null, null, null, null, null )
75 {
76 public Properties getExecutionProperties()
77 {
78 return new Properties();
79 };
80
81 @Override
82 public List<MavenProject> getProjects()
83 {
84 return Collections.singletonList( mojo.project );
85 }
86 };
87
88 ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
89 builder.setWorkingDirectory( testFile.getParentFile().getAbsolutePath() );
90 builder.setUpdateDependencies( false );
91
92 ReleaseManager mock = mock( ReleaseManager.class );
93 mojo.setReleaseManager( mock );
94
95
96 mojo.execute();
97
98 ArgumentCaptor<ReleasePrepareRequest> prepareRequest = ArgumentCaptor.forClass( ReleasePrepareRequest.class );
99
100
101 verify( mock ).prepare( prepareRequest.capture() );
102
103 assertThat( prepareRequest.getValue().getReleaseDescriptorBuilder(),
104 is( instanceOf( ReleaseDescriptorBuilder.class ) ) );
105 assertThat( prepareRequest.getValue().getReleaseEnvironment(), is( instanceOf( ReleaseEnvironment.class ) ) );
106 assertThat( prepareRequest.getValue().getReactorProjects(), is( notNullValue() ) );
107 assertThat( prepareRequest.getValue().getResume(), is( true ) );
108 assertThat( prepareRequest.getValue().getDryRun(), is( false ) );
109 }
110
111 public void testPrepareWithExecutionException()
112 throws Exception
113 {
114 File testFile = getTestFile( "target/test-classes/mojos/prepare/prepare.xml" );
115 final PrepareReleaseMojo mojo = (PrepareReleaseMojo) lookupMojo( "prepare", testFile );
116 setDefaults( mojo );
117 mojo.setBasedir( testFile.getParentFile() );
118 mojo.setPomFileName( "pom.xml" );
119 mojo.session = new MavenSession( null, null, null, null, null, null, null, null, null )
120 {
121 public Properties getExecutionProperties(){
122 return new Properties();
123 };
124
125 @Override
126 public List<MavenProject> getProjects()
127 {
128 return Collections.singletonList( mojo.project );
129 }
130 };
131
132 ReleaseManager mock = mock( ReleaseManager.class );
133 doThrow( new ReleaseExecutionException( "..." ) ).when( mock ).prepare( isA( ReleasePrepareRequest.class ) );
134 mojo.setReleaseManager( mock );
135
136
137 try
138 {
139 mojo.execute();
140
141 fail( "Should have thrown an exception" );
142 }
143 catch ( MojoExecutionException e )
144 {
145 assertEquals( "Check cause", ReleaseExecutionException.class, e.getCause().getClass() );
146 }
147
148
149 verify( mock ).prepare( isA( ReleasePrepareRequest.class ) );
150 verifyNoMoreInteractions( mock );
151 }
152
153 public void testPrepareWithExecutionFailure()
154 throws Exception
155 {
156 File testFile = getTestFile( "target/test-classes/mojos/prepare/prepare.xml" );
157 final PrepareReleaseMojo mojo = (PrepareReleaseMojo) lookupMojo( "prepare", testFile );
158 setDefaults( mojo );
159 mojo.setBasedir( testFile.getParentFile() );
160 mojo.setPomFileName( "pom.xml" );
161 mojo.session = new MavenSession( null, null, null, null, null, null, null, null, null )
162 {
163 public Properties getExecutionProperties(){
164 return new Properties();
165 };
166
167 @Override
168 public List<MavenProject> getProjects()
169 {
170 return Collections.singletonList( mojo.project );
171 }
172 };
173
174 ReleaseManager mock = mock( ReleaseManager.class );
175 ReleaseFailureException cause = new ReleaseFailureException( "..." );
176 doThrow( cause ).when( mock ).prepare( isA( ReleasePrepareRequest.class ) );
177 mojo.setReleaseManager( mock );
178
179
180 try
181 {
182 mojo.execute();
183
184 fail( "Should have thrown an exception" );
185 }
186 catch ( MojoFailureException e )
187 {
188 assertEquals( "Check cause exists", cause, e.getCause() );
189 }
190
191 verify( mock ).prepare( isA( ReleasePrepareRequest.class ) );
192 verifyNoMoreInteractions( mock );
193 }
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276 }