package com.collabinate.server.resources; 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 EntityResourceTest extends GraphResourceTest { @Test public void get_should_return_json_content_type() { assertEquals(MediaType.APPLICATION_JSON, get().getEntity().getMediaType()); } @Test public void get_response_should_contain_etag_header() { assertTrue(null != get().getEntity().getTag()); } @Test public void etag_should_change_when_entity_changes() { Tag tag1 = get().getEntity().getTag(); // add an activity Request request = new Request(Method.POST, "riap://application/1/tenant/entities/entity/stream"); component.handle(request); Tag tag2 = get().getEntity().getTag(); assertNotEquals(tag1, tag2); } @Test public void matching_etag_should_return_304_for_get() { 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() { 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_delete() { Request request = getRequest(Method.DELETE, 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_204_for_delete() { Tag etag = get().getEntity().getTag(); Request request = getRequest(Method.DELETE, null); Conditions conditions = new Conditions(); conditions.getMatch().add(etag); request.setConditions(conditions); assertEquals(Status.SUCCESS_NO_CONTENT, getResponse(request).getStatus()); } @Test public void get_should_return_entity() { assertNotNull(get().getEntityAsText()); } @Test public void entity_should_be_json_object() { // parser will throw if result is not json new JsonParser().parse(get().getEntityAsText()); } @Test public void delete_entity_should_return_204() { assertEquals(Status.SUCCESS_NO_CONTENT, delete().getStatus()); } @Override protected String getResourcePath() { return "/1/tenant/entities/entity"; } }