/**
* $URL: https://source.sakaiproject.org/svn/sitestats/trunk/sitestats-impl/src/test/org/sakaiproject/sitestats/test/StatsManagerTest.java $
* $Id: StatsManagerTest.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.classextension.EasyMock.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.sakaiproject.content.api.ContentHostingService;
import org.sakaiproject.content.api.ContentTypeImageService;
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.EventStat;
import org.sakaiproject.sitestats.api.PrefsData;
import org.sakaiproject.sitestats.api.ResourceStat;
import org.sakaiproject.sitestats.api.SiteActivityByTool;
import org.sakaiproject.sitestats.api.SiteVisits;
import org.sakaiproject.sitestats.api.Stat;
import org.sakaiproject.sitestats.api.StatsManager;
import org.sakaiproject.sitestats.api.StatsUpdateManager;
import org.sakaiproject.sitestats.api.SummaryActivityChartData;
import org.sakaiproject.sitestats.api.SummaryActivityTotals;
import org.sakaiproject.sitestats.api.SummaryVisitsChartData;
import org.sakaiproject.sitestats.api.SummaryVisitsTotals;
import org.sakaiproject.sitestats.api.event.ToolInfo;
import org.sakaiproject.sitestats.api.report.ReportManager;
import org.sakaiproject.sitestats.impl.StatsManagerImpl;
import org.sakaiproject.sitestats.impl.StatsUpdateManagerImpl;
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.util.ResourceLoader;
import org.springframework.test.annotation.AbstractAnnotationAwareTransactionalTests;
public class StatsManagerTest extends AbstractAnnotationAwareTransactionalTests {
// AbstractAnnotationAwareTransactionalTests / AbstractTransactionalSpringContextTests
private final static boolean enableLargeMembershipTest = false;
private StatsManager M_sm;
private StatsUpdateManager M_sum;
private DB db;
private SiteService M_ss;
private FakeServerConfigurationService M_scs;
private ContentHostingService M_chs;
private ContentTypeImageService M_ctis;
private FakeEventRegistryService M_ers;
// Spring configuration
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 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}, 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());
if(enableLargeMembershipTest) {
// Site C has tools {SiteStats, Chat}, has 2002 users (user-1..user-2002), created 1 month ago
Site siteC = new FakeSite(FakeData.SITE_C_ID,
Arrays.asList(StatsManager.SITESTATS_TOOLID, FakeData.TOOL_CHAT, StatsManager.RESOURCES_TOOLID)
);
List<String> siteCUsersList = new ArrayList<String>();
for(int i=0; i<FakeData.SITE_C_USER_COUNT; i++) {
siteCUsersList.add(FakeData.USER_ID_PREFIX + (i+1));
}
Set<String> siteCUsersSet = new HashSet<String>(siteCUsersList);
((FakeSite)siteC).setUsers(siteCUsersSet);
((FakeSite)siteC).setMembers(siteCUsersSet);
expect(M_ss.getSite(FakeData.SITE_C_ID)).andStubReturn(siteC);
expect(M_ss.isUserSite(FakeData.SITE_C_ID)).andStubReturn(false);
expect(M_ss.isSpecialSite(FakeData.SITE_C_ID)).andStubReturn(false);
expect(siteC.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();
M_ctis = createMock(ContentTypeImageService.class);
expect(M_ctis.getContentTypeImage("folder")).andStubReturn("sakai/folder.gif");
expect(M_ctis.getContentTypeImage("image/png")).andStubReturn("sakai/image.gif");
ResourceLoader msgs = createMock(ResourceLoader.class);
expect(msgs.getString("report_content_attachments")).andStubReturn("Attachments");
// apply
replay(M_ss);
replay(M_chs);
replay(msgs);
replay(M_ctis);
((StatsManagerImpl)M_sm).setSiteService(M_ss);
((StatsManagerImpl)M_sm).setContentHostingService(M_chs);
((StatsManagerImpl)M_sm).setContentTypeImageService(M_ctis);
((StatsManagerImpl)M_sm).setResourceLoader(msgs);
((StatsManagerImpl)M_sm).setCountFilesUsingCHS(false);
((StatsUpdateManagerImpl)M_sum).setSiteService(M_ss);
((StatsUpdateManagerImpl)M_sum).setStatsManager(M_sm);
M_ers.setStatsManager(M_sm);
}
// run this before each test starts and as part of the transaction
protected void onSetUpInTransaction() {
db.deleteAll();
}
// ---- TESTS ----
public void testEnableVisibleSiteVisits() {
M_scs.setProperty("display.users.present", "true");
M_scs.setProperty("presence.events.log", "true");
((StatsManagerImpl)M_sm).setEnableSiteVisits(null);
((StatsManagerImpl)M_sm).setVisitsInfoAvailable(null);
((StatsManagerImpl)M_sm).setEnableSitePresences(null);
((StatsManagerImpl)M_sm).checkAndSetDefaultPropertiesIfNotSet();
assertEquals(true, M_sm.isEnableSiteVisits());
assertEquals(true, M_sm.isVisitsInfoAvailable());
assertEquals(false, M_sm.isEnableSitePresences()); // off, by default
M_scs.setProperty("display.users.present", "false");
M_scs.setProperty("presence.events.log", "true");
((StatsManagerImpl)M_sm).setEnableSiteVisits(null);
((StatsManagerImpl)M_sm).setVisitsInfoAvailable(null);
((StatsManagerImpl)M_sm).setEnableSitePresences(null);
((StatsManagerImpl)M_sm).checkAndSetDefaultPropertiesIfNotSet();
assertEquals(true, M_sm.isEnableSiteVisits());
assertEquals(true, M_sm.isVisitsInfoAvailable());
assertEquals(false, M_sm.isEnableSitePresences()); // off, by default
M_scs.setProperty("display.users.present", "true");
M_scs.setProperty("presence.events.log", "false");
((StatsManagerImpl)M_sm).setEnableSiteVisits(null);
((StatsManagerImpl)M_sm).setVisitsInfoAvailable(null);
((StatsManagerImpl)M_sm).setEnableSitePresences(null);
((StatsManagerImpl)M_sm).checkAndSetDefaultPropertiesIfNotSet();
assertEquals(true, M_sm.isEnableSiteVisits());
assertEquals(true, M_sm.isVisitsInfoAvailable());
assertEquals(false, M_sm.isEnableSitePresences()); // off, by default
M_scs.setProperty("display.users.present", "false");
M_scs.setProperty("presence.events.log", "false");
((StatsManagerImpl)M_sm).setEnableSiteVisits(null);
((StatsManagerImpl)M_sm).setVisitsInfoAvailable(null);
((StatsManagerImpl)M_sm).setEnableSitePresences(null);
((StatsManagerImpl)M_sm).checkAndSetDefaultPropertiesIfNotSet();
assertEquals(false, M_sm.isEnableSiteVisits());
assertEquals(false, M_sm.isVisitsInfoAvailable());
assertEquals(false, M_sm.isEnableSitePresences()); // off, by default
M_scs.removeProperty("display.users.present");
M_scs.removeProperty("presence.events.log");
((StatsManagerImpl)M_sm).setEnableSiteVisits(null);
((StatsManagerImpl)M_sm).setVisitsInfoAvailable(null);
((StatsManagerImpl)M_sm).setEnableSitePresences(null);
((StatsManagerImpl)M_sm).checkAndSetDefaultPropertiesIfNotSet();
assertEquals(false, M_sm.isEnableSiteVisits());
assertEquals(false, M_sm.isVisitsInfoAvailable());
assertEquals(false, M_sm.isEnableSitePresences()); // off, by default
// revert
M_scs.setProperty("display.users.present", "false");
M_scs.setProperty("presence.events.log", "true");
((StatsManagerImpl)M_sm).setEnableSiteVisits(null);
((StatsManagerImpl)M_sm).setVisitsInfoAvailable(null);
((StatsManagerImpl)M_sm).setEnableSitePresences(null);
((StatsManagerImpl)M_sm).checkAndSetDefaultPropertiesIfNotSet();
assertEquals(true, M_sm.isEnableSiteVisits());
assertEquals(true, M_sm.isVisitsInfoAvailable());
assertEquals(false, M_sm.isEnableSitePresences()); // off, by default
}
public void testOtherConfig() {
// isEnableSiteActivity
((StatsManagerImpl)M_sm).setEnableSiteActivity(null);
((StatsManagerImpl)M_sm).checkAndSetDefaultPropertiesIfNotSet();
assertEquals(true, M_sm.isEnableSiteActivity());
((StatsManagerImpl)M_sm).setEnableSiteActivity(false);
assertEquals(false, M_sm.isEnableSiteActivity());
((StatsManagerImpl)M_sm).setEnableSiteActivity(true);
assertEquals(true, M_sm.isEnableSiteActivity());
// isEnableResourceStats
((StatsManagerImpl)M_sm).setEnableResourceStats(null);
((StatsManagerImpl)M_sm).checkAndSetDefaultPropertiesIfNotSet();
assertEquals(true, M_sm.isEnableResourceStats());
((StatsManagerImpl)M_sm).setEnableResourceStats(false);
assertEquals(false, M_sm.isEnableResourceStats());
((StatsManagerImpl)M_sm).setEnableResourceStats(true);
assertEquals(true, M_sm.isEnableResourceStats());
// isServerWideStatsEnabled
((StatsManagerImpl)M_sm).setServerWideStatsEnabled(false);
assertEquals(false, M_sm.isServerWideStatsEnabled());
((StatsManagerImpl)M_sm).setServerWideStatsEnabled(true);
assertEquals(true, M_sm.isServerWideStatsEnabled());
// ChartBackgroundColor
((StatsManagerImpl)M_sm).setChartBackgroundColor("#000");
assertEquals("#000", M_sm.getChartBackgroundColor());
((StatsManagerImpl)M_sm).setChartBackgroundColor("#fff");
assertEquals("#fff", M_sm.getChartBackgroundColor());
// isChartIn3D
((StatsManagerImpl)M_sm).setChartIn3D(false);
assertEquals(false, M_sm.isChartIn3D());
((StatsManagerImpl)M_sm).setChartIn3D(true);
assertEquals(true, M_sm.isChartIn3D());
// ChartTransparency
((StatsManagerImpl)M_sm).setChartTransparency(0.5f);
assertEquals(0.5f, M_sm.getChartTransparency());
((StatsManagerImpl)M_sm).setChartTransparency(1.0f);
assertEquals(1.0f, M_sm.getChartTransparency());
// isItemLabelsVisible
((StatsManagerImpl)M_sm).setItemLabelsVisible(false);
assertEquals(false, M_sm.isItemLabelsVisible());
((StatsManagerImpl)M_sm).setItemLabelsVisible(true);
assertEquals(true, M_sm.isItemLabelsVisible());
// isShowAnonymousAccessEvents
((StatsManagerImpl)M_sm).setShowAnonymousAccessEvents(false);
assertEquals(false, M_sm.isShowAnonymousAccessEvents());
((StatsManagerImpl)M_sm).setShowAnonymousAccessEvents(true);
assertEquals(true, M_sm.isShowAnonymousAccessEvents());
// isLastJobRunDateVisible
((StatsManagerImpl)M_sm).setLastJobRunDateVisible(false);
assertEquals(false, M_sm.isLastJobRunDateVisible());
((StatsManagerImpl)M_sm).setLastJobRunDateVisible(true);
assertEquals(true, M_sm.isLastJobRunDateVisible());
// isEnableSitePresences
((StatsManagerImpl)M_sm).setEnableSitePresences(false);
assertEquals(false, M_sm.isEnableSitePresences());
((StatsManagerImpl)M_sm).setEnableSitePresences(true);
assertEquals(true, M_sm.isEnableSitePresences());
}
public void testPreferences() {
// invalid
boolean thrown;
try{
thrown = false;
M_sm.getPreferences(null, true);
}catch(IllegalArgumentException e) {
thrown = true;
}
assertTrue(thrown);
try{
thrown = false;
M_sm.getPreferences(null, false);
}catch(IllegalArgumentException e) {
thrown = true;
}
assertTrue(thrown);
try{
thrown = false;
M_sm.setPreferences(null, null);
}catch(IllegalArgumentException e) {
thrown = true;
}
assertTrue(thrown);
try{
thrown = false;
M_sm.setPreferences(null, new PrefsData());
}catch(IllegalArgumentException e) {
thrown = true;
}
assertTrue(thrown);
try{
thrown = false;
M_sm.setPreferences(FakeData.SITE_A_ID, null);
}catch(IllegalArgumentException e) {
thrown = true;
}
assertTrue(thrown);
// get inexistent preferences (will return default)
assertNotNull(M_sm.getPreferences(FakeData.SITE_A_ID, false));
assertNotNull(M_sm.getPreferences(FakeData.SITE_A_ID, true));
// #1 add/get preferences
PrefsData p1 = new PrefsData();
p1.setChartIn3D(true);
p1.setChartTransparency(0.5f);
p1.setItemLabelsVisible(true);
p1.setListToolEventsOnlyAvailableInSite(true);
p1.setUseAllTools(true);
assertTrue(M_sm.setPreferences(FakeData.SITE_A_ID, p1));
PrefsData p1L = M_sm.getPreferences(FakeData.SITE_A_ID, false);
assertNotNull(p1L);
assertEquals(p1.isChartIn3D(), p1L.isChartIn3D());
assertEquals(p1.getChartTransparency(), p1L.getChartTransparency());
assertEquals(p1.isItemLabelsVisible(), p1L.isItemLabelsVisible());
assertEquals(p1.isListToolEventsOnlyAvailableInSite(), p1L.isListToolEventsOnlyAvailableInSite());
assertEquals(p1.isUseAllTools(), p1L.isUseAllTools());
assertEquals(FakeData.EVENT_REGISTRY, p1L.getToolEventsDef());
// #2 add/get preferences
PrefsData p2 = new PrefsData();
p2.setChartIn3D(false);
p2.setChartTransparency(0.8f);
p2.setItemLabelsVisible(false);
p2.setListToolEventsOnlyAvailableInSite(false);
p2.setToolEventsDef(FakeData.EVENT_REGISTRY);
p2.setUseAllTools(false);
assertTrue(M_sm.setPreferences(FakeData.SITE_A_ID, p2));
PrefsData p2L = M_sm.getPreferences(FakeData.SITE_A_ID, false);
assertNotNull(p2L);
assertEquals(p2.isChartIn3D(), p2L.isChartIn3D());
assertEquals(p2.getChartTransparency(), p2L.getChartTransparency());
assertEquals(p2.isItemLabelsVisible(), p2L.isItemLabelsVisible());
assertEquals(p2.isListToolEventsOnlyAvailableInSite(), p2L.isListToolEventsOnlyAvailableInSite());
assertEquals(p2.isUseAllTools(), p2L.isUseAllTools());
assertEquals(FakeData.EVENT_REGISTRY, p2L.getToolEventsDef());
// #3 get default/edit/set/get preferences
PrefsData p3 = M_sm.getPreferences(FakeData.SITE_B_ID, false);
List<ToolInfo> tiList = p3.getToolEventsDef();
for(ToolInfo ti : tiList) {
if(StatsManagerImpl.RESOURCES_TOOLID.equals(ti.getToolId())) {
ti.setSelected(false);
}
}
p3.setToolEventsDef(tiList);
p3.setListToolEventsOnlyAvailableInSite(true);
assertTrue(M_sm.setPreferences(FakeData.SITE_B_ID, p3));
PrefsData p3L = M_sm.getPreferences(FakeData.SITE_B_ID, false);
assertNotNull(p3L);
assertEquals(p3.isChartIn3D(), p3L.isChartIn3D());
assertEquals(p3.getChartTransparency(), p3L.getChartTransparency());
assertEquals(p3.isItemLabelsVisible(), p3L.isItemLabelsVisible());
assertEquals(p3.isListToolEventsOnlyAvailableInSite(), p3L.isListToolEventsOnlyAvailableInSite());
assertEquals(p3.isUseAllTools(), p3L.isUseAllTools());
assertEquals(FakeData.EVENT_REGISTRY_CHAT, p3L.getToolEventsDef());
}
public void testSiteUsers() {
// invalid
assertNull(M_sm.getSiteUsers(null));
assertNull(M_sm.getSiteUsers("non_existent_site"));
// valid
Set<String> siteAUsers = M_sm.getSiteUsers(FakeData.SITE_A_ID);
Set<String> expectedSiteAUsers = new HashSet<String>(Arrays.asList(FakeData.USER_A_ID,FakeData.USER_B_ID));
assertEquals(expectedSiteAUsers, siteAUsers);
Set<String> siteBUsers = M_sm.getSiteUsers(FakeData.SITE_B_ID);
Set<String> expectedSiteBUsers = new HashSet<String>(Arrays.asList(FakeData.USER_A_ID));
assertEquals(expectedSiteBUsers, siteBUsers);
}
public void testUsersWithVisits() {
// invalid
boolean thrown;
try{
thrown = false;
M_sm.getUsersWithVisits(null);
}catch(IllegalArgumentException e) {
thrown = true;
}
assertTrue(thrown);
// valid
Event e1 = M_sum.buildEvent(new Date(), StatsManager.SITEVISIT_EVENTID, "/presence/"+FakeData.SITE_A_ID+"-presence", null, FakeData.USER_A_ID, "session-id-a");
M_sum.collectEvent(e1);
Set<String> expectedSiteA = new HashSet<String>();
expectedSiteA.add(FakeData.USER_A_ID);
Set<String> expectedSiteB = new HashSet<String>();
assertEquals(expectedSiteA, M_sm.getUsersWithVisits(FakeData.SITE_A_ID));
assertEquals(expectedSiteB, M_sm.getUsersWithVisits(FakeData.SITE_B_ID));
}
public void testResourceInfo() {
// #1 getResourceName()
// (null)
assertNull(M_sm.getResourceName(null, false));
// (no location prefix)
assertEquals(
FakeData.RES_MYWORKSPACE_A+"-name",
M_sm.getResourceName(FakeData.RES_MYWORKSPACE_A, false));
// My Workspace
assertEquals(
"[~"+FakeData.USER_A_ID+"] "+FakeData.RES_MYWORKSPACE_A+"-name",
M_sm.getResourceName(FakeData.RES_MYWORKSPACE_A));
assertEquals(
"[~"+FakeData.USER_B_ID+"] "+FakeData.RES_MYWORKSPACE_B_F+"-name",
M_sm.getResourceName(FakeData.RES_MYWORKSPACE_B_F));
assertEquals(
"[My Workspace] "+FakeData.RES_MYWORKSPACE_NO_F+"-name",
M_sm.getResourceName(FakeData.RES_MYWORKSPACE_NO_F));
// Attachments
assertEquals(
"[Attachments] "+FakeData.RES_ATTACH_SITE+"-name",
M_sm.getResourceName(FakeData.RES_ATTACH_SITE));
assertEquals(
"[Attachments: Discussion] "+FakeData.RES_ATTACH+"-name",
M_sm.getResourceName(FakeData.RES_ATTACH));
// Dropbox
assertEquals(
FakeData.RES_DROPBOX_SITE_A+"-name",
M_sm.getResourceName(FakeData.RES_DROPBOX_SITE_A));
assertEquals(
"[DropBox] "+FakeData.RES_DROPBOX_SITE_A_USER_A+"-name",
M_sm.getResourceName(FakeData.RES_DROPBOX_SITE_A_USER_A));
assertEquals(
"[DropBox: "+FakeData.RES_DROPBOX_SITE_A_USER_A+"-name] "+FakeData.RES_DROPBOX_SITE_A_USER_A_FILE+"-name",
M_sm.getResourceName(FakeData.RES_DROPBOX_SITE_A_USER_A_FILE));
// Resources
assertEquals(
FakeData.RES_ROOT_SITE_A+"-name",
M_sm.getResourceName(FakeData.RES_ROOT_SITE_A));
assertEquals(
FakeData.RES_FILE_SITE_A+"-name",
M_sm.getResourceName(FakeData.RES_FILE_SITE_A));
assertEquals(
FakeData.RES_FOLDER_SITE_A+"-name",
M_sm.getResourceName(FakeData.RES_FOLDER_SITE_A));
// #2 getResourceImageLibraryRelativePath()
assertEquals("image/sakai/folder.gif", M_sm.getResourceImageLibraryRelativePath(FakeData.RES_FOLDER_SITE_A));
assertEquals("image/sakai/image.gif", M_sm.getResourceImageLibraryRelativePath(FakeData.RES_DROPBOX_SITE_A_USER_A_FILE));
assertEquals("image/sakai/generic.gif", M_sm.getResourceImageLibraryRelativePath(null));
// #3 getResourceImage()
assertEquals("http://localhost:8080/library/image/sakai/folder.gif", M_sm.getResourceImage(FakeData.RES_FOLDER_SITE_A));
// #4 getResourceURL()
assertEquals(
"http://localhost:8080"+FakeData.RES_FOLDER_SITE_A,
M_sm.getResourceURL(FakeData.RES_FOLDER_SITE_A));
assertEquals(
"http://localhost:8080"+FakeData.RES_DROPBOX_SITE_A_USER_A_FILE,
M_sm.getResourceURL(FakeData.RES_DROPBOX_SITE_A_USER_A_FILE));
assertNull(M_sm.getResourceURL(null));
// #5 getTotalResources()
M_sum.collectEvents(Arrays.asList(
/* Files */
M_sum.buildEvent(new Date(), FakeData.EVENT_CONTENTNEW, "/content/group/"+FakeData.SITE_A_ID+"/resource_id1", FakeData.SITE_A_ID, FakeData.USER_B_ID, "session-id-b"),
M_sum.buildEvent(new Date(), FakeData.EVENT_CONTENTNEW, "/content/group/"+FakeData.SITE_A_ID+"/resource_id2", FakeData.SITE_A_ID, FakeData.USER_B_ID, "session-id-b"),
M_sum.buildEvent(new Date(), FakeData.EVENT_CONTENTNEW, "/content/group/"+FakeData.SITE_A_ID+"/resource_id3", FakeData.SITE_A_ID, FakeData.USER_B_ID, "session-id-b"),
M_sum.buildEvent(new Date(), FakeData.EVENT_CONTENTDEL, "/content/group/"+FakeData.SITE_A_ID+"/resource_id1", FakeData.SITE_A_ID, FakeData.USER_B_ID, "session-id-b"),
M_sum.buildEvent(new Date(), FakeData.EVENT_CONTENTDEL, "/content/group/"+FakeData.SITE_A_ID+"/resource_id2", FakeData.SITE_A_ID, FakeData.USER_B_ID, "session-id-b"),
/* Folders */
M_sum.buildEvent(new Date(), FakeData.EVENT_CONTENTNEW, "/content/group/"+FakeData.SITE_A_ID+"/folder_id1/", FakeData.SITE_A_ID, FakeData.USER_B_ID, "session-id-b"),
M_sum.buildEvent(new Date(), FakeData.EVENT_CONTENTNEW, "/content/group/"+FakeData.SITE_A_ID+"/folder_id2/", FakeData.SITE_A_ID, FakeData.USER_B_ID, "session-id-b"),
M_sum.buildEvent(new Date(), FakeData.EVENT_CONTENTDEL, "/content/group/"+FakeData.SITE_A_ID+"/folder_id1/", FakeData.SITE_A_ID, FakeData.USER_B_ID, "session-id-b")
));
int totalFiles = M_sm.getTotalResources(FakeData.SITE_A_ID, true);
int totalFilesAndFolders = M_sm.getTotalResources(FakeData.SITE_A_ID, false);
assertEquals(1, totalFiles);
assertEquals(2, totalFilesAndFolders);
}
private List<Event> getSampleData() {
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_A_ID, FakeData.SITE_A_ID, FakeData.USER_A_ID, "session-id-a");
Event aBToday = M_sum.buildEvent(today, FakeData.EVENT_CONTENTNEW, "/content/group/"+FakeData.SITE_A_ID+"/resource_id", FakeData.SITE_A_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();
// visits
// even numbered users has visits
for(int i=0; i<FakeData.SITE_C_USER_COUNT; i+=2) {
String userId = FakeData.USER_ID_PREFIX + (i+1);
samples.add(
M_sum.buildEvent(today, StatsManager.SITEVISIT_EVENTID, "/presence/"+FakeData.SITE_C_ID+"-presence", null, userId, "session-id-a")
);
}
// activity
// odd numbered users has chat.new activity event
for(int i=1; i<FakeData.SITE_C_USER_COUNT; i+=2) {
String userId = FakeData.USER_ID_PREFIX + (i+1);
samples.add(
M_sum.buildEvent(today, FakeData.EVENT_CHATNEW, "/chat/msg/"+FakeData.SITE_C_ID, FakeData.SITE_C_ID, userId, "session-id-a")
);
}
// resources
// all users has content.new activity event
for(int i=0; i<FakeData.SITE_C_USER_COUNT; i++) {
String userId = FakeData.USER_ID_PREFIX + (i+1);
samples.add(
M_sum.buildEvent(today, FakeData.EVENT_CONTENTNEW, "/content/group/"+FakeData.SITE_C_ID+"/resource_id", FakeData.SITE_C_ID, userId, "session-id-b")
);
}
return samples;
}
public void testSummaryMethods() {
M_sum.collectEvents(getSampleData());
// #1 getSummaryVisitsTotals
SummaryVisitsTotals svt = M_sm.getSummaryVisitsTotals(FakeData.SITE_A_ID);
assertEquals(2, svt.getTotalUsers());
assertEquals(9, svt.getTotalVisits());
assertEquals(2, svt.getTotalUniqueVisits());
assertEquals((100 * 2) / (double) 2, svt.getPercentageOfUsersThatVisitedSite());
assertEquals(1.3, svt.getLast7DaysVisitsAverage());
assertEquals(0.3, svt.getLast30DaysVisitsAverage());
assertEquals(0.0, svt.getLast365DaysVisitsAverage());
// #2 getSummaryActivityTotals
SummaryActivityTotals sat = M_sm.getSummaryActivityTotals(FakeData.SITE_A_ID);
assertEquals(8, sat.getTotalActivity());
assertEquals(1.1, sat.getLast7DaysActivityAverage());
assertEquals(0.3, sat.getLast30DaysActivityAverage());
assertEquals(0.0, sat.getLast365DaysActivityAverage());
// #3 getSummaryVisitsChartData: week
SummaryVisitsChartData svcd = M_sm.getSummaryVisitsChartData(FakeData.SITE_A_ID, StatsManager.VIEW_WEEK);
assertEquals(5, svcd.getSiteVisits().size());
assertNotNull(svcd.getFirstDay());
long[] wv = svcd.getVisits();
long[] wuv = svcd.getUniqueVisits();
assertEquals(1, wv[0]); // 6
assertEquals(1, wuv[0]);
assertEquals(0, wv[1]); // 5
assertEquals(0, wuv[1]);
assertEquals(2, wv[2]); // 4
assertTrue(wuv[2] <= 2);
assertEquals(0, wv[3]); // 3
assertEquals(0, wuv[3]);
assertEquals(2, wv[4]); // 2
assertEquals(1, wuv[4]);
assertEquals(1, wv[5]); // 1
assertEquals(1, wuv[5]);
assertEquals(3, wv[6]); // 0
assertEquals(2, wuv[6]);
// #4 getSummaryVisitsChartData: month
svcd = M_sm.getSummaryVisitsChartData(FakeData.SITE_A_ID, StatsManager.VIEW_MONTH);
assertEquals(5, svcd.getSiteVisits().size());
assertNotNull(svcd.getFirstDay());
wv = svcd.getVisits();
wuv = svcd.getUniqueVisits();
for(int i=0; i<wv.length ; i++) {
if(i==23) {
assertEquals(1, wv[i]);
assertEquals(1, wuv[i]);
}else if(i==25) {
assertEquals(2, wv[i]);
assertEquals(2, wuv[i]);
}else if(i==27) {
assertEquals(2, wv[i]);
assertEquals(1, wuv[i]);
}else if(i==28) {
assertEquals(1, wv[i]);
assertEquals(1, wuv[i]);
}else if(i==29) {
assertEquals(3, wv[i]);
assertEquals(2, wuv[i]);
}else{
assertEquals(0, wv[i]);
assertEquals(0, wuv[i]);
}
}
// #5 getSummaryVisitsChartData: year
svcd = M_sm.getSummaryVisitsChartData(FakeData.SITE_A_ID, StatsManager.VIEW_YEAR);
assertTrue(svcd.getSiteVisits().size() >= 1);
assertNotNull(svcd.getFirstDay());
wv = svcd.getVisits();
wuv = svcd.getUniqueVisits();
// for(int i=0; i<wv.length ; i++) {
// if(i==11) {
// assertEquals(9, wv[i]);
// assertEquals(2, wuv[i]);
// }else{
// assertEquals(0, wv[i]);
// assertEquals(0, wuv[i]);
// }
// }
// #6 getSummaryActivityChartData: week, BAR
SummaryActivityChartData sacd = M_sm.getSummaryActivityChartData(FakeData.SITE_A_ID, StatsManager.VIEW_WEEK, StatsManager.CHARTTYPE_BAR);
assertEquals(0, sacd.getActivityByToolTotal());
assertNotNull(sacd.getFirstDay());
long[] a = sacd.getActivity();
assertEquals(1, a[0]); // 6
assertEquals(0, a[1]); // 5
assertEquals(2, a[2]); // 4
assertEquals(0, a[3]); // 3
assertEquals(2, a[4]); // 2
assertEquals(1, a[5]); // 1
assertEquals(2, a[6]); // 0
// #7 getSummaryActivityChartData: month, BAR
sacd = M_sm.getSummaryActivityChartData(FakeData.SITE_A_ID, StatsManager.VIEW_MONTH, StatsManager.CHARTTYPE_BAR);
assertEquals(0, sacd.getActivityByToolTotal());
assertNotNull(sacd.getFirstDay());
a = sacd.getActivity();
for(int i=0; i<a.length ; i++) {
if(i==23) {
assertEquals(1, a[i]);
}else if(i==25) {
assertEquals(2, a[i]);
}else if(i==27) {
assertEquals(2, a[i]);
}else if(i==28) {
assertEquals(1, a[i]);
}else if(i==29) {
assertEquals(2, a[i]);
}else{
assertEquals(0, a[i]);
}
}
// #8 getSummaryActivityChartData: year, BAR
sacd = M_sm.getSummaryActivityChartData(FakeData.SITE_A_ID, StatsManager.VIEW_YEAR, StatsManager.CHARTTYPE_BAR);
assertEquals(0, sacd.getActivityByToolTotal());
assertNotNull(sacd.getFirstDay());
a = sacd.getActivity();
// for(int i=0; i<a.length ; i++) {
// if(i==11) {
// assertEquals(8, a[i]);
// }else{
// assertEquals(0, a[i]);
// }
// }
// #9 getSummaryActivityChartData: week, TOOL
sacd = M_sm.getSummaryActivityChartData(FakeData.SITE_A_ID, StatsManager.VIEW_WEEK, StatsManager.CHARTTYPE_PIE);
List<SiteActivityByTool> sabt = sacd.getActivityByTool();
assertNotNull(sabt);
assertEquals(2, sabt.size());
for(SiteActivityByTool s : sabt) {
assertEquals(FakeData.SITE_A_ID, s.getSiteId());
ToolInfo ti = s.getTool();
if(FakeData.TOOL_CHAT.equals(ti.getToolId())) {
assertEquals(6, s.getCount());
}else if(StatsManager.RESOURCES_TOOLID.equals(ti.getToolId())) {
assertEquals(2, s.getCount());
}
}
// #10 getSummaryActivityChartData: month, TOOL
sacd = M_sm.getSummaryActivityChartData(FakeData.SITE_A_ID, StatsManager.VIEW_MONTH, StatsManager.CHARTTYPE_PIE);
sabt = sacd.getActivityByTool();
assertNotNull(sabt);
assertEquals(2, sabt.size());
for(SiteActivityByTool s : sabt) {
assertEquals(FakeData.SITE_A_ID, s.getSiteId());
ToolInfo ti = s.getTool();
if(FakeData.TOOL_CHAT.equals(ti.getToolId())) {
assertEquals(6, s.getCount());
}else if(StatsManager.RESOURCES_TOOLID.equals(ti.getToolId())) {
assertEquals(2, s.getCount());
}
}
// #11 getSummaryActivityChartData: year, TOOL
sacd = M_sm.getSummaryActivityChartData(FakeData.SITE_A_ID, StatsManager.VIEW_YEAR, StatsManager.CHARTTYPE_PIE);
sabt = sacd.getActivityByTool();
assertNotNull(sabt);
assertEquals(2, sabt.size());
for(SiteActivityByTool s : sabt) {
assertEquals(FakeData.SITE_A_ID, s.getSiteId());
ToolInfo ti = s.getTool();
if(FakeData.TOOL_CHAT.equals(ti.getToolId())) {
assertEquals(6, s.getCount());
}else if(StatsManager.RESOURCES_TOOLID.equals(ti.getToolId())) {
assertEquals(2, s.getCount());
}
}
}
public void testEventStats() {
M_sum.collectEvents(getSampleData());
Date now = new Date();
Date today = new Date(now.getTime() + 24*60*60*1000);
Date threeDaysBefore = new Date(now.getTime() - 3*24*60*60*1000);
// #1 getEventStats()
List<Stat> stats = M_sm.getEventStats(FakeData.SITE_A_ID, null);
assertEquals(14, stats.size());
stats = M_sm.getEventStats(FakeData.SITE_A_ID, Arrays.asList(FakeData.EVENT_CHATNEW));
assertEquals(5, stats.size());
stats = M_sm.getEventStats(FakeData.SITE_A_ID, Arrays.asList(FakeData.EVENT_CHATNEW, FakeData.EVENT_CONTENTNEW));
assertEquals(6, stats.size());
stats = M_sm.getEventStats(FakeData.SITE_A_ID, new ArrayList<String>());
assertEquals(0, stats.size());
// #2
stats = M_sm.getEventStats(null, null,
null, null, null, false, null,
null, null, false, 0);
assertNotNull(stats);
assertEquals(14, stats.size());
int statsCount = M_sm.getEventStatsRowCount(null, null,
null, null, null, false, null);
assertEquals(14, statsCount);
stats = M_sm.getEventStats(FakeData.SITE_A_ID, null,
threeDaysBefore, null, null, false, null,
null, null, false, 0);
assertNotNull(stats);
assertEquals(8, stats.size());
statsCount = M_sm.getEventStatsRowCount(FakeData.SITE_A_ID, null,
threeDaysBefore, null, null, false, null);
assertEquals(8, statsCount);
stats = M_sm.getEventStats(FakeData.SITE_A_ID, Arrays.asList(FakeData.EVENT_CHATNEW, FakeData.EVENT_CONTENTNEW),
null, today, null, false, null,
null, null, false, 0);
assertNotNull(stats);
assertEquals(6, stats.size());
statsCount = M_sm.getEventStatsRowCount(FakeData.SITE_A_ID, Arrays.asList(FakeData.EVENT_CHATNEW, FakeData.EVENT_CONTENTNEW),
null, today, null, false, null);
assertEquals(6, statsCount);
stats = M_sm.getEventStats(FakeData.SITE_A_ID, null,
null, null, Arrays.asList(FakeData.USER_B_ID), false, null,
null, null, false, 0);
assertNotNull(stats);
assertEquals(6, stats.size());
statsCount = M_sm.getEventStatsRowCount(FakeData.SITE_A_ID, null,
null, null, Arrays.asList(FakeData.USER_B_ID), false, null);
assertEquals(6, statsCount);
// test inverse selection
stats = M_sm.getEventStats(FakeData.SITE_A_ID, Arrays.asList(FakeData.EVENT_CONTENTNEW),
null, null, null, true, null,
null, null, false, 0);
assertNotNull(stats);
assertEquals(1, stats.size());
assertEquals(FakeData.USER_A_ID, stats.get(0).getUserId());
// test paging
stats = M_sm.getEventStats(null, null,
null, null, null, false, new PagingPosition(0, 5),
null, null, false, 0);
assertNotNull(stats);
assertEquals(6, stats.size());
statsCount = M_sm.getEventStatsRowCount(null, null,
null, null, null, false, null);
assertEquals(14, statsCount);
// test max results
stats = M_sm.getEventStats(null, null,
null, null, null, false, new PagingPosition(0, 5),
null, null, false, 3);
assertNotNull(stats);
assertEquals(3, stats.size());
// test columns with sorting
stats = M_sm.getEventStats(null, null,
null, null, null, false, null,
Arrays.asList(StatsManager.T_EVENT, StatsManager.T_USER), StatsManager.T_USER, true, 0);
assertNotNull(stats);
assertEquals(FakeData.USER_A_ID, stats.get(0).getUserId());
for(Stat s : stats) {
EventStat es = (EventStat) s;
assertNotNull(es.getEventId());
assertNotNull(es.getUserId());
assertNotNull(es.getCount());
assertNull(es.getSiteId());
assertNull(es.getDate());
}
assertEquals(6, stats.size());
stats = M_sm.getEventStats(null, null,
null, null, null, false, null,
Arrays.asList(StatsManager.T_EVENT, StatsManager.T_USER), StatsManager.T_USER, false, 0);
assertNotNull(stats);
assertEquals(FakeData.USER_B_ID, stats.get(0).getUserId());
assertEquals(6, stats.size());
// anonymous
Event eAnon = M_sum.buildEvent(today, FakeData.EVENT_CONTENTDEL, "/content/group/"+FakeData.SITE_A_ID+"/resource_id", FakeData.SITE_A_ID, FakeData.USER_B_ID, "session-id-b");
M_sum.collectEvent(eAnon);
stats = M_sm.getEventStats(null, null,
null, null, null, false, null,
null, null, false, 0);
assertNotNull(stats);
assertEquals(15, stats.size());
boolean foundAnonymousUser = false;
for(Stat s : stats) {
if("-".equals(s.getUserId())) {
foundAnonymousUser = true;
}
}
assertTrue(foundAnonymousUser);
statsCount = M_sm.getEventStatsRowCount(null, null,
null, null, null, false, null);
assertEquals(15, statsCount);
stats = M_sm.getEventStats(null, null,
null, null, new ArrayList<String>(), false, null,
null, null, false, 0);
assertNotNull(stats);
assertEquals(0, stats.size());
statsCount = M_sm.getEventStatsRowCount(null, null,
null, null, new ArrayList<String>(), false, null);
assertEquals(0, statsCount);
// group by: defaults
stats = M_sm.getEventStats(null, null,
null, null, null, false, null,
null, null, false, 0);
assertNotNull(stats);
assertEquals(15, stats.size());
statsCount = M_sm.getEventStatsRowCount(null, null,
null, null, null, false, null);
assertEquals(15, statsCount);
// group by: site
stats = M_sm.getEventStats(null, null,
null, null, null, false, null,
Arrays.asList(StatsManager.T_SITE, StatsManager.T_EVENT), null, false, 0);
assertNotNull(stats);
assertEquals(5, stats.size());
statsCount = M_sm.getEventStatsRowCount(null, null,
null, null, null, false, Arrays.asList(StatsManager.T_SITE, StatsManager.T_EVENT));
assertEquals(5, statsCount);
stats = M_sm.getEventStats(null, null,
null, null, null, false, null,
Arrays.asList(StatsManager.T_SITE, StatsManager.T_TOOL), null, false, 0);
assertNotNull(stats);
assertEquals(3, stats.size());
statsCount = M_sm.getEventStatsRowCount(null, null,
null, null, null, false, Arrays.asList(StatsManager.T_SITE, StatsManager.T_TOOL));
assertEquals(5, statsCount); // is not 3 because count has not (manually) aggregated by tool
stats = M_sm.getEventStats(null, null,
null, null, null, false, null,
Arrays.asList(StatsManager.T_SITE), null, false, 0);
assertNotNull(stats);
assertEquals(1, stats.size());
statsCount = M_sm.getEventStatsRowCount(null, null,
null, null, null, false, Arrays.asList(StatsManager.T_SITE));
assertEquals(1, statsCount);
// group by: user
stats = M_sm.getEventStats(FakeData.SITE_A_ID, null,
null, null, null, false, null,
Arrays.asList(StatsManager.T_USER), null, false, 0);
assertNotNull(stats);
assertEquals(3, stats.size());
statsCount = M_sm.getEventStatsRowCount(FakeData.SITE_A_ID, null,
null, null, null, false, Arrays.asList(StatsManager.T_USER));
assertEquals(3, statsCount);
// group by: tool
stats = M_sm.getEventStats(FakeData.SITE_A_ID, Arrays.asList(FakeData.EVENT_CONTENTNEW, FakeData.EVENT_CONTENTDEL, FakeData.EVENT_CHATNEW),
null, null, null, false, null,
Arrays.asList(StatsManager.T_TOOL), null, false, 0);
assertNotNull(stats);
assertEquals(2, stats.size());
statsCount = M_sm.getEventStatsRowCount(FakeData.SITE_A_ID, Arrays.asList(FakeData.EVENT_CONTENTNEW, FakeData.EVENT_CONTENTDEL, FakeData.EVENT_CHATNEW),
null, null, null, false, Arrays.asList(StatsManager.T_TOOL));
assertEquals(3, statsCount); // is not 2 because count has not (manually) aggregated by tool
// group by: tool and user (previously, getting wrong results due to STAT-221)
stats = M_sm.getEventStats(FakeData.SITE_A_ID, Arrays.asList(FakeData.EVENT_CONTENTNEW, FakeData.EVENT_CONTENTDEL, FakeData.EVENT_CHATNEW),
null, null, null, false, null,
Arrays.asList(StatsManager.T_USER, StatsManager.T_TOOL), null, false, 0);
assertNotNull(stats);
assertEquals(4, stats.size()); // before STAT-221 was 2 (wrong)
statsCount = M_sm.getEventStatsRowCount(FakeData.SITE_A_ID, Arrays.asList(FakeData.EVENT_CONTENTNEW, FakeData.EVENT_CONTENTDEL, FakeData.EVENT_CHATNEW),
null, null, null, false, Arrays.asList(StatsManager.T_USER, StatsManager.T_TOOL));
assertEquals(4, statsCount);
// group by: event
stats = M_sm.getEventStats(FakeData.SITE_A_ID, Arrays.asList(FakeData.EVENT_CONTENTNEW, FakeData.EVENT_CONTENTDEL, FakeData.EVENT_CHATNEW),
null, null, null, false, null,
Arrays.asList(StatsManager.T_TOOL, StatsManager.T_EVENT), null, false, 0);
assertNotNull(stats);
assertEquals(3, stats.size());
statsCount = M_sm.getEventStatsRowCount(FakeData.SITE_A_ID, Arrays.asList(FakeData.EVENT_CONTENTNEW, FakeData.EVENT_CONTENTDEL, FakeData.EVENT_CHATNEW),
null, null, null, false, Arrays.asList(StatsManager.T_TOOL, StatsManager.T_EVENT));
assertEquals(3, statsCount);
stats = M_sm.getEventStats(FakeData.SITE_A_ID, Arrays.asList(FakeData.EVENT_CONTENTNEW, FakeData.EVENT_CONTENTDEL, FakeData.EVENT_CHATNEW),
null, null, null, false, null,
Arrays.asList(StatsManager.T_EVENT), null, false, 0);
assertNotNull(stats);
assertEquals(3, stats.size());
statsCount = M_sm.getEventStatsRowCount(FakeData.SITE_A_ID, Arrays.asList(FakeData.EVENT_CONTENTNEW, FakeData.EVENT_CONTENTDEL, FakeData.EVENT_CHATNEW),
null, null, null, false, Arrays.asList(StatsManager.T_EVENT));
assertEquals(3, statsCount);
// group by: date
stats = M_sm.getEventStats(FakeData.SITE_A_ID, null,
null, null, null, false, null,
Arrays.asList(StatsManager.T_DATE), null, false, 0);
assertNotNull(stats);
assertEquals(6, stats.size());
statsCount = M_sm.getEventStatsRowCount(FakeData.SITE_A_ID, null,
null, null, null, false, Arrays.asList(StatsManager.T_DATE));
assertEquals(6, statsCount);
// group by: datemonth
stats = M_sm.getEventStats(FakeData.SITE_A_ID, null,
null, null, null, false, null,
Arrays.asList(StatsManager.T_DATEMONTH), null, false, 0);
assertNotNull(stats);
assertTrue(stats.size() <= 2);
statsCount = M_sm.getEventStatsRowCount(FakeData.SITE_A_ID, null,
null, null, null, false, Arrays.asList(StatsManager.T_DATEMONTH));
assertTrue(statsCount <= 2);
// group by: dateyear
stats = M_sm.getEventStats(FakeData.SITE_A_ID, null,
null, null, null, false, null,
Arrays.asList(StatsManager.T_DATEYEAR), null, false, 0);
assertNotNull(stats);
assertTrue(stats.size() <= 2);
statsCount = M_sm.getEventStatsRowCount(FakeData.SITE_A_ID, null,
null, null, null, false, Arrays.asList(StatsManager.T_DATEYEAR));
assertTrue(statsCount <= 2);
// group by: lastdate
stats = M_sm.getEventStats(FakeData.SITE_A_ID, null,
null, null, null, false, null,
Arrays.asList(StatsManager.T_LASTDATE), null, false, 0);
assertNotNull(stats);
assertEquals(1, stats.size());
statsCount = M_sm.getEventStatsRowCount(FakeData.SITE_A_ID, null,
null, null, null, false, Arrays.asList(StatsManager.T_LASTDATE));
assertEquals(1, statsCount);
// group by: visits
stats = M_sm.getEventStats(FakeData.SITE_A_ID, null,
null, null, null, false, null,
Arrays.asList(StatsManager.T_VISITS), null, false, 0);
assertNotNull(stats);
assertEquals(1, stats.size());
assertEquals(18, ((SiteVisits)stats.get(0)).getTotalVisits());
assertEquals(2, ((SiteVisits)stats.get(0)).getTotalUnique());
statsCount = M_sm.getEventStatsRowCount(FakeData.SITE_A_ID, null,
null, null, null, false, Arrays.asList(StatsManager.T_VISITS));
assertEquals(1, statsCount);
// group by: uniquevisits
stats = M_sm.getEventStats(FakeData.SITE_A_ID, null,
null, null, null, false, null,
Arrays.asList(StatsManager.T_UNIQUEVISITS), null, false, 0);
assertNotNull(stats);
assertEquals(1, stats.size());
assertEquals(18, ((SiteVisits)stats.get(0)).getTotalVisits());
assertEquals(2, ((SiteVisits)stats.get(0)).getTotalUnique());
statsCount = M_sm.getEventStatsRowCount(FakeData.SITE_A_ID, null,
null, null, null, false, Arrays.asList(StatsManager.T_UNIQUEVISITS));
assertEquals(1, statsCount);
//System.out.println("Stats: "+stats);
//System.out.println("Size: "+stats.size());
}
public void testResourceStats() {
M_sum.collectEvents(getSampleData());
Date now = new Date();
Date today = new Date(now.getTime() + 24*60*60*1000);
Date sixDaysBefore = new Date(today.getTime() - 6*24*60*60*1000);
// #1
List<Stat> stats = M_sm.getResourceStats(FakeData.SITE_A_ID);
assertEquals(2, stats.size());
// #2
stats = M_sm.getResourceStats(null, null, null,
null, null, null, false, null,
null, null, false, 0);
assertNotNull(stats);
assertEquals(2, stats.size());
int statsCount = M_sm.getResourceStatsRowCount(null, null, null,
null, null, null, false, null);
assertEquals(2, statsCount);
stats = M_sm.getResourceStats(FakeData.SITE_A_ID, null, null,
sixDaysBefore, null, null, false, null,
null, null, false, 0);
assertNotNull(stats);
assertEquals(1, stats.size());
statsCount = M_sm.getResourceStatsRowCount(FakeData.SITE_A_ID, null, null,
sixDaysBefore, null, null, false, null);
assertEquals(1, statsCount);
stats = M_sm.getResourceStats(FakeData.SITE_A_ID, ReportManager.WHAT_RESOURCES_ACTION_REVS, null,
null, null, Arrays.asList(FakeData.USER_B_ID), false, null,
null, null, false, 0);
assertNotNull(stats);
assertEquals(1, stats.size());
statsCount = M_sm.getResourceStatsRowCount(FakeData.SITE_A_ID, ReportManager.WHAT_RESOURCES_ACTION_REVS, null,
null, null, Arrays.asList(FakeData.USER_B_ID), false, null);
assertEquals(1, statsCount);
// test inverse selection
stats = M_sm.getResourceStats(FakeData.SITE_A_ID, ReportManager.WHAT_RESOURCES_ACTION_NEW ,null,
null, null, null, true, null,
null, null, false, 0);
assertNotNull(stats);
assertEquals(1, stats.size());
assertEquals(FakeData.USER_A_ID, stats.get(0).getUserId());
// test paging
stats = M_sm.getResourceStats(null, null, null,
null, null, null, false, new PagingPosition(0, 0),
null, null, false, 0);
assertNotNull(stats);
assertEquals(1, stats.size());
statsCount = M_sm.getResourceStatsRowCount(null, null, null,
null, null, null, false, null);
assertEquals(2, statsCount);
// test max results
stats = M_sm.getResourceStats(null, null, null,
null, null, null, false, new PagingPosition(0, 0),
null, null, false, 1);
assertNotNull(stats);
assertEquals(1, stats.size());
// test columns with sorting
stats = M_sm.getResourceStats(null, null, null,
null, null, null, false, null,
Arrays.asList(StatsManager.T_RESOURCE_ACTION), StatsManager.T_RESOURCE_ACTION, true, 0);
assertNotNull(stats);
assertEquals(ReportManager.WHAT_RESOURCES_ACTION_NEW, ((ResourceStat)stats.get(0)).getResourceAction());
for(Stat s : stats) {
ResourceStat es = (ResourceStat) s;
assertNotNull(es.getResourceAction());
assertNotNull(es.getCount());
assertNull(es.getSiteId());
assertNull(es.getDate());
assertNull(es.getUserId());
assertNull(es.getResourceRef());
}
assertEquals(2, stats.size());
stats = M_sm.getResourceStats(null, null, null,
null, null, null, false, null,
Arrays.asList(StatsManager.T_RESOURCE_ACTION), StatsManager.T_RESOURCE_ACTION, false, 0);
assertNotNull(stats);
assertEquals(ReportManager.WHAT_RESOURCES_ACTION_REVS, ((ResourceStat)stats.get(0)).getResourceAction());
assertEquals(2, stats.size());
// group by: defaults
stats = M_sm.getResourceStats(null, null, null,
null, null, null, false, null,
null, null, false, 0);
assertNotNull(stats);
assertEquals(2, stats.size());
statsCount = M_sm.getResourceStatsRowCount(null, null, null,
null, null, null, false, null);
assertEquals(2, statsCount);
// group by: site
stats = M_sm.getResourceStats(null, null, null,
null, null, null, false, null,
Arrays.asList(StatsManager.T_SITE, StatsManager.T_USER), null, false, 0);
assertNotNull(stats);
assertEquals(1, stats.size());
statsCount = M_sm.getResourceStatsRowCount(null, null, null,
null, null, null, false, Arrays.asList(StatsManager.T_SITE, StatsManager.T_USER));
assertEquals(1, statsCount);
stats = M_sm.getResourceStats(null, null, null,
null, null, null, false, null,
Arrays.asList(StatsManager.T_SITE, StatsManager.T_RESOURCE), null, false, 0);
assertNotNull(stats);
assertEquals(1, stats.size());
statsCount = M_sm.getResourceStatsRowCount(null, null, null,
null, null, null, false, Arrays.asList(StatsManager.T_SITE, StatsManager.T_RESOURCE));
assertEquals(1, statsCount);
stats = M_sm.getResourceStats(null, null, null,
null, null, null, false, null,
Arrays.asList(StatsManager.T_SITE), null, false, 0);
assertNotNull(stats);
assertEquals(1, stats.size());
statsCount = M_sm.getResourceStatsRowCount(null, null, null,
null, null, null, false, Arrays.asList(StatsManager.T_SITE));
assertEquals(1, statsCount);
// group by: user
stats = M_sm.getResourceStats(FakeData.SITE_A_ID, null, null,
null, null, null, false, null,
Arrays.asList(StatsManager.T_USER), null, false, 0);
assertNotNull(stats);
assertEquals(1, stats.size());
statsCount = M_sm.getResourceStatsRowCount(FakeData.SITE_A_ID, null, null,
null, null, null, false, Arrays.asList(StatsManager.T_USER));
assertEquals(1, statsCount);
// group by: resource
stats = M_sm.getResourceStats(FakeData.SITE_A_ID, null, Arrays.asList("/content/group/"+FakeData.SITE_A_ID+"/resource_id"),
null, null, null, false, null,
Arrays.asList(StatsManager.T_RESOURCE), null, false, 0);
assertNotNull(stats);
assertEquals(1, stats.size());
statsCount = M_sm.getResourceStatsRowCount(FakeData.SITE_A_ID, null, Arrays.asList("/content/group/"+FakeData.SITE_A_ID+"/resource_id"),
null, null, null, false, Arrays.asList(StatsManager.T_RESOURCE));
assertEquals(1, statsCount);
// group by: resource action
stats = M_sm.getResourceStats(FakeData.SITE_A_ID, ReportManager.WHAT_RESOURCES_ACTION_NEW, null,
null, null, null, false, null,
Arrays.asList(StatsManager.T_RESOURCE_ACTION), null, false, 0);
assertNotNull(stats);
assertEquals(1, stats.size());
statsCount = M_sm.getResourceStatsRowCount(FakeData.SITE_A_ID, ReportManager.WHAT_RESOURCES_ACTION_NEW, null,
null, null, null, false, Arrays.asList(StatsManager.T_RESOURCE_ACTION));
assertEquals(1, statsCount);
// group by: date
stats = M_sm.getResourceStats(FakeData.SITE_A_ID, null, null,
null, null, null, false, null,
Arrays.asList(StatsManager.T_DATE), null, false, 0);
assertNotNull(stats);
assertEquals(2, stats.size());
statsCount = M_sm.getResourceStatsRowCount(FakeData.SITE_A_ID, null, null,
null, null, null, false, Arrays.asList(StatsManager.T_DATE));
assertEquals(2, statsCount);
// group by: datemonth
stats = M_sm.getResourceStats(FakeData.SITE_A_ID, null, null,
null, null, null, false, null,
Arrays.asList(StatsManager.T_DATEMONTH), null, false, 0);
assertNotNull(stats);
assertTrue(stats.size() <= 2);
statsCount = M_sm.getResourceStatsRowCount(FakeData.SITE_A_ID, null, null,
null, null, null, false, Arrays.asList(StatsManager.T_DATEMONTH));
assertTrue(statsCount <= 2);
// group by: dateyear
stats = M_sm.getResourceStats(FakeData.SITE_A_ID, null, null,
null, null, null, false, null,
Arrays.asList(StatsManager.T_DATEYEAR), null, false, 0);
assertNotNull(stats);
assertTrue(stats.size() <= 2);
statsCount = M_sm.getResourceStatsRowCount(FakeData.SITE_A_ID, null, null,
null, null, null, false, Arrays.asList(StatsManager.T_DATEYEAR));
assertTrue(statsCount <= 2);
// group by: lastdate
stats = M_sm.getResourceStats(FakeData.SITE_A_ID, null, null,
null, null, null, false, null,
Arrays.asList(StatsManager.T_LASTDATE), null, false, 0);
assertNotNull(stats);
assertEquals(1, stats.size());
statsCount = M_sm.getResourceStatsRowCount(FakeData.SITE_A_ID, null, null,
null, null, null, false, Arrays.asList(StatsManager.T_LASTDATE));
assertEquals(1, statsCount);
}
public void testLargeMembershipSite() {
// For development only: this tests take too long!
if(enableLargeMembershipTest) {
// sample data
M_sum.collectEvents(getSampleData2());
// all users list
List<String> allUsers = new ArrayList<String>();
for(int i=0; i<FakeData.SITE_C_USER_COUNT; i++) {
allUsers.add(FakeData.USER_ID_PREFIX + (i+1));
}
// test visits
{
List<Stat> stats = M_sm.getEventStats(null, Arrays.asList(StatsManager.SITEVISIT_EVENTID),
null, null, allUsers, false, null,
null, null, false, 0);
assertNotNull(stats);
assertEquals(FakeData.SITE_C_USER_COUNT / 2, stats.size());
int statsCount = M_sm.getEventStatsRowCount(null, Arrays.asList(StatsManager.SITEVISIT_EVENTID),
null, null, allUsers, false, null);
assertEquals(FakeData.SITE_C_USER_COUNT / 2, statsCount);
}
// test activity
{
List<Stat> stats = M_sm.getEventStats(null, Arrays.asList(FakeData.EVENT_CHATNEW),
null, null, allUsers, false, null,
null, null, false, 0);
assertNotNull(stats);
assertEquals(FakeData.SITE_C_USER_COUNT / 2, stats.size());
int statsCount = M_sm.getEventStatsRowCount(null, Arrays.asList(FakeData.EVENT_CHATNEW),
null, null, allUsers, false, null);
assertEquals(FakeData.SITE_C_USER_COUNT / 2, statsCount);
}
// test resources
{
List<Stat> stats = M_sm.getResourceStats(null, null, null,
null, null, allUsers, false, null,
null, null, false, 0);
assertNotNull(stats);
assertEquals(FakeData.SITE_C_USER_COUNT, stats.size());
int statsCount = M_sm.getResourceStatsRowCount(null, null, null,
null, null, allUsers, false, null);
assertEquals(FakeData.SITE_C_USER_COUNT, statsCount);
}
}
}
}