package org.sakaiproject.util;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.sakaiproject.util.EntityCollections.*;
import java.util.ArrayList;
import java.util.Arrays;
import org.junit.Test;
import org.sakaiproject.entity.api.Entity;
public class EntityCollectionsTest {
@Test
public void testIsIntersectionEntityRefsToEntities() {
Entity e1 = mock(Entity.class);
when(e1.getReference()).thenReturn("/ref/e1");
Entity e2 = mock(Entity.class);
when(e2.getReference()).thenReturn("/ref/e2");
// Good intersection.
assertTrue(isIntersectionEntityRefsToEntities(
Arrays.asList(new String[] { "/ref/e2" }),
Arrays.asList(new Entity[] { e1, e2 })));
// Empty entities
assertFalse(isIntersectionEntityRefsToEntities(
Arrays.asList(new String[] { "/ref/e2" }),
Arrays.asList(new Entity[] {})));
// Empty references
assertFalse(isIntersectionEntityRefsToEntities(
Arrays.asList(new String[] {}),
Arrays.asList(new Entity[] { e1, e2 })));
// Non intersecting
assertFalse(isIntersectionEntityRefsToEntities(
Arrays.asList(new String[] { "/ref/a1", "/ref/a2" }),
Arrays.asList(new Entity[] { e1, e2 })));
// Larger references
assertTrue(isIntersectionEntityRefsToEntities(
Arrays.asList(new String[] { "/ref/e1", "/ref/e2", "/ref/e3" }),
Arrays.asList(new Entity[] { e1, e2 })));
// Matching
assertTrue(isIntersectionEntityRefsToEntities(
Arrays.asList(new String[] { "/ref/e1", "/ref/e2" }),
Arrays.asList(new Entity[] { e1, e2 })));
}
@Test
public void testIsContainedEntityRefsToEntities() {
Entity e1 = mock(Entity.class);
when(e1.getReference()).thenReturn("/ref/e1");
Entity e2 = mock(Entity.class);
when(e2.getReference()).thenReturn("/ref/e2");
// Good intersection.
assertTrue(isContainedEntityRefsToEntities(
Arrays.asList(new String[] { "/ref/e2" }),
Arrays.asList(new Entity[] { e1, e2 })));
// Empty entities
assertFalse(isContainedEntityRefsToEntities(
Arrays.asList(new String[] { "/ref/e2" }),
Arrays.asList(new Entity[] {})));
// Empty references
assertTrue(isContainedEntityRefsToEntities(
Arrays.asList(new String[] {}),
Arrays.asList(new Entity[] { e1, e2 })));
// Non intersecting
assertFalse(isContainedEntityRefsToEntities(
Arrays.asList(new String[] { "/ref/a1", "/ref/a2" }),
Arrays.asList(new Entity[] { e1, e2 })));
// Larger references
assertFalse(isContainedEntityRefsToEntities(
Arrays.asList(new String[] { "/ref/e1", "/ref/e2", "/ref/e3" }),
Arrays.asList(new Entity[] { e1, e2 })));
// Matching
assertTrue(isContainedEntityRefsToEntities(
Arrays.asList(new String[] { "/ref/e1", "/ref/e2" }),
Arrays.asList(new Entity[] { e1, e2 })));
}
@Test
public void testIsEqualEntityRefsToEntities() {
Entity e1 = mock(Entity.class);
when(e1.getReference()).thenReturn("/ref/e1");
Entity e2 = mock(Entity.class);
when(e2.getReference()).thenReturn("/ref/e2");
// Intersection.
assertFalse(isEqualEntityRefsToEntities(
Arrays.asList(new String[] { "/ref/e2" }),
Arrays.asList(new Entity[] { e1, e2 })));
// Empty entities
assertFalse(isEqualEntityRefsToEntities(
Arrays.asList(new String[] { "/ref/e2" }),
Arrays.asList(new Entity[] {})));
// Empty references
assertFalse(isEqualEntityRefsToEntities(Arrays.asList(new String[] {}),
Arrays.asList(new Entity[] { e1, e2 })));
// Non intersecting
assertFalse(isEqualEntityRefsToEntities(
Arrays.asList(new String[] { "/ref/a1", "/ref/a2" }),
Arrays.asList(new Entity[] { e1, e2 })));
// Larger references
assertFalse(isEqualEntityRefsToEntities(
Arrays.asList(new String[] { "/ref/e1", "/ref/e2", "/ref/e3" }),
Arrays.asList(new Entity[] { e1, e2 })));
// Matching
assertTrue(isEqualEntityRefsToEntities(
Arrays.asList(new String[] { "/ref/e1", "/ref/e2" }),
Arrays.asList(new Entity[] { e1, e2 })));
// Matching, but different order
assertTrue(isEqualEntityRefsToEntities(
Arrays.asList(new String[] { "/ref/e2", "/ref/e1" }),
Arrays.asList(new Entity[] { e1, e2 })));
// Same ref twice
assertFalse(isEqualEntityRefsToEntities(
Arrays.asList(new String[] { "/ref/e1", "/ref/e1" }),
Arrays.asList(new Entity[] { e1, e2 })));
// Same entity twice
assertFalse(isEqualEntityRefsToEntities(
Arrays.asList(new String[] { "/ref/e1", "/ref/e2" }),
Arrays.asList(new Entity[] { e1, e1 })));
}
@Test
public void testEntityCollectionContainsRefString() {
Entity e1 = mock(Entity.class);
when(e1.getReference()).thenReturn("/ref/e1");
Entity e2 = mock(Entity.class);
when(e2.getReference()).thenReturn("/ref/e2");
// Good
assertTrue(entityCollectionContainsRefString(
Arrays.asList(new Entity[] { e1, e2 }), "/ref/e1"));
// Bad
assertFalse(entityCollectionContainsRefString(
Arrays.asList(new Entity[] { e1, e2 }), "/ref/missing"));
// Empty entities
assertFalse(entityCollectionContainsRefString(
Arrays.asList(new Entity[] {}), "/ref/e1"));
}
@Test
public void testRefCollectionContainsEntity() {
Entity e1 = mock(Entity.class);
when(e1.getReference()).thenReturn("/ref/e1");
Entity e2 = mock(Entity.class);
when(e2.getReference()).thenReturn("/ref/e2");
// Good
assertTrue(refCollectionContainsEntity(
Arrays.asList(new String[] { "/ref/e1", "/ref/e2" }), e1));
// Bad
assertFalse(refCollectionContainsEntity(
Arrays.asList(new String[] { "/ref/a1", "/ref/a2" }), e1));
// Empty references
assertFalse(refCollectionContainsEntity(Arrays.asList(new String[] {}),
e1));
}
@Test
public void testSetEntityRefsFromEntities() {
Entity e1 = mock(Entity.class);
when(e1.getReference()).thenReturn("/ref/e1");
Entity e2 = mock(Entity.class);
when(e2.getReference()).thenReturn("/ref/e2");
ArrayList<String> refernces = new ArrayList<String>();
setEntityRefsFromEntities(refernces,
Arrays.asList(new Entity[] { e1, e2 }));
assertTrue(refernces.contains("/ref/e1"));
assertTrue(refernces.contains("/ref/e2"));
}
// @Test
// Why......
public void testComputeAddedRemovedEntityRefsFromNewEntitiesOldRefs() {
}
}