View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.maven.plugins.release;
20  
21  import java.io.File;
22  
23  import org.apache.maven.model.DistributionManagement;
24  import org.apache.maven.model.Site;
25  import org.apache.maven.plugin.testing.AbstractMojoTestCase;
26  import org.apache.maven.project.MavenProject;
27  import org.apache.maven.shared.release.ReleaseManager;
28  import org.apache.maven.shared.release.ReleasePerformRequest;
29  import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder;
30  import org.mockito.ArgumentCaptor;
31  
32  import static org.mockito.Mockito.mock;
33  import static org.mockito.Mockito.verify;
34  import static org.mockito.Mockito.verifyNoMoreInteractions;
35  
36  /**
37   * Test release:stage.
38   *
39   * @author <a href="mailto:brett@apache.org">Brett Porter</a>
40   */
41  public class StageReleaseMojoTest extends AbstractMojoTestCase {
42      private File workingDirectory;
43  
44      public void testStage() throws Exception {
45          StageReleaseMojo mojo = getMojoWithProjectSite("stage.xml");
46  
47          ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
48          builder.setWorkingDirectory(workingDirectory.getAbsolutePath());
49          File checkoutDirectory = getTestFile("target/checkout");
50          builder.setCheckoutDirectory(checkoutDirectory.getAbsolutePath());
51          builder.setPerformGoals("deploy site:stage-deploy");
52          builder.setAdditionalArguments("-DaltDeploymentRepository=\"staging\"");
53  
54          ReleasePerformRequest performRequest = new ReleasePerformRequest();
55          performRequest.setReleaseDescriptorBuilder(builder);
56          performRequest.setReleaseEnvironment(mojo.getReleaseEnvironment());
57          performRequest.setReactorProjects(mojo.getReactorProjects());
58          performRequest.setDryRun(false);
59  
60          ReleaseManager mock = mock(ReleaseManager.class);
61          mojo.setReleaseManager(mock);
62  
63          mojo.execute();
64  
65          // verify
66          ArgumentCaptor<ReleasePerformRequest> argument = ArgumentCaptor.forClass(ReleasePerformRequest.class);
67          verify(mock).perform(argument.capture());
68          assertNotNull(argument.getValue().getReleaseDescriptorBuilder());
69          assertNotNull(argument.getValue().getReleaseEnvironment());
70          assertNotNull(argument.getValue().getReactorProjects());
71          assertEquals(Boolean.FALSE, argument.getValue().getDryRun());
72          verifyNoMoreInteractions(mock);
73      }
74  
75      public void testCreateGoals() throws Exception {
76          StageReleaseMojo mojo = getMojoWithProjectSite("stage.xml");
77          mojo.createGoals();
78          assertEquals("deploy site:stage-deploy", mojo.goals);
79          mojo.goals = "deploy site:deploy";
80          mojo.createGoals();
81          assertEquals("deploy site:stage-deploy", mojo.goals);
82      }
83  
84      public void testCreateArguments() throws Exception {
85          StageReleaseMojo mojo = getMojoWithProjectSite("stage.xml");
86          mojo.setDeploymentRepository();
87          ReleaseDescriptorBuilder.BuilderReleaseDescriptor releaseDescriptor =
88                  mojo.createReleaseDescriptor().build();
89          assertEquals("-DskipTests -DaltDeploymentRepository=\"staging\"", releaseDescriptor.getAdditionalArguments());
90      }
91  
92      private StageReleaseMojo getMojoWithProjectSite(String fileName) throws Exception {
93          StageReleaseMojo mojo = (StageReleaseMojo) lookupMojo("stage", new File(workingDirectory, fileName));
94          mojo.setBasedir(workingDirectory);
95          mojo.setPomFileName("pom.xml");
96  
97          MavenProject project = (MavenProject) getVariableValueFromObject(mojo, "project");
98          DistributionManagement distributionManagement = new DistributionManagement();
99          distributionManagement.setSite(new Site());
100         project.setDistributionManagement(distributionManagement);
101 
102         setVariableValueToObject(mojo, "session", newMavenSession(project));
103 
104         return mojo;
105     }
106 
107     protected void setUp() throws Exception {
108         super.setUp();
109         workingDirectory = getTestFile("target/test-classes/mojos/stage");
110     }
111 }