package br.com.caelum.vraptor.restbucks;
import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertThat;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import org.junit.Test;
import com.thoughtworks.xstream.XStream;
public class XmlDeserializerTest {
private String item() {
return " <item>"+
" <drink>LATTE</drink>"+
" <milk>SEMI</milk>"+
" <size>LARGE</size>"+
" </item>";
}
private InputStream orderXml(String items) {
return streamFor("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"+
"<order>"+
" <id>510</id>"+
" <location>TO_TAKE</location>"+
" <items>"+
items +
" </items>"+
" </order>");
}
@Test
public void shouldBeCapableOfDeserializingBasicData() {
Order order = deserialize(orderXml(""));
assertThat(order.getId(), equalTo("510"));
assertThat(order.getLocation(), equalTo(Order.Location.TO_TAKE));
assertThat(order.getItems().size(), equalTo(0));
}
private Order deserialize(InputStream input) {
XStream deserializer = createXStream();
Order order = (Order) deserializer.fromXML(input);
return order;
}
private XStream createXStream() {
return new XmlDeserializer(null).getXStream();
}
private InputStream streamFor(String base) {
return new ByteArrayInputStream(base.getBytes());
}
@Test
public void shouldBeCapableOfReadingAnItem() {
Order order = deserialize(orderXml(item()));
assertThat(order.getItems().size(), equalTo(1));
Item item = order.getItems().get(0);
assertThat(item.getDrink(), equalTo(Item.Coffee.LATTE));
assertThat(item.getMilk(), equalTo(Item.Milk.SEMI));
assertThat(item.getSize(), equalTo(Item.Size.LARGE));
}
@Test
public void shouldBeCapableOfReadingItems() {
Order order = deserialize(orderXml(item() + item()));
assertThat(order.getItems().size(), equalTo(2));
}
}