package com.collabinate.server.engine;
import static org.junit.Assert.*;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import com.collabinate.server.activitystreams.Activity;
import com.collabinate.server.activitystreams.ActivityStreamsObject;
import com.collabinate.server.engine.CollabinateWriter;
/**
* Abstract test class to test any implementation of a CollabinateWriter.
*
* @author mafuba
*
*/
public abstract class CollabinateWriterTest
{
private CollabinateWriter writer;
abstract CollabinateWriter getWriter();
@Rule
public ExpectedException exception = ExpectedException.none();
@Before
public void setup()
{
writer = getWriter();
}
@Test
public void should_not_be_null()
{
assertNotNull(writer);
}
@Test
public void add_activity_should_not_allow_null_tenant_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("tenantId");
writer.addActivity(null, "entity", new Activity());
}
@Test
public void add_activity_should_not_allow_null_entity_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("entityId");
writer.addActivity("c", null, new Activity());
}
@Test
public void add_activity_should_not_allow_null_activity()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("activity");
writer.addActivity("c", "", null);
}
@Test
public void adding_duplicate_activities_should_fail()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("exists");
Activity activity = new Activity();
activity.setId("1");
writer.addActivity("c", "entity", activity);
writer.addActivity("c", "entity", activity);
//cleanup
writer.deleteActivity("c", "entity", "1");
}
@Test
public void delete_activity_should_not_allow_null_tenant_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("tenantId");
writer.deleteActivity(null, "entity", "");
}
@Test
public void delete_activity_should_not_allow_null_entity_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("entityId");
writer.deleteActivity("c", null, "");
}
@Test
public void delete_activity_should_not_allow_null_activity_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("activityId");
writer.deleteActivity("c", "", null);
}
@Test
public void deleting_nonexistent_activity_should_succeed()
{
Activity activity = new Activity();
activity.setId("1");
writer.addActivity("c", "entity", activity);
writer.deleteActivity("c", "entity", "2");
//cleanup
writer.deleteActivity("c", "entity", "1");
}
@Test
public void follow_entity_should_not_allow_null_tenant_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("tenantId");
writer.followEntity(null, "user", "1", null);
}
@Test
public void follow_entity_should_not_allow_null_user_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("userId");
writer.followEntity("c", null, "1", null);
}
@Test
public void follow_entity_should_not_allow_null_entity_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("entityId");
writer.followEntity("c", "user", null, null);
}
@Test
public void unfollow_entity_should_not_allow_null_tenant_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("tenantId");
writer.unfollowEntity(null, "user", "1");
}
@Test
public void unfollow_entity_should_not_allow_null_user_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("userId");
writer.unfollowEntity("c", null, "1");
}
@Test
public void unfollow_entity_should_not_allow_null_entity_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("entityId");
writer.unfollowEntity("c", "user", null);
}
@Test
public void add_comment_should_not_allow_null_tenant_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("tenantId");
writer.addComment(null, "entity", "activity", "user",
new ActivityStreamsObject());
}
@Test
public void add_comment_should_not_allow_null_entity_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("entityId");
writer.addComment("c", null, "activity", "user",
new ActivityStreamsObject());
}
@Test
public void add_comment_should_not_allow_null_activity_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("activityId");
writer.addComment("c", "entity", null, "user",
new ActivityStreamsObject());
}
@Test
public void add_comment_should_not_allow_null_comment()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("comment");
writer.addComment("c", "entity", "activity", "user", null);
}
@Test
public void add_comment_should_allow_null_user_ID()
{
ActivityStreamsObject comment = new ActivityStreamsObject("comment");
comment.setId(ActivityStreamsObject.generateUuidUrn());
comment.setPublished(DateTime.now());
writer.addComment("c", "entity", "activity", null, comment);
}
@Test
public void add_comment_should_allow_comment_with_no_ID()
{
ActivityStreamsObject comment = new ActivityStreamsObject("comment");
comment.setPublished(DateTime.now());
writer.addComment("c", "entity", "activity", null, comment);
}
@Test
public void add_comment_should_allow_comment_with_no_date()
{
ActivityStreamsObject comment = new ActivityStreamsObject("comment");
comment.setId(ActivityStreamsObject.generateUuidUrn());
writer.addComment("c", "entity", "activity", null, comment);
}
@Test
public void delete_comment_should_not_allow_null_tenant_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("tenantId");
writer.deleteComment(null, "entity", "activity", "1");
}
@Test
public void delete_comment_should_not_allow_null_entity_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("entityId");
writer.deleteComment("c", null, "activity", "1");
}
@Test
public void delete_comment_should_not_allow_null_activity_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("activityId");
writer.deleteComment("c", "entity", null, "1");
}
@Test
public void delete_comment_should_not_allow_null_comment_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("commentId");
writer.deleteComment("c", "entity", "activity", null);
}
@Test
public void like_activity_should_not_allow_null_tenant_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("tenantId");
writer.likeActivity(null, "user", "entity", "activity");
}
@Test
public void like_activity_should_not_allow_null_user_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("userId");
writer.likeActivity("c", null, "entity", "activity");
}
@Test
public void like_activity_should_not_allow_null_entity_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("entityId");
writer.likeActivity("c", "user", null, "activity");
}
@Test
public void like_activity_should_not_allow_null_activity_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("activityId");
writer.likeActivity("c", "user", "entity", null);
}
@Test
public void liking_same_activity_multiple_times_should_succeed()
{
writer.likeActivity("c", "user", "entity", "activity");
writer.likeActivity("c", "user", "entity", "activity");
}
@Test
public void unlike_activity_should_not_allow_null_tenant_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("tenantId");
writer.unlikeActivity(null, "user", "entity", "activity");
}
@Test
public void unlike_activity_should_not_allow_null_user_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("userId");
writer.unlikeActivity("c", null, "entity", "activity");
}
@Test
public void unlike_activity_should_not_allow_null_entity_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("entityId");
writer.unlikeActivity("c", "user", null, "activity");
}
@Test
public void unlike_activity_should_not_allow_null_activity_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("activityId");
writer.unlikeActivity("c", "user", "entity", null);
}
@Test
public void unliking_same_activity_multiple_times_should_succeed()
{
writer.unlikeActivity("c", "user", "entity", "activity");
writer.unlikeActivity("c", "user", "entity", "activity");
}
@Test
public void deleting_entity_should_not_allow_null_tenant_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("tenantId");
writer.deleteEntity(null, "entity");
}
@Test
public void deleting_entity_should_not_allow_null_entity_ID()
{
exception.expect(IllegalArgumentException.class);
exception.expectMessage("entityId");
writer.deleteEntity("c", null);
}
}