]> source.dussan.org Git - archiva.git/blob
84beb7508dee6af702c3d7dbed0c2ee468cc5f38
[archiva.git] /
1 package org.apache.maven.archiva.web.action;
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 java.util.Arrays;
23 import java.util.Collections;
24 import java.util.List;
25
26 import com.opensymphony.xwork2.Action;
27 import org.apache.archiva.metadata.model.Dependency;
28 import org.apache.archiva.metadata.model.MailingList;
29 import org.apache.archiva.metadata.model.ProjectVersionMetadata;
30 import org.apache.archiva.metadata.model.ProjectVersionReference;
31 import org.apache.archiva.metadata.repository.memory.TestMetadataResolver;
32
33 public class ShowArtifactActionTest
34     extends AbstractActionTestCase
35 {
36     private static final String ACTION_HINT = "showArtifactAction";
37
38     private static final String TEST_VERSION = "version";
39
40     private static final String TEST_SNAPSHOT_VERSION = "1.0-SNAPSHOT";
41
42     private static final String TEST_TS_SNAPSHOT_VERSION = "1.0-20091120.111111-1";
43
44     private static final List<String> ALL_TEST_SNAPSHOT_VERSIONS =
45         Arrays.asList( TEST_TS_SNAPSHOT_VERSION, "1.0-20091120.222222-2", "1.0-20091123.333333-3" );
46
47     private static final String OTHER_TEST_REPO = "first-repo";
48
49     private ShowArtifactAction action;
50
51     public void testInstantiation()
52     {
53         assertFalse( action == lookup( Action.class, ACTION_HINT ) );
54     }
55
56     public void testGetArtifactUniqueRelease()
57     {
58         metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
59                                             createProjectModel( TEST_VERSION ) );
60
61         setActionParameters();
62
63         String result = action.artifact();
64
65         assertActionSuccess( action, result );
66
67         assertActionParameters( action );
68         ProjectVersionMetadata model = action.getModel();
69         assertDefaultModel( model );
70
71         assertEquals( TEST_REPO, action.getRepositoryId() );
72
73         assertNull( action.getDependees() );
74         assertNull( action.getDependencies() );
75         assertNull( action.getMailingLists() );
76         assertTrue( action.getSnapshotVersions().isEmpty() );
77     }
78
79     public void testGetArtifactUniqueSnapshot()
80     {
81         metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
82                                             createProjectModel( TEST_SNAPSHOT_VERSION ) );
83         metadataResolver.setArtifactVersions( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, TEST_SNAPSHOT_VERSION,
84                                               ALL_TEST_SNAPSHOT_VERSIONS );
85
86         action.setGroupId( TEST_GROUP_ID );
87         action.setArtifactId( TEST_ARTIFACT_ID );
88         action.setVersion( TEST_SNAPSHOT_VERSION );
89
90         String result = action.artifact();
91
92         assertActionSuccess( action, result );
93
94         assertEquals( TEST_GROUP_ID, action.getGroupId() );
95         assertEquals( TEST_ARTIFACT_ID, action.getArtifactId() );
96         assertEquals( TEST_SNAPSHOT_VERSION, action.getVersion() );
97         ProjectVersionMetadata model = action.getModel();
98         assertDefaultModel( model, TEST_SNAPSHOT_VERSION );
99
100         assertEquals( TEST_REPO, action.getRepositoryId() );
101
102         assertEquals( ALL_TEST_SNAPSHOT_VERSIONS, action.getSnapshotVersions() );
103
104         assertNull( action.getDependees() );
105         assertNull( action.getDependencies() );
106         assertNull( action.getMailingLists() );
107     }
108
109     public void testGetArtifactUniqueSnapshotTimestamped()
110     {
111         metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
112                                             createProjectModel( TEST_TS_SNAPSHOT_VERSION ) );
113         metadataResolver.setArtifactVersions( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, TEST_TS_SNAPSHOT_VERSION,
114                                               ALL_TEST_SNAPSHOT_VERSIONS );
115
116         action.setGroupId( TEST_GROUP_ID );
117         action.setArtifactId( TEST_ARTIFACT_ID );
118         action.setVersion( TEST_TS_SNAPSHOT_VERSION );
119
120         String result = action.artifact();
121
122         assertActionSuccess( action, result );
123
124         assertEquals( TEST_GROUP_ID, action.getGroupId() );
125         assertEquals( TEST_ARTIFACT_ID, action.getArtifactId() );
126         assertEquals( TEST_TS_SNAPSHOT_VERSION, action.getVersion() );
127         ProjectVersionMetadata model = action.getModel();
128         assertDefaultModel( model, TEST_TS_SNAPSHOT_VERSION );
129
130         assertEquals( TEST_REPO, action.getRepositoryId() );
131
132         assertEquals( Arrays.asList( ALL_TEST_SNAPSHOT_VERSIONS.get( 1 ), ALL_TEST_SNAPSHOT_VERSIONS.get( 2 ) ),
133                       action.getSnapshotVersions() );
134
135         assertNull( action.getDependees() );
136         assertNull( action.getDependencies() );
137         assertNull( action.getMailingLists() );
138     }
139
140     public void testGetMissingProject()
141     {
142         setActionParameters();
143
144         String result = action.artifact();
145         assertError( result );
146
147         assertActionParameters( action );
148         assertNoOutputFields();
149     }
150
151     public void testGetArtifactNoObservableRepos()
152     {
153         setObservableRepos( Collections.<String>emptyList() );
154
155         setActionParameters();
156
157         String result = action.artifact();
158
159         // Actually, it'd be better to have an error:
160         assertError( result );
161         assertActionParameters( action );
162         assertNoOutputFields();
163     }
164
165     public void testGetArtifactNotInObservableRepos()
166     {
167         metadataResolver.setProjectVersion( OTHER_TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
168                                             createProjectModel( TEST_VERSION ) );
169
170         setActionParameters();
171
172         String result = action.artifact();
173         assertError( result );
174
175         assertActionParameters( action );
176         assertNoOutputFields();
177     }
178
179     public void testGetArtifactOnlySeenInSecondObservableRepo()
180     {
181         setObservableRepos( Arrays.asList( OTHER_TEST_REPO, TEST_REPO ) );
182         metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
183                                             createProjectModel( TEST_VERSION ) );
184
185         setActionParameters();
186
187         String result = action.artifact();
188
189         assertActionSuccess( action, result );
190
191         assertActionParameters( action );
192         ProjectVersionMetadata model = action.getModel();
193         assertDefaultModel( model );
194
195         assertEquals( TEST_REPO, action.getRepositoryId() );
196
197         assertNull( action.getDependees() );
198         assertNull( action.getDependencies() );
199         assertNull( action.getMailingLists() );
200         assertTrue( action.getSnapshotVersions().isEmpty() );
201     }
202
203     public void testGetArtifactSeenInBothObservableRepo()
204     {
205         setObservableRepos( Arrays.asList( TEST_REPO, OTHER_TEST_REPO ) );
206         metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
207                                             createProjectModel( TEST_VERSION ) );
208         metadataResolver.setProjectVersion( OTHER_TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
209                                             createProjectModel( TEST_VERSION ) );
210
211         setActionParameters();
212
213         String result = action.artifact();
214
215         assertActionSuccess( action, result );
216
217         assertActionParameters( action );
218         ProjectVersionMetadata model = action.getModel();
219         assertDefaultModel( model );
220
221         assertEquals( TEST_REPO, action.getRepositoryId() );
222
223         assertNull( action.getDependees() );
224         assertNull( action.getDependencies() );
225         assertNull( action.getMailingLists() );
226         assertTrue( action.getSnapshotVersions().isEmpty() );
227     }
228
229     public void testGetArtifactCanOnlyObserveInOneOfTwoRepos()
230     {
231         setObservableRepos( Arrays.asList( TEST_REPO ) );
232         metadataResolver.setProjectVersion( OTHER_TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
233                                             createProjectModel( TEST_VERSION ) );
234         metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
235                                             createProjectModel( TEST_VERSION ) );
236
237         setActionParameters();
238
239         String result = action.artifact();
240
241         assertActionSuccess( action, result );
242
243         assertActionParameters( action );
244         ProjectVersionMetadata model = action.getModel();
245         assertDefaultModel( model );
246
247         assertEquals( TEST_REPO, action.getRepositoryId() );
248
249         assertNull( action.getDependees() );
250         assertNull( action.getDependencies() );
251         assertNull( action.getMailingLists() );
252         assertTrue( action.getSnapshotVersions().isEmpty() );
253     }
254
255     public void testGetArtifactNoMavenFacet()
256     {
257         ProjectVersionMetadata versionMetadata = new ProjectVersionMetadata();
258         versionMetadata.setId( TEST_VERSION );
259         versionMetadata.setUrl( TEST_URL );
260         versionMetadata.setName( TEST_NAME );
261         versionMetadata.setDescription( TEST_DESCRIPTION );
262
263         metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, versionMetadata );
264
265         setActionParameters();
266
267         String result = action.artifact();
268
269         assertActionSuccess( action, result );
270
271         assertActionParameters( action );
272         ProjectVersionMetadata model = action.getModel();
273         assertEquals( TEST_VERSION, model.getVersion() );
274         assertEquals( TEST_URL, model.getUrl() );
275         assertEquals( TEST_NAME, model.getName() );
276         assertEquals( TEST_DESCRIPTION, model.getDescription() );
277
278         assertEquals( TEST_REPO, action.getRepositoryId() );
279
280         assertNull( action.getDependees() );
281         assertNull( action.getDependencies() );
282         assertNull( action.getMailingLists() );
283         assertTrue( action.getSnapshotVersions().isEmpty() );
284     }
285
286     public void testGetMailingLists()
287     {
288         ProjectVersionMetadata versionMetadata = createProjectModel( TEST_VERSION );
289         MailingList ml1 = createMailingList( "Users List", "users" );
290         MailingList ml2 = createMailingList( "Developers List", "dev" );
291         versionMetadata.setMailingLists( Arrays.asList( ml1, ml2 ) );
292         metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, versionMetadata );
293
294         setActionParameters();
295
296         String result = action.mailingLists();
297
298         assertActionSuccess( action, result );
299
300         assertActionParameters( action );
301         ProjectVersionMetadata model = action.getModel();
302         assertDefaultModel( model );
303
304         assertNotNull( action.getMailingLists() );
305         assertMailingList( action.getMailingLists().get( 0 ), "Users List", "users" );
306         assertMailingList( action.getMailingLists().get( 1 ), "Developers List", "dev" );
307
308         assertNull( action.getRepositoryId() );
309         assertNull( action.getDependees() );
310         assertNull( action.getDependencies() );
311         assertNull( action.getSnapshotVersions() );
312     }
313
314     public void testGetDependencies()
315     {
316         ProjectVersionMetadata versionMetadata = createProjectModel( TEST_VERSION );
317         Dependency dependency1 = createDependencyBasic( "artifactId1" );
318         Dependency dependency2 = createDependencyExtended( "artifactId2" );
319         versionMetadata.setDependencies( Arrays.asList( dependency1, dependency2 ) );
320         metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, versionMetadata );
321
322         setActionParameters();
323
324         String result = action.dependencies();
325
326         assertActionSuccess( action, result );
327
328         assertActionParameters( action );
329         ProjectVersionMetadata model = action.getModel();
330         assertDefaultModel( model );
331
332         assertNotNull( action.getDependencies() );
333         assertDependencyBasic( action.getDependencies().get( 0 ), "artifactId1" );
334         assertDependencyExtended( action.getDependencies().get( 1 ), "artifactId2" );
335
336         assertNull( action.getRepositoryId() );
337         assertNull( action.getDependees() );
338         assertNull( action.getMailingLists() );
339         assertNull( action.getSnapshotVersions() );
340     }
341
342     public void testGetDependees()
343     {
344         ProjectVersionMetadata versionMetadata = createProjectModel( TEST_VERSION );
345         metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, versionMetadata );
346         ProjectVersionReference dependee1 = createReference( "artifactId1" );
347         ProjectVersionReference dependee2 = createReference( "artifactId2" );
348         metadataResolver.setProjectReferences( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, TEST_VERSION,
349                                                Arrays.asList( dependee1, dependee2 ) );
350
351         setActionParameters();
352
353         String result = action.dependees();
354
355         assertActionSuccess( action, result );
356
357         assertActionParameters( action );
358         ProjectVersionMetadata model = action.getModel();
359         assertDefaultModel( model );
360
361         assertNotNull( action.getDependees() );
362         assertCoordinate( action.getDependees().get( 0 ), "artifactId1" );
363         assertCoordinate( action.getDependees().get( 1 ), "artifactId2" );
364
365         assertNull( action.getRepositoryId() );
366         assertNull( action.getDependencies() );
367         assertNull( action.getMailingLists() );
368         assertNull( action.getSnapshotVersions() );
369     }
370
371     private ProjectVersionReference createReference( String projectId )
372     {
373         ProjectVersionReference reference = new ProjectVersionReference();
374         reference.setNamespace( "groupId" );
375         reference.setProjectId( projectId );
376         reference.setProjectVersion( "version" );
377         reference.setReferenceType( ProjectVersionReference.ReferenceType.DEPENDENCY );
378         return reference;
379     }
380
381     private void assertCoordinate( ProjectVersionReference dependee, String artifactId )
382     {
383         assertEquals( artifactId, dependee.getProjectId() );
384         assertEquals( "groupId", dependee.getNamespace() );
385         assertEquals( "version", dependee.getProjectVersion() );
386     }
387
388     private void assertDependencyBasic( Dependency dependency, String artifactId )
389     {
390         assertEquals( artifactId, dependency.getArtifactId() );
391         assertEquals( "groupId", dependency.getGroupId() );
392         assertEquals( "version", dependency.getVersion() );
393     }
394
395     private void assertDependencyExtended( Dependency dependency, String artifactId )
396     {
397         assertDependencyBasic( dependency, artifactId );
398         assertEquals( true, dependency.isOptional() );
399         assertEquals( "classifier", dependency.getClassifier() );
400         assertEquals( "type", dependency.getType() );
401         assertEquals( "scope", dependency.getScope() );
402         assertEquals( "systemPath", dependency.getSystemPath() );
403     }
404
405     private Dependency createDependencyExtended( String artifactId )
406     {
407         Dependency dependency = createDependencyBasic( artifactId );
408         dependency.setClassifier( "classifier" );
409         dependency.setOptional( true );
410         dependency.setScope( "scope" );
411         dependency.setSystemPath( "systemPath" );
412         dependency.setType( "type" );
413         return dependency;
414     }
415
416     private Dependency createDependencyBasic( String artifactId )
417     {
418         Dependency dependency = new Dependency();
419         dependency.setArtifactId( artifactId );
420         dependency.setGroupId( "groupId" );
421         dependency.setVersion( "version" );
422         return dependency;
423     }
424
425     private void assertMailingList( MailingList mailingList, String name, String prefix )
426     {
427         assertEquals( name, mailingList.getName() );
428         assertEquals( prefix + "-post@", mailingList.getPostAddress() );
429         assertEquals( prefix + "-subscribe@", mailingList.getSubscribeAddress() );
430         assertEquals( prefix + "-unsubscribe@", mailingList.getUnsubscribeAddress() );
431         assertEquals( prefix + "-archive-url", mailingList.getMainArchiveUrl() );
432         assertEquals( Arrays.asList( "other-" + prefix + "-archive-url-1", "other-" + prefix + "-archive-url-2" ),
433                       mailingList.getOtherArchives() );
434     }
435
436     private MailingList createMailingList( String name, String prefix )
437     {
438         MailingList ml1 = new MailingList();
439         ml1.setName( name );
440         ml1.setPostAddress( prefix + "-post@" );
441         ml1.setSubscribeAddress( prefix + "-subscribe@" );
442         ml1.setUnsubscribeAddress( prefix + "-unsubscribe@" );
443         ml1.setMainArchiveUrl( prefix + "-archive-url" );
444         ml1.setOtherArchives(
445             Arrays.asList( "other-" + prefix + "-archive-url-1", "other-" + prefix + "-archive-url-2" ) );
446         return ml1;
447     }
448
449     private void assertNoOutputFields()
450     {
451         assertNull( action.getModel() );
452         assertNull( action.getDependees() );
453         assertNull( action.getDependencies() );
454         assertNull( action.getMailingLists() );
455         assertTrue( action.getSnapshotVersions().isEmpty() );
456     }
457
458     private void assertError( String result )
459     {
460         assertEquals( Action.ERROR, result );
461         assertEquals( 1, action.getActionErrors().size() );
462     }
463
464     private void assertDefaultModel( ProjectVersionMetadata model )
465     {
466         assertDefaultModel( model, TEST_VERSION );
467     }
468
469     private void setActionParameters()
470     {
471         action.setGroupId( TEST_GROUP_ID );
472         action.setArtifactId( TEST_ARTIFACT_ID );
473         action.setVersion( TEST_VERSION );
474     }
475
476     private void assertActionParameters( ShowArtifactAction action )
477     {
478         assertEquals( TEST_GROUP_ID, action.getGroupId() );
479         assertEquals( TEST_ARTIFACT_ID, action.getArtifactId() );
480         assertEquals( TEST_VERSION, action.getVersion() );
481     }
482
483     private void assertActionSuccess( ShowArtifactAction action, String result )
484     {
485         assertEquals( Action.SUCCESS, result );
486         assertTrue( action.getActionErrors().isEmpty() );
487         assertTrue( action.getActionMessages().isEmpty() );
488     }
489
490     protected void setUp()
491         throws Exception
492     {
493         super.setUp();
494         action = (ShowArtifactAction) lookup( Action.class, ACTION_HINT );
495         metadataResolver = (TestMetadataResolver) action.getMetadataResolver();
496     }
497 }