package com.xebia.scrumboard.resource; import static com.sun.jersey.api.client.ClientResponse.Status.NOT_FOUND; import static com.xebia.scrumboard.view.SprintViewAssert.assertThat; import static javax.ws.rs.core.MediaType.APPLICATION_JSON; import static org.fest.assertions.Assertions.assertThat; import java.util.List; import org.junit.Before; import org.junit.ClassRule; import org.junit.Test; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.GenericType; import com.sun.jersey.api.client.config.ClientConfig; import com.sun.jersey.api.client.config.DefaultClientConfig; import com.xebia.scrumboard.provider.JacksonMapperProvider; import com.xebia.scrumboard.rule.Server; import com.xebia.scrumboard.view.SprintView; import com.xebia.scrumboard.view.TaskView; public class SprintResourceTest { @ClassRule public static Server server = Server.create(); public static Client client; private static String uri = server.uri + "/sprint"; @Before public void createJacksonCustomClient() { ClientConfig cc = new DefaultClientConfig(); cc.getClasses().add(JacksonMapperProvider.class); client = Client.create(cc); } @Test public void shouldNotGetUnexisting() { ClientResponse response = get("1"); assertThat(response.getStatus()).isEqualTo(NOT_FOUND.getStatusCode()); } @Test public void shouldPost() { SprintView sprint = new SprintView("release", 2, new TaskView("refactor", "bob", "M")); sprint = post(sprint); assertThat(sprint).hasId(); sprint = get(sprint); assertThat(sprint).hasWeeks(2).hasName("release"); assertThat(sprint.getTasks()).hasSize(1); } @Test public void shouldPut() { SprintView sprint = new SprintView("release", 2); sprint = post(sprint); assertThat(sprint).hasId(); sprint.setPrice(3); put(sprint); sprint = get(sprint); assertThat(sprint).hasWeeks(3).hasName("release"); } @Test public void shouldDelete() { SprintView sprint = new SprintView("release", 2); sprint = post(sprint); assertThat(sprint).isNotNull(); delete(sprint); ClientResponse response = get(sprint.getId()); assertThat(response.getStatus()).isEqualTo(NOT_FOUND.getStatusCode()); } @Test public void shouldList() { deleteAll(); post(new SprintView("beta", 3)); post(new SprintView("release", 2)); List<SprintView> sprints = get(); assertThat(sprints).hasSize(2); } /* * Helpers */ public List<SprintView> get() { return client.resource(uri).accept(APPLICATION_JSON).get(new GenericType<List<SprintView>>() { }); } public SprintView get(SprintView sprint) { String id = sprint.getId(); return get(id).getEntity(SprintView.class); } public ClientResponse get(String id) { return client.resource(uri).path(id).accept(APPLICATION_JSON).get(ClientResponse.class); } public SprintView post(SprintView sprint) { return client.resource(uri).accept(APPLICATION_JSON).entity(sprint, APPLICATION_JSON).post(SprintView.class); } public ClientResponse put(SprintView sprint) { String id = sprint.getId(); return client.resource(uri).path(id).accept(APPLICATION_JSON).entity(sprint, APPLICATION_JSON).put(ClientResponse.class); } public ClientResponse delete(SprintView sprint) { String id = sprint.getId(); return client.resource(uri).path(id).delete(ClientResponse.class); } public void deleteAll() { List<SprintView> sprints = get(); for (SprintView sprint : sprints) delete(sprint); } }