View Javadoc

1   package org.apache.maven.shared.release.phase;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import static org.mockito.Matchers.isA;
23  import static org.mockito.Mockito.mock;
24  import static org.mockito.Mockito.verify;
25  import static org.mockito.Mockito.verifyNoMoreInteractions;
26  import static org.mockito.Mockito.when;
27  
28  import java.util.List;
29  
30  import org.apache.maven.project.MavenProject;
31  import org.apache.maven.scm.ScmException;
32  import org.apache.maven.scm.ScmFileSet;
33  import org.apache.maven.scm.command.edit.EditScmResult;
34  import org.apache.maven.scm.manager.ScmManagerStub;
35  import org.apache.maven.scm.provider.ScmProvider;
36  import org.apache.maven.scm.provider.ScmProviderStub;
37  import org.apache.maven.scm.repository.ScmRepository;
38  import org.apache.maven.shared.release.ReleaseExecutionException;
39  import org.apache.maven.shared.release.ReleaseFailureException;
40  import org.apache.maven.shared.release.config.ReleaseDescriptor;
41  import org.apache.maven.shared.release.env.DefaultReleaseEnvironment;
42  import org.apache.maven.shared.release.scm.DefaultScmRepositoryConfigurator;
43  import org.apache.maven.shared.release.scm.ReleaseScmCommandException;
44  import org.apache.maven.shared.release.scm.ScmRepositoryConfigurator;
45  
46  /**
47   * Base class with tests for rewriting POMs with edit mode.
48   *
49   * @author <a href="mailto:brett@apache.org">Brett Porter</a>
50   */
51  public abstract class AbstractEditModeRewritingReleasePhaseTestCase
52      extends AbstractRewritingReleasePhaseTestCase
53  {
54      public void testRewriteBasicPomWithEditMode()
55          throws Exception
56      {
57          List<MavenProject> reactorProjects = createReactorProjectsFromBasicPom();
58          ReleaseDescriptor config = createDescriptorFromBasicPom( reactorProjects );
59          config.setScmUseEditMode( true );
60          mapNextVersion( config, "groupId:artifactId" );
61  
62          phase.execute( config, new DefaultReleaseEnvironment(), reactorProjects );
63  
64          assertTrue( comparePomFiles( reactorProjects ) );
65      }
66  
67      public void testRewriteBasicPomWithEditModeFailure()
68          throws Exception
69      {
70          List<MavenProject> reactorProjects = createReactorProjectsFromBasicPom();
71          ReleaseDescriptor config = createDescriptorFromBasicPom( reactorProjects );
72          config.setScmUseEditMode( true );
73          mapNextVersion( config, "groupId:artifactId" );
74  
75          ScmManagerStub scmManager = new ScmManagerStub();
76          DefaultScmRepositoryConfigurator configurator =
77              (DefaultScmRepositoryConfigurator) lookup( ScmRepositoryConfigurator.ROLE );
78          configurator.setScmManager( scmManager );
79  
80          ScmProviderStub providerStub = (ScmProviderStub) scmManager.getProviderByUrl( config.getScmSourceUrl() );
81          providerStub.setEditScmResult( new EditScmResult( "", "", "", false ) );
82  
83          try
84          {
85              phase.execute( config, new DefaultReleaseEnvironment(), reactorProjects );
86  
87              fail( "Should have thrown an exception" );
88          }
89          catch ( ReleaseScmCommandException e )
90          {
91              assertNull( "Check no other cause", e.getCause() );
92          }
93      }
94  
95      public void testRewriteBasicPomWithEditModeException()
96          throws Exception
97      {
98          // prepare
99          List<MavenProject> reactorProjects = createReactorProjectsFromBasicPom();
100         ReleaseDescriptor config = createDescriptorFromBasicPom( reactorProjects );
101         config.setScmUseEditMode( true );
102         mapNextVersion( config, "groupId:artifactId" );
103 
104         ScmProvider scmProviderMock = mock( ScmProvider.class );
105         when( scmProviderMock.edit( isA( ScmRepository.class ), isA( ScmFileSet.class) ) ).thenThrow( new ScmException( "..." ) );
106 
107         ScmManagerStub scmManager = new ScmManagerStub();
108         DefaultScmRepositoryConfigurator configurator =
109             (DefaultScmRepositoryConfigurator) lookup( ScmRepositoryConfigurator.ROLE );
110         configurator.setScmManager( scmManager );
111         scmManager.setScmProvider( scmProviderMock );
112 
113         // execute
114         try
115         {
116             phase.execute( config, new DefaultReleaseEnvironment(), reactorProjects );
117 
118             fail( "Should have thrown an exception" );
119         }
120         catch ( ReleaseExecutionException e )
121         {
122             assertEquals( "Check cause", ScmException.class, e.getCause().getClass() );
123         }
124         // verify
125         verify( scmProviderMock ).edit( isA( ScmRepository.class ), isA( ScmFileSet.class ) );
126         verifyNoMoreInteractions( scmProviderMock );
127     }
128 
129     public void testRewritePomPluginDependencies()
130         throws Exception
131     {
132         List<MavenProject> reactorProjects = createReactorProjects( "internal-snapshot-plugin-deps" );
133         ReleaseDescriptor config = createDefaultConfiguration( reactorProjects );
134 
135         phase.execute( config, new DefaultReleaseEnvironment(), reactorProjects );
136 
137         assertTrue( comparePomFiles( reactorProjects ) );
138     }
139 
140     public void testRewritePomUnmappedPluginDependencies()
141         throws Exception
142     {
143         List<MavenProject> reactorProjects = createReactorProjects( "internal-snapshot-plugin-deps" );
144         ReleaseDescriptor config = createUnmappedConfiguration( reactorProjects );
145 
146         try
147         {
148             phase.execute( config, new DefaultReleaseEnvironment(), reactorProjects );
149 
150             fail( "Should have thrown an exception" );
151         }
152         catch ( ReleaseFailureException e )
153         {
154             assertTrue( true );
155         }
156     }
157 
158     public void testRewritePomProfile()
159         throws Exception
160     {
161         List<MavenProject> reactorProjects = createReactorProjects( "internal-snapshot-profile" );
162         ReleaseDescriptor config = createDefaultConfiguration( reactorProjects );
163 
164         phase.execute( config, new DefaultReleaseEnvironment(), reactorProjects );
165 
166         assertTrue( comparePomFiles( reactorProjects ) );
167     }
168 
169     public void testRewritePomUnmappedProfile()
170         throws Exception
171     {
172         List<MavenProject> reactorProjects = createReactorProjects( "internal-snapshot-profile" );
173         ReleaseDescriptor config = createUnmappedConfiguration( reactorProjects );
174 
175         try
176         {
177             phase.execute( config, new DefaultReleaseEnvironment(), reactorProjects );
178 
179             fail( "Should have thrown an exception" );
180         }
181         catch ( ReleaseFailureException e )
182         {
183             assertTrue( true );
184         }
185     }
186 
187 }