package br.com.caelum.client;
import static br.com.caelum.restfulie.Restfulie.resource;
import static br.com.caelum.restfulie.mediatype.MediaTypes.XML;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertTrue;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import br.com.caelum.example.model.Basket;
import br.com.caelum.example.model.Item;
import br.com.caelum.example.model.Payment;
import br.com.caelum.example.model.Payment.Status;
import br.com.caelum.restfulie.Response;
import br.com.caelum.restfulie.RestClient;
import br.com.caelum.restfulie.Restfulie;
import br.com.caelum.restfulie.mediatype.XmlMediaType;
public class ClientTests {
private RestClient restfulie;
@Before
public void setUp() throws Exception {
restfulie = Restfulie.custom();
restfulie.getMediaTypes().register(
new XmlMediaType().withTypes(Item.class, Basket.class, Payment.class)
);
}
@Test
public void shouldBeAbleToGetAnItemWithHypermedia() throws Exception {
Response response = restfulie.at("http://localhost:8080/restfulie/items/2").accept("application/xml").get();
Item item = response.getResource();
assertNotNull(item);
assertNotNull(item.getName());
System.out.println(item.getName());
assertTrue(resource(item).hasLink("self"));
System.out.println(resource(item).getLink("self").getHref());
}
@Test
public void shouldBeAbleToPostAnItemWithHypermedia() throws Exception {
Item item = new Item("pipa", 299.0);
Response response = restfulie.at("http://localhost:8080/restfulie/items").as("application/xml").post(item);
Item savedItem = response.getResource();
assertNotSame(item, savedItem);
assertEquals("pipa", savedItem.getName());
assertEquals(Double.valueOf(299.0), savedItem.getPrice());
assertNotNull(savedItem.getId());
System.out.println(savedItem.getId());
assertTrue(resource(savedItem).hasLink("self"));
System.out.println(savedItem.getName());
}
@Test
public void shouldBeAbleToNavigateThroughLinks() throws Exception {
Response response = restfulie.at("http://localhost:8080/restfulie/items").accept(XML).get();
List<Item> items = response.getResource();
assertNotNull(items);
assertFalse(items.isEmpty());
List<Item> selectedItems = items.subList(0, 2);
assertTrue(resource(items).hasLink("basket"));
response = resource(items).getLink("basket").follow().as(XML).accept(XML).post(new Basket(selectedItems));
Basket basket = response.getResource();
assertNotNull(basket.getId());
assertEquals(basket.getItems().size(), selectedItems.size());
System.out.println(basket.getItems());
assertTrue(resource(basket).hasLink("payment"));
response = resource(basket).getLink("payment").follow().as(XML).accept(XML).post(new Payment(basket.getCost()));
Payment payment = response.getResource();
assertEquals(Status.ACCEPTED, payment.getStatus());
System.out.println(payment.getStatus());
}
}