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 MavenProject 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 return project;
136 }
137
138 private MavenProject addEmptyRepository(MavenProject project) {
139 Model originalModel = project.getOriginalModel();
140 List<Repository> repositories = new ArrayList<>();
141 when(originalModel.getRepositories()).thenReturn(repositories);
142 return project;
143 }
144
145 private MavenProject addPluginRepository(MavenProject project, Repository r) {
146 Model originalModel = project.getOriginalModel();
147 List<Repository> repositories = new ArrayList<>();
148 repositories.add(r);
149 when(originalModel.getPluginRepositories()).thenReturn(repositories);
150 return project;
151 }
152
153 private MavenProject addEmptyPluginRepository(MavenProject project) {
154 Model originalModel = project.getOriginalModel();
155 List<Repository> repositories = new ArrayList<>();
156 when(originalModel.getPluginRepositories()).thenReturn(repositories);
157 return project;
158 }
159
160
161
162
163 @Test
164 void testAllBannedNoRepositories() throws EnforcerRuleException {
165 MavenProject baseProject = createStandAloneProject();
166 setupSortedProjects(Collections.singletonList(baseProject));
167
168 rule.execute();
169 }
170
171
172
173
174 @Test
175 void testAllBannedWithRepository() {
176 assertThrows(EnforcerRuleException.class, () -> {
177 MavenProject baseProject = createStandAloneProject();
178 addRepository(baseProject, createRepository("repo", "http://example.com/repo"));
179 setupSortedProjects(Collections.singletonList(baseProject));
180
181 rule.execute();
182 });
183 }
184
185
186
187
188 @Test
189 void testAllBannedWithPluginRepository() {
190 assertThrows(EnforcerRuleException.class, () -> {
191 MavenProject baseProject = createStandAloneProject();
192 addPluginRepository(baseProject, createRepository("repo", "http://example.com/repo"));
193 setupSortedProjects(Collections.singletonList(baseProject));
194
195 rule.execute();
196 });
197 }
198
199
200
201
202 @Test
203 void testAllBannedWithAllowedRepositories() throws EnforcerRuleException {
204 final String repositoryId = "repo";
205 rule.setAllowedRepositories(Collections.singletonList(repositoryId));
206
207 MavenProject baseProject = createStandAloneProject();
208 addRepository(baseProject, createRepository(repositoryId, "http://example.com/repo"));
209 setupSortedProjects(Collections.singletonList(baseProject));
210
211 rule.execute();
212 }
213
214
215
216
217 @Test
218 void testRepositoriesNotBannedWithSingleRepository() throws EnforcerRuleException {
219 final String repositoryId = "repo";
220
221 rule.setBanRepositories(false);
222
223 MavenProject baseProject = createStandAloneProject();
224 addRepository(baseProject, createRepository(repositoryId, "http://example.com/repo"));
225 setupSortedProjects(Collections.singletonList(baseProject));
226
227 rule.execute();
228 }
229
230
231
232
233 @Test
234 void testRepositoriesNotBannedWithOutAnyRepository() throws EnforcerRuleException {
235 rule.setBanRepositories(false);
236
237 MavenProject baseProject = createStandAloneProject();
238 setupSortedProjects(Collections.singletonList(baseProject));
239
240 rule.execute();
241 }
242
243
244
245
246
247 @Test
248 void testAllBannedWithAllowedPluginRepositories() throws EnforcerRuleException {
249 final String repositoryId = "repo";
250 rule.setAllowedPluginRepositories(Collections.singletonList(repositoryId));
251
252 MavenProject baseProject = createStandAloneProject();
253 addPluginRepository(baseProject, createRepository(repositoryId, "http://example.com/repo"));
254 setupSortedProjects(Collections.singletonList(baseProject));
255
256 rule.execute();
257 }
258
259
260
261
262 @Test
263 void testPluginRepositoriesNotBannedWithSinglePluginRepository() throws EnforcerRuleException {
264 final String repositoryId = "repo";
265
266 rule.setBanPluginRepositories(false);
267
268 MavenProject baseProject = createStandAloneProject();
269 addPluginRepository(baseProject, createRepository(repositoryId, "http://example.com/repo"));
270 setupSortedProjects(Collections.singletonList(baseProject));
271
272 rule.execute();
273 }
274
275
276
277
278 @Test
279 void testPluginRepositoriesNotBannedWithOutAnyRepository() throws EnforcerRuleException {
280 rule.setBanPluginRepositories(false);
281
282 MavenProject baseProject = createStandAloneProject();
283 setupSortedProjects(Collections.singletonList(baseProject));
284
285 rule.execute();
286 }
287
288 @Test
289 void testAllBannedWithSnapshotRepository() {
290 assertThrows(EnforcerRuleException.class, () -> {
291 MavenProject baseProject = createStandAloneProject();
292 addRepository(baseProject, createSnapshotRepository("repo", "http://example.com/repo"));
293 setupSortedProjects(Collections.singletonList(baseProject));
294
295 rule.execute();
296 });
297 }
298
299 @Test
300 void testAllBannedWithSnapshotRepositoryAllowedRepositories() throws EnforcerRuleException {
301 final String repositoryId = "repo";
302 rule.setAllowedRepositories(Collections.singletonList(repositoryId));
303
304 MavenProject baseProject = createStandAloneProject();
305 addRepository(baseProject, createSnapshotRepository(repositoryId, "http://example.com/repo"));
306 setupSortedProjects(Collections.singletonList(baseProject));
307
308 rule.execute();
309 }
310
311 @Test
312 void testAllBannedWithSnapshotRepositoryAndSetAllowSnapshotRepositories() throws EnforcerRuleException {
313 final String repositoryId = "repo";
314 rule.setAllowSnapshotRepositories(true);
315
316 MavenProject baseProject = createStandAloneProject();
317 addRepository(baseProject, createSnapshotRepository(repositoryId, "http://example.com/repo"));
318 setupSortedProjects(Collections.singletonList(baseProject));
319
320 rule.execute();
321 }
322
323 @Test
324 void testAllBannedWithSnapshotPluginRepositoryAndSetAllowSnapshotPluginRepositories() throws EnforcerRuleException {
325 final String repositoryId = "repo";
326 rule.setAllowSnapshotPluginRepositories(true);
327
328 MavenProject baseProject = createStandAloneProject();
329 addPluginRepository(baseProject, createSnapshotRepository(repositoryId, "http://example.com/repo"));
330 setupSortedProjects(Collections.singletonList(baseProject));
331
332 rule.execute();
333 }
334
335 @Test
336 void testAllBannedWithEmptyRepository() throws EnforcerRuleException {
337 MavenProject baseProject = createStandAloneProject();
338 addEmptyRepository(baseProject);
339 setupSortedProjects(Collections.singletonList(baseProject));
340
341 rule.execute();
342 }
343
344 @Test
345 void testAllBannedWithEmptyPluginRepository() throws EnforcerRuleException {
346 MavenProject baseProject = createStandAloneProject();
347 addEmptyPluginRepository(baseProject);
348 setupSortedProjects(Collections.singletonList(baseProject));
349
350 rule.execute();
351 }
352 }