/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.superbiz.rest; import org.apache.cxf.jaxrs.client.WebClient; import org.apache.openejb.OpenEjbContainer; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import javax.ejb.embeddable.EJBContainer; import javax.naming.Context; import javax.naming.NamingException; import javax.ws.rs.core.Response; import javax.xml.bind.JAXBContext; import javax.xml.bind.Unmarshaller; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Properties; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; public class UserServiceTest { private static Context context; private static UserService service; private static List<User> users = new ArrayList<>(); @BeforeClass public static void start() throws NamingException { Properties properties = new Properties(); properties.setProperty(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE, "true"); context = EJBContainer.createEJBContainer(properties).getContext(); // create some records service = (UserService) context.lookup("java:global/rest-on-ejb/UserService"); users.add(service.create("foo", "foopwd", "foo@foo.com")); users.add(service.create("bar", "barpwd", "bar@bar.com")); } @AfterClass public static void close() throws NamingException { if (context != null) { context.close(); } } @Test public void create() { WebClient.create("http://localhost:4204/rest-on-ejb") .path("/user/create") .query("name", "dummy") .query("pwd", "unbreakable") .query("mail", "foo@bar.fr") .put("{}"); List<User> list = service.list(0, 100); for (User u : list) { if (!users.contains(u)) { service.delete(u.getId()); return; } } fail("user was not added"); } @Test public void delete() throws Exception { User user = service.create("todelete", "dontforget", "delete@me.com"); WebClient.create("http://localhost:4204/rest-on-ejb").path("/user/delete/" + user.getId()).delete(); user = service.find(user.getId()); assertNull(user); } @Test public void show() { User user = WebClient.create("http://localhost:4204/rest-on-ejb") .path("/user/show/" + users.iterator().next().getId()) .get(User.class); assertEquals("foo", user.getFullname()); assertEquals("foopwd", user.getPassword()); assertEquals("foo@foo.com", user.getEmail()); } @Test public void list() throws Exception { String users = WebClient.create("http://localhost:4204/rest-on-ejb") .path("/user/list") .get(String.class); assertEquals(users, inline("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<users>" + " <user>" + " <email>bar@bar.com</email>" + " <fullname>bar</fullname>" + " <id>2</id>" + " <password>barpwd</password>" + " </user>" + " <user>" + " <email>foo@foo.com</email>" + " <fullname>foo</fullname>" + " <id>1</id>" + " <password>foopwd</password>" + " </user>" + "</users>"), inline(users) ); } private static String inline(String s) { return s.replace(System.getProperty("line.separator"), "").replace("\n", "") .replace(" ", "").replace("\t", ""); } @Test public void update() throws Exception { User created = service.create("name", "pwd", "mail"); Response response = WebClient.create("http://localhost:4204/rest-on-ejb") .path("/user/update/" + created.getId()) .query("name", "corrected") .query("pwd", "userpwd") .query("mail", "it@is.ok") .post(null); JAXBContext ctx = JAXBContext.newInstance(User.class); Unmarshaller unmarshaller = ctx.createUnmarshaller(); User modified = (User) unmarshaller.unmarshal(InputStream.class.cast(response.getEntity())); assertEquals("corrected", modified.getFullname()); assertEquals("userpwd", modified.getPassword()); assertEquals("it@is.ok", modified.getEmail()); service.delete(created.getId()); } }