/** * $URL: https://source.sakaiproject.org/svn/sitestats/trunk/sitestats-impl/src/test/org/sakaiproject/sitestats/test/ReportManagerTest.java $ * $Id: ReportManagerTest.java 116373 2012-11-14 18:40:48Z matthew.buckett@it.ox.ac.uk $ * * Copyright (c) 2006-2009 The Sakai Foundation * * Licensed under the Educational Community License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.opensource.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.sakaiproject.sitestats.test; import static org.easymock.EasyMock.anyObject; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.getCurrentArguments; import static org.easymock.classextension.EasyMock.createMock; import static org.easymock.classextension.EasyMock.replay; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashSet; import java.util.List; import org.easymock.IAnswer; import org.sakaiproject.content.api.ContentHostingService; import org.sakaiproject.event.api.Event; import org.sakaiproject.exception.IdUnusedException; import org.sakaiproject.javax.PagingPosition; import org.sakaiproject.site.api.Site; import org.sakaiproject.site.api.SiteService; import org.sakaiproject.sitestats.api.SitePresence; import org.sakaiproject.sitestats.api.SiteVisits; import org.sakaiproject.sitestats.api.StatsManager; import org.sakaiproject.sitestats.api.StatsUpdateManager; import org.sakaiproject.sitestats.api.report.Report; import org.sakaiproject.sitestats.api.report.ReportDef; import org.sakaiproject.sitestats.api.report.ReportManager; import org.sakaiproject.sitestats.api.report.ReportParams; import org.sakaiproject.sitestats.impl.StatsManagerImpl; import org.sakaiproject.sitestats.impl.StatsUpdateManagerImpl; import org.sakaiproject.sitestats.impl.report.ReportManagerImpl; import org.sakaiproject.sitestats.test.data.FakeData; import org.sakaiproject.sitestats.test.mocks.FakeEventRegistryService; import org.sakaiproject.sitestats.test.mocks.FakeServerConfigurationService; import org.sakaiproject.sitestats.test.mocks.FakeSite; import org.sakaiproject.time.api.Time; import org.sakaiproject.tool.api.ToolManager; import org.sakaiproject.util.ResourceLoader; import org.springframework.test.annotation.AbstractAnnotationAwareTransactionalTests; public class ReportManagerTest extends AbstractAnnotationAwareTransactionalTests { // AbstractAnnotationAwareTransactionalTests / AbstractTransactionalSpringContextTests private ReportManager M_rm; private StatsManager M_sm; private StatsUpdateManager M_sum; private DB db; private SiteService M_ss; private ToolManager M_tm; private FakeEventRegistryService M_ers; private FakeServerConfigurationService M_scs; private ContentHostingService M_chs; // Spring configuration public void setReportManager(ReportManager M_rm) { this.M_rm = M_rm; } public void setStatsManager(StatsManager M_sm) { this.M_sm = M_sm; } public void setStatsUpdateManager(StatsUpdateManager M_sum) { this.M_sum = M_sum; } public void setServerConfigurationService(FakeServerConfigurationService M_scs) { this.M_scs = M_scs; } public void setToolManager(ToolManager M_tm) { this.M_tm = M_tm; } public void setEventRegistryService(FakeEventRegistryService M_ers) { this.M_ers = M_ers; } public void setDb(DB db) { this.db = db; } @Override protected String[] getConfigLocations() { return new String[] { "hbm-db.xml", "hibernate-test.xml" }; } // run this before each test starts protected void onSetUpBeforeTransaction() throws Exception { // Time /*long oneMonthAgoMs = new Date().getTime() - (30 * 24 * 60 * 60 * 1000); long twoMonthAgoMs = new Date().getTime() - (2 * 30 * 24 * 60 * 60 * 1000); Time timeA = createMock(Time.class); expect(timeA.getTime()).andReturn(oneMonthAgoMs).anyTimes(); replay(timeA); Time timeB = createMock(Time.class); expect(timeB.getTime()).andReturn(twoMonthAgoMs).anyTimes(); replay(timeB);*/ // Site Service M_ss = createMock(SiteService.class); // null site expect(M_ss.getSite(null)).andThrow(new IdUnusedException("null")).anyTimes(); expect(M_ss.getSite("non_existent_site")).andThrow(new IdUnusedException("non_existent_site")).anyTimes(); // My Workspace - user sites FakeSite userSiteA = new FakeSite("~"+FakeData.USER_A_ID); FakeSite userSiteB = new FakeSite("~"+FakeData.USER_B_ID); expect(M_ss.getSiteUserId(FakeData.USER_A_ID)).andStubReturn("~"+FakeData.USER_A_ID); expect(M_ss.getSiteUserId(FakeData.USER_B_ID)).andStubReturn("~"+FakeData.USER_B_ID); expect(M_ss.getSiteUserId("no_user")).andStubReturn(null); expect(M_ss.getSite("~"+FakeData.USER_A_ID)).andStubReturn(userSiteA); expect(M_ss.getSite("~"+FakeData.USER_B_ID)).andStubReturn(userSiteB); // Site A has tools {SiteStats, Chat, Resources}, has {user-a,user-b}, created 1 month ago Site siteA = new FakeSite(FakeData.SITE_A_ID, Arrays.asList(StatsManager.SITESTATS_TOOLID, FakeData.TOOL_CHAT, StatsManager.RESOURCES_TOOLID) ); ((FakeSite)siteA).setUsers(new HashSet<String>(Arrays.asList(FakeData.USER_A_ID,FakeData.USER_B_ID))); ((FakeSite)siteA).setMembers(new HashSet<String>(Arrays.asList(FakeData.USER_A_ID,FakeData.USER_B_ID))); expect(M_ss.getSite(FakeData.SITE_A_ID)).andStubReturn(siteA); expect(M_ss.isUserSite(FakeData.SITE_A_ID)).andStubReturn(false); expect(M_ss.isSpecialSite(FakeData.SITE_A_ID)).andStubReturn(false); //expect(siteA.getCreatedTime()).andStubReturn(timeA).anyTimes(); expect(siteA.getCreatedTime()).andStubReturn((Time)anyObject()); // Site B has tools {TOOL_CHAT}, has {user-a}, created 2 months ago FakeSite siteB = new FakeSite(FakeData.SITE_B_ID, FakeData.TOOL_CHAT); ((FakeSite)siteB).setUsers(new HashSet<String>(Arrays.asList(FakeData.USER_A_ID))); ((FakeSite)siteB).setMembers(new HashSet<String>(Arrays.asList(FakeData.USER_A_ID))); expect(M_ss.getSite(FakeData.SITE_B_ID)).andStubReturn(siteB); expect(M_ss.isUserSite(FakeData.SITE_B_ID)).andStubReturn(false); expect(M_ss.isSpecialSite(FakeData.SITE_B_ID)).andStubReturn(false); //expect(siteB.getCreatedTime()).andStubReturn(timeB).anyTimes(); expect(siteB.getCreatedTime()).andStubReturn((Time)anyObject()); // Site 'non_existent_site' doesn't exist expect(M_ss.isUserSite("non_existent_site")).andStubReturn(false); expect(M_ss.isSpecialSite("non_existent_site")).andStubReturn(false); // Content Hosting Service // M_chs = createMock(ContentHostingService.class); // M_chs.checkCollection("/group/site-a-id/folder/"); // expectLastCall().anyTimes(); // M_chs.checkResource("/group-user/site-a-id/user-a/resource1"); // expectLastCall().anyTimes(); ResourceLoader msgs = createMock(ResourceLoader.class); expect(msgs.getString((String) anyObject())).andStubAnswer(new IAnswer<String>() { public String answer() throws Throwable { return (String) getCurrentArguments()[0]; } }); // apply replay(M_ss); //replay(M_chs); replay(msgs); ((FakeEventRegistryService)M_ers).setSiteService(M_ss); ((FakeEventRegistryService)M_ers).setToolManager(M_tm); ((FakeEventRegistryService)M_ers).setStatsManager(M_sm); ((ReportManagerImpl)M_rm).setEventRegistryService(M_ers); ((StatsManagerImpl)M_sm).setSiteService(M_ss); //((StatsManagerImpl)M_sm).setContentHostingService(M_chs); ((StatsManagerImpl)M_sm).setResourceLoader(msgs); ((StatsManagerImpl)M_sm).setEnableSitePresences(true); ((ReportManagerImpl)M_rm).setResourceLoader(msgs); ((StatsUpdateManagerImpl)M_sum).setSiteService(M_ss); ((StatsUpdateManagerImpl)M_sum).setStatsManager(M_sm); } // run this before each test starts and as part of the transaction protected void onSetUpInTransaction() { db.deleteAll(); } // ---- SAMPLE DATA ---- private List<Event> getSampleData() { List<Event> samples = new ArrayList<Event>(); Date today = new Date(); Date today_2 = new Date(today.getTime() + 60*1000); Date today_3 = new Date(today.getTime() + 2*60*1000); Date today_4 = new Date(today.getTime() + 3*60*1000); Date oneDayBefore = new Date(today.getTime() - 24*60*60*1000); Date oneDayBefore_2 = new Date(today.getTime() - 24*60*60*1000 + 60*1000); Date oneDayBefore_3 = new Date(today.getTime() - 24*60*60*1000 + 2*60*1000); Date oneDayBefore_4 = new Date(today.getTime() - 24*60*60*1000 + 3*60*1000); Date twoDaysBefore = new Date(today.getTime() - 2*24*60*60*1000); Date twoDaysBefore_2 = new Date(today.getTime() - 2*24*60*60*1000 + 60*1000); Date fourDaysBefore = new Date(today.getTime() - 4*24*60*60*1000); Date fourDaysBefore_2 = new Date(today.getTime() - 4*24*60*60*1000 + 60*1000); Date sixDaysBefore = new Date(today.getTime() - 6*24*60*60*1000); Date sixDaysBefore_2 = new Date(today.getTime() - 6*24*60*60*1000 + 60*1000); // visits Event vATodayS1 = M_sum.buildEvent(today, StatsManager.SITEVISIT_EVENTID, "/presence/"+FakeData.SITE_A_ID+"-presence", null, FakeData.USER_A_ID, "session-id-a"); Event vATodayE1 = M_sum.buildEvent(today_2, StatsManager.SITEVISITEND_EVENTID, "/presence/"+FakeData.SITE_A_ID+"-presence", null, FakeData.USER_A_ID, "session-id-a"); Event vATodayS2 = M_sum.buildEvent(today_3, StatsManager.SITEVISIT_EVENTID, "/presence/"+FakeData.SITE_A_ID+"-presence", null, FakeData.USER_A_ID, "session-id-a"); Event vATodayE2 = M_sum.buildEvent(today_4, StatsManager.SITEVISITEND_EVENTID, "/presence/"+FakeData.SITE_A_ID+"-presence", null, FakeData.USER_A_ID, "session-id-a"); Event vBTodayS1 = M_sum.buildEvent(today, StatsManager.SITEVISIT_EVENTID, "/presence/"+FakeData.SITE_A_ID+"-presence", null, FakeData.USER_B_ID, "session-id-b"); Event vBTodayE1 = M_sum.buildEvent(today_3, StatsManager.SITEVISITEND_EVENTID, "/presence/"+FakeData.SITE_A_ID+"-presence", null, FakeData.USER_B_ID, "session-id-b"); Event vAOneDayBefore = M_sum.buildEvent(oneDayBefore, StatsManager.SITEVISIT_EVENTID, "/presence/"+FakeData.SITE_A_ID+"-presence", null, FakeData.USER_A_ID, "session-id-a"); Event vATowDaysBefore = M_sum.buildEvent(twoDaysBefore, StatsManager.SITEVISIT_EVENTID, "/presence/"+FakeData.SITE_A_ID+"-presence", null, FakeData.USER_A_ID, "session-id-a"); Event vAFourDaysBefore = M_sum.buildEvent(fourDaysBefore, StatsManager.SITEVISIT_EVENTID, "/presence/"+FakeData.SITE_A_ID+"-presence", null, FakeData.USER_A_ID, "session-id-a"); Event vBFourDaysBefore = M_sum.buildEvent(fourDaysBefore, StatsManager.SITEVISIT_EVENTID, "/presence/"+FakeData.SITE_A_ID+"-presence", null, FakeData.USER_B_ID, "session-id-b"); Event vBSixDaysBefore = M_sum.buildEvent(sixDaysBefore, StatsManager.SITEVISIT_EVENTID, "/presence/"+FakeData.SITE_A_ID+"-presence", null, FakeData.USER_B_ID, "session-id-b"); samples.addAll(Arrays.asList( vATodayS1, vATodayE1, vATodayS2, vATodayE2, vBTodayS1, vBTodayE1, // today: 3 visits, 2 unique vAOneDayBefore, // 1 day before: 1 visits, 1 unique vATowDaysBefore, vATowDaysBefore, // 2 day before: 2 visits, 1 unique vAFourDaysBefore, vBFourDaysBefore, // 4 day before: 2 visits, 2 unique vBSixDaysBefore // 6 day before: 1 visits, 1 unique )); // activity Event aAToday = M_sum.buildEvent(today, FakeData.EVENT_CHATNEW, "/chat/msg/"+FakeData.SITE_B_ID, FakeData.SITE_B_ID, FakeData.USER_A_ID, "session-id-a"); Event aBToday = M_sum.buildEvent(today, FakeData.EVENT_CONTENTNEW, "/content/group/"+FakeData.SITE_B_ID+"/resource_id", FakeData.SITE_B_ID, FakeData.USER_B_ID, "session-id-b"); Event aAOneDayBefore = M_sum.buildEvent(oneDayBefore, FakeData.EVENT_CHATNEW, "/chat/msg/"+FakeData.SITE_A_ID, FakeData.SITE_A_ID, FakeData.USER_A_ID, "session-id-a"); Event aATowDaysBefore = M_sum.buildEvent(twoDaysBefore, FakeData.EVENT_CHATNEW, "/chat/msg/"+FakeData.SITE_A_ID, FakeData.SITE_A_ID, FakeData.USER_A_ID, "session-id-a"); Event aAFourDaysBefore = M_sum.buildEvent(fourDaysBefore, FakeData.EVENT_CHATNEW, "/chat/msg/"+FakeData.SITE_A_ID, FakeData.SITE_A_ID, FakeData.USER_A_ID, "session-id-a"); Event aBFourDaysBefore = M_sum.buildEvent(fourDaysBefore, FakeData.EVENT_CHATNEW, "/chat/msg/"+FakeData.SITE_A_ID, FakeData.SITE_A_ID, FakeData.USER_B_ID, "session-id-b"); Event aBSixDaysBefore = M_sum.buildEvent(sixDaysBefore, FakeData.EVENT_CONTENTREV, "/content/group/"+FakeData.SITE_A_ID+"/resource_id", FakeData.SITE_A_ID, FakeData.USER_B_ID, "session-id-b"); samples.addAll(Arrays.asList( aAToday, aBToday, // today: 2 (1 chat + 1 content) aAOneDayBefore, // 1 day before: 1 (1 chat) aATowDaysBefore, aATowDaysBefore, // 2 day before: 2 (2 chat) aAFourDaysBefore, aBFourDaysBefore, // 4 day before: 2 (2 chat) aBSixDaysBefore // 6 day before: 1 (1 chat) )); return samples; } private List<Event> getSampleData2() { List<Event> samples = new ArrayList<Event>(); Date today = new Date(); Date oneDayBefore = new Date(today.getTime() - 24*60*60*1000); Date twoDaysBefore = new Date(today.getTime() - 2*24*60*60*1000); Date fourDaysBefore = new Date(today.getTime() - 4*24*60*60*1000); Date sixDaysBefore = new Date(today.getTime() - 6*24*60*60*1000); // visits Event vAToday = M_sum.buildEvent(today, StatsManager.SITEVISIT_EVENTID, "/presence/"+FakeData.SITE_A_ID+"-presence", null, FakeData.USER_A_ID, "session-id-a"); Event vBToday = M_sum.buildEvent(today, StatsManager.SITEVISIT_EVENTID, "/presence/"+FakeData.SITE_A_ID+"-presence", null, FakeData.USER_B_ID, "session-id-b"); Event vAOneDayBefore = M_sum.buildEvent(oneDayBefore, StatsManager.SITEVISIT_EVENTID, "/presence/"+FakeData.SITE_A_ID+"-presence", null, FakeData.USER_A_ID, "session-id-a"); Event vATowDaysBefore = M_sum.buildEvent(twoDaysBefore, StatsManager.SITEVISIT_EVENTID, "/presence/"+FakeData.SITE_A_ID+"-presence", null, FakeData.USER_A_ID, "session-id-a"); Event vAFourDaysBefore = M_sum.buildEvent(fourDaysBefore, StatsManager.SITEVISIT_EVENTID, "/presence/"+FakeData.SITE_A_ID+"-presence", null, FakeData.USER_A_ID, "session-id-a"); Event vBFourDaysBefore = M_sum.buildEvent(fourDaysBefore, StatsManager.SITEVISIT_EVENTID, "/presence/"+FakeData.SITE_A_ID+"-presence", null, FakeData.USER_B_ID, "session-id-b"); Event vBSixDaysBefore = M_sum.buildEvent(sixDaysBefore, StatsManager.SITEVISIT_EVENTID, "/presence/"+FakeData.SITE_A_ID+"-presence", null, FakeData.USER_B_ID, "session-id-b"); samples.addAll(Arrays.asList( vAToday, vAToday, vBToday, // today: 3 visits, 2 unique vAOneDayBefore, // 1 day before: 1 visits, 1 unique vATowDaysBefore, vATowDaysBefore, // 2 day before: 2 visits, 1 unique vAFourDaysBefore, vBFourDaysBefore, // 4 day before: 2 visits, 2 unique vBSixDaysBefore // 6 day before: 1 visits, 1 unique )); // activity Event aAToday = M_sum.buildEvent(today, FakeData.EVENT_CHATNEW, "/chat/msg/"+FakeData.SITE_B_ID, FakeData.SITE_B_ID, FakeData.USER_A_ID, "session-id-a"); Event aBToday = M_sum.buildEvent(today, FakeData.EVENT_CONTENTNEW, "/content/group/"+FakeData.SITE_B_ID+"/resource_id", FakeData.SITE_B_ID, FakeData.USER_B_ID, "session-id-b"); Event aAOneDayBefore = M_sum.buildEvent(oneDayBefore, FakeData.EVENT_CHATNEW, "/chat/msg/"+FakeData.SITE_A_ID, FakeData.SITE_A_ID, FakeData.USER_A_ID, "session-id-a"); Event aATowDaysBefore = M_sum.buildEvent(twoDaysBefore, FakeData.EVENT_CHATNEW, "/chat/msg/"+FakeData.SITE_A_ID, FakeData.SITE_A_ID, FakeData.USER_A_ID, "session-id-a"); Event aAFourDaysBefore = M_sum.buildEvent(fourDaysBefore, FakeData.EVENT_CHATNEW, "/chat/msg/"+FakeData.SITE_A_ID, FakeData.SITE_A_ID, FakeData.USER_A_ID, "session-id-a"); Event aBFourDaysBefore = M_sum.buildEvent(fourDaysBefore, FakeData.EVENT_CHATNEW, "/chat/msg/"+FakeData.SITE_A_ID, FakeData.SITE_A_ID, FakeData.USER_B_ID, "session-id-b"); Event aBSixDaysBefore = M_sum.buildEvent(sixDaysBefore, FakeData.EVENT_CONTENTREV, "/content/group/"+FakeData.SITE_A_ID+"/resource_id", FakeData.SITE_A_ID, FakeData.USER_B_ID, "session-id-b"); samples.addAll(Arrays.asList( aAToday, aBToday, // today: 2 (1 chat + 1 content) aAOneDayBefore, // 1 day before: 1 (1 chat) aATowDaysBefore, aATowDaysBefore, // 2 day before: 2 (2 chat) aAFourDaysBefore, aBFourDaysBefore, // 4 day before: 2 (2 chat) aBSixDaysBefore // 6 day before: 1 (1 chat) )); // resources Event r1 = M_sum.buildEvent(today, FakeData.EVENT_CONTENTNEW, "/content/group/"+FakeData.SITE_A_ID+"/resource_id1", FakeData.SITE_A_ID, FakeData.USER_A_ID, "session-id-a"); Event r1a = M_sum.buildEvent(today, FakeData.EVENT_CONTENTREAD, "/content/group/"+FakeData.SITE_A_ID+"/resource_id1", FakeData.SITE_A_ID, FakeData.USER_A_ID, "session-id-a"); Event r1b = M_sum.buildEvent(today, FakeData.EVENT_CONTENTREAD, "/content/group/"+FakeData.SITE_A_ID+"/resource_id1", FakeData.SITE_A_ID, FakeData.USER_B_ID, "session-id-b"); Event r1c = M_sum.buildEvent(today, FakeData.EVENT_CONTENTREAD, "/content/group/"+FakeData.SITE_A_ID+"/resource_id1", FakeData.SITE_A_ID, FakeData.USER_B_ID, "session-id-b"); Event r2 = M_sum.buildEvent(today, FakeData.EVENT_CONTENTNEW, "/content/group/"+FakeData.SITE_A_ID+"/resource_id2", FakeData.SITE_A_ID, FakeData.USER_B_ID, "session-id-b"); Event r2a = M_sum.buildEvent(today, FakeData.EVENT_CONTENTREAD, "/content/group/"+FakeData.SITE_A_ID+"/resource_id2", FakeData.SITE_A_ID, FakeData.USER_A_ID, "session-id-a"); Event r2b = M_sum.buildEvent(today, FakeData.EVENT_CONTENTREAD, "/content/group/"+FakeData.SITE_A_ID+"/resource_id2", FakeData.SITE_A_ID, FakeData.USER_A_ID, "session-id-a"); Event r3 = M_sum.buildEvent(today, FakeData.EVENT_CONTENTDEL, "/content/group/"+FakeData.SITE_A_ID+"/resource_id2", FakeData.SITE_A_ID, FakeData.USER_B_ID, "session-id-b"); Event r4 = M_sum.buildEvent(today, FakeData.EVENT_CONTENTNEW, "/content/group/"+FakeData.SITE_B_ID+"/resource_id2", FakeData.SITE_B_ID, FakeData.USER_A_ID, "session-id-a"); // resources: attachment Event r5 = M_sum.buildEvent(today, FakeData.EVENT_CONTENTNEW, FakeData.RES_ATTACH, FakeData.SITE_A_ID, FakeData.USER_A_ID, "session-id-a"); // resources: dropbox Event r6 = M_sum.buildEvent(today, FakeData.EVENT_CONTENTNEW, FakeData.RES_DROPBOX_SITE_A_USER_A_FILE, FakeData.SITE_A_ID, FakeData.USER_A_ID, "session-id-a"); samples.addAll(Arrays.asList( r1, r1a, r1b, r1c, r2, r2a, r2b, r3, r4, r5, r6 )); return samples; } // ---- TESTS ---- public void testGetReport() { M_sum.collectEvents(getSampleData()); String siteId = null; Report r = null; ReportDef rd = null; ReportParams rp = null; List<String> totalsBy = null; // #1 getReport(ReportDef reportDef, boolean restrictToToolsInSite) siteId = FakeData.SITE_B_ID; rd = new ReportDef(); rd.setId(0); rd.setSiteId(siteId); rp = new ReportParams(siteId); rp.setWhat(ReportManager.WHAT_EVENTS); rp.setWhatEventSelType(ReportManager.WHAT_EVENTS_BYTOOL); rp.setWhatToolIds(Arrays.asList(ReportManager.WHAT_EVENTS_ALLTOOLS)); rp.setWhen(ReportManager.WHEN_ALL); rp.setWho(ReportManager.WHO_ALL); // grouping totalsBy = new ArrayList<String>(); totalsBy.add(StatsManager.T_TOOL); totalsBy.add(StatsManager.T_DATE); rp.setHowTotalsBy(totalsBy); // sorting rp.setHowSort(true); rp.setHowSortBy(StatsManager.T_TOOL); rp.setHowSortAscending(false); // chart rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_BOTH); rp.setHowChartType(StatsManager.CHARTTYPE_TIMESERIESBAR); rp.setHowChartSource(StatsManager.T_DATE); rp.setHowChartSeriesSource(StatsManager.T_NONE); rp.setHowChartSeriesPeriod(StatsManager.CHARTTIMESERIES_DAY); rd.setReportParams(rp); r = M_rm.getReport(rd, true); checkCollumns(rd.getReportParams()); assertEquals(1, r.getReportData().size()); r = M_rm.getReport(rd, false); checkCollumns(rd.getReportParams()); assertEquals(2, r.getReportData().size()); assertNotNull(M_rm.getReportFormattedParams()); // #2 getReportRowCount(ReportDef reportDef, boolean restrictToToolsInSite) assertEquals(1, M_rm.getReportRowCount(rd, true)); assertEquals(2, M_rm.getReportRowCount(rd, false)); siteId = FakeData.SITE_B_ID; rd = new ReportDef(); rd.setId(0); rd.setSiteId(siteId); rp = new ReportParams(siteId); rp.setWhat(ReportManager.WHAT_RESOURCES); rp.setWhen(ReportManager.WHEN_ALL); rp.setWho(ReportManager.WHO_ALL); // grouping totalsBy = new ArrayList<String>(); totalsBy.add(StatsManager.T_RESOURCE); totalsBy.add(StatsManager.T_DATE); rp.setHowTotalsBy(totalsBy); // sorting rp.setHowSort(true); rp.setHowSortBy(StatsManager.T_TOOL); rp.setHowSortAscending(false); // chart rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_TABLE); rd.setReportParams(rp); assertEquals(1, M_rm.getReportRowCount(rd, true)); assertEquals(1, M_rm.getReportRowCount(rd, false)); } public void testGetMoreReports() { M_sum.collectEvents(getSampleData()); String siteId = null; Report r = null; ReportDef rd = null; ReportParams rp = null; List<String> totalsBy = null; // resources siteId = FakeData.SITE_A_ID; rd = new ReportDef(); rd.setId(0); rd.setSiteId(siteId); rp = new ReportParams(siteId); rp.setWhat(ReportManager.WHAT_RESOURCES); rp.setWhen(ReportManager.WHEN_ALL); rp.setWho(ReportManager.WHO_ALL); totalsBy = new ArrayList<String>(); totalsBy.add(StatsManager.T_SITE); totalsBy.add(StatsManager.T_USER); rp.setHowTotalsBy(totalsBy); rp.setHowSort(false); rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_TABLE); rd.setReportParams(rp); r = M_rm.getReport(rd, true, null, false); checkCollumns(rd.getReportParams()); assertEquals(1, r.getReportData().size()); // visits rp.setWhat(ReportManager.WHAT_VISITS); r = M_rm.getReport(rd, true, null, true); checkCollumns(rd.getReportParams()); assertEquals(2, r.getReportData().size()); // visits totals rp.setWhat(ReportManager.WHAT_VISITS_TOTALS); totalsBy = new ArrayList<String>(); totalsBy.add(StatsManager.T_SITE); rp.setHowTotalsBy(totalsBy); rd.setId(1); r = M_rm.getReport(rd, true, new PagingPosition(0,5), true); assertEquals(1, r.getReportData().size()); assertEquals(9, ((SiteVisits)(r.getReportData().get(0))).getTotalVisits()); assertEquals(7, ((SiteVisits)(r.getReportData().get(0))).getTotalUnique()); // // activity totals // rp.setWhat(ReportManager.WHAT_ACTIVITY_TOTALS); // rp.setWhatEventIds(FakeData.EVENTIDS); // rp.setWhen(ReportManager.WHEN_LAST365DAYS); // r = M_rm.getReport(rd, false, null, false); // System.out.println(r.getReportData()); // System.out.println("ReportParams: "+ rp); // System.out.println("ReportData: "+ r.getReportData()); // assertEquals(1, r.getReportData().size()); // assertEquals(1, r.getReportData().get(0).getCount()); // presences I rp.setWhat(ReportManager.WHAT_PRESENCES); totalsBy = new ArrayList<String>(); totalsBy.add(StatsManager.T_SITE); totalsBy.add(StatsManager.T_USER); totalsBy.add(StatsManager.T_DATE); rp.setHowTotalsBy(totalsBy); rp.setHowSort(false); r = M_rm.getReport(rd, true, null, true); checkCollumns(rd.getReportParams()); assertEquals(7, r.getReportData().size()); // presences II rp.setWhat(ReportManager.WHAT_PRESENCES); totalsBy = new ArrayList<String>(); totalsBy.add(StatsManager.T_SITE); totalsBy.add(StatsManager.T_DATE); rp.setHowTotalsBy(totalsBy); rp.setHowSort(false); r = M_rm.getReport(rd, true, null, true); checkCollumns(rd.getReportParams()); assertEquals(5, r.getReportData().size()); // presences III rp.setWhat(ReportManager.WHAT_PRESENCES); totalsBy = new ArrayList<String>(); totalsBy.add(StatsManager.T_SITE); rp.setHowTotalsBy(totalsBy); rp.setHowSort(false); r = M_rm.getReport(rd, true, null, true); checkCollumns(rd.getReportParams()); assertEquals(1, r.getReportData().size()); } public void testReportsFromOverviewPage() { M_sum.collectEvents(getSampleData2()); // MiniStatsVisits & MiniStatUniqueVisits { ReportDef r = new ReportDef(); r.setId(0); r.setSiteId(FakeData.SITE_A_ID); ReportParams rp = new ReportParams(FakeData.SITE_A_ID); rp.setWhat(ReportManager.WHAT_VISITS_TOTALS); rp.setWhen(ReportManager.WHEN_ALL); rp.setWho(ReportManager.WHO_ALL); List<String> totalsBy = new ArrayList<String>(); totalsBy.add(StatsManager.T_DATE); totalsBy.add(StatsManager.T_VISITS); totalsBy.add(StatsManager.T_UNIQUEVISITS); rp.setHowTotalsBy(totalsBy); rp.setHowSort(true); rp.setHowSortBy(StatsManager.T_DATE); rp.setHowSortAscending(false); rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_BOTH); rp.setHowChartType(StatsManager.CHARTTYPE_TIMESERIESBAR); rp.setHowChartSource(StatsManager.T_DATE); rp.setHowChartSeriesSource(StatsManager.T_NONE); rp.setHowChartSeriesPeriod(StatsManager.CHARTTIMESERIES_DAY); r.setReportParams(rp); Report rep = M_rm.getReport(r, false); assertNotNull(rep); assertEquals(5, rep.getReportData().size()); } // MiniStatEnrolledUsersWithVisits { ReportDef r = new ReportDef(); r.setId(0); r.setSiteId(FakeData.SITE_A_ID); ReportParams rp = new ReportParams(FakeData.SITE_A_ID); rp.setWhat(ReportManager.WHAT_VISITS); rp.setWhen(ReportManager.WHEN_ALL); rp.setWho(ReportManager.WHO_ALL); // grouping List<String> totalsBy = new ArrayList<String>(); totalsBy.add(StatsManager.T_USER); rp.setHowTotalsBy(totalsBy); // sorting rp.setHowSort(false); // chart rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_TABLE); r.setReportParams(rp); Report rep = M_rm.getReport(r, false); assertNotNull(rep); assertEquals(2, rep.getReportData().size()); } // MiniStatEnrolledUsersWithoutVisits { ReportDef r = new ReportDef(); r.setId(0); r.setSiteId(FakeData.SITE_A_ID); ReportParams rp = new ReportParams(FakeData.SITE_A_ID); rp.setWhat(ReportManager.WHAT_VISITS); rp.setWhen(ReportManager.WHEN_ALL); rp.setWho(ReportManager.WHO_NONE); // grouping List<String> totalsBy = new ArrayList<String>(); totalsBy.add(StatsManager.T_USER); rp.setHowTotalsBy(totalsBy); // sorting rp.setHowSort(false); // chart rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_TABLE); r.setReportParams(rp); Report rep = M_rm.getReport(r, false); assertNotNull(rep); assertEquals(0, rep.getReportData().size()); } // MiniStatActivityEvents { ReportDef r = new ReportDef(); r.setId(0); r.setSiteId(FakeData.SITE_A_ID); ReportParams rp = new ReportParams(FakeData.SITE_A_ID); // what rp.setWhat(ReportManager.WHAT_EVENTS); rp.setWhatEventSelType(ReportManager.WHAT_EVENTS_BYEVENTS); rp.setWhatEventIds(new ArrayList<String>(M_ers.getEventIds())); // when rp.setWhen(ReportManager.WHEN_ALL); // who rp.setWho(ReportManager.WHO_ALL); // grouping List<String> totalsBy = new ArrayList<String>(); totalsBy.add(StatsManager.T_EVENT); rp.setHowTotalsBy(totalsBy); // sorting rp.setHowSort(true); rp.setHowSortBy(StatsManager.T_EVENT); rp.setHowSortAscending(true); // chart rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_TABLE); r.setReportParams(rp); Report rep = M_rm.getReport(r, false); assertNotNull(rep); assertEquals(6, rep.getReportData().size()); } // MiniStatMostActiveUser { ReportDef r = new ReportDef(); r.setId(0); r.setSiteId(FakeData.SITE_A_ID); ReportParams rp = new ReportParams(FakeData.SITE_A_ID); // what rp.setWhat(ReportManager.WHAT_EVENTS); rp.setWhatEventSelType(ReportManager.WHAT_EVENTS_BYEVENTS); rp.setWhatEventIds(new ArrayList<String>(M_ers.getEventIds())); // when rp.setWhen(ReportManager.WHEN_ALL); // who rp.setWho(ReportManager.WHO_ALL); // grouping List<String> totalsBy = new ArrayList<String>(); totalsBy.add(StatsManager.T_USER); rp.setHowTotalsBy(totalsBy); // sorting rp.setHowSort(true); rp.setHowSortBy(StatsManager.T_TOTAL); rp.setHowSortAscending(false); // chart rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_TABLE); r.setReportParams(rp); Report rep = M_rm.getReport(r, false); assertNotNull(rep); assertEquals(3, rep.getReportData().size()); } // MiniStatFiles (files with new event) { ReportDef r = new ReportDef(); r.setId(0); r.setSiteId(FakeData.SITE_A_ID); ReportParams rp = new ReportParams(FakeData.SITE_A_ID); // what rp.setWhat(ReportManager.WHAT_RESOURCES); rp.setWhatLimitedAction(true); rp.setWhatResourceAction(ReportManager.WHAT_RESOURCES_ACTION_NEW); rp.setWhatLimitedResourceIds(true); rp.setWhatResourceIds(Arrays.asList(StatsManager.RESOURCES_DIR + FakeData.SITE_A_ID + "/")); // when rp.setWhen(ReportManager.WHEN_ALL); // who rp.setWho(ReportManager.WHO_ALL); // grouping List<String> totalsBy = new ArrayList<String>(); totalsBy.add(StatsManager.T_RESOURCE); rp.setHowTotalsBy(totalsBy); // sorting rp.setHowSort(true); rp.setHowSortBy(StatsManager.T_RESOURCE); rp.setHowSortAscending(true); // chart rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_TABLE); r.setReportParams(rp); Report rep = M_rm.getReport(r, false); assertNotNull(rep); assertEquals(2, rep.getReportData().size()); } // MiniStatOpenedFiles (files with read event) { ReportDef r = new ReportDef(); r.setId(0); r.setSiteId(FakeData.SITE_A_ID); ReportParams rp = new ReportParams(FakeData.SITE_A_ID); // what rp.setWhat(ReportManager.WHAT_RESOURCES); rp.setWhatLimitedAction(true); rp.setWhatResourceAction(ReportManager.WHAT_RESOURCES_ACTION_READ); rp.setWhatLimitedResourceIds(true); rp.setWhatResourceIds(Arrays.asList(StatsManager.RESOURCES_DIR + FakeData.SITE_A_ID + "/")); // when rp.setWhen(ReportManager.WHEN_ALL); // who rp.setWho(ReportManager.WHO_ALL); // grouping List<String> totalsBy = new ArrayList<String>(); totalsBy.add(StatsManager.T_RESOURCE); rp.setHowTotalsBy(totalsBy); // sorting rp.setHowSort(true); rp.setHowSortBy(StatsManager.T_TOTAL); rp.setHowSortAscending(false); // chart rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_TABLE); r.setReportParams(rp); Report rep = M_rm.getReport(r, false); assertNotNull(rep); assertEquals(2, rep.getReportData().size()); } // MiniStatUserThatOpenedMoreFiles { ReportDef r = new ReportDef(); r.setId(0); r.setSiteId(FakeData.SITE_A_ID); ReportParams rp = new ReportParams(FakeData.SITE_A_ID); // what rp.setWhat(ReportManager.WHAT_RESOURCES); rp.setWhatLimitedAction(true); rp.setWhatResourceAction(ReportManager.WHAT_RESOURCES_ACTION_READ); rp.setWhatLimitedResourceIds(true); rp.setWhatResourceIds(Arrays.asList(StatsManager.RESOURCES_DIR + FakeData.SITE_A_ID + "/")); // when rp.setWhen(ReportManager.WHEN_ALL); // who rp.setWho(ReportManager.WHO_ALL); // grouping List<String> totalsBy = new ArrayList<String>(); totalsBy.add(StatsManager.T_USER); rp.setHowTotalsBy(totalsBy); // sorting rp.setHowSort(true); rp.setHowSortBy(StatsManager.T_TOTAL); rp.setHowSortAscending(false); // chart rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_TABLE); r.setReportParams(rp); Report rep = M_rm.getReport(r, false); assertNotNull(rep); assertEquals(2, rep.getReportData().size()); } } public void testLoadSaveReports() { String siteId = null; Report r = null; ReportParams rp = null; List<String> totalsBy = null; siteId = FakeData.SITE_A_ID; ReportDef rd = new ReportDef(); rd.setId(0); rd.setSiteId(siteId); rd.setCreatedBy(FakeData.USER_A_ID); rd.setModifiedBy(FakeData.USER_A_ID); rd.setTitle("Title 1"); rp = new ReportParams(siteId); rp.setWhat(ReportManager.WHAT_RESOURCES); rp.setWhen(ReportManager.WHEN_ALL); rp.setWho(ReportManager.WHO_ALL); totalsBy = new ArrayList<String>(); totalsBy.add(StatsManager.T_SITE); totalsBy.add(StatsManager.T_USER); rp.setHowTotalsBy(totalsBy); rp.setHowSort(false); rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_TABLE); rd.setReportParams(rp); // non-existent try{ assertNull(M_rm.getReportDefinition(100)); }catch(Exception e) { assertTrue(true); } // normal assertTrue(M_rm.saveReportDefinition(rd)); assertNotNull(M_rm.getReportDefinition(1)); // hidden ReportDef rd2 = new ReportDef(); rd2.setId(0); rd2.setSiteId(siteId); rd2.setCreatedBy(FakeData.USER_A_ID); rd2.setModifiedBy(FakeData.USER_A_ID); rd2.setTitle("Title 2"); rd2.setHidden(true); rd2.setReportParams(new ReportParams()); assertTrue(M_rm.saveReportDefinition(rd2)); // pre-defined ReportDef rd3 = new ReportDef(); rd3.setId(0); rd3.setSiteId(null); rd3.setCreatedBy(FakeData.USER_A_ID); rd3.setModifiedBy(FakeData.USER_A_ID); rd3.setTitle("Title 3"); rd3.setHidden(false); rd3.setReportParams(new ReportParams()); assertTrue(M_rm.saveReportDefinition(rd3)); List<ReportDef> list = M_rm.getReportDefinitions(null, true, true); assertNotNull(list); assertEquals(1, list.size()); list = M_rm.getReportDefinitions(FakeData.SITE_A_ID, true, true); assertNotNull(list); assertEquals(3, list.size()); list = M_rm.getReportDefinitions(FakeData.SITE_A_ID, true, false); assertNotNull(list); assertEquals(2, list.size()); list = M_rm.getReportDefinitions(FakeData.SITE_A_ID, false, true); assertNotNull(list); assertEquals(2, list.size()); list = M_rm.getReportDefinitions(FakeData.SITE_A_ID, false, false); assertNotNull(list); assertEquals(1, list.size()); assertTrue(M_rm.removeReportDefinition(rd2)); list = M_rm.getReportDefinitions(FakeData.SITE_A_ID, true, true); assertNotNull(list); assertEquals(2, list.size()); } public void testReportExporting() { String siteId = null; Report r = null; ReportParams rp = null; List<String> totalsBy = null; siteId = FakeData.SITE_A_ID; ReportDef rd = new ReportDef(); rd.setId(0); rd.setSiteId(siteId); rd.setCreatedBy(FakeData.USER_A_ID); rd.setModifiedBy(FakeData.USER_A_ID); rd.setTitle("Title 1"); rp = new ReportParams(siteId); rp.setWhat(ReportManager.WHAT_RESOURCES); rp.setWhen(ReportManager.WHEN_ALL); rp.setWho(ReportManager.WHO_ALL); totalsBy = new ArrayList<String>(); totalsBy.add(StatsManager.T_SITE); totalsBy.add(StatsManager.T_USER); rp.setHowTotalsBy(totalsBy); rp.setHowSort(false); rp.setHowPresentationMode(ReportManager.HOW_PRESENTATION_TABLE); rd.setReportParams(rp); Report report = M_rm.getReport(rd, false); assertNotNull(report); // CSV String csv = M_rm.getReportAsCsv(report); assertNotNull(csv); assertTrue(csv.length() > 0); // EXCEL byte[] excel = M_rm.getReportAsExcel(report, "sheetname"); assertNotNull(excel); assertTrue(excel.length > 0); // To verify locally... // File file = new File("d:/sitestats-test.xls"); // if(file.exists()) {file.delete();} // FileOutputStream out = null; // try{ // out = new FileOutputStream(file); // out.write(excel); // out.flush(); // }catch(FileNotFoundException e){ // e.printStackTrace(); // }catch(IOException e){ // e.printStackTrace(); // }finally{ // if(out != null) { // try{ out.close(); }catch(IOException e){ /* IGNORE */} // } // } // PDF: currently disabled due to classloading trouble // byte[] pdf = M_rm.getReportAsPDF(report); // assertNotNull(pdf); // assertTrue(pdf.length > 0); } private void checkCollumns(ReportParams params) { List<String> all = Arrays.asList( StatsManager.T_SITE, StatsManager.T_USER, StatsManager.T_EVENT, StatsManager.T_TOOL, StatsManager.T_RESOURCE, StatsManager.T_RESOURCE_ACTION, StatsManager.T_DATE, StatsManager.T_DATEMONTH, StatsManager.T_DATEYEAR, StatsManager.T_LASTDATE, StatsManager.T_TOTAL, StatsManager.T_VISITS, StatsManager.T_UNIQUEVISITS, StatsManager.T_DURATION ); List<String> totalsBy = params.getHowTotalsBy(); for(String c : all) { boolean containsColumn = M_rm.isReportColumnAvailable(params, c); boolean expected = totalsBy == null || totalsBy.contains(c) || (c.equals(StatsManager.T_TOTAL) && !ReportManager.WHAT_PRESENCES.equals(params.getWhat())) || (c.equals(StatsManager.T_DURATION) && ReportManager.WHAT_PRESENCES.equals(params.getWhat())); //System.out.println("containsColumn("+c+"): "+containsColumn+" expected: "+expected); assertEquals(expected, containsColumn); } } }