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.Matchers.eq;
23 import static org.mockito.Matchers.isA;
24 import static org.mockito.Mockito.mock;
25 import static org.mockito.Mockito.times;
26 import static org.mockito.Mockito.verify;
27 import static org.mockito.Mockito.verifyNoMoreInteractions;
28 import static org.mockito.Mockito.when;
29
30 import java.util.Collections;
31 import java.util.List;
32
33 import org.apache.maven.model.Model;
34 import org.apache.maven.project.MavenProject;
35 import org.apache.maven.shared.release.ReleaseExecutionException;
36 import org.apache.maven.shared.release.config.ReleaseDescriptor;
37 import org.apache.maven.shared.release.env.DefaultReleaseEnvironment;
38 import org.codehaus.plexus.PlexusTestCase;
39 import org.codehaus.plexus.components.interactivity.Prompter;
40 import org.codehaus.plexus.components.interactivity.PrompterException;
41
42
43
44
45
46
47 public class InputVariablesPhaseTest
48 extends PlexusTestCase
49 {
50 private InputVariablesPhase phase;
51
52 protected void setUp()
53 throws Exception
54 {
55 super.setUp();
56 phase = (InputVariablesPhase) lookup( ReleasePhase.ROLE, "input-variables" );
57 }
58
59 public void testInputVariablesInteractive()
60 throws Exception
61 {
62
63 Prompter mockPrompter = mock( Prompter.class );
64 when( mockPrompter.prompt( isA( String.class ), eq( "artifactId-1.0" ) ) ).thenReturn( "tag-value", "simulated-tag-value" );
65 phase.setPrompter( mockPrompter );
66
67 List<MavenProject> reactorProjects = Collections.singletonList( createProject( "artifactId", "1.0" ) );
68
69 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
70 releaseDescriptor.mapReleaseVersion( "groupId:artifactId", "1.0" );
71 releaseDescriptor.setScmSourceUrl( "scm:svn:file://localhost/tmp/scm-repo" );
72
73
74 phase.execute( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
75
76
77 assertEquals( "Check tag", "tag-value", releaseDescriptor.getScmReleaseLabel() );
78
79
80 releaseDescriptor = new ReleaseDescriptor();
81 releaseDescriptor.mapReleaseVersion( "groupId:artifactId", "1.0" );
82 releaseDescriptor.setScmSourceUrl( "scm:svn:file://localhost/tmp/scm-repo" );
83
84
85 phase.simulate( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
86
87
88 assertEquals( "Check tag", "simulated-tag-value", releaseDescriptor.getScmReleaseLabel() );
89
90 verify( mockPrompter, times( 2 ) ).prompt( isA( String.class ), eq( "artifactId-1.0" ) );
91 verifyNoMoreInteractions( mockPrompter );
92 }
93
94 public void testUnmappedVersion()
95 throws Exception
96 {
97 List<MavenProject> reactorProjects = Collections.singletonList( createProject( "artifactId", "1.0" ) );
98
99 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
100
101 try
102 {
103 phase.execute( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
104
105 fail( "Expected an exception" );
106 }
107 catch ( ReleaseExecutionException e )
108 {
109 assertNull( "check no cause", e.getCause() );
110 }
111
112 releaseDescriptor = new ReleaseDescriptor();
113
114 try
115 {
116 phase.simulate( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
117
118 fail( "Expected an exception" );
119 }
120 catch ( ReleaseExecutionException e )
121 {
122 assertNull( "check no cause", e.getCause() );
123 }
124 }
125
126 public void testInputVariablesNonInteractive()
127 throws Exception
128 {
129
130 Prompter mockPrompter = mock( Prompter.class );
131 phase.setPrompter( mockPrompter );
132
133 List<MavenProject> reactorProjects = Collections.singletonList( createProject( "artifactId", "1.0" ) );
134
135 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
136 releaseDescriptor.setInteractive( false );
137 releaseDescriptor.mapReleaseVersion( "groupId:artifactId", "1.0" );
138 releaseDescriptor.setScmSourceUrl( "scm:svn:file://localhost/tmp/scm-repo" );
139
140
141 phase.execute( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
142
143
144 assertEquals( "Check tag", "artifactId-1.0", releaseDescriptor.getScmReleaseLabel() );
145
146
147 releaseDescriptor = new ReleaseDescriptor();
148 releaseDescriptor.setInteractive( false );
149 releaseDescriptor.mapReleaseVersion( "groupId:artifactId", "1.0" );
150 releaseDescriptor.setScmSourceUrl( "scm:svn:file://localhost/tmp/scm-repo" );
151
152
153 phase.simulate( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
154
155
156 assertEquals( "Check tag", "artifactId-1.0", releaseDescriptor.getScmReleaseLabel() );
157
158
159 verifyNoMoreInteractions( mockPrompter );
160 }
161
162 public void testInputVariablesNonInteractiveConfigured()
163 throws Exception
164 {
165
166 Prompter mockPrompter = mock( Prompter.class );
167 phase.setPrompter( mockPrompter );
168
169 List<MavenProject> reactorProjects = Collections.singletonList( createProject( "artifactId", "1.0" ) );
170
171 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
172 releaseDescriptor.setInteractive( false );
173 releaseDescriptor.setScmReleaseLabel( "tag-value" );
174
175
176 phase.execute( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
177
178
179 assertEquals( "Check tag", "tag-value", releaseDescriptor.getScmReleaseLabel() );
180
181
182 releaseDescriptor = new ReleaseDescriptor();
183 releaseDescriptor.setInteractive( false );
184 releaseDescriptor.setScmReleaseLabel( "simulated-tag-value" );
185
186
187 phase.simulate( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
188
189
190 assertEquals( "Check tag", "simulated-tag-value", releaseDescriptor.getScmReleaseLabel() );
191
192
193 verifyNoMoreInteractions( mockPrompter );
194 }
195
196 public void testInputVariablesInteractiveConfigured()
197 throws Exception
198 {
199
200 Prompter mockPrompter = mock( Prompter.class );
201 phase.setPrompter( mockPrompter );
202
203 List<MavenProject> reactorProjects = Collections.singletonList( createProject( "artifactId", "1.0" ) );
204
205 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
206 releaseDescriptor.setScmReleaseLabel( "tag-value" );
207
208
209 phase.execute( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
210
211
212 assertEquals( "Check tag", "tag-value", releaseDescriptor.getScmReleaseLabel() );
213
214
215 releaseDescriptor = new ReleaseDescriptor();
216 releaseDescriptor.setScmReleaseLabel( "simulated-tag-value" );
217
218
219 phase.simulate( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
220
221
222 assertEquals( "Check tag", "simulated-tag-value", releaseDescriptor.getScmReleaseLabel() );
223
224
225 verifyNoMoreInteractions( mockPrompter );
226 }
227
228 public void testPrompterException()
229 throws Exception
230 {
231
232 Prompter mockPrompter = mock( Prompter.class );
233 when( mockPrompter.prompt( isA( String.class ), isA( String.class ) ) ).thenThrow( new PrompterException( "..." ) );
234 phase.setPrompter( mockPrompter );
235
236 List<MavenProject> reactorProjects = Collections.singletonList( createProject( "artifactId", "1.0" ) );
237
238 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
239 releaseDescriptor.mapReleaseVersion( "groupId:artifactId", "1.0" );
240 releaseDescriptor.setScmSourceUrl( "scm:svn:file://localhost/tmp/scm-repo" );
241
242
243 try
244 {
245 phase.execute( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
246
247 fail( "Expected an exception" );
248 }
249 catch ( ReleaseExecutionException e )
250 {
251 assertEquals( "check cause", PrompterException.class, e.getCause().getClass() );
252 }
253
254
255 releaseDescriptor = new ReleaseDescriptor();
256 releaseDescriptor.mapReleaseVersion( "groupId:artifactId", "1.0" );
257 releaseDescriptor.setScmSourceUrl( "scm:svn:file://localhost/tmp/scm-repo" );
258
259
260 try
261 {
262 phase.simulate( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
263
264 fail( "Expected an exception" );
265 }
266 catch ( ReleaseExecutionException e )
267 {
268 assertEquals( "check cause", PrompterException.class, e.getCause().getClass() );
269 }
270
271
272 verify( mockPrompter, times( 2 ) ).prompt( isA( String.class ), isA( String.class ) );
273 verifyNoMoreInteractions( mockPrompter );
274 }
275
276
277 public void testCvsTag()
278 throws Exception
279 {
280
281 Prompter mockPrompter = mock( Prompter.class );
282 phase.setPrompter( mockPrompter );
283
284 List<MavenProject> reactorProjects = Collections.singletonList( createProject( "artifactId", "1.0" ) );
285
286 ReleaseDescriptor releaseConfiguration = new ReleaseDescriptor();
287 releaseConfiguration.setInteractive( false );
288 releaseConfiguration.mapReleaseVersion( "groupId:artifactId", "1.0" );
289 releaseConfiguration.setScmSourceUrl( "scm:cvs:pserver:anoncvs@localhost:/tmp/scm-repo:module" );
290
291
292 phase.execute( releaseConfiguration, new DefaultReleaseEnvironment(), reactorProjects );
293
294
295 assertEquals( "Check tag", "artifactId-1_0", releaseConfiguration.getScmReleaseLabel() );
296
297
298 releaseConfiguration = new ReleaseDescriptor();
299 releaseConfiguration.setInteractive( false );
300 releaseConfiguration.mapReleaseVersion( "groupId:artifactId", "1.0" );
301 releaseConfiguration.setScmSourceUrl( "scm:cvs:pserver:anoncvs@localhost:/tmp/scm-repo:module" );
302
303
304 phase.simulate( releaseConfiguration, new DefaultReleaseEnvironment(), reactorProjects );
305
306
307 assertEquals( "Check tag", "artifactId-1_0", releaseConfiguration.getScmReleaseLabel() );
308
309
310 verifyNoMoreInteractions( mockPrompter );
311 }
312
313
314 public void testCustomTagFormat()
315 throws Exception
316 {
317
318 Prompter mockPrompter = mock( Prompter.class );
319 phase.setPrompter( mockPrompter );
320
321 List<MavenProject> reactorProjects = Collections.singletonList( createProject( "artifactId", "1.0" ) );
322 ReleaseDescriptor releaseDescriptor = new ReleaseDescriptor();
323 releaseDescriptor.setInteractive( false );
324 releaseDescriptor.mapReleaseVersion( "groupId:artifactId", "1.0" );
325 releaseDescriptor.setScmSourceUrl( "scm:svn:file://localhost/tmp/scm-repo" );
326
327
328 phase.execute( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
329
330
331 assertEquals( "Check tag", "artifactId-1.0", releaseDescriptor.getScmReleaseLabel() );
332
333
334 releaseDescriptor = new ReleaseDescriptor();
335 releaseDescriptor.setInteractive( false );
336 releaseDescriptor.mapReleaseVersion( "groupId:artifactId", "1.0" );
337 releaseDescriptor.setScmSourceUrl( "scm:svn:file://localhost/tmp/scm-repo" );
338 releaseDescriptor.setScmTagNameFormat( "simulated-@{artifactId}-@{version}" );
339
340
341 phase.simulate( releaseDescriptor, new DefaultReleaseEnvironment(), reactorProjects );
342
343
344 assertEquals( "Check tag", "simulated-artifactId-1.0", releaseDescriptor.getScmReleaseLabel() );
345
346
347 verifyNoMoreInteractions( mockPrompter );
348 }
349
350 private static MavenProject createProject( String artifactId, String version )
351 {
352 Model model = new Model();
353 model.setGroupId( "groupId" );
354 model.setArtifactId( artifactId );
355 model.setVersion( version );
356 return new MavenProject( model );
357 }
358
359 }