/* * Copyright (C) 2003-2008 eXo Platform SAS. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see<http://www.gnu.org/licenses/>. */ package org.exoplatform.services.ecm.dms.timeline; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.List; import javax.jcr.Node; import org.exoplatform.services.cms.timeline.TimelineService; import org.exoplatform.services.jcr.ext.app.SessionProviderService; import org.exoplatform.services.jcr.ext.common.SessionProvider; import org.exoplatform.services.wcm.BaseWCMTestCase; /** * Created by The eXo Platform SARL * Author : Dang Van Minh * minh.dang@exoplatform.com * Oct 22, 2009 * 10:50:05 AM */ public class TestTimelineService extends BaseWCMTestCase { private TimelineService timelineService; final private static String EXO_MODIFIED_DATE = "exo:dateModified"; public void setUp() throws Exception { super.setUp(); timelineService = (TimelineService)container.getComponentInstanceOfType(TimelineService.class); applyUserSession("root", "gtn",COLLABORATION_WS); } /** * test method getDocumentsOfToday * input: /testNode/today1(dateModified is today) * /testNode/today2(dateModified is today) * /testNode/yesterday1(dateModified is yesterday) * action: getDocumentsOfToday * expectedValue: 2(today1 and today2); * @throws Exception */ public void testGetDocumentsOfToday() throws Exception { Node rootNode = session.getRootNode(); Node testNode = rootNode.addNode("testNode"); Calendar currentTime = new GregorianCalendar(); Node today1 = testNode.addNode("today1", "exo:article"); today1.setProperty("exo:title", "sample"); if(today1.canAddMixin("exo:datetime")) today1.addMixin("exo:datetime"); today1.setProperty(EXO_MODIFIED_DATE, currentTime); Node today2 = testNode.addNode("today2", "exo:article"); today2.setProperty("exo:title", "sample"); if(today2.canAddMixin("exo:datetime")) today2.addMixin("exo:datetime"); today2.setProperty(EXO_MODIFIED_DATE, currentTime); Calendar yesterdayTime = (Calendar)currentTime.clone(); yesterdayTime.add(Calendar.DATE, -1); Node yesterday1 = testNode.addNode("yesterday1", "exo:article"); yesterday1.setProperty("exo:title", "sample"); if(yesterday1.canAddMixin("exo:datetime")) yesterday1.addMixin("exo:datetime"); yesterday1.setProperty(EXO_MODIFIED_DATE, yesterdayTime); session.save(); List<Node> res = timelineService.getDocumentsOfToday(testNode.getPath(), COLLABORATION_WS, createSessionProvider(), "root", true); assertEquals("testGetDocumentsOfToday failed! ", 2, res.size()); } /** * test method getDocumentsOfToday * input: /testNode/today1(dateModified is today) * /testNode/today2(dateModified is today) * /testNode/today3(dateModified is today) * /testNode/today4(dateModified is today) * /testNode/today5(dateModified is today) * /testNode/today6(dateModified is today) * /testNode/yesterday1(dateModified is yesterday) * action: getDocumentsOfToday * expectedValue: 6(today1, today2, today3, today4, today5 and today6); * @throws Exception */ public void testGetDocumentsOfTodayUnLimited() throws Exception { Node rootNode = session.getRootNode(); Node testNode = rootNode.addNode("testNode"); Calendar currentTime = new GregorianCalendar(); Node today1 = testNode.addNode("today1", "exo:article"); today1.setProperty("exo:title", "sample"); if(today1.canAddMixin("exo:datetime")) today1.addMixin("exo:datetime"); today1.setProperty(EXO_MODIFIED_DATE, currentTime); Node today2 = testNode.addNode("today2", "exo:article"); today2.setProperty("exo:title", "sample"); if(today2.canAddMixin("exo:datetime")) today2.addMixin("exo:datetime"); today2.setProperty(EXO_MODIFIED_DATE, currentTime); Node today3 = testNode.addNode("today3", "exo:article"); today3.setProperty("exo:title", "sample"); if(today3.canAddMixin("exo:datetime")) today3.addMixin("exo:datetime"); today3.setProperty(EXO_MODIFIED_DATE, currentTime); Node today4 = testNode.addNode("today4", "exo:article"); today4.setProperty("exo:title", "sample"); if(today4.canAddMixin("exo:datetime")) today4.addMixin("exo:datetime"); today4.setProperty(EXO_MODIFIED_DATE, currentTime); Node today5 = testNode.addNode("today5", "exo:article"); today5.setProperty("exo:title", "sample"); if(today5.canAddMixin("exo:datetime")) today5.addMixin("exo:datetime"); today5.setProperty(EXO_MODIFIED_DATE, currentTime); Node today6 = testNode.addNode("today6", "exo:article"); today6.setProperty("exo:title", "sample"); if(today6.canAddMixin("exo:datetime")) today6.addMixin("exo:datetime"); today6.setProperty(EXO_MODIFIED_DATE, currentTime); Calendar yesterdayTime = (Calendar)currentTime.clone(); yesterdayTime.add(Calendar.DATE, -1); Node yesterday1 = testNode.addNode("yesterday1", "exo:article"); yesterday1.setProperty("exo:title", "sample"); if(yesterday1.canAddMixin("exo:datetime")) yesterday1.addMixin("exo:datetime"); yesterday1.setProperty(EXO_MODIFIED_DATE, yesterdayTime); session.save(); List<Node> res = timelineService.getDocumentsOfToday(testNode.getPath(), COLLABORATION_WS, createSessionProvider(), "root", true, false); assertEquals("testGetDocumentsOfToday failed! ", 6, res.size()); } /** * test method getDocumentsOfYesterday * input: /testNode/today1(dateModified is today) * /testNode/today2(dateModified is today) * /testNode/yesterday1(dateModified is yesterday) * action: getDocumentsOfYesterday * expectedValue: 1(yesterday1) * @throws Exception */ public void testGetDocumentsOfYesterday() throws Exception { Node rootNode = session.getRootNode(); Node testNode = rootNode.addNode("testNode"); Calendar currentTime = new GregorianCalendar(); Node today1 = testNode.addNode("today1", "exo:article"); today1.setProperty("exo:title", "sample"); if(today1.canAddMixin("exo:datetime")) { today1.addMixin("exo:datetime"); } today1.setProperty(EXO_MODIFIED_DATE, currentTime); Node today2 = testNode.addNode("today2", "exo:article"); today2.setProperty("exo:title", "sample"); if(today2.canAddMixin("exo:datetime")) { today2.addMixin("exo:datetime"); } today2.setProperty(EXO_MODIFIED_DATE, currentTime); Calendar yesterdayTime = (Calendar)currentTime.clone(); yesterdayTime.add(Calendar.DATE, -1); Node yesterday1 = testNode.addNode("yesterday1", "exo:article"); yesterday1.setProperty("exo:title", "sample"); if(yesterday1.canAddMixin("exo:datetime")) { yesterday1.addMixin("exo:datetime"); } yesterday1.setProperty(EXO_MODIFIED_DATE, yesterdayTime); session.save(); List<Node> res = timelineService.getDocumentsOfYesterday(rootNode.getPath(), COLLABORATION_WS, createSessionProvider(), "root", true); assertEquals("testGetDocumentsOfYesterday failed! ", 1, res.size()); } /** * test method getDocumentsOfYesterday * input: /testNode/today1(dateModified is today) * /testNode/today2(dateModified is today) * /testNode/yesterday1(dateModified is yesterday) * /testNode/yesterday2(dateModified is yesterday) * /testNode/yesterday3(dateModified is yesterday) * /testNode/yesterday4(dateModified is yesterday) * /testNode/yesterday5(dateModified is yesterday) * /testNode/yesterday6(dateModified is yesterday) * /testNode/yesterday7(dateModified is yesterday) * action: getDocumentsOfYesterday * expectedValue: 7(yesterday1, yesterday2, yesterday3, yesterday4, yesterday5, yesterday6, yesterday6)); * @throws Exception */ public void testGetDocumentsOfYesterdayUnLimited() throws Exception { Node rootNode = session.getRootNode(); Node testNode = rootNode.addNode("testNode"); Calendar currentTime = new GregorianCalendar(); Node today1 = testNode.addNode("today1", "exo:article"); today1.setProperty("exo:title", "sample"); if(today1.canAddMixin("exo:datetime")) { today1.addMixin("exo:datetime"); } today1.setProperty(EXO_MODIFIED_DATE, currentTime); Node today2 = testNode.addNode("today2", "exo:article"); today2.setProperty("exo:title", "sample"); if(today2.canAddMixin("exo:datetime")) { today2.addMixin("exo:datetime"); } today2.setProperty(EXO_MODIFIED_DATE, currentTime); Calendar yesterdayTime = (Calendar)currentTime.clone(); yesterdayTime.add(Calendar.DATE, -1); Node yesterday1 = testNode.addNode("yesterday1", "exo:article"); yesterday1.setProperty("exo:title", "sample"); if(yesterday1.canAddMixin("exo:datetime")) { yesterday1.addMixin("exo:datetime"); } yesterday1.setProperty(EXO_MODIFIED_DATE, yesterdayTime); Node yesterday2 = testNode.addNode("yesterday2", "exo:article"); yesterday2.setProperty("exo:title", "sample"); if(yesterday2.canAddMixin("exo:datetime")) { yesterday2.addMixin("exo:datetime"); } yesterday2.setProperty(EXO_MODIFIED_DATE, yesterdayTime); Node yesterday3 = testNode.addNode("yesterday3", "exo:article"); yesterday3.setProperty("exo:title", "sample"); if(yesterday3.canAddMixin("exo:datetime")) { yesterday3.addMixin("exo:datetime"); } yesterday3.setProperty(EXO_MODIFIED_DATE, yesterdayTime); Node yesterday4 = testNode.addNode("yesterday4", "exo:article"); yesterday4.setProperty("exo:title", "sample"); if(yesterday4.canAddMixin("exo:datetime")) { yesterday4.addMixin("exo:datetime"); } yesterday4.setProperty(EXO_MODIFIED_DATE, yesterdayTime); Node yesterday5 = testNode.addNode("yesterday5", "exo:article"); yesterday5.setProperty("exo:title", "sample"); if(yesterday5.canAddMixin("exo:datetime")) { yesterday5.addMixin("exo:datetime"); } yesterday5.setProperty(EXO_MODIFIED_DATE, yesterdayTime); Node yesterday6 = testNode.addNode("yesterday6", "exo:article"); yesterday6.setProperty("exo:title", "sample"); if(yesterday6.canAddMixin("exo:datetime")) { yesterday6.addMixin("exo:datetime"); } yesterday6.setProperty(EXO_MODIFIED_DATE, yesterdayTime); Node yesterday7 = testNode.addNode("yesterday7", "exo:article"); yesterday7.setProperty("exo:title", "sample"); if(yesterday7.canAddMixin("exo:datetime")) { yesterday7.addMixin("exo:datetime"); } yesterday7.setProperty(EXO_MODIFIED_DATE, yesterdayTime); session.save(); List<Node> resLimit = timelineService.getDocumentsOfYesterday(rootNode.getPath(), COLLABORATION_WS, createSessionProvider(), "root", true); List<Node> resUnLimit = timelineService.getDocumentsOfYesterday(rootNode.getPath(), COLLABORATION_WS, createSessionProvider(), "root", true, false); assertEquals("testGetDocumentsOfYesterday failed! ", 7, resUnLimit.size()); assertEquals("testGetDocumentsOfYesterday failed! ", 5, resLimit.size()); } /** * test method getDocumentsOfEarlierThisWeek * input: /testNode/Sunday * /testNode/Monday * /testNode/Tuesday * ... * /testNode/${today} (depends on current date time) * action: getDocumentsOfEarlierThisWeek * expectedValue: (depends on current date time, must calculate yourself); * @throws Exception */ public void testGetDocumentsOfEarlierThisWeek() throws Exception { Node rootNode = session.getRootNode(); Node testNode = rootNode.addNode("testNode"); int count = 0; Calendar currentTime = new GregorianCalendar(); Calendar time = (Calendar)currentTime.clone(); int index = 0; while (currentTime.get(Calendar.WEEK_OF_YEAR) == time.get(Calendar.WEEK_OF_YEAR)) { count++; Node dayNode = testNode.addNode("dayNode" + index++, "exo:article"); dayNode.setProperty("exo:title", "sample"); if(dayNode.canAddMixin("exo:datetime")) { dayNode.addMixin("exo:datetime"); } dayNode.setProperty(EXO_MODIFIED_DATE, time); session.save(); time.add(Calendar.DATE, -1); } //exclude today and yesterday if (count < 2){ count = 0; }else{ count -= 2; } session.save(); List<Node> res = timelineService.getDocumentsOfEarlierThisWeek(rootNode.getPath(), COLLABORATION_WS, createSessionProvider(), "root", true); assertEquals("testGetDocumentsOfEarlierThisWeek failed! ", Math.min(5, count), res.size()); } /** * test method getDocumentsOfEarlierThisWeek * input: /testNode/Sunday * /testNode/Monday * /testNode/Tuesday * ... * /testNode/${today} (depends on current date time) * action: getDocumentsOfEarlierThisWeek * expectedValue: (depends on current date time, must calculate yourself); * @throws Exception */ public void testGetDocumentsOfEarlierThisWeek2() throws Exception { Node rootNode = session.getRootNode(); Node testNode = rootNode.addNode("testNode"); int count = 0; Calendar currentTime = new GregorianCalendar(); Calendar time = (Calendar)currentTime.clone(); int index = 0; while (currentTime.get(Calendar.WEEK_OF_YEAR) == time.get(Calendar.WEEK_OF_YEAR)) { count++; Node dayNode = testNode.addNode("dayNode" + index++, "exo:article"); dayNode.setProperty("exo:title", "sample"); if(dayNode.canAddMixin("exo:datetime")) { dayNode.addMixin("exo:datetime"); } dayNode.setProperty(EXO_MODIFIED_DATE, time); session.save(); time.add(Calendar.DATE, -1); } //exclude today and yesterday if (count < 2){ count = 0; }else{ count -= 2; } session.save(); List<Node> res = timelineService.getDocumentsOfEarlierThisWeek(rootNode.getPath(), COLLABORATION_WS, createSessionProvider(), "root", true, false); assertEquals("testGetDocumentsOfEarlierThisWeek failed! ", count, res.size()); } /** * test method getDocumentsOfEarlierThisMonth * input: /testNode/1stOfThisMonth * /testNode/2ndOfThisMonth * /testNode/3rdOfThisMonth * ... * /testNode/${today} (depends on current date time) * action: getDocumentsOfEarlierThisMonth * expectedValue: (depends on current date time, must calculate yourself); * @throws Exception */ public void testGetDocumentsOfEarlierThisMonth() throws Exception { Node rootNode = session.getRootNode(); Node testNode = rootNode.addNode("testNode"); Calendar currentTime = new GregorianCalendar(); Calendar time = (Calendar)currentTime.clone(); int count = 0; int index = 0; while (currentTime.get(Calendar.MONTH) == time.get(Calendar.MONTH)) { if (time.get(Calendar.WEEK_OF_YEAR) != currentTime.get(Calendar.WEEK_OF_YEAR)) { count++; } Node dayNode = testNode.addNode("dayNode" + index++, "exo:article"); dayNode.setProperty("exo:title", "sample"); if(dayNode.canAddMixin("exo:datetime")) { dayNode.addMixin("exo:datetime"); } dayNode.setProperty(EXO_MODIFIED_DATE, time); session.save(); time.add(Calendar.DATE, -1); } session.save(); List<Node> res = timelineService.getDocumentsOfEarlierThisMonth(rootNode.getPath(), COLLABORATION_WS, createSessionProvider(), "root", true); assertEquals("testGetDocumentsOfEarlierThisMonth failed! ", Math.min(5, count), res.size()); } /** * test method getDocumentsOfEarlierThisMonth * input: /testNode/1stOfThisMonth * /testNode/2ndOfThisMonth * /testNode/3rdOfThisMonth * ... * /testNode/${today} (depends on current date time) * action: getDocumentsOfEarlierThisMonth * expectedValue: (depends on current date time, must calculate yourself); * @throws Exception */ public void testGetDocumentsOfEarlierThisMonth2() throws Exception { Node rootNode = session.getRootNode(); Node testNode = rootNode.addNode("testNode"); Calendar currentTime = new GregorianCalendar(); Calendar time = (Calendar)currentTime.clone(); int count = 0; int index = 0; while (currentTime.get(Calendar.MONTH) == time.get(Calendar.MONTH)) { if (time.get(Calendar.WEEK_OF_YEAR) != currentTime.get(Calendar.WEEK_OF_YEAR)) { count++; } Node dayNode = testNode.addNode("dayNode" + index++, "exo:article"); dayNode.setProperty("exo:title", "sample"); if(dayNode.canAddMixin("exo:datetime")) { dayNode.addMixin("exo:datetime"); } dayNode.setProperty(EXO_MODIFIED_DATE, time); session.save(); time.add(Calendar.DATE, -1); } session.save(); List<Node> res = timelineService.getDocumentsOfEarlierThisMonth(rootNode.getPath(), COLLABORATION_WS, createSessionProvider(), "root", true, false); assertEquals("testGetDocumentsOfEarlierThisMonth failed! ", count, res.size()); } /** * test method getDocumentsOfEarlierThisYear * input: /testNode/1stOfThisYear * /testNode/2ndOfThisYear * /testNode/3rdOfThisYear * ... * /testNode/${today} (depends on current date time) * action: getDocumentsOfEarlierThisYear * expectedValue: (depends on current date time, must calculate yourself); * @throws Exception */ public void testGetDocumentsOfEarlierThisYear() throws Exception { Node rootNode = session.getRootNode(); Node testNode = rootNode.addNode("testNode"); Calendar currentTime = new GregorianCalendar(); Calendar time = (Calendar)currentTime.clone(); int count = 0; int index = 0; while (currentTime.get(Calendar.YEAR) == time.get(Calendar.YEAR)) { if (currentTime.get(Calendar.YEAR) == time.get(Calendar.YEAR)) { if (time.get(Calendar.MONTH) < currentTime.get(Calendar.MONTH)) count++; } Node dayNode = testNode.addNode("dayNode" + index++, "exo:article"); dayNode.setProperty("exo:title", "sample"); if(dayNode.canAddMixin("exo:datetime")) { dayNode.addMixin("exo:datetime"); } dayNode.setProperty(EXO_MODIFIED_DATE, time); session.save(); time.add(Calendar.DATE, -1); } session.save(); List<Node> res = timelineService.getDocumentsOfEarlierThisYear(rootNode.getPath(), COLLABORATION_WS, createSessionProvider(), "root", true); assertEquals("testGetDocumentsOfEarlierThisYear failed! ", Math.min(5, count), res.size()); } /** * test method getDocumentsOfEarlierThisYear * input: /testNode/1stOfThisYear * /testNode/2ndOfThisYear * /testNode/3rdOfThisYear * ... * /testNode/${today} (depends on current date time) * action: getDocumentsOfEarlierThisYear * expectedValue: (depends on current date time, must calculate yourself); * @throws Exception */ public void testGetDocumentsOfEarlierThisYear2() throws Exception { Node rootNode = session.getRootNode(); Node testNode = rootNode.addNode("testNode"); Calendar currentTime = new GregorianCalendar(); Calendar time = (Calendar)currentTime.clone(); int count = 0; int index = 0; while (currentTime.get(Calendar.YEAR) == time.get(Calendar.YEAR)) { if (currentTime.get(Calendar.YEAR) == time.get(Calendar.YEAR)) { if (time.get(Calendar.MONTH) < currentTime.get(Calendar.MONTH)) count++; } Node dayNode = testNode.addNode("dayNode" + index++, "exo:article"); dayNode.setProperty("exo:title", "sample"); if(dayNode.canAddMixin("exo:datetime")) { dayNode.addMixin("exo:datetime"); } dayNode.setProperty(EXO_MODIFIED_DATE, time); session.save(); time.add(Calendar.DATE, -1); } session.save(); List<Node> res = timelineService.getDocumentsOfEarlierThisYear(rootNode.getPath(), COLLABORATION_WS, createSessionProvider(), "root", true, false); assertEquals("testGetDocumentsOfEarlierThisYear failed! ", count, res.size()); } /** * private method create sessionProvider instance. * @return SessionProvider */ private SessionProvider createSessionProvider() { SessionProviderService sessionProviderService = (SessionProviderService) container .getComponentInstanceOfType(SessionProviderService.class); return sessionProviderService.getSystemSessionProvider(null); } public void tearDown() throws Exception { Node rootNode = session.getRootNode(); Node testNode = rootNode.getNode("testNode"); if (testNode != null) testNode.remove(); session.save(); super.tearDown(); } }