1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.shared.release.phase;
20
21 import java.util.List;
22
23 import com.google.inject.Module;
24 import org.apache.maven.project.MavenProject;
25 import org.apache.maven.scm.ScmException;
26 import org.apache.maven.scm.ScmFileSet;
27 import org.apache.maven.scm.command.edit.EditScmResult;
28 import org.apache.maven.scm.manager.ScmManagerStub;
29 import org.apache.maven.scm.provider.ScmProvider;
30 import org.apache.maven.scm.provider.ScmProviderStub;
31 import org.apache.maven.scm.repository.ScmRepository;
32 import org.apache.maven.shared.release.ReleaseExecutionException;
33 import org.apache.maven.shared.release.ReleaseFailureException;
34 import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder;
35 import org.apache.maven.shared.release.config.ReleaseUtils;
36 import org.apache.maven.shared.release.env.DefaultReleaseEnvironment;
37 import org.apache.maven.shared.release.scm.DefaultScmRepositoryConfigurator;
38 import org.apache.maven.shared.release.scm.ReleaseScmCommandException;
39 import org.apache.maven.shared.release.scm.ScmRepositoryConfigurator;
40 import org.junit.Test;
41
42 import static org.junit.Assert.assertEquals;
43 import static org.junit.Assert.assertNull;
44 import static org.junit.Assert.assertTrue;
45 import static org.junit.Assert.fail;
46 import static org.mockito.ArgumentMatchers.isA;
47 import static org.mockito.Mockito.mock;
48 import static org.mockito.Mockito.verify;
49 import static org.mockito.Mockito.verifyNoMoreInteractions;
50 import static org.mockito.Mockito.when;
51
52
53
54
55
56
57 public abstract class AbstractEditModeRewritingReleasePhaseTestCase extends AbstractRewritingReleasePhaseTestCase {
58 public AbstractEditModeRewritingReleasePhaseTestCase(String modelETL) {
59 super(modelETL);
60 }
61
62 @Override
63 protected Module[] getCustomModules() {
64 return new Module[0];
65 }
66
67 @Test
68 public void testRewriteBasicPomWithEditMode() throws Exception {
69 List<MavenProject> reactorProjects = createReactorProjects("basic-pom");
70 ReleaseDescriptorBuilder builder = createDescriptorFromBasicPom(reactorProjects, "basic-pom");
71 builder.setScmUseEditMode(true);
72 mapNextVersion(builder, "groupId:artifactId");
73
74 phase.execute(ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
75
76 assertTrue(comparePomFiles(reactorProjects));
77 }
78
79 @Test
80 public void testRewriteBasicPomWithEditModeFailure() throws Exception {
81 List<MavenProject> reactorProjects = createReactorProjects("basic-pom");
82 ReleaseDescriptorBuilder builder = createDescriptorFromProjects(reactorProjects, "basic-pom");
83 builder.setScmUseEditMode(true);
84 mapNextVersion(builder, "groupId:artifactId");
85
86 ScmManagerStub scmManager = new ScmManagerStub();
87 DefaultScmRepositoryConfigurator configurator =
88 (DefaultScmRepositoryConfigurator) lookup(ScmRepositoryConfigurator.class, "default");
89 configurator.setScmManager(scmManager);
90
91 ScmProviderStub providerStub = (ScmProviderStub) scmManager.getProviderByUrl(
92 ReleaseUtils.buildReleaseDescriptor(builder).getScmSourceUrl());
93 providerStub.setEditScmResult(new EditScmResult("", "", "", false));
94
95 try {
96 phase.execute(
97 ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
98
99 fail("Should have thrown an exception");
100 } catch (ReleaseScmCommandException e) {
101 assertNull("Check no other cause", e.getCause());
102 }
103 }
104
105 @Test
106 public void testRewriteBasicPomWithEditModeException() throws Exception {
107
108 List<MavenProject> reactorProjects = createReactorProjects("basic-pom");
109 ReleaseDescriptorBuilder builder = createDescriptorFromProjects(reactorProjects, "basic-pom");
110 builder.setScmUseEditMode(true);
111 mapNextVersion(builder, "groupId:artifactId");
112
113 ScmProvider scmProviderMock = mock(ScmProvider.class);
114 when(scmProviderMock.edit(isA(ScmRepository.class), isA(ScmFileSet.class)))
115 .thenThrow(new ScmException("..."));
116
117 ScmManagerStub scmManager = new ScmManagerStub();
118 DefaultScmRepositoryConfigurator configurator =
119 (DefaultScmRepositoryConfigurator) lookup(ScmRepositoryConfigurator.class, "default");
120 configurator.setScmManager(scmManager);
121 scmManager.setScmProvider(scmProviderMock);
122
123
124 try {
125 phase.execute(
126 ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
127
128 fail("Should have thrown an exception");
129 } catch (ReleaseExecutionException e) {
130 assertEquals("Check cause", ScmException.class, e.getCause().getClass());
131 }
132
133 verify(scmProviderMock).edit(isA(ScmRepository.class), isA(ScmFileSet.class));
134 verifyNoMoreInteractions(scmProviderMock);
135 }
136
137 @Test
138 public void testRewritePomPluginDependencies() throws Exception {
139 List<MavenProject> reactorProjects = createReactorProjects("internal-snapshot-plugin-deps");
140 ReleaseDescriptorBuilder builder = createDefaultConfiguration(reactorProjects, "internal-snapshot-plugin-deps");
141
142 phase.execute(ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
143
144 assertTrue(comparePomFiles(reactorProjects));
145 }
146
147 @Test
148 public void testRewritePomUnmappedPluginDependencies() throws Exception {
149 List<MavenProject> reactorProjects = createReactorProjects("internal-snapshot-plugin-deps");
150 ReleaseDescriptorBuilder builder =
151 createUnmappedConfiguration(reactorProjects, "internal-snapshot-plugin-deps");
152
153 try {
154 phase.execute(
155 ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
156
157 fail("Should have thrown an exception");
158 } catch (ReleaseFailureException e) {
159 assertTrue(true);
160 }
161 }
162
163 @Test
164 public void testRewritePomProfile() throws Exception {
165 List<MavenProject> reactorProjects = createReactorProjects("internal-snapshot-profile");
166 ReleaseDescriptorBuilder builder = createDefaultConfiguration(reactorProjects, "internal-snapshot-profile");
167
168 phase.execute(ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
169
170 assertTrue(comparePomFiles(reactorProjects));
171 }
172
173 @Test
174 public void testRewritePomUnmappedProfile() throws Exception {
175 List<MavenProject> reactorProjects = createReactorProjects("internal-snapshot-profile");
176 ReleaseDescriptorBuilder builder = createUnmappedConfiguration(reactorProjects, "internal-snapshot-profile");
177
178 try {
179 phase.execute(
180 ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
181
182 fail("Should have thrown an exception");
183 } catch (ReleaseFailureException e) {
184 assertTrue(true);
185 }
186 }
187 }