package com.celements.collections; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.junit.Before; import org.junit.Test; import org.xwiki.model.reference.DocumentReference; import com.celements.common.test.AbstractBridgedComponentTestCase; import com.xpn.xwiki.doc.XWikiDocument; import com.xpn.xwiki.objects.BaseObject; import com.xpn.xwiki.web.Utils; public class CollectionsServiceTest extends AbstractBridgedComponentTestCase { private CollectionsService collectionsService; @Before public void setUp_CollectionsServiceTest() throws Exception { collectionsService = (CollectionsService) Utils.getComponent(ICollectionsService.class); } @Test public void testGetObjectsOrdered_docNull() { List<BaseObject> list = collectionsService.getObjectsOrdered(null, getBOClassRef(), "", false); assertNotNull(list); assertEquals(0, list.size()); } @Test public void testGetObjectsOrdered_noObjects() { XWikiDocument doc = new XWikiDocument(new DocumentReference(getContext().getDatabase(), "S", "D")); List<BaseObject> list = collectionsService.getObjectsOrdered(doc, getBOClassRef(), "s1", true, "s2", false); assertNotNull(list); assertEquals(0, list.size()); } @Test public void testGetObjectsOrdered_oneObject() { XWikiDocument doc = new XWikiDocument(new DocumentReference(getContext().getDatabase(), "S", "D")); doc.addXObject(getSortTestBaseObjects().get(0)); List<BaseObject> list = collectionsService.getObjectsOrdered(doc, getBOClassRef(), "s1", true, "s2", true); assertEquals(1, list.size()); } @Test public void testGetObjectsOrdered_onlyOneFieldSort() { XWikiDocument doc = new XWikiDocument(new DocumentReference(getContext().getDatabase(), "S", "D")); for (BaseObject obj : getSortTestBaseObjects()) { doc.addXObject(obj); } List<BaseObject> list = collectionsService.getObjectsOrdered(doc, getBOClassRef(), "s1", true); assertEquals(5, list.size()); assertEquals("a", list.get(0).getStringValue("s1")); assertEquals("b", list.get(1).getStringValue("s1")); assertEquals("t", list.get(1).getStringValue("s2")); assertEquals("b", list.get(2).getStringValue("s1")); assertEquals("s", list.get(2).getStringValue("s2")); assertEquals("c", list.get(3).getStringValue("s1")); assertEquals("d", list.get(4).getStringValue("s1")); } @Test public void testGetObjectsOrdered_severalObjects_asc() { XWikiDocument doc = new XWikiDocument(new DocumentReference(getContext().getDatabase(), "S", "D")); for (BaseObject obj : getSortTestBaseObjects()) { doc.addXObject(obj); } List<BaseObject> list = collectionsService.getObjectsOrdered(doc, getBOClassRef(), "s1", true, "d", true); assertEquals(5, list.size()); assertEquals("a", list.get(0).getStringValue("s1")); assertEquals("b", list.get(1).getStringValue("s1")); assertEquals(new Date(200l), list.get(1).getDateValue("d")); assertEquals("b", list.get(2).getStringValue("s1")); assertEquals(new Date(400l), list.get(2).getDateValue("d")); assertEquals("c", list.get(3).getStringValue("s1")); assertEquals("d", list.get(4).getStringValue("s1")); } @Test public void testGetObjectsOrdered_severalObjects_desc() { XWikiDocument doc = new XWikiDocument(new DocumentReference(getContext().getDatabase(), "S", "D")); for (BaseObject obj : getSortTestBaseObjects()) { doc.addXObject(obj); } List<BaseObject> list = collectionsService.getObjectsOrdered(doc, getBOClassRef(), "i", false, "l", false); assertEquals(5, list.size()); assertEquals(3, list.get(0).getIntValue("i")); assertEquals(2, list.get(1).getIntValue("i")); assertEquals(4, list.get(1).getIntValue("l")); assertEquals(2, list.get(2).getIntValue("i")); assertEquals(3, list.get(2).getIntValue("l")); assertEquals(2, list.get(3).getIntValue("i")); assertEquals(1, list.get(3).getIntValue("l")); assertEquals(1, list.get(4).getIntValue("i")); } @Test public void testGetObjectsOrdered_severalObjects_unset_fields() { XWikiDocument doc = new XWikiDocument(new DocumentReference(getContext().getDatabase(), "S", "D")); for (BaseObject obj : getSortTestBaseObjects()) { doc.addXObject(obj); } List<BaseObject> list = collectionsService.getObjectsOrdered(doc, getBOClassRef(), "dnull", true, "s1", true); assertEquals(5, list.size()); assertNull(list.get(0).getDateValue("dnull")); assertEquals("a", list.get(0).getStringValue("s1")); assertNull(list.get(1).getDateValue("dnull")); assertEquals("c", list.get(1).getStringValue("s1")); assertEquals(100l, list.get(2).getDateValue("dnull").getTime()); assertEquals(200l, list.get(3).getDateValue("dnull").getTime()); assertEquals(400l, list.get(4).getDateValue("dnull").getTime()); } private DocumentReference getBOClassRef() { return new DocumentReference(getContext().getDatabase(), "Classes", "TestClass"); } private List<BaseObject> getSortTestBaseObjects() { List<BaseObject> objs = new ArrayList<BaseObject>(); BaseObject obj = new BaseObject(); obj.setXClassReference(getBOClassRef()); obj.setStringValue("s1", "c"); obj.setStringValue("s2", "u"); obj.setIntValue("i", 1); obj.setDateValue("d", new Date(500l)); obj.setLongValue("l", 5l); objs.add(obj); obj = new BaseObject(); obj.setXClassReference(getBOClassRef()); obj.setStringValue("s1", "b"); obj.setStringValue("s2", "t"); obj.setIntValue("i", 2); obj.setDateValue("d", new Date(400l)); obj.setDateValue("dnull", new Date(400l)); obj.setLongValue("l", 1l); objs.add(obj); obj = new BaseObject(); obj.setXClassReference(getBOClassRef()); obj.setStringValue("s1", "a"); obj.setStringValue("s2", "r"); obj.setIntValue("i", 3); obj.setDateValue("d", new Date(300l)); obj.setLongValue("l", 2l); objs.add(obj); obj = new BaseObject(); obj.setXClassReference(getBOClassRef()); obj.setStringValue("s1", "b"); obj.setStringValue("s2", "s"); obj.setIntValue("i", 2); obj.setDateValue("d", new Date(200l)); obj.setDateValue("dnull", new Date(200l)); obj.setLongValue("l", 4l); objs.add(obj); obj = new BaseObject(); obj.setXClassReference(getBOClassRef()); obj.setStringValue("s1", "d"); obj.setStringValue("s2", "v"); obj.setIntValue("i", 2); obj.setDateValue("d", new Date(100l)); obj.setDateValue("dnull", new Date(100l)); obj.setLongValue("l", 3l); objs.add(obj); return objs; } }