View Javadoc

1   package org.apache.maven.archiva.database.jdo;
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.ArrayList;
24  import java.util.Date;
25  import java.util.List;
26  
27  import javax.jdo.JDOHelper;
28  
29  import org.apache.commons.beanutils.PropertyUtils;
30  import org.apache.commons.lang.StringUtils;
31  import org.apache.maven.archiva.database.AbstractArchivaDatabaseTestCase;
32  import org.apache.maven.archiva.database.ProjectModelDAO;
33  import org.apache.maven.archiva.model.ArchivaProjectModel;
34  import org.apache.maven.archiva.repository.project.ProjectModelReader;
35  import org.apache.maven.archiva.repository.project.readers.ProjectModel400Reader;
36  
37  /**
38   * JdoProjectModelDAOTest 
39   *
40   * @version $Id: JdoProjectModelDAOTest.java 755266 2009-03-17 14:28:40Z brett $
41   */
42  public class JdoProjectModelDAOTest
43      extends AbstractArchivaDatabaseTestCase
44  {
45      public void testProjectModelCRUD()
46          throws Exception
47      {
48          ProjectModelDAO projectDao = dao.getProjectModelDAO();
49  
50          // Create it
51          ArchivaProjectModel model = projectDao.createProjectModel( "org.apache.maven.archiva", "archiva-test-module",
52                                                                     "1.0" );
53          assertNotNull( model );
54  
55          // Set some mandatory values
56          model.setPackaging( "pom" );
57          model.setWhenIndexed( new Date() );
58          model.setOrigin( "test" );
59  
60          // Save it.
61          ArchivaProjectModel savedModel = projectDao.saveProjectModel( model );
62          assertNotNull( savedModel );
63          String savedKeyId = JDOHelper.getObjectId( savedModel ).toString();
64          assertEquals( "org.apache.maven.archiva:archiva-test-module:1.0", savedKeyId );
65  
66          // Test that something has been saved.
67          List<ArchivaProjectModel> projects = projectDao.queryProjectModels( null );
68          assertNotNull( projects );
69          assertEquals( 1, projects.size() );
70  
71          // Test that retrieved object is what we expect.
72          ArchivaProjectModel firstModel = (ArchivaProjectModel) projects.get( 0 );
73          assertNotNull( firstModel );
74          assertEquals( "org.apache.maven.archiva", firstModel.getGroupId() );
75          assertEquals( "archiva-test-module", firstModel.getArtifactId() );
76          assertEquals( "1.0", firstModel.getVersion() );
77  
78          // Change value and save.
79          savedModel.setOrigin( "changed" );
80          projectDao.saveProjectModel( savedModel );
81  
82          // Test that only 1 object is saved.
83          assertEquals( 1, projectDao.queryProjectModels( null ).size() );
84  
85          // Get the specific artifact.
86          ArchivaProjectModel actualModel = projectDao.getProjectModel( "org.apache.maven.archiva",
87                                                                        "archiva-test-module", "1.0" );
88          assertNotNull( actualModel );
89  
90          // Test expected values.
91          assertEquals( "archiva-test-module", actualModel.getArtifactId() );
92          assertEquals( "changed", actualModel.getOrigin() );
93  
94          // Test that only 1 object is saved.
95          assertEquals( 1, projectDao.queryProjectModels( null ).size() );
96  
97          // Delete object.
98          projectDao.deleteProjectModel( actualModel );
99          assertEquals( 0, projectDao.queryProjectModels( null ).size() );
100     }
101 
102     public void testSaveGetRealProjectModel()
103         throws Exception
104     {
105         String groupId = "org.apache.maven.shared";
106         String artifactId = "maven-shared-jar";
107         String version = "1.0-SNAPSHOT";
108 
109         ProjectModelDAO projectDao = dao.getProjectModelDAO();
110 
111         ProjectModelReader modelReader = new ProjectModel400Reader();
112 
113         File pomFile = getTestFile( "src/test/resources/projects/maven-shared-jar-1.0-SNAPSHOT.pom" );
114 
115         assertTrue( "pom file should exist: " + pomFile.getAbsolutePath(), pomFile.exists() && pomFile.isFile() );
116 
117         ArchivaProjectModel model = modelReader.read( pomFile );
118         assertNotNull( "Model should not be null.", model );
119 
120         /* NOTE: We are intentionally using a basic project model in this unit test.
121          *       The expansion of expressions, resolving of dependencies, and merging
122          *       of parent poms is *NOT* performed to keep this unit test simple.
123          */
124 
125         // Fill in mandatory/missing fields
126         model.setGroupId( groupId );
127         model.setOrigin( "testcase" );
128 
129         projectDao.saveProjectModel( model );
130 
131         ArchivaProjectModel savedModel = projectDao.getProjectModel( groupId, artifactId, version );
132         assertNotNull( "Project model should not be null.", savedModel );
133 
134         // Test proper detachment of sub-objects.
135         List<String> exprs = new ArrayList<String>();
136         exprs.add( "parentProject.groupId" );
137         exprs.add( "organization.name" );
138         exprs.add( "issueManagement.system" );
139         exprs.add( "ciManagement.system" );
140         exprs.add( "scm.url" );
141         exprs.add( "individuals[0].name" );
142         exprs.add( "dependencies[0].groupId" );
143         exprs.add( "dependencyManagement[0].artifactId" );
144         exprs.add( "repositories[0].id" );
145         exprs.add( "plugins[0].artifactId" );
146         exprs.add( "reports[0].artifactId" );
147         exprs.add( "buildExtensions[0].artifactId" );
148         exprs.add( "licenses[0].url" );
149         exprs.add( "mailingLists[0].name" );
150 
151         for ( String expr : exprs )
152         {
153             try
154             {
155                 Object obj = PropertyUtils.getProperty( model, expr );
156                 assertNotNull( "Expr \"" + expr + "\" != null", obj );
157                 assertTrue( "Expr \"" + expr + "\" should be a String.", ( obj instanceof String ) );
158                 String value = (String) obj;
159                 assertTrue( "Expr \"" + expr + "\" value should not be blank.", StringUtils.isNotBlank( value ) );
160             }
161             catch ( IndexOutOfBoundsException e )
162             {
163                 fail( "Expr \"" + expr + "\" unable to get indexed property: " + e.getClass().getName() + ": "
164                     + e.getMessage() );
165             }
166         }
167     }
168 }