package com.collabinate.server.resources;
import static org.junit.Assert.*;
import org.junit.Test;
import org.restlet.Request;
import org.restlet.data.MediaType;
import org.restlet.data.Method;
import org.restlet.data.Status;
import com.collabinate.server.activitystreams.Activity;
import com.google.gson.JsonParser;
/**
* Tests for the Like Resource
*
* @author mafuba
*
*/
public class LikeResourceTest extends GraphResourceTest
{
@Test
public void get_like_for_non_existent_activity_should_return_404()
{
assertEquals(Status.CLIENT_ERROR_NOT_FOUND, get().getStatus());
}
@Test
public void get_like_for_non_liked_activity_should_return_404()
{
addActivity();
assertEquals(Status.CLIENT_ERROR_NOT_FOUND, get().getStatus());
}
@Test
public void put_like_for_non_existent_activity_should_return_404()
{
assertEquals(Status.CLIENT_ERROR_NOT_FOUND, put().getStatus());
}
@Test
public void put_like_for_existing_activity_should_return_204()
{
addActivity();
assertEquals(Status.SUCCESS_NO_CONTENT, put().getStatus());
}
@Test
public void get_like_for_liked_activity_should_return_200()
{
addActivity();
put();
assertEquals(Status.SUCCESS_OK, get().getStatus());
}
@Test
public void get_should_return_json_content_type()
{
addActivity();
put();
assertEquals(MediaType.APPLICATION_JSON,
get().getEntity().getMediaType());
}
@Test
public void like_should_be_json_object()
{
addActivity();
put();
// parser will throw if result is not json
new JsonParser().parse(get().getEntityAsText());
}
@Test
public void like_should_contain_user_ID()
{
addActivity();
put();
Activity like = new Activity(get().getEntityAsText());
assertEquals("user", like.getActor().getId());
}
@Test
public void like_should_contain_activity_ID()
{
addActivity();
put();
Activity like = new Activity(get().getEntityAsText());
assertEquals("activity", like.getObject().getId());
}
@Test
public void delete_like_for_non_existent_activity_should_return_404()
{
assertEquals(Status.CLIENT_ERROR_NOT_FOUND, delete().getStatus());
}
@Test
public void delete_like_for_existing_activity_should_return_204()
{
addActivity();
assertEquals(Status.SUCCESS_NO_CONTENT, delete().getStatus());
}
@Test
public void get_for_deleted_like_should_return_404()
{
addActivity();
put();
delete();
assertEquals(Status.CLIENT_ERROR_NOT_FOUND, get().getStatus());
}
/**
* Prepares for like work by creating an activity.
*/
private void addActivity()
{
component.handle(new Request(Method.PUT,
"riap://application/1/tenant/entities/entity/stream/activity"));
}
@Override
protected String getResourcePath()
{
return "/1/tenant/users/user/likes/entity/activity";
}
}