]> source.dussan.org Git - archiva.git/blob
82ef07e0c81466bc7ecb1bbed5b796e9b66d4f1b
[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.CiManagement;
28 import org.apache.archiva.metadata.model.IssueManagement;
29 import org.apache.archiva.metadata.model.License;
30 import org.apache.archiva.metadata.model.Organization;
31 import org.apache.archiva.metadata.model.ProjectVersionMetadata;
32 import org.apache.archiva.metadata.model.Scm;
33 import org.apache.archiva.metadata.repository.memory.TestMetadataResolver;
34 import org.apache.archiva.metadata.repository.storage.maven2.MavenProjectFacet;
35 import org.apache.archiva.metadata.repository.storage.maven2.MavenProjectParent;
36 import org.apache.maven.archiva.model.ArchivaProjectModel;
37 import org.apache.maven.archiva.security.UserRepositories;
38 import org.apache.maven.archiva.security.UserRepositoriesStub;
39 import org.codehaus.plexus.spring.PlexusInSpringTestCase;
40
41 public class ShowArtifactActionTest
42     extends PlexusInSpringTestCase
43 {
44     private static final String ACTION_HINT = "showArtifactAction";
45
46     private static final String TEST_GROUP_ID = "groupId";
47
48     private static final String TEST_ARTIFACT_ID = "artifactId";
49
50     private static final String TEST_VERSION = "version";
51
52     private static final String TEST_PACKAGING = "packaging";
53
54     private static final String TEST_ISSUE_URL = "http://jira.codehaus.org/browse/MRM";
55
56     private static final String TEST_ISSUE_SYSTEM = "jira";
57
58     private static final String TEST_CI_SYSTEM = "continuum";
59
60     private static final String TEST_CI_URL = "http://vmbuild.apache.org/";
61
62     private static final String TEST_URL = "url";
63
64     private static final String TEST_NAME = "name";
65
66     private static final String TEST_DESCRIPTION = "description";
67
68     private static final String TEST_PARENT_GROUP_ID = "parentGroupId";
69
70     private static final String TEST_PARENT_ARTIFACT_ID = "parentArtifactId";
71
72     private static final String TEST_PARENT_VERSION = "parentVersion";
73
74     private static final String TEST_ORGANIZATION_NAME = "organizationName";
75
76     private static final String TEST_ORGANIZATION_URL = "organizationUrl";
77
78     private static final String TEST_LICENSE_URL = "licenseUrl";
79
80     private static final String TEST_LICENSE_NAME = "licenseName";
81
82     private static final String TEST_LICENSE_URL_2 = "licenseUrl_2";
83
84     private static final String TEST_LICENSE_NAME_2 = "licenseName_2";
85
86     private static final String TEST_REPO = "test-repo";
87
88     private static final String TEST_SCM_CONNECTION = "scmConnection";
89
90     private static final String TEST_SCM_DEV_CONNECTION = "scmDevConnection";
91
92     private static final String TEST_SCM_URL = "scmUrl";
93
94     private static final String TEST_SNAPSHOT_VERSION = "1.0-SNAPSHOT";
95
96     private static final String TEST_TS_SNAPSHOT_VERSION = "1.0-20091120.111111-1";
97
98     private static final List<String> ALL_TEST_SNAPSHOT_VERSIONS =
99         Arrays.asList( TEST_TS_SNAPSHOT_VERSION, "1.0-20091120.222222-2", "1.0-20091123.333333-3" );
100
101     private static final String OTHER_TEST_REPO = "first-repo";
102
103     private ShowArtifactAction action;
104
105     private TestMetadataResolver metadataResolver;
106
107     public void testInstantiation()
108     {
109         assertFalse( action == lookup( Action.class, ACTION_HINT ) );
110     }
111
112     public void testGetArtifactUniqueRelease()
113     {
114         metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
115                                             createProjectModel( TEST_VERSION ) );
116
117         setActionParameters();
118
119         String result = action.artifact();
120
121         assertActionSuccess( action, result );
122
123         assertActionParameters( action );
124         ArchivaProjectModel model = action.getModel();
125         assertDefaultModel( model );
126
127         assertEquals( TEST_REPO, action.getRepositoryId() );
128
129         assertNull( action.getDependees() );
130         assertNull( action.getDependencies() );
131         assertNull( action.getMailingLists() );
132         assertTrue( action.getSnapshotVersions().isEmpty() );
133     }
134
135     public void testGetArtifactUniqueSnapshot()
136     {
137         metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
138                                             createProjectModel( TEST_SNAPSHOT_VERSION ) );
139         metadataResolver.setArtifactVersions( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, TEST_SNAPSHOT_VERSION,
140                                                 ALL_TEST_SNAPSHOT_VERSIONS );
141
142         action.setGroupId( TEST_GROUP_ID );
143         action.setArtifactId( TEST_ARTIFACT_ID );
144         action.setVersion( TEST_SNAPSHOT_VERSION );
145
146         String result = action.artifact();
147
148         assertActionSuccess( action, result );
149
150         assertEquals( TEST_GROUP_ID, action.getGroupId() );
151         assertEquals( TEST_ARTIFACT_ID, action.getArtifactId() );
152         assertEquals( TEST_SNAPSHOT_VERSION, action.getVersion() );
153         ArchivaProjectModel model = action.getModel();
154         assertDefaultModel( model, TEST_SNAPSHOT_VERSION );
155
156         assertEquals( TEST_REPO, action.getRepositoryId() );
157
158         assertEquals( ALL_TEST_SNAPSHOT_VERSIONS, action.getSnapshotVersions() );
159
160         assertNull( action.getDependees() );
161         assertNull( action.getDependencies() );
162         assertNull( action.getMailingLists() );
163     }
164
165     public void testGetArtifactUniqueSnapshotTimestamped()
166     {
167         metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
168                                             createProjectModel( TEST_TS_SNAPSHOT_VERSION ) );
169         metadataResolver.setArtifactVersions( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, TEST_TS_SNAPSHOT_VERSION,
170                                                 ALL_TEST_SNAPSHOT_VERSIONS );
171
172         action.setGroupId( TEST_GROUP_ID );
173         action.setArtifactId( TEST_ARTIFACT_ID );
174         action.setVersion( TEST_TS_SNAPSHOT_VERSION );
175
176         String result = action.artifact();
177
178         assertActionSuccess( action, result );
179
180         assertEquals( TEST_GROUP_ID, action.getGroupId() );
181         assertEquals( TEST_ARTIFACT_ID, action.getArtifactId() );
182         assertEquals( TEST_TS_SNAPSHOT_VERSION, action.getVersion() );
183         ArchivaProjectModel model = action.getModel();
184         assertDefaultModel( model, TEST_TS_SNAPSHOT_VERSION );
185
186         assertEquals( TEST_REPO, action.getRepositoryId() );
187
188         assertEquals( Arrays.asList( ALL_TEST_SNAPSHOT_VERSIONS.get( 1 ), ALL_TEST_SNAPSHOT_VERSIONS.get( 2 ) ),
189                       action.getSnapshotVersions() );
190
191         assertNull( action.getDependees() );
192         assertNull( action.getDependencies() );
193         assertNull( action.getMailingLists() );
194     }
195
196     public void testGetMissingProject()
197     {
198         setActionParameters();
199
200         String result = action.artifact();
201         assertError( result );
202
203         assertActionParameters( action );
204         assertNoOutputFields();
205     }
206
207     public void testGetArtifactNoObservableRepos()
208     {
209         setObservableRepos( Collections.<String>emptyList() );
210
211         setActionParameters();
212
213         String result = action.artifact();
214
215         // Actually, it'd be better to have an error:
216         assertError( result );
217         assertActionParameters( action );
218         assertNoOutputFields();
219     }
220
221     public void testGetArtifactNotInObservableRepos()
222     {
223         metadataResolver.setProjectVersion( OTHER_TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
224                                             createProjectModel( TEST_VERSION ) );
225
226         setActionParameters();
227
228         String result = action.artifact();
229         assertError( result );
230
231         assertActionParameters( action );
232         assertNoOutputFields();
233     }
234
235     public void testGetArtifactOnlySeenInSecondObservableRepo()
236     {
237         setObservableRepos( Arrays.asList( OTHER_TEST_REPO, TEST_REPO ) );
238         metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
239                                             createProjectModel( TEST_VERSION ) );
240
241         setActionParameters();
242
243         String result = action.artifact();
244
245         assertActionSuccess( action, result );
246
247         assertActionParameters( action );
248         ArchivaProjectModel model = action.getModel();
249         assertDefaultModel( model );
250
251         assertEquals( TEST_REPO, action.getRepositoryId() );
252
253         assertNull( action.getDependees() );
254         assertNull( action.getDependencies() );
255         assertNull( action.getMailingLists() );
256         assertTrue( action.getSnapshotVersions().isEmpty() );
257     }
258
259     public void testGetArtifactSeenInBothObservableRepo()
260     {
261         setObservableRepos( Arrays.asList( TEST_REPO, OTHER_TEST_REPO ) );
262         metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
263                                             createProjectModel( TEST_VERSION ) );
264         metadataResolver.setProjectVersion( OTHER_TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
265                                             createProjectModel( TEST_VERSION ) );
266
267         setActionParameters();
268
269         String result = action.artifact();
270
271         assertActionSuccess( action, result );
272
273         assertActionParameters( action );
274         ArchivaProjectModel model = action.getModel();
275         assertDefaultModel( model );
276
277         assertEquals( TEST_REPO, action.getRepositoryId() );
278
279         assertNull( action.getDependees() );
280         assertNull( action.getDependencies() );
281         assertNull( action.getMailingLists() );
282         assertTrue( action.getSnapshotVersions().isEmpty() );
283     }
284
285     public void testGetArtifactCanOnlyObserveInOneOfTwoRepos()
286     {
287         setObservableRepos( Arrays.asList( TEST_REPO ) );
288         metadataResolver.setProjectVersion( OTHER_TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
289                                             createProjectModel( TEST_VERSION ) );
290         metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID,
291                                             createProjectModel( TEST_VERSION ) );
292
293         setActionParameters();
294
295         String result = action.artifact();
296
297         assertActionSuccess( action, result );
298
299         assertActionParameters( action );
300         ArchivaProjectModel model = action.getModel();
301         assertDefaultModel( model );
302
303         assertEquals( TEST_REPO, action.getRepositoryId() );
304
305         assertNull( action.getDependees() );
306         assertNull( action.getDependencies() );
307         assertNull( action.getMailingLists() );
308         assertTrue( action.getSnapshotVersions().isEmpty() );
309     }
310
311     public void testGetArtifactNoMavenFacet()
312     {
313         ProjectVersionMetadata versionMetadata = new ProjectVersionMetadata();
314         versionMetadata.setId( TEST_VERSION );
315         versionMetadata.setUrl( TEST_URL );
316         versionMetadata.setName( TEST_NAME );
317         versionMetadata.setDescription( TEST_DESCRIPTION );
318
319         metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, TEST_ARTIFACT_ID, versionMetadata );
320
321         setActionParameters();
322
323         String result = action.artifact();
324
325         assertActionSuccess( action, result );
326
327         assertActionParameters( action );
328         ArchivaProjectModel model = action.getModel();
329         assertEquals( TEST_VERSION, model.getVersion() );
330         assertEquals( TEST_URL, model.getUrl() );
331         assertEquals( TEST_NAME, model.getName() );
332         assertEquals( TEST_DESCRIPTION, model.getDescription() );
333
334         assertEquals( TEST_REPO, action.getRepositoryId() );
335
336         assertNull( action.getDependees() );
337         assertNull( action.getDependencies() );
338         assertNull( action.getMailingLists() );
339         assertTrue( action.getSnapshotVersions().isEmpty() );
340     }
341
342     private void assertNoOutputFields()
343     {
344         assertNull( action.getModel() );
345         assertNull( action.getDependees() );
346         assertNull( action.getDependencies() );
347         assertNull( action.getMailingLists() );
348         assertTrue( action.getSnapshotVersions().isEmpty() );
349     }
350
351     private void assertError( String result )
352     {
353         assertEquals( Action.ERROR, result );
354         assertEquals( 1, action.getActionErrors().size() );
355     }
356
357     private void setObservableRepos( List<String> repoIds )
358     {
359         UserRepositoriesStub repos = (UserRepositoriesStub) lookup( UserRepositories.class );
360         repos.setObservableRepositoryIds( repoIds );
361     }
362
363     private void assertDefaultModel( ArchivaProjectModel model )
364     {
365         assertDefaultModel( model, TEST_VERSION );
366     }
367
368     private void assertDefaultModel( ArchivaProjectModel model, String version )
369     {
370         assertEquals( TEST_GROUP_ID, model.getGroupId() );
371         assertEquals( TEST_ARTIFACT_ID, model.getArtifactId() );
372         assertEquals( version, model.getVersion() );
373         assertEquals( TEST_URL, model.getUrl() );
374         assertEquals( TEST_NAME, model.getName() );
375         assertEquals( TEST_DESCRIPTION, model.getDescription() );
376         assertEquals( TEST_ORGANIZATION_NAME, model.getOrganization().getName() );
377         assertEquals( TEST_ORGANIZATION_URL, model.getOrganization().getUrl() );
378         assertEquals( 2, model.getLicenses().size() );
379         org.apache.maven.archiva.model.License l = model.getLicenses().get( 0 );
380         assertEquals( TEST_LICENSE_NAME, l.getName() );
381         assertEquals( TEST_LICENSE_URL, l.getUrl() );
382         l = model.getLicenses().get( 1 );
383         assertEquals( TEST_LICENSE_NAME_2, l.getName() );
384         assertEquals( TEST_LICENSE_URL_2, l.getUrl() );
385         assertEquals( TEST_ISSUE_SYSTEM, model.getIssueManagement().getSystem() );
386         assertEquals( TEST_ISSUE_URL, model.getIssueManagement().getUrl() );
387         assertEquals( TEST_CI_SYSTEM, model.getCiManagement().getSystem() );
388         assertEquals( TEST_CI_URL, model.getCiManagement().getUrl() );
389         assertEquals( TEST_SCM_CONNECTION, model.getScm().getConnection() );
390         assertEquals( TEST_SCM_DEV_CONNECTION, model.getScm().getDeveloperConnection() );
391         assertEquals( TEST_SCM_URL, model.getScm().getUrl() );
392
393         assertEquals( TEST_PACKAGING, model.getPackaging() );
394         assertEquals( TEST_PARENT_GROUP_ID, model.getParentProject().getGroupId() );
395         assertEquals( TEST_PARENT_ARTIFACT_ID, model.getParentProject().getArtifactId() );
396         assertEquals( TEST_PARENT_VERSION, model.getParentProject().getVersion() );
397     }
398
399     private void setActionParameters()
400     {
401         action.setGroupId( TEST_GROUP_ID );
402         action.setArtifactId( TEST_ARTIFACT_ID );
403         action.setVersion( TEST_VERSION );
404     }
405
406     private void assertActionParameters( ShowArtifactAction action )
407     {
408         assertEquals( TEST_GROUP_ID, action.getGroupId() );
409         assertEquals( TEST_ARTIFACT_ID, action.getArtifactId() );
410         assertEquals( TEST_VERSION, action.getVersion() );
411     }
412
413     private void assertActionSuccess( ShowArtifactAction action, String result )
414     {
415         assertEquals( Action.SUCCESS, result );
416         assertTrue( action.getActionErrors().isEmpty() );
417         assertTrue( action.getActionMessages().isEmpty() );
418     }
419
420     private ProjectVersionMetadata createProjectModel( String version )
421     {
422         ProjectVersionMetadata model = new ProjectVersionMetadata();
423         model.setId( version );
424         model.setUrl( TEST_URL );
425         model.setName( TEST_NAME );
426         model.setDescription( TEST_DESCRIPTION );
427         CiManagement ci = new CiManagement();
428         ci.setSystem( TEST_CI_SYSTEM );
429         ci.setUrl( TEST_CI_URL );
430         model.setCiManagement( ci );
431         IssueManagement issue = new IssueManagement();
432         issue.setSystem( TEST_ISSUE_SYSTEM );
433         issue.setUrl( TEST_ISSUE_URL );
434         model.setIssueManagement( issue );
435         Organization organization = new Organization();
436         organization.setName( TEST_ORGANIZATION_NAME );
437         organization.setUrl( TEST_ORGANIZATION_URL );
438         model.setOrganization( organization );
439         License l = new License();
440         l.setName( TEST_LICENSE_NAME );
441         l.setUrl( TEST_LICENSE_URL );
442         model.addLicense( l );
443         l = new License();
444         l.setName( TEST_LICENSE_NAME_2 );
445         l.setUrl( TEST_LICENSE_URL_2 );
446         model.addLicense( l );
447         Scm scm = new Scm();
448         scm.setConnection( TEST_SCM_CONNECTION );
449         scm.setDeveloperConnection( TEST_SCM_DEV_CONNECTION );
450         scm.setUrl( TEST_SCM_URL );
451         model.setScm( scm );
452
453         MavenProjectFacet mavenProjectFacet = new MavenProjectFacet();
454         mavenProjectFacet.setGroupId( TEST_GROUP_ID );
455         mavenProjectFacet.setArtifactId( TEST_ARTIFACT_ID );
456         mavenProjectFacet.setPackaging( TEST_PACKAGING );
457         MavenProjectParent parent = new MavenProjectParent();
458         parent.setGroupId( TEST_PARENT_GROUP_ID );
459         parent.setArtifactId( TEST_PARENT_ARTIFACT_ID );
460         parent.setVersion( TEST_PARENT_VERSION );
461         mavenProjectFacet.setParent( parent );
462         model.addFacet( mavenProjectFacet );
463         return model;
464     }
465
466     protected void setUp()
467         throws Exception
468     {
469         super.setUp();
470         action = (ShowArtifactAction) lookup( Action.class, ACTION_HINT );
471         metadataResolver = (TestMetadataResolver) action.getMetadataResolver();
472     }
473 }