View Javadoc

1   package org.apache.maven.continuum.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.ArrayList;
23  import java.util.Collection;
24  import java.util.List;
25  
26  import org.apache.maven.continuum.web.action.stub.AddProjectActionStub;
27  import org.apache.maven.continuum.Continuum;
28  import org.apache.maven.continuum.model.project.Project;
29  import org.apache.maven.continuum.model.project.ProjectGroup;
30  import org.jmock.Mock;
31  import org.jmock.MockObjectTestCase;
32  
33  /**
34   * Test for {@link AddProjectAction}
35   *
36   * @author <a href="mailto:jzurbano@apache.org">jzurbano</a>
37   */
38  public class AddProjectActionTest
39      extends MockObjectTestCase
40  {
41      private final AddProjectActionStub action;
42  
43      private final Mock continuumMock;
44  
45      private static final String VALID_NAME_CHARACTER = "abcABC123whitespaces_.:-";
46  
47      private static final String VALID_VERSION_CHARACTER = "abcABC123.-";
48  
49      private static final String VALID_SCM_URL_CHARACTER = "abcABC123_.:-#~=@\\/|[]";
50  
51      private static final String VALID_SCM_TAG_CHARACTER = "abcABC123_.:-#~=@\\/|[]";
52  
53      private static final String VALID_DESCRIPTION_CHARACTER = "abcABC123whitespaces_.-";
54  
55      public AddProjectActionTest()
56      {
57          action = new AddProjectActionStub();
58          continuumMock = new Mock( Continuum.class );
59          action.setContinuum( (Continuum) continuumMock.proxy() );
60          
61          Collection<ProjectGroup> projectGroups = new ArrayList<ProjectGroup>();
62          ProjectGroup projectGroup = new ProjectGroup();
63          projectGroups.add( projectGroup );
64          
65          action.setProjectGroups( projectGroups );
66      }
67  
68      public void testAddProjectNullValues()
69          throws Exception
70      {
71          action.setProjectName( null );
72          action.setProjectVersion( null );
73          action.setProjectScmUrl( null );
74          
75          action.validate();
76      }
77      
78      /**
79       * Test add of Ant project
80       *
81       * @throws Exception
82       */
83      public void testAddAntProject()
84          throws Exception
85      {
86          String scmUrl = "scm:svn:http://project/scm/url/test/build.xml";
87          
88          List<Project> projects = createProjectList();
89          continuumMock.expects( once() ).method( "getProjects" ).will( returnValue( projects ) );
90          continuumMock.expects( once() ).method( "addProject" ).will( returnValue( 3 ) );
91          
92          action.setProjectName( "Ant Test Project" );
93          action.setProjectVersion( "1.0-SNAPSHOT" );
94          action.setProjectScmUrl( scmUrl );
95          action.setProjectType( "ant" );
96          action.setSelectedProjectGroup( 1 );
97          action.setBuildDefintionTemplateId( 1 );
98          
99          action.validate();
100         action.add();
101         continuumMock.verify();
102     }
103     
104     public void testAddAntProjectWithValidValues()
105         throws Exception
106     {
107         List<Project> projects = createProjectList();
108         continuumMock.expects( once() ).method( "getProjects" ).will( returnValue( projects ) );
109         continuumMock.expects( once() ).method( "addProject" ).will( returnValue( 3 ) );
110         
111         action.setProjectName( VALID_NAME_CHARACTER );
112         action.setProjectDescription( VALID_DESCRIPTION_CHARACTER );
113         action.setProjectVersion( VALID_VERSION_CHARACTER );
114         action.setProjectScmUrl( VALID_SCM_URL_CHARACTER );
115         action.setProjectScmTag( VALID_SCM_TAG_CHARACTER );
116         action.setProjectType( "ant" );
117         action.setSelectedProjectGroup( 1 );
118         action.setBuildDefintionTemplateId( 1 );
119         
120         // validate
121         action.validate();
122 
123         // verify
124         assertFalse( action.hasActionErrors() );
125         assertEquals( 0, action.getActionErrors().size() );
126 
127         // add
128         action.add();
129         
130         continuumMock.verify();
131     }
132 
133     /**
134      * Test add of Shell project
135      *
136      * @throws Exception
137      */
138     public void testAddShellProject()
139         throws Exception
140     {
141         String scmUrl = "scm:svn:http://project/scm/url/test/run.sh";
142         
143         List<Project> projects = createProjectList();
144         continuumMock.expects( once() ).method( "getProjects" ).will( returnValue( projects ) );
145         continuumMock.expects( once() ).method( "addProject" ).will( returnValue( 3 ) );
146         
147         action.setProjectName( "Shell Test Project" );
148         action.setProjectVersion( "1.0-SNAPSHOT" );
149         action.setProjectScmUrl( scmUrl );
150         action.setProjectType( "shell" );
151         action.setSelectedProjectGroup( 1 );
152         action.setBuildDefintionTemplateId( 1 );
153         
154         action.validate();
155         action.add();
156         continuumMock.verify();
157     }
158 
159     public void testAddShellProjectWithValidValues()
160         throws Exception
161     {
162         List<Project> projects = createProjectList();
163         continuumMock.expects( once() ).method( "getProjects" ).will( returnValue( projects ) );
164         continuumMock.expects( once() ).method( "addProject" ).will( returnValue( 3 ) );
165 
166         action.setProjectName( VALID_NAME_CHARACTER );
167         action.setProjectDescription( VALID_DESCRIPTION_CHARACTER );
168         action.setProjectVersion( VALID_VERSION_CHARACTER );
169         action.setProjectScmUrl( VALID_SCM_URL_CHARACTER );
170         action.setProjectScmTag( VALID_SCM_TAG_CHARACTER );
171         action.setProjectType( "shell" );
172         action.setSelectedProjectGroup( 1 );
173         action.setBuildDefintionTemplateId( 1 );
174 
175         // validate
176         action.validate();
177 
178         // verify
179         assertFalse( action.hasActionErrors() );
180         assertEquals( 0, action.getActionErrors().size() );
181 
182         // add
183         action.add();
184 
185         continuumMock.verify();
186     }
187 
188     private List<Project> createProjectList()
189     {
190         List<Project> projects = new ArrayList<Project>();
191         
192         Project project1 = createProject( "scm:svn:http://project/scm/url/test-1/run.sh", "Shell Test Project 1", "1.0-SNAPSHOT", 1 );
193         Project project2 = createProject( "scm:svn:http://project/scm/url/test-2/build.xml", "Ant Test Project 1", "1.0-SNAPSHOT", 2 );
194         
195         projects.add( project1 );
196         projects.add( project2 );
197         
198         return projects;
199     }
200     
201     private Project createProject( String scmUrl, String name, String version, int id )
202     {
203         Project project = new Project();
204         project.setId( id );
205         project.setName( name );
206         project.setVersion( version );
207         project.setScmUrl( scmUrl );
208         
209         return project;
210     }
211 }