diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml index 0e27dd55b7..883b62600c 100644 --- a/scm-webapp/pom.xml +++ b/scm-webapp/pom.xml @@ -187,6 +187,13 @@ test + + com.sun.jersey.contribs + jersey-apache-client + ${jersey.version} + test + + diff --git a/scm-webapp/src/test/java/sonia/scm/ic/AbstractITCaseBase.java b/scm-webapp/src/test/java/sonia/scm/ic/AbstractITCaseBase.java new file mode 100644 index 0000000000..cbf6051243 --- /dev/null +++ b/scm-webapp/src/test/java/sonia/scm/ic/AbstractITCaseBase.java @@ -0,0 +1,165 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of SCM-Manager; nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.ic; + +//~--- non-JDK imports -------------------------------------------------------- + +import sonia.scm.ScmState; +import sonia.scm.Type; +import sonia.scm.user.User; + +import static org.junit.Assert.*; + +//~--- JDK imports ------------------------------------------------------------ + +import com.sun.jersey.api.client.Client; +import com.sun.jersey.api.client.ClientResponse; +import com.sun.jersey.api.client.WebResource; +import com.sun.jersey.api.client.config.ClientConfig; +import com.sun.jersey.client.apache.ApacheHttpClient; +import com.sun.jersey.client.apache.config.ApacheHttpClientConfig; +import com.sun.jersey.client.apache.config.DefaultApacheHttpClientConfig; +import com.sun.jersey.core.util.MultivaluedMapImpl; + +import java.util.Collection; + +import javax.ws.rs.core.MultivaluedMap; + +/** + * + * @author Sebastian Sdorra + */ +public class AbstractITCaseBase +{ + + /** Field description */ + public static final String BASE_URL = + "http://localhost:8080/scm-webapp/api/rest/"; + + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + * + * @param client + */ + protected void adminLogin(Client client) + { + ClientResponse cr = login(client, "scmadmin", "scmadmin"); + ScmState state = cr.getEntity(ScmState.class); + + assertNotNull(state); + assertTrue(state.isSuccess()); + + User user = state.getUser(); + + assertNotNull(user); + assertEquals(user.getName(), "scmadmin"); + assertTrue(user.isAdmin()); + + Collection types = state.getRepositoryTypes(); + + assertNotNull(types); + assertFalse(types.isEmpty()); + } + + /** + * Method description + * + * + * @return + */ + protected Client createClient() + { + ClientConfig config = new DefaultApacheHttpClientConfig(); + + config.getProperties().put(ApacheHttpClientConfig.PROPERTY_HANDLE_COOKIES, + true); + + return ApacheHttpClient.create(config); + } + + /** + * Method description + * + * + * @param client + * @param url + * + * @return + */ + protected WebResource createResource(Client client, String url) + { + return client.resource(BASE_URL.concat(url)); + } + + /** + * Method description + * + * + * @param client + * @param username + * @param password + * + * @return + */ + protected ClientResponse login(Client client, String username, + String password) + { + WebResource wr = createResource(client, "authentication/login.json"); + MultivaluedMap formData = new MultivaluedMapImpl(); + + formData.add("username", username); + formData.add("password", password); + + return wr.type("application/x-www-form-urlencoded").post( + ClientResponse.class, formData); + } + + /** + * Method description + * + * + * @param client + */ + protected void logout(Client client) + { + WebResource wr = createResource(client, "authentication/logout.json"); + ClientResponse response = wr.get(ClientResponse.class); + + assertNotNull(response); + assertTrue(response.getStatus() == 200); + } +} diff --git a/scm-webapp/src/test/java/sonia/scm/ic/AuthenticationITCase.java b/scm-webapp/src/test/java/sonia/scm/ic/AuthenticationITCase.java index 8a0d607e30..743e341ab3 100644 --- a/scm-webapp/src/test/java/sonia/scm/ic/AuthenticationITCase.java +++ b/scm-webapp/src/test/java/sonia/scm/ic/AuthenticationITCase.java @@ -37,36 +37,20 @@ package sonia.scm.ic; import org.junit.Test; -import sonia.scm.ScmState; -import sonia.scm.Type; -import sonia.scm.user.User; - import static org.junit.Assert.*; //~--- JDK imports ------------------------------------------------------------ import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.WebResource; -import com.sun.jersey.core.util.MultivaluedMapImpl; - -import java.util.Collection; - -import javax.ws.rs.core.MultivaluedMap; /** * * @author Sebastian Sdorra */ -public class AuthenticationITCase +public class AuthenticationITCase extends AbstractITCaseBase { - /** Field description */ - public static final String BASE_URL = - "http://localhost:8080/scm-webapp/api/rest/"; - - //~--- methods -------------------------------------------------------------- - /** * Method description * @@ -75,7 +59,7 @@ public class AuthenticationITCase @Test public void testLogin() { - Client client = new Client(); + Client client = createClient(); adminLogin(client); } @@ -87,7 +71,7 @@ public class AuthenticationITCase @Test public void testLoginFailed() { - Client client = new Client(); + Client client = createClient(); ClientResponse response = login(client, "dent", "trillian"); assertNotNull(response); @@ -101,74 +85,9 @@ public class AuthenticationITCase @Test public void testLogout() { - Client client = new Client(); + Client client = createClient(); adminLogin(client); logout(client); } - - /** - * Method description - * - * - * @param client - */ - private void adminLogin(Client client) - { - ClientResponse cr = login(client, "scmadmin", "scmadmin"); - ScmState state = cr.getEntity(ScmState.class); - - assertNotNull(state); - assertTrue(state.isSuccess()); - - User user = state.getUser(); - - assertNotNull(user); - assertEquals(user.getName(), "scmadmin"); - assertTrue(user.isAdmin()); - - Collection types = state.getRepositoryTypes(); - - assertNotNull(types); - assertFalse(types.isEmpty()); - } - - /** - * Method description - * - * - * @param client - * @param username - * @param password - * - * @return - */ - private ClientResponse login(Client client, String username, String password) - { - WebResource wr = - client.resource(BASE_URL.concat("authentication/login.json")); - MultivaluedMap formData = new MultivaluedMapImpl(); - - formData.add("username", username); - formData.add("password", password); - - return wr.type("application/x-www-form-urlencoded").post( - ClientResponse.class, formData); - } - - /** - * Method description - * - * - * @param client - */ - private void logout(Client client) - { - WebResource wr = - client.resource(BASE_URL.concat("authentication/logout.json")); - ClientResponse response = wr.get(ClientResponse.class); - - assertNotNull(response); - assertTrue(response.getStatus() == 200); - } } diff --git a/scm-webapp/src/test/java/sonia/scm/ic/UserITCase.java b/scm-webapp/src/test/java/sonia/scm/ic/UserITCase.java new file mode 100644 index 0000000000..4e88cfc425 --- /dev/null +++ b/scm-webapp/src/test/java/sonia/scm/ic/UserITCase.java @@ -0,0 +1,154 @@ +/** + * Copyright (c) 2010, Sebastian Sdorra + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of SCM-Manager; nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * http://bitbucket.org/sdorra/scm-manager + * + */ + + + +package sonia.scm.ic; + +//~--- non-JDK imports -------------------------------------------------------- + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import sonia.scm.user.User; + +import static org.junit.Assert.*; + +//~--- JDK imports ------------------------------------------------------------ + +import com.sun.jersey.api.client.Client; +import com.sun.jersey.api.client.ClientResponse; +import com.sun.jersey.api.client.GenericType; +import com.sun.jersey.api.client.WebResource; + +import java.util.Collection; + +/** + * + * @author Sebastian Sdorra + */ +public class UserITCase extends AbstractITCaseBase +{ + + /** + * Method description + * + */ + @Before + public void login() + { + client = createClient(); + adminLogin(client); + } + + /** + * Method description + * + */ + @After + public void logout() + { + logout(client); + } + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + */ + @Test + public void get() + { + WebResource wr = createResource(client, "users/scmadmin.json"); + ClientResponse respone = wr.get(ClientResponse.class); + + assertNotNull(respone); + assertTrue(respone.getStatus() == 200); + + User user = respone.getEntity(User.class); + + testAdmin(user); + } + + /** + * Method description + * @Test + */ + public void getAll() + { + WebResource wr = createResource(client, "users.json"); + ClientResponse respone = wr.get(ClientResponse.class); + + assertNotNull(respone); + assertTrue(respone.getStatus() == 200); + + Collection users = + respone.getEntity(new GenericType>() {} + ); + + assertNotNull(users); + assertFalse(users.isEmpty()); + + User admin = null; + + for (User user : users) + { + if (user.getName().equals("scmadmin")) + { + admin = user; + } + } + + testAdmin(admin); + } + + //~--- methods -------------------------------------------------------------- + + /** + * Method description + * + * + * @param user + */ + private void testAdmin(User user) + { + assertNotNull(user); + assertEquals(user.getName(), "scmadmin"); + assertTrue(user.isAdmin()); + } + + //~--- fields --------------------------------------------------------------- + + /** Field description */ + private Client client; +}