/*
* This library is free software; you can redistribute it and/or modify it under the terms of
* the GNU Lesser General Public License as published by the Free Software Foundation;
* either version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA
*/
package com.restfully.shop.test;
import com.restfully.shop.domain.Customer;
import com.restfully.shop.domain.LineItem;
import com.restfully.shop.domain.Link;
import com.restfully.shop.domain.Order;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.ClientResponse;
import org.junit.Assert;
import org.junit.Test;
import javax.ws.rs.core.MediaType;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class OrderResourceTest {
private String getJettyPort() {
String port = System.getenv("JERSEY_HTTP_PORT");
if(port != null)
return port;
else return "9095"; // default
}
protected Map<String, Link> processLinkHeaders(ClientResponse response) {
List<String> linkHeaders = (List<String>) response.getHeaders().get("Link");
Map<String, Link> links = new HashMap<String, Link>();
for (String header : linkHeaders) {
Link link = Link.valueOf(header);
links.put(link.getRelationship(), link);
}
return links;
}
@Test
public void testCreateCancelPurge() throws Exception {
Client c = new Client();
String url = "http://localhost:" + getJettyPort() + "/shop";
WebResource wr = c.resource(url);
ClientResponse response = wr.head();
Map<String, Link> shoppingLinks = processLinkHeaders(response);
Link customers = shoppingLinks.get("customers");
System.out.println("** Create a customer through this URL: " + customers.getHref());
Customer customer = new Customer();
customer.setFirstName("Bill");
customer.setLastName("Burke");
customer.setStreet("10 Somewhere Street");
customer.setCity("Westford");
customer.setState("MA");
customer.setZip("01711");
customer.setCountry("USA");
wr = c.resource(customers.getHref());
response = wr.type(MediaType.APPLICATION_XML).post(ClientResponse.class, customer);
Assert.assertEquals(201, response.getStatus());
Link orders = shoppingLinks.get("orders");
Order order = new Order();
order.setTotal("$199.99");
order.setCustomer(customer);
order.setDate(new Date().toString());
LineItem item = new LineItem();
item.setCost("$199.99");
item.setProduct("iPhone");
order.setLineItems(new ArrayList<LineItem>());
order.getLineItems().add(item);
System.out.println();
System.out.println("** Create an order through this URL: " + orders.getHref());
wr = c.resource(orders.getHref());
response = wr.type(MediaType.APPLICATION_XML).post(ClientResponse.class, order);
Assert.assertEquals(201, response.getStatus());
String createdOrderUrl = (String) response.getHeaders().getFirst("Location");
System.out.println();
System.out.println("** New list of orders");
wr = c.resource(orders.getHref());
response = wr.get(ClientResponse.class);
System.out.println(response.getEntity(String.class));
Map<String, Link> ordersLinks = processLinkHeaders(response);
wr = c.resource(createdOrderUrl);
response = wr.head();
Map<String, Link> orderLinks = processLinkHeaders(response);
Link cancel = orderLinks.get("cancel");
if (cancel != null) {
System.out.println("** Canceling the order at URL: " + cancel.getHref());
wr = c.resource(cancel.getHref());
response = wr.post(ClientResponse.class);
Assert.assertEquals(204, response.getStatus());
}
System.out.println();
System.out.println("** New list of orders after cancel: ");
wr = c.resource(orders.getHref());
response = wr.get(ClientResponse.class);
System.out.println(response.getEntity(String.class));
System.out.println();
Link purge = ordersLinks.get("purge");
System.out.println("** Purge cancelled orders at URL: " + purge.getHref());
wr = c.resource(purge.getHref());
response = wr.post(ClientResponse.class);
Assert.assertEquals(204, response.getStatus());
System.out.println();
System.out.println("** New list of orders after purge: ");
wr = c.resource(orders.getHref());
response = wr.get(ClientResponse.class);
System.out.println(response.getEntity(String.class));
}
}