package com.google.sitebricks.acceptance;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.google.inject.AbstractModule;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.TypeLiteral;
import com.google.sitebricks.acceptance.util.AcceptanceTest;
import com.google.sitebricks.client.Web;
import com.google.sitebricks.client.WebResponse;
import com.google.sitebricks.client.transport.Json;
import com.google.sitebricks.conversion.Converter;
import com.google.sitebricks.conversion.ConverterRegistry;
import com.google.sitebricks.conversion.StandardTypeConverter;
import com.google.sitebricks.example.RestfulWebServiceWithGenerics.Person;
import org.testng.annotations.Test;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* @author Miroslav Genov (mgenov@gmail.com)
*/
@Test(suiteName = AcceptanceTest.SUITE)
public class RestfulWebServiceWithGenericsAcceptanceTest {
public void whatWasPostedIsReturnedAsResponse() {
List<Person> personList = Lists.newArrayList(new Person("John Smith"));
WebResponse response = createInjector()
.getInstance(Web.class)
.clientOf(AcceptanceTest.baseUrl() + "/serviceWithGenerics")
.transports(new TypeLiteral<List<Person>>() { })
.over(Json.class)
.post(personList);
assert HttpServletResponse.SC_OK == response.status();
List<Person> result = response.to(new TypeLiteral<List<Person>>() {}).using(Json.class);
assert result.size() == 1;
assert "John Smith".equals(result.get(0).getName());
}
private Injector createInjector() {
return Guice.createInjector(new AbstractModule() {
protected void configure() {
bind(ConverterRegistry.class).toInstance(new StandardTypeConverter(
ImmutableSet.<Converter>of()));
}
});
}
}