]> source.dussan.org Git - archiva.git/blob
489f38b6617428a6defe2c3bac1ddbd61a738b43
[archiva.git] /
1 package org.apache.archiva.metadata.repository.file;
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.io.File;
23 import java.util.Collection;
24 import java.util.Collections;
25 import java.util.List;
26 import java.util.Map;
27
28 import org.apache.archiva.metadata.model.MailingList;
29 import org.apache.archiva.metadata.model.MetadataFacet;
30 import org.apache.archiva.metadata.model.MetadataFacetFactory;
31 import org.apache.archiva.metadata.model.ProjectVersionMetadata;
32 import org.apache.commons.io.FileUtils;
33 import org.codehaus.plexus.spring.PlexusInSpringTestCase;
34
35 public class FileMetadataRepositoryTest
36     extends PlexusInSpringTestCase
37 {
38     private FileMetadataRepository repository;
39
40     private static final String TEST_REPO_ID = "test";
41
42     private static final String TEST_PROJECT = "projectId";
43
44     private static final String TEST_NAMESPACE = "namespace";
45
46     private static final String TEST_PROJECT_VERSION = "1.0";
47
48     private static final String TEST_FACET_ID = "test-facet-id";
49
50     private static final String TEST_NAME = "test-name";
51
52     private static final String TEST_VALUE = "test-value";
53
54     private static final String UNKNOWN = "unknown";
55
56     public void setUp()
57         throws Exception
58     {
59         super.setUp();
60
61         repository = new FileMetadataRepository();
62         File directory = getTestFile( "target/test-repository" );
63         FileUtils.deleteDirectory( directory );
64         repository.setDirectory( directory );
65
66         repository.setMetadataFacetFactories(
67             Collections.<String, MetadataFacetFactory>singletonMap( TEST_FACET_ID, new MetadataFacetFactory()
68             {
69                 public MetadataFacet createMetadataFacet()
70                 {
71                     return new TestMetadataFacet( "test-metadata" );
72                 }
73             } ) );
74     }
75
76     public void testRootNamespaceWithNoMetadataRepository()
77     {
78         Collection<String> namespaces = repository.getRootNamespaces( TEST_REPO_ID );
79         assertEquals( Collections.<String>emptyList(), namespaces );
80     }
81
82     public void testUpdateProjectVersionMetadataWithNoOtherArchives()
83     {
84         ProjectVersionMetadata metadata = new ProjectVersionMetadata();
85         metadata.setId( TEST_PROJECT_VERSION );
86         MailingList mailingList = new MailingList();
87         mailingList.setName( "Foo List" );
88         mailingList.setOtherArchives( Collections.<String>emptyList() );
89         metadata.setMailingLists( Collections.singletonList( mailingList ) );
90         repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
91     }
92
93     public void testUpdateProjectVersionMetadataWithExistingFacets()
94     {
95         ProjectVersionMetadata metadata = new ProjectVersionMetadata();
96         metadata.setId( TEST_PROJECT_VERSION );
97         MetadataFacet facet = new TestMetadataFacet( "baz" );
98         metadata.addFacet( facet );
99         repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
100
101         metadata = repository.getProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
102         assertEquals( Collections.singleton( TEST_FACET_ID ), metadata.getFacetIds() );
103
104         metadata = new ProjectVersionMetadata();
105         metadata.setId( TEST_PROJECT_VERSION );
106         repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
107
108         metadata = repository.getProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
109         assertEquals( Collections.singleton( TEST_FACET_ID ), metadata.getFacetIds() );
110         TestMetadataFacet testFacet = (TestMetadataFacet) metadata.getFacet( TEST_FACET_ID );
111         assertEquals( "baz", testFacet.getValue() );
112     }
113
114     public void testGetMetadataFacet()
115     {
116         repository.addMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME, new TestMetadataFacet( TEST_VALUE ) );
117
118         assertEquals( new TestMetadataFacet( TEST_VALUE ),
119                       repository.getMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME ) );
120     }
121
122     public void testGetMetadataFacetWhenEmpty()
123     {
124         assertNull( repository.getMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME ) );
125     }
126
127     public void testGetMetadataFacetWhenUnknownName()
128     {
129         repository.addMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME, new TestMetadataFacet( TEST_VALUE ) );
130
131         assertNull( repository.getMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, UNKNOWN ) );
132     }
133
134     public void testGetMetadataFacetWhenDefaultValue()
135     {
136         repository.addMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME, new TestMetadataFacet( null ) );
137
138         assertEquals( new TestMetadataFacet( "test-metadata" ),
139                       repository.getMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME ) );
140     }
141
142     public void testGetMetadataFacetWhenUnknownFacetId()
143     {
144         repository.addMetadataFacet( TEST_REPO_ID, UNKNOWN, TEST_NAME, new TestMetadataFacet( TEST_VALUE ) );
145
146         assertNull( repository.getMetadataFacet( TEST_REPO_ID, UNKNOWN, TEST_NAME ) );
147     }
148
149     public void testGetMetadataFacets()
150     {
151         repository.addMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME, new TestMetadataFacet( TEST_VALUE ) );
152
153         assertEquals( Collections.singletonList( TEST_NAME ),
154                       repository.getMetadataFacets( TEST_REPO_ID, TEST_FACET_ID ) );
155     }
156
157     public void testGetMetadataFacetsWhenEmpty()
158     {
159         List<String> facets = repository.getMetadataFacets( TEST_REPO_ID, TEST_FACET_ID );
160         assertTrue( facets.isEmpty() );
161     }
162
163     public void testRemoveFacets()
164     {
165         List<String> facets = repository.getMetadataFacets( TEST_REPO_ID, TEST_FACET_ID );
166         assertTrue( facets.isEmpty() );
167
168         repository.removeMetadataFacets( TEST_REPO_ID, TEST_FACET_ID );
169
170         facets = repository.getMetadataFacets( TEST_REPO_ID, TEST_FACET_ID );
171         assertTrue( facets.isEmpty() );
172     }
173
174     public void testRemoveFacetsWhenEmpty()
175     {
176         repository.addMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME, new TestMetadataFacet( TEST_VALUE ) );
177
178         List<String> facets = repository.getMetadataFacets( TEST_REPO_ID, TEST_FACET_ID );
179         assertFalse( facets.isEmpty() );
180
181         repository.removeMetadataFacets( TEST_REPO_ID, TEST_FACET_ID );
182
183         facets = repository.getMetadataFacets( TEST_REPO_ID, TEST_FACET_ID );
184         assertTrue( facets.isEmpty() );
185     }
186
187     public void testRemoveFacetsWhenUnknown()
188     {
189         repository.removeMetadataFacets( TEST_REPO_ID, UNKNOWN );
190     }
191
192     private static class TestMetadataFacet
193         implements MetadataFacet
194     {
195         private TestMetadataFacet( String value )
196         {
197             this.value = value;
198         }
199
200         private String value;
201
202         public String getFacetId()
203         {
204             return TEST_FACET_ID;
205         }
206
207         public Map<String, String> toProperties()
208         {
209             if ( value != null )
210             {
211                 return Collections.singletonMap( TEST_FACET_ID + ":foo", value );
212             }
213             else
214             {
215                 return Collections.emptyMap();
216             }
217         }
218
219         public void fromProperties( Map<String, String> properties )
220         {
221             String value = properties.get( TEST_FACET_ID + ":foo" );
222             if ( value != null )
223             {
224                 this.value = value;
225             }
226         }
227
228         public String getValue()
229         {
230             return value;
231         }
232
233         @Override
234         public String toString()
235         {
236             return "TestMetadataFacet{" + "value='" + value + '\'' + '}';
237         }
238
239         @Override
240         public boolean equals( Object o )
241         {
242             if ( this == o )
243             {
244                 return true;
245             }
246             if ( o == null || getClass() != o.getClass() )
247             {
248                 return false;
249             }
250
251             TestMetadataFacet that = (TestMetadataFacet) o;
252
253             if ( value != null ? !value.equals( that.value ) : that.value != null )
254             {
255                 return false;
256             }
257
258             return true;
259         }
260
261         @Override
262         public int hashCode()
263         {
264             return value != null ? value.hashCode() : 0;
265         }
266     }
267 }