package com.collabinate.server.resources; import static org.hamcrest.CoreMatchers.containsString; import static org.junit.Assert.*; import org.junit.Test; import org.restlet.Request; import org.restlet.data.Conditions; import org.restlet.data.MediaType; import org.restlet.data.Method; import org.restlet.data.Status; import org.restlet.data.Tag; import com.google.gson.JsonParser; /** * Tests for the Activity Resource * * @author mafuba * */ public class ActivityResourceTest extends GraphResourceTest { @Test public void get_nonexistent_activity_should_return_404() { assertEquals(Status.CLIENT_ERROR_NOT_FOUND, get().getStatus()); } @Test public void putting_activity_should_return_200() { assertEquals(Status.SUCCESS_OK, put().getStatus()); } @Test public void get_should_return_json_content_type() { put("test", MediaType.TEXT_PLAIN); assertEquals(MediaType.APPLICATION_JSON, get().getEntity().getMediaType()); } @Test public void get_response_should_contain_etag_header() { put("test", MediaType.TEXT_PLAIN); assertTrue(null != get().getEntity().getTag()); } @Test public void etag_should_change_when_activity_changes() { put("test", MediaType.TEXT_PLAIN); Tag tag1 = get().getEntity().getTag(); put("test2", MediaType.TEXT_PLAIN); Tag tag2 = get().getEntity().getTag(); assertNotEquals(tag1, tag2); } @Test public void matching_etag_should_return_304_for_get() { put("test", MediaType.TEXT_PLAIN); Tag etag = get().getEntity().getTag(); Request request = getRequest(Method.GET, null); Conditions conditions = new Conditions(); conditions.getNoneMatch().add(etag); request.setConditions(conditions); assertEquals(Status.REDIRECTION_NOT_MODIFIED, getResponse(request).getStatus()); } @Test public void non_matching_etag_should_return_200_for_get() { put("test", MediaType.TEXT_PLAIN); Request request = getRequest(Method.GET, null); Conditions conditions = new Conditions(); conditions.getNoneMatch().add(new Tag("abc")); request.setConditions(conditions); assertEquals(Status.SUCCESS_OK, getResponse(request).getStatus()); } @Test public void non_matching_etag_should_return_412_for_put() { put("test", MediaType.TEXT_PLAIN); Request request = getRequest(Method.PUT, null); Conditions conditions = new Conditions(); conditions.getMatch().add(new Tag("abc")); request.setConditions(conditions); assertEquals(Status.CLIENT_ERROR_PRECONDITION_FAILED, getResponse(request).getStatus()); } @Test public void matching_etag_should_return_200_for_put() { put("test", MediaType.TEXT_PLAIN); Tag etag = get().getEntity().getTag(); Request request = getRequest(Method.PUT, null); Conditions conditions = new Conditions(); conditions.getMatch().add(etag); request.setConditions(conditions); assertEquals(Status.SUCCESS_OK, getResponse(request).getStatus()); } @Test public void get_existing_activity_should_return_activity() { put("test", MediaType.TEXT_PLAIN); assertThat(get().getEntityAsText(), containsString("test")); } @Test public void activity_should_be_json_object() { put("test", MediaType.TEXT_PLAIN); // parser will throw if result is not json new JsonParser().parse(get().getEntityAsText()); } @Test public void activity_with_different_id_than_url_should_return_422() { assertEquals(Status.CLIENT_ERROR_UNPROCESSABLE_ENTITY, put("{\"id\":\"test\"}", MediaType.APPLICATION_JSON).getStatus()); } @Test public void delete_nonexistent_activity_should_return_204() { assertEquals(Status.SUCCESS_NO_CONTENT, delete().getStatus()); } @Test public void get_deleted_activity_should_return_404() { put(); delete(); assertEquals(Status.CLIENT_ERROR_NOT_FOUND, get().getStatus()); } @Override protected String getResourcePath() { return "/1/tenant/entities/entity/stream/activity"; } }