1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.enforcer.rules;
20
21 import java.util.ArrayList;
22 import java.util.Collections;
23 import java.util.List;
24
25 import org.apache.maven.enforcer.rule.api.EnforcerLogger;
26 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
27 import org.apache.maven.execution.MavenSession;
28 import org.apache.maven.execution.ProjectDependencyGraph;
29 import org.apache.maven.model.Model;
30 import org.apache.maven.model.Repository;
31 import org.apache.maven.model.RepositoryPolicy;
32 import org.apache.maven.project.MavenProject;
33 import org.apache.maven.settings.Settings;
34 import org.junit.jupiter.api.BeforeEach;
35 import org.junit.jupiter.api.Test;
36
37 import static org.junit.jupiter.api.Assertions.assertThrows;
38 import static org.mockito.Mockito.mock;
39 import static org.mockito.Mockito.when;
40
41
42
43
44
45
46
47 class TestRequireNoRepositories {
48
49 private RequireNoRepositories rule;
50
51 private MavenSession session;
52
53 @BeforeEach
54 void before() {
55 session = mock(MavenSession.class);
56
57 rule = new RequireNoRepositories(session);
58 rule.setMessage("my message");
59 rule.setLog(mock(EnforcerLogger.class));
60 }
61
62 private MavenProject createMavenProject() {
63 MavenProject mp = mock(MavenProject.class);
64 when(mp.getGroupId()).thenReturn("org.apache.maven.plugins.enforcer.test");
65 when(mp.getArtifactId()).thenReturn("no-repositories-child");
66 when(mp.getVersion()).thenReturn("1.0-SNAPSHOT");
67
68 return mp;
69 }
70
71 private Model createOriginalModel() {
72 Model m = mock(Model.class);
73 when(m.getGroupId()).thenReturn("org.apache.maven.plugins.enforcer.test");
74 when(m.getArtifactId()).thenReturn("no-repositories");
75 when(m.getVersion()).thenReturn("1.0-SNAPSHOT");
76 return m;
77 }
78
79 private MavenProject createStandAloneProject() {
80 MavenProject mp = createMavenProject();
81 Model originalModel = createOriginalModel();
82
83
84 when(mp.getModel()).thenReturn(originalModel);
85 when(mp.getOriginalModel()).thenReturn(originalModel);
86 return mp;
87 }
88
89 private void setupSortedProjects(List<MavenProject> projectList) {
90 ProjectDependencyGraph pdg = mock(ProjectDependencyGraph.class);
91 when(session.getProjectDependencyGraph()).thenReturn(pdg);
92 when(pdg.getSortedProjects()).thenReturn(projectList);
93 when(session.getSettings()).thenReturn(mock(Settings.class));
94 }
95
96 private Repository createRepository(String id, String url) {
97 Repository r = new Repository();
98 r.setId(id);
99 r.setUrl(url);
100 RepositoryPolicy snapshotPolicy = new RepositoryPolicy();
101 snapshotPolicy.setEnabled(false);
102 snapshotPolicy.setUpdatePolicy("daily");
103 r.setSnapshots(snapshotPolicy);
104
105 RepositoryPolicy releasePolicy = new RepositoryPolicy();
106 releasePolicy.setEnabled(true);
107 releasePolicy.setUpdatePolicy("never");
108 r.setReleases(releasePolicy);
109
110 return r;
111 }
112
113 private Repository createSnapshotRepository(String id, String url) {
114 Repository r = new Repository();
115 r.setId(id);
116 r.setUrl(url);
117
118 RepositoryPolicy snapshotPolicy = new RepositoryPolicy();
119 snapshotPolicy.setEnabled(true);
120 snapshotPolicy.setUpdatePolicy("daily");
121 r.setSnapshots(snapshotPolicy);
122
123 RepositoryPolicy releasePolicy = new RepositoryPolicy();
124 releasePolicy.setEnabled(false);
125 r.setReleases(releasePolicy);
126
127 return r;
128 }
129
130 private void addRepository(MavenProject project, Repository r) {
131 Model originalModel = project.getOriginalModel();
132 List<Repository> repositories = new ArrayList<>();
133 repositories.add(r);
134 when(originalModel.getRepositories()).thenReturn(repositories);
135 }
136
137 private void addEmptyRepository(MavenProject project) {
138 Model originalModel = project.getOriginalModel();
139 List<Repository> repositories = new ArrayList<>();
140 when(originalModel.getRepositories()).thenReturn(repositories);
141 }
142
143 private void addPluginRepository(MavenProject project, Repository r) {
144 Model originalModel = project.getOriginalModel();
145 List<Repository> repositories = new ArrayList<>();
146 repositories.add(r);
147 when(originalModel.getPluginRepositories()).thenReturn(repositories);
148 }
149
150 private void addEmptyPluginRepository(MavenProject project) {
151 Model originalModel = project.getOriginalModel();
152 List<Repository> repositories = new ArrayList<>();
153 when(originalModel.getPluginRepositories()).thenReturn(repositories);
154 }
155
156
157
158
159 @Test
160 void testAllBannedNoRepositories() throws EnforcerRuleException {
161 MavenProject baseProject = createStandAloneProject();
162 setupSortedProjects(Collections.singletonList(baseProject));
163
164 rule.execute();
165 }
166
167
168
169
170 @Test
171 void testAllBannedWithRepository() {
172 assertThrows(EnforcerRuleException.class, () -> {
173 MavenProject baseProject = createStandAloneProject();
174 addRepository(baseProject, createRepository("repo", "http://example.com/repo"));
175 setupSortedProjects(Collections.singletonList(baseProject));
176
177 rule.execute();
178 });
179 }
180
181
182
183
184 @Test
185 void testAllBannedWithPluginRepository() {
186 assertThrows(EnforcerRuleException.class, () -> {
187 MavenProject baseProject = createStandAloneProject();
188 addPluginRepository(baseProject, createRepository("repo", "http://example.com/repo"));
189 setupSortedProjects(Collections.singletonList(baseProject));
190
191 rule.execute();
192 });
193 }
194
195
196
197
198 @Test
199 void testAllBannedWithAllowedRepositories() throws EnforcerRuleException {
200 final String repositoryId = "repo";
201 rule.setAllowedRepositories(Collections.singletonList(repositoryId));
202
203 MavenProject baseProject = createStandAloneProject();
204 addRepository(baseProject, createRepository(repositoryId, "http://example.com/repo"));
205 setupSortedProjects(Collections.singletonList(baseProject));
206
207 rule.execute();
208 }
209
210
211
212
213 @Test
214 void testRepositoriesNotBannedWithSingleRepository() throws EnforcerRuleException {
215 final String repositoryId = "repo";
216
217 rule.setBanRepositories(false);
218
219 MavenProject baseProject = createStandAloneProject();
220 addRepository(baseProject, createRepository(repositoryId, "http://example.com/repo"));
221 setupSortedProjects(Collections.singletonList(baseProject));
222
223 rule.execute();
224 }
225
226
227
228
229 @Test
230 void testRepositoriesNotBannedWithOutAnyRepository() throws EnforcerRuleException {
231 rule.setBanRepositories(false);
232
233 MavenProject baseProject = createStandAloneProject();
234 setupSortedProjects(Collections.singletonList(baseProject));
235
236 rule.execute();
237 }
238
239
240
241
242
243 @Test
244 void testAllBannedWithAllowedPluginRepositories() throws EnforcerRuleException {
245 final String repositoryId = "repo";
246 rule.setAllowedPluginRepositories(Collections.singletonList(repositoryId));
247
248 MavenProject baseProject = createStandAloneProject();
249 addPluginRepository(baseProject, createRepository(repositoryId, "http://example.com/repo"));
250 setupSortedProjects(Collections.singletonList(baseProject));
251
252 rule.execute();
253 }
254
255
256
257
258 @Test
259 void testPluginRepositoriesNotBannedWithSinglePluginRepository() throws EnforcerRuleException {
260 final String repositoryId = "repo";
261
262 rule.setBanPluginRepositories(false);
263
264 MavenProject baseProject = createStandAloneProject();
265 addPluginRepository(baseProject, createRepository(repositoryId, "http://example.com/repo"));
266 setupSortedProjects(Collections.singletonList(baseProject));
267
268 rule.execute();
269 }
270
271
272
273
274 @Test
275 void testPluginRepositoriesNotBannedWithOutAnyRepository() throws EnforcerRuleException {
276 rule.setBanPluginRepositories(false);
277
278 MavenProject baseProject = createStandAloneProject();
279 setupSortedProjects(Collections.singletonList(baseProject));
280
281 rule.execute();
282 }
283
284 @Test
285 void testAllBannedWithSnapshotRepository() {
286 assertThrows(EnforcerRuleException.class, () -> {
287 MavenProject baseProject = createStandAloneProject();
288 addRepository(baseProject, createSnapshotRepository("repo", "http://example.com/repo"));
289 setupSortedProjects(Collections.singletonList(baseProject));
290
291 rule.execute();
292 });
293 }
294
295 @Test
296 void testAllBannedWithSnapshotRepositoryAllowedRepositories() throws EnforcerRuleException {
297 final String repositoryId = "repo";
298 rule.setAllowedRepositories(Collections.singletonList(repositoryId));
299
300 MavenProject baseProject = createStandAloneProject();
301 addRepository(baseProject, createSnapshotRepository(repositoryId, "http://example.com/repo"));
302 setupSortedProjects(Collections.singletonList(baseProject));
303
304 rule.execute();
305 }
306
307 @Test
308 void testAllBannedWithSnapshotRepositoryAndSetAllowSnapshotRepositories() throws EnforcerRuleException {
309 final String repositoryId = "repo";
310 rule.setAllowSnapshotRepositories(true);
311
312 MavenProject baseProject = createStandAloneProject();
313 addRepository(baseProject, createSnapshotRepository(repositoryId, "http://example.com/repo"));
314 setupSortedProjects(Collections.singletonList(baseProject));
315
316 rule.execute();
317 }
318
319 @Test
320 void testAllBannedWithSnapshotPluginRepositoryAndSetAllowSnapshotPluginRepositories() throws EnforcerRuleException {
321 final String repositoryId = "repo";
322 rule.setAllowSnapshotPluginRepositories(true);
323
324 MavenProject baseProject = createStandAloneProject();
325 addPluginRepository(baseProject, createSnapshotRepository(repositoryId, "http://example.com/repo"));
326 setupSortedProjects(Collections.singletonList(baseProject));
327
328 rule.execute();
329 }
330
331 @Test
332 void testAllBannedWithEmptyRepository() throws EnforcerRuleException {
333 MavenProject baseProject = createStandAloneProject();
334 addEmptyRepository(baseProject);
335 setupSortedProjects(Collections.singletonList(baseProject));
336
337 rule.execute();
338 }
339
340 @Test
341 void testAllBannedWithEmptyPluginRepository() throws EnforcerRuleException {
342 MavenProject baseProject = createStandAloneProject();
343 addEmptyPluginRepository(baseProject);
344 setupSortedProjects(Collections.singletonList(baseProject));
345
346 rule.execute();
347 }
348 }