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.io.BufferedReader;
22 import java.io.File;
23 import java.io.StringReader;
24 import java.util.ArrayList;
25 import java.util.Collections;
26 import java.util.Iterator;
27 import java.util.List;
28
29 import org.apache.maven.project.MavenProject;
30 import org.apache.maven.scm.ScmFile;
31 import org.apache.maven.scm.ScmFileSet;
32 import org.apache.maven.scm.ScmFileStatus;
33 import org.apache.maven.scm.command.remove.RemoveScmResult;
34 import org.apache.maven.scm.manager.ScmManager;
35 import org.apache.maven.scm.manager.ScmManagerStub;
36 import org.apache.maven.scm.provider.ScmProvider;
37 import org.apache.maven.scm.repository.ScmRepository;
38 import org.apache.maven.shared.release.ReleaseResult;
39 import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder;
40 import org.apache.maven.shared.release.config.ReleaseUtils;
41 import org.apache.maven.shared.release.env.DefaultReleaseEnvironment;
42 import org.apache.maven.shared.release.util.ReleaseUtil;
43 import org.junit.Test;
44
45 import static org.junit.Assert.assertEquals;
46 import static org.mockito.Matchers.argThat;
47 import static org.mockito.Matchers.isA;
48 import static org.mockito.Mockito.mock;
49 import static org.mockito.Mockito.verify;
50 import static org.mockito.Mockito.verifyNoMoreInteractions;
51 import static org.mockito.Mockito.when;
52
53
54
55
56
57
58 public class RemoveReleasePomsPhaseTest extends AbstractReleaseTestCase {
59 @Override
60 public void setUp() throws Exception {
61 super.setUp();
62
63 phase = lookup(ReleasePhase.class, "remove-release-poms");
64 }
65
66 @Test
67 public void testExecuteBasicPom() throws Exception {
68
69 File workingDirectory = getTestFile("target/test/checkout");
70 List<MavenProject> reactorProjects = createReactorProjects("basic-pom");
71 ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder(workingDirectory);
72 MavenProject project = ReleaseUtil.getRootProject(reactorProjects);
73
74 File releasePom = ReleaseUtil.getReleasePom(project);
75 ScmFileSet fileSet = new ScmFileSet(workingDirectory, releasePom);
76
77 ScmProvider scmProviderMock = mock(ScmProvider.class);
78 when(scmProviderMock.remove(
79 isA(ScmRepository.class), argThat(new IsScmFileSetEquals(fileSet)), isA(String.class)))
80 .thenReturn(new RemoveScmResult(
81 "...", Collections.singletonList(new ScmFile("pom.xml", ScmFileStatus.DELETED))));
82
83 ScmManagerStub stub = (ScmManagerStub) lookup(ScmManager.class);
84 stub.setScmProvider(scmProviderMock);
85
86
87 phase.execute(ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
88
89
90 verify(scmProviderMock)
91 .remove(isA(ScmRepository.class), argThat(new IsScmFileSetEquals(fileSet)), isA(String.class));
92 verifyNoMoreInteractions(scmProviderMock);
93 }
94
95 @Test
96 public void testExecutePomWithModules() throws Exception {
97
98 File workingDirectory = getTestFile("target/test/checkout");
99 List<MavenProject> reactorProjects = createReactorProjects("pom-with-modules");
100 ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder();
101
102 List<File> releasePoms = new ArrayList<>();
103 for (Iterator<MavenProject> iterator = reactorProjects.iterator(); iterator.hasNext(); ) {
104 MavenProject project = iterator.next();
105 File releasePom = ReleaseUtil.getReleasePom(project);
106 releasePoms.add(releasePom);
107 }
108
109 ScmFileSet fileSet = new ScmFileSet(workingDirectory, releasePoms);
110
111 ScmProvider scmProviderMock = mock(ScmProvider.class);
112 when(scmProviderMock.remove(
113 isA(ScmRepository.class), argThat(new IsScmFileSetEquals(fileSet)), isA(String.class)))
114 .thenReturn(new RemoveScmResult(
115 "...", Collections.singletonList(new ScmFile("pom.xml", ScmFileStatus.DELETED))));
116
117 ScmManagerStub stub = (ScmManagerStub) lookup(ScmManager.class);
118 stub.setScmProvider(scmProviderMock);
119
120
121 phase.execute(ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
122
123
124 verify(scmProviderMock)
125 .remove(isA(ScmRepository.class), argThat(new IsScmFileSetEquals(fileSet)), isA(String.class));
126 verifyNoMoreInteractions(scmProviderMock);
127 }
128
129 @Test
130 public void testSimulateBasicPom() throws Exception {
131
132 List<MavenProject> reactorProjects = createReactorProjects("basic-pom");
133 ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder();
134
135 ScmProvider scmProviderMock = mock(ScmProvider.class);
136
137 ScmManagerStub stub = (ScmManagerStub) lookup(ScmManager.class);
138 stub.setScmProvider(scmProviderMock);
139
140
141 phase.simulate(ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
142
143
144 verifyNoMoreInteractions(scmProviderMock);
145 }
146
147 @Test
148 public void testExecuteWithSuppressCommitBeforeTag() throws Exception {
149
150 List<MavenProject> reactorProjects = createReactorProjects("basic-pom");
151 ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder();
152 builder.setSuppressCommitBeforeTagOrBranch(true);
153 builder.setGenerateReleasePoms(true);
154
155 ScmProvider scmProviderMock = mock(ScmProvider.class);
156
157 ScmManagerStub stub = (ScmManagerStub) lookup(ScmManager.class);
158 stub.setScmProvider(scmProviderMock);
159
160
161 ReleaseResult result = phase.execute(
162 ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
163
164 try (BufferedReader reader = new BufferedReader(new StringReader(result.getOutput()))) {
165 assertEquals("[INFO] Removing release POM for 'artifactId'...", reader.readLine());
166 assertEquals("Expected EOF", null, reader.readLine());
167 }
168
169
170 verifyNoMoreInteractions(scmProviderMock);
171 }
172
173 @Test
174 public void testSimulateWithSuppressCommitBeforeTag() throws Exception {
175
176 List<MavenProject> reactorProjects = createReactorProjects("basic-pom");
177 ReleaseDescriptorBuilder builder = createReleaseDescriptorBuilder();
178 builder.setSuppressCommitBeforeTagOrBranch(true);
179 builder.setGenerateReleasePoms(true);
180
181 ScmProvider scmProviderMock = mock(ScmProvider.class);
182
183 ScmManagerStub stub = (ScmManagerStub) lookup(ScmManager.class);
184 stub.setScmProvider(scmProviderMock);
185
186
187 ReleaseResult result = phase.simulate(
188 ReleaseUtils.buildReleaseDescriptor(builder), new DefaultReleaseEnvironment(), reactorProjects);
189
190 try (BufferedReader reader = new BufferedReader(new StringReader(result.getOutput()))) {
191 assertEquals("[INFO] Removing release POM for 'artifactId'...", reader.readLine());
192 assertEquals(
193 "[INFO] Full run would be removing ["
194 + reactorProjects.get(0).getFile().getParent() + File.separator + "release-pom.xml]",
195 reader.readLine());
196 assertEquals("Expected EOF", null, reader.readLine());
197 }
198
199
200 verifyNoMoreInteractions(scmProviderMock);
201 }
202
203 protected List<MavenProject> createReactorProjects(String path) throws Exception {
204 String dir = "remove-release-poms/" + path;
205 return createReactorProjects(dir, dir, null);
206 }
207
208 private ReleaseDescriptorBuilder createReleaseDescriptorBuilder() {
209 return createReleaseDescriptorBuilder(getTestFile("target/test/checkout"));
210 }
211
212 private ReleaseDescriptorBuilder createReleaseDescriptorBuilder(File workingDirectory) {
213 ReleaseDescriptorBuilder builder = new ReleaseDescriptorBuilder();
214 builder.setGenerateReleasePoms(true);
215 builder.setWorkingDirectory(workingDirectory.getAbsolutePath());
216 return builder;
217 }
218 }