Author: mfranklin
Date: Tue Dec 18 01:29:38 2012
New Revision: 1423245
URL: http://svn.apache.org/viewvc?rev=1423245&view=rev
Log:
Fixed issues with widget statistics
Modified:
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbMapReduceStatisticsAggregator.java
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/util/CollectionNames.java
rave/branches/mongo/rave-components/rave-mongodb/src/test/java/org/apache/rave/portal/repository/impl/MonogoDbMapReduceStatisticsAggregatorTest.java
Modified:
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbMapReduceStatisticsAggregator.java
URL:
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbMapReduceStatisticsAggregator.java?rev=1423245&r1=1423244&r2=1423245&view=diff
==============================================================================
---
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbMapReduceStatisticsAggregator.java
(original)
+++
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/impl/MongoDbMapReduceStatisticsAggregator.java
Tue Dec 18 01:29:38 2012
@@ -20,9 +20,6 @@
package org.apache.rave.portal.repository.impl;
import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-import org.apache.rave.portal.model.MongoDbPage;
-import org.apache.rave.portal.model.Page;
import org.apache.rave.portal.model.WidgetRatingsMapReduceResult;
import org.apache.rave.portal.model.WidgetUsersMapReduceResult;
import org.apache.rave.portal.model.util.WidgetStatistics;
@@ -31,21 +28,15 @@ import org.springframework.beans.factory
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.mapreduce.MapReduceOptions;
import org.springframework.data.mongodb.core.mapreduce.MapReduceResults;
-import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
-import static
org.apache.rave.portal.repository.util.CollectionNames.PAGE_COLLECTION;
-import static
org.apache.rave.portal.repository.util.CollectionNames.STATS_COLLECTION;
-import static
org.apache.rave.portal.repository.util.CollectionNames.WIDGET_COLLECTION;
-import static org.springframework.data.mongodb.core.query.Criteria.where;
-import static org.springframework.data.mongodb.core.query.Query.query;
+import static org.apache.rave.portal.repository.util.CollectionNames.*;
/**
* Provides Statistics via MapReduce jobs
@@ -66,28 +57,25 @@ public class MongoDbMapReduceStatisticsA
this.mongoOperations = mongoOperations;
}
public WidgetStatistics getWidgetStatistics(long widget_id, long user_id) {
- Query statsQuery = query(where("widgetId").is(widget_id));
- MapReduceResults<WidgetRatingsMapReduceResult> widgetStats =
mongoOperations.mapReduce(statsQuery, WIDGET_COLLECTION, RATINGS_MAP,
RATINGS_REDUCE, WidgetRatingsMapReduceResult.class);
- List<MongoDbPage> pages =
mongoOperations.find(query(where("regions").elemMatch(where("regionWidgets").elemMatch(where("widgetId").is(widget_id)))),
MongoDbPage.class, PAGE_COLLECTION);
-
- int userCount = getUserCount(pages).size();
- switch (widgetStats.getCounts().getOutputCount()) {
- case 0:
- WidgetStatistics stats = new WidgetStatistics();
- stats.setTotalUserCount(userCount);
- return stats;
- case 1:
- WidgetRatingsMapReduceResult statsResult =
widgetStats.iterator().next();
- return createWidgetStatisticsFromResults(user_id, statsResult,
userCount);
- default:
- throw new IllegalStateException("Invalid results returned from
Map/Reduce");
+ WidgetUsersMapReduceResult userResult =
mongoOperations.findById(widget_id, WidgetUsersMapReduceResult.class,
WIDGET_USERS);
+ WidgetRatingsMapReduceResult ratingResult =
mongoOperations.findById(widget_id, WidgetRatingsMapReduceResult.class,
WIDGET_RATINGS);
+
+ int userCount = userResult == null ? 0 : userResult.getValue().size();
+ WidgetStatistics stats;
+ if(ratingResult == null) {
+ stats = new WidgetStatistics();
+ stats.setUserRating(-1);
+ } else {
+ stats = createWidgetStatisticsFromResults(user_id, ratingResult);
}
+ stats.setTotalUserCount(userCount);
+ return stats;
}
@Override
public Map<Long, WidgetStatistics> getAllWidgetStatistics(long userId) {
- List<WidgetRatingsMapReduceResult> widgetStats =
mongoOperations.findAll(WidgetRatingsMapReduceResult.class, STATS_COLLECTION);
- List<WidgetUsersMapReduceResult> widgetUsers =
mongoOperations.findAll(WidgetUsersMapReduceResult.class, STATS_COLLECTION);
+ List<WidgetRatingsMapReduceResult> widgetStats =
mongoOperations.findAll(WidgetRatingsMapReduceResult.class, WIDGET_RATINGS);
+ List<WidgetUsersMapReduceResult> widgetUsers =
mongoOperations.findAll(WidgetUsersMapReduceResult.class, WIDGET_USERS);
Map<Long, WidgetStatistics> stats = Maps.newHashMap();
Map<Long, Integer> userStats = mapUsersResults(widgetUsers);
@@ -111,7 +99,7 @@ public class MongoDbMapReduceStatisticsA
}
public void buildStats() {
- RunStatistics runStats = mongoOperations.findById(ID,
RunStatistics.class, STATS_COLLECTION);
+ RunStatistics runStats = mongoOperations.findById(ID,
RunStatistics.class, OPERATIONS);
if(runStats == null || (System.currentTimeMillis() -
runStats.getRefreshedTimeStamp() > DEFAULT_RESULT_VALIDITY)) {
queryForUserStats();
}
@@ -121,7 +109,7 @@ public class MongoDbMapReduceStatisticsA
synchronized (this) {
executeUsersMapReduce();
executeRatingsMapReduce();
- mongoOperations.save(new RunStatistics(ID,
System.currentTimeMillis()), STATS_COLLECTION);
+ mongoOperations.save(new RunStatistics(ID,
System.currentTimeMillis()), OPERATIONS);
}
}
@@ -135,34 +123,48 @@ public class MongoDbMapReduceStatisticsA
return map;
}
- private MapReduceOptions getOptions() {
- return
MapReduceOptions.options().javaScriptMode(true).outputCollection(STATS_COLLECTION).outputTypeReplace();
+ private MapReduceOptions getOptions(String collection) {
+ return
MapReduceOptions.options().javaScriptMode(true).outputCollection(collection).outputTypeReplace();
}
private MapReduceResults<WidgetUsersMapReduceResult>
executeUsersMapReduce() {
- return mongoOperations.mapReduce(PAGE_COLLECTION, USERS_MAP,
USERS_REDUCE, getOptions(), WidgetUsersMapReduceResult.class);
+ return mongoOperations.mapReduce(PAGE_COLLECTION, USERS_MAP,
USERS_REDUCE, getOptions(WIDGET_USERS), WidgetUsersMapReduceResult.class);
}
private MapReduceResults<WidgetRatingsMapReduceResult>
executeRatingsMapReduce() {
- return mongoOperations.mapReduce(WIDGET_COLLECTION, RATINGS_MAP,
RATINGS_REDUCE, getOptions(), WidgetRatingsMapReduceResult.class);
+ return mongoOperations.mapReduce(WIDGET_COLLECTION, RATINGS_MAP,
RATINGS_REDUCE, getOptions(WIDGET_RATINGS), WidgetRatingsMapReduceResult.class);
}
private void addUserCount(Map<Long, Integer> users, Map<Long,
WidgetStatistics> stats) {
for (Map.Entry<Long, Integer> result : users.entrySet()) {
- WidgetStatistics widgetStatistics = new WidgetStatistics();
- widgetStatistics.setTotalUserCount(result.getValue());
- widgetStatistics.setUserRating(-1);
+ WidgetStatistics widgetStatistics =
getTotalUserOnlyWidgetStatistics(result.getValue());
stats.put(result.getKey(), widgetStatistics);
}
}
private void addCombinedStats(long userId,
List<WidgetRatingsMapReduceResult> widgetStats, Map<Long, Integer> usersMap,
Map<Long, WidgetStatistics> stats) {
for (WidgetRatingsMapReduceResult result : widgetStats) {
- stats.put(result.getId(),
createWidgetStatisticsFromResults(userId, result,
usersMap.get(result.getId())));
+ stats.put(result.getId(),
createWidgetStatisticsFromResults(userId, result));
+ }
+ for(Map.Entry<Long, Integer> id : usersMap.entrySet()) {
+ Integer value = id.getValue();
+ if(stats.containsKey(id.getKey())) {
+ stats.get(id.getKey()).setTotalUserCount(value);
+ } else {
+ WidgetStatistics stat =
getTotalUserOnlyWidgetStatistics(value);
+ stats.put(id.getKey(), stat);
+ }
}
}
- private WidgetStatistics createWidgetStatisticsFromResults(long user_id,
WidgetRatingsMapReduceResult statsResult, Integer userResult) {
+ private WidgetStatistics getTotalUserOnlyWidgetStatistics(Integer value) {
+ WidgetStatistics stat = new WidgetStatistics();
+ stat.setTotalUserCount(value);
+ stat.setUserRating(-1);
+ return stat;
+ }
+
+ private WidgetStatistics createWidgetStatisticsFromResults(long user_id,
WidgetRatingsMapReduceResult statsResult) {
WidgetStatistics statistics = new WidgetStatistics();
WidgetRatingsMapReduceResult.WidgetStatisticsMapReduceResult result =
statsResult.getValue();
if (result != null) {
@@ -172,21 +174,9 @@ public class MongoDbMapReduceStatisticsA
} else {
statistics.setUserRating(-1);
}
- statistics.setTotalUserCount(userResult == null ? 0 : userResult);
return statistics;
}
- private Set<Long> getUserCount(List<MongoDbPage> pages) {
- Set<Long> set = Sets.newHashSet();
- for (Page page : pages) {
- Long id = page.getOwner().getId();
- if (!set.contains(id)) {
- set.add(id);
- }
- }
- return set;
- }
-
public static class RunStatistics {
private String id;
private Long refreshedTimeStamp;
Modified:
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/util/CollectionNames.java
URL:
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/util/CollectionNames.java?rev=1423245&r1=1423244&r2=1423245&view=diff
==============================================================================
---
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/util/CollectionNames.java
(original)
+++
rave/branches/mongo/rave-components/rave-mongodb/src/main/java/org/apache/rave/portal/repository/util/CollectionNames.java
Tue Dec 18 01:29:38 2012
@@ -20,6 +20,7 @@
package org.apache.rave.portal.repository.util;
public class CollectionNames {
+
private CollectionNames() {}
public static final String WIDGET_COLLECTION = "widget";
@@ -34,5 +35,7 @@ public class CollectionNames {
public static final String OAUTH_CONSUMER_COLLECTION =
"oauthConsumerStore";
public static final String OAUTH_TOKEN_COLLECTION = "oauthTokenInfo";
public static final String PAGE_LAYOUT_COLLECTION = "pageLayout";
- public static final String STATS_COLLECTION = "statistics";
+ public static final String WIDGET_RATINGS = "rating_statistics";
+ public static final String WIDGET_USERS = "user_statistics";
+ public static final String OPERATIONS = "ops";
}
Modified:
rave/branches/mongo/rave-components/rave-mongodb/src/test/java/org/apache/rave/portal/repository/impl/MonogoDbMapReduceStatisticsAggregatorTest.java
URL:
http://svn.apache.org/viewvc/rave/branches/mongo/rave-components/rave-mongodb/src/test/java/org/apache/rave/portal/repository/impl/MonogoDbMapReduceStatisticsAggregatorTest.java?rev=1423245&r1=1423244&r2=1423245&view=diff
==============================================================================
---
rave/branches/mongo/rave-components/rave-mongodb/src/test/java/org/apache/rave/portal/repository/impl/MonogoDbMapReduceStatisticsAggregatorTest.java
(original)
+++
rave/branches/mongo/rave-components/rave-mongodb/src/test/java/org/apache/rave/portal/repository/impl/MonogoDbMapReduceStatisticsAggregatorTest.java
Tue Dec 18 01:29:38 2012
@@ -21,21 +21,19 @@ package org.apache.rave.portal.repositor
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
-import org.apache.rave.portal.model.*;
-import org.apache.rave.portal.model.impl.UserImpl;
+import org.apache.rave.portal.model.WidgetRatingsMapReduceResult;
+import org.apache.rave.portal.model.WidgetUsersMapReduceResult;
import org.apache.rave.portal.model.util.WidgetStatistics;
import org.apache.rave.portal.repository.StatisticsAggregator;
import org.apache.rave.portal.repository.util.CollectionNames;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.springframework.data.mongodb.core.MongoOperations;
-import org.springframework.data.mongodb.core.mapreduce.MapReduceCounts;
import org.springframework.data.mongodb.core.mapreduce.MapReduceOptions;
-import org.springframework.data.mongodb.core.mapreduce.MapReduceResults;
-import org.springframework.data.mongodb.core.query.Query;
-import java.util.*;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
import static
org.apache.rave.portal.repository.impl.MongoDbMapReduceStatisticsAggregator.*;
import static org.apache.rave.portal.repository.util.CollectionNames.*;
@@ -43,9 +41,6 @@ import static org.easymock.EasyMock.*;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.springframework.data.mongodb.core.query.Criteria.where;
-import static org.springframework.data.mongodb.core.query.Query.query;
public class MonogoDbMapReduceStatisticsAggregatorTest {
@@ -59,66 +54,6 @@ public class MonogoDbMapReduceStatistics
}
@Test
- public void getStatistics_Case0(){
- long widget_id = 123;
- long user_id = 321;
- Query statsQuery = query(where("widgetId").is(widget_id));
- Query pageQuery =
query(where("regions").elemMatch(where("regionWidgets").elemMatch(where("widgetId").is(widget_id))));
- MapReduceResults<WidgetRatingsMapReduceResult> widgetStats =
createMock(MapReduceResults.class);
- MapReduceCounts mapReduceCounts = createMock(MapReduceCounts.class);
- List<MongoDbPage> pages = new ArrayList<MongoDbPage>();
-
- expect(mongoOperations.mapReduce(statsQuery, WIDGET_COLLECTION,
RATINGS_MAP, RATINGS_REDUCE,
WidgetRatingsMapReduceResult.class)).andReturn(widgetStats);
- expect(mongoOperations.find(pageQuery, MongoDbPage.class,
PAGE_COLLECTION)).andReturn(pages);
- expect(widgetStats.getCounts()).andReturn(mapReduceCounts);
- expect(mapReduceCounts.getOutputCount()).andReturn(0);
- replay(mongoOperations, widgetStats, mapReduceCounts);
-
- WidgetStatistics result = aggregator.getWidgetStatistics(widget_id,
user_id);
-
- assertTrue(result.getTotalUserCount() == 0);
- }
-
- @Test
- public void getStatistics_Case1(){
- long widget_id = 123;
- long user_id = 321;
- Query statsQuery = query(where("widgetId").is(widget_id));
- Query pageQuery =
query(where("regions").elemMatch(where("regionWidgets").elemMatch(where("widgetId").is(widget_id))));
- MapReduceResults<WidgetRatingsMapReduceResult> widgetStats =
createMock(MapReduceResults.class);
- MapReduceCounts mapReduceCounts = createMock(MapReduceCounts.class);
- WidgetRatingsMapReduceResult statsResult = new
WidgetRatingsMapReduceResult();
- List<MongoDbPage> pages = new ArrayList<MongoDbPage>();
- Iterator iter = createMock(Iterator.class);
-
- //add page to pages
- Page page = new MongoDbPage();
- User owner = new UserImpl();
- ((UserImpl)owner).setId(234L);
- page.setOwner(owner);
- pages.add((MongoDbPage)page);
-
- //add same id to cover branches
- Page page_2 = new MongoDbPage();
- User owner_2 = new UserImpl();
- ((UserImpl)owner_2).setId(234L);
- page_2.setOwner(owner_2);
- pages.add((MongoDbPage)page_2);
-
- expect(mongoOperations.mapReduce(statsQuery, WIDGET_COLLECTION,
RATINGS_MAP, RATINGS_REDUCE,
WidgetRatingsMapReduceResult.class)).andReturn(widgetStats);
- expect(mongoOperations.find(pageQuery, MongoDbPage.class,
PAGE_COLLECTION)).andReturn(pages);
- expect(widgetStats.getCounts()).andReturn(mapReduceCounts);
- expect(mapReduceCounts.getOutputCount()).andReturn(1);
- expect(widgetStats.iterator()).andReturn(iter);
- expect(iter.next()).andReturn(statsResult);
- replay(mongoOperations, widgetStats, mapReduceCounts, iter);
-
- WidgetStatistics result = aggregator.getWidgetStatistics(widget_id,
user_id);
-
- assertThat(result.getTotalUserCount(), is(equalTo(1)));
- }
-
- @Test
public void getAllStatistics_valid() {
Map<Long, Long> userRatings = getRatingsMap();
@@ -136,8 +71,8 @@ public class MonogoDbMapReduceStatistics
new WidgetUsersMapReduceResult(26L, users)
);
- expect(mongoOperations.findAll(WidgetRatingsMapReduceResult.class,
CollectionNames.STATS_COLLECTION)).andReturn(ratings);
- expect(mongoOperations.findAll(WidgetUsersMapReduceResult.class,
CollectionNames.STATS_COLLECTION)).andReturn(usersMapReduceResults);
+ expect(mongoOperations.findAll(WidgetRatingsMapReduceResult.class,
CollectionNames.WIDGET_RATINGS)).andReturn(ratings);
+ expect(mongoOperations.findAll(WidgetUsersMapReduceResult.class,
CollectionNames.WIDGET_USERS)).andReturn(usersMapReduceResults);
replay(mongoOperations);
Map<Long, WidgetStatistics> stats =
aggregator.getAllWidgetStatistics(1L);
@@ -170,8 +105,8 @@ public class MonogoDbMapReduceStatistics
new WidgetUsersMapReduceResult(26L, users)
);
- expect(mongoOperations.findAll(WidgetRatingsMapReduceResult.class,
CollectionNames.STATS_COLLECTION)).andReturn(ratings);
- expect(mongoOperations.findAll(WidgetUsersMapReduceResult.class,
CollectionNames.STATS_COLLECTION)).andReturn(usersMapReduceResults);
+ expect(mongoOperations.findAll(WidgetRatingsMapReduceResult.class,
CollectionNames.WIDGET_RATINGS)).andReturn(ratings);
+ expect(mongoOperations.findAll(WidgetUsersMapReduceResult.class,
CollectionNames.WIDGET_USERS)).andReturn(usersMapReduceResults);
replay(mongoOperations);
Map<Long, WidgetStatistics> stats =
aggregator.getAllWidgetStatistics(5L);
@@ -204,8 +139,8 @@ public class MonogoDbMapReduceStatistics
new WidgetUsersMapReduceResult(26L, users)
);
- expect(mongoOperations.findAll(WidgetRatingsMapReduceResult.class,
CollectionNames.STATS_COLLECTION)).andReturn(ratings);
- expect(mongoOperations.findAll(WidgetUsersMapReduceResult.class,
CollectionNames.STATS_COLLECTION)).andReturn(usersMapReduceResults);
+ expect(mongoOperations.findAll(WidgetRatingsMapReduceResult.class,
CollectionNames.WIDGET_RATINGS)).andReturn(ratings);
+ expect(mongoOperations.findAll(WidgetUsersMapReduceResult.class,
CollectionNames.WIDGET_USERS)).andReturn(usersMapReduceResults);
replay(mongoOperations);
Map<Long, WidgetStatistics> stats =
aggregator.getAllWidgetStatistics(5L);
@@ -233,8 +168,8 @@ public class MonogoDbMapReduceStatistics
new WidgetUsersMapReduceResult(26L, users)
);
- expect(mongoOperations.findAll(WidgetRatingsMapReduceResult.class,
CollectionNames.STATS_COLLECTION)).andReturn(ratings);
- expect(mongoOperations.findAll(WidgetUsersMapReduceResult.class,
CollectionNames.STATS_COLLECTION)).andReturn(usersMapReduceResults);
+ expect(mongoOperations.findAll(WidgetRatingsMapReduceResult.class,
CollectionNames.WIDGET_RATINGS)).andReturn(ratings);
+ expect(mongoOperations.findAll(WidgetUsersMapReduceResult.class,
CollectionNames.WIDGET_USERS)).andReturn(usersMapReduceResults);
replay(mongoOperations);
Map<Long, WidgetStatistics> stats =
aggregator.getAllWidgetStatistics(5L);
@@ -250,11 +185,95 @@ public class MonogoDbMapReduceStatistics
}
@Test
- @Ignore
+ public void getWidgetStatistics_valid() {
+ long widget_id = 1L;
+ Map<Long, Long> userMap = Maps.newHashMap();
+ userMap.put(20L, 10L);
+ userMap.put(21L, 10L);
+ WidgetRatingsMapReduceResult.WidgetStatisticsMapReduceResult stats =
new WidgetRatingsMapReduceResult.WidgetStatisticsMapReduceResult(userMap, 20L,
0L);
+ WidgetUsersMapReduceResult usersResult = new
WidgetUsersMapReduceResult(widget_id, userMap);
+ WidgetRatingsMapReduceResult ratingsResult = new
WidgetRatingsMapReduceResult(widget_id, stats);
+
+ expect(mongoOperations.findById(widget_id,
WidgetRatingsMapReduceResult.class, WIDGET_RATINGS)).andReturn(ratingsResult);
+ expect(mongoOperations.findById(widget_id,
WidgetUsersMapReduceResult.class, WIDGET_USERS)).andReturn(usersResult);
+ replay(mongoOperations);
+
+ WidgetStatistics result = aggregator.getWidgetStatistics(widget_id,
21L);
+
+ assertThat(result.getTotalDislike(), is(equalTo(0)));
+ assertThat(result.getTotalLike(), is(equalTo(20)));
+ assertThat(result.getUserRating(), is(equalTo(10)));
+ assertThat(result.getTotalUserCount(), is(equalTo(2)));
+ }
+
+ @Test
+ public void getWidgetStatistics_noUser() {
+ long widget_id = 1L;
+ Map<Long, Long> userMap = Maps.newHashMap();
+ userMap.put(20L, 10L);
+ userMap.put(21L, 10L);
+ WidgetRatingsMapReduceResult.WidgetStatisticsMapReduceResult stats =
new WidgetRatingsMapReduceResult.WidgetStatisticsMapReduceResult(userMap, 20L,
0L);
+ WidgetUsersMapReduceResult usersResult = new
WidgetUsersMapReduceResult(widget_id, userMap);
+ WidgetRatingsMapReduceResult ratingsResult = new
WidgetRatingsMapReduceResult(widget_id, stats);
+
+ expect(mongoOperations.findById(widget_id,
WidgetRatingsMapReduceResult.class, WIDGET_RATINGS)).andReturn(ratingsResult);
+ expect(mongoOperations.findById(widget_id,
WidgetUsersMapReduceResult.class, WIDGET_USERS)).andReturn(usersResult);
+ replay(mongoOperations);
+
+ WidgetStatistics result = aggregator.getWidgetStatistics(widget_id,
23L);
+
+ assertThat(result.getTotalDislike(), is(equalTo(0)));
+ assertThat(result.getTotalLike(), is(equalTo(20)));
+ assertThat(result.getUserRating(), is(equalTo(-1)));
+ assertThat(result.getTotalUserCount(), is(equalTo(2)));
+ }
+
+ @Test
+ public void getWidgetStatistics_nullRatings() {
+ long widget_id = 1L;
+ Map<Long, Long> userMap = Maps.newHashMap();
+ userMap.put(20L, 10L);
+ userMap.put(21L, 10L);
+ WidgetUsersMapReduceResult usersResult = new
WidgetUsersMapReduceResult(widget_id, userMap);
+
+ expect(mongoOperations.findById(widget_id,
WidgetRatingsMapReduceResult.class, WIDGET_RATINGS)).andReturn(null);
+ expect(mongoOperations.findById(widget_id,
WidgetUsersMapReduceResult.class, WIDGET_USERS)).andReturn(usersResult);
+ replay(mongoOperations);
+
+ WidgetStatistics result = aggregator.getWidgetStatistics(widget_id,
21L);
+
+ assertThat(result.getTotalDislike(), is(equalTo(0)));
+ assertThat(result.getTotalLike(), is(equalTo(0)));
+ assertThat(result.getUserRating(), is(equalTo(-1)));
+ assertThat(result.getTotalUserCount(), is(equalTo(2)));
+ }
+
+ @Test
+ public void getWidgetStatistics_nullUsers() {
+ long widget_id = 1L;
+ Map<Long, Long> userMap = Maps.newHashMap();
+ userMap.put(20L, 10L);
+ userMap.put(21L, 10L);
+ WidgetRatingsMapReduceResult.WidgetStatisticsMapReduceResult stats =
new WidgetRatingsMapReduceResult.WidgetStatisticsMapReduceResult(userMap, 20L,
0L);
+ WidgetRatingsMapReduceResult ratingsResult = new
WidgetRatingsMapReduceResult(widget_id, stats);
+
+ expect(mongoOperations.findById(widget_id,
WidgetRatingsMapReduceResult.class, WIDGET_RATINGS)).andReturn(ratingsResult);
+ expect(mongoOperations.findById(widget_id,
WidgetUsersMapReduceResult.class, WIDGET_USERS)).andReturn(null);
+ replay(mongoOperations);
+
+ WidgetStatistics result = aggregator.getWidgetStatistics(widget_id,
21L);
+
+ assertThat(result.getTotalDislike(), is(equalTo(0)));
+ assertThat(result.getTotalLike(), is(equalTo(20)));
+ assertThat(result.getUserRating(), is(equalTo(10)));
+ assertThat(result.getTotalUserCount(), is(equalTo(0)));
+ }
+
+ @Test
public void init_existing() {
- expect(mongoOperations.findById(ID, RunStatistics.class,
STATS_COLLECTION)).andReturn(new RunStatistics(ID, System.currentTimeMillis() -
DEFAULT_RESULT_VALIDITY));
+ expect(mongoOperations.findById(eq(ID), eq(RunStatistics.class),
eq(OPERATIONS))).andReturn(new RunStatistics(ID, System.currentTimeMillis() -
DEFAULT_RESULT_VALIDITY));
setMapReduceExpectations();
- mongoOperations.save(isA(RunStatistics.class), eq(STATS_COLLECTION));
+ mongoOperations.save(isA(RunStatistics.class), eq(OPERATIONS));
expectLastCall();
replay(mongoOperations);
@@ -264,9 +283,9 @@ public class MonogoDbMapReduceStatistics
@Test
public void init_empty() {
- expect(mongoOperations.findById(ID, RunStatistics.class,
STATS_COLLECTION)).andReturn(null);
+ expect(mongoOperations.findById(ID, RunStatistics.class,
OPERATIONS)).andReturn(null);
setMapReduceExpectations();
- mongoOperations.save(isA(RunStatistics.class), eq(STATS_COLLECTION));
+ mongoOperations.save(isA(RunStatistics.class), eq(OPERATIONS));
expectLastCall();
replay(mongoOperations);
@@ -276,16 +295,28 @@ public class MonogoDbMapReduceStatistics
@Test
public void init_tooEarly() {
- expect(mongoOperations.findById(ID, RunStatistics.class,
STATS_COLLECTION)).andReturn(new RunStatistics(ID, System.currentTimeMillis() -
1000L));
+ expect(mongoOperations.findById(ID, RunStatistics.class,
OPERATIONS)).andReturn(new RunStatistics(ID, System.currentTimeMillis() -
1000L));
replay(mongoOperations);
((MongoDbMapReduceStatisticsAggregator)aggregator).buildStats();
verify(mongoOperations);
}
+ @Test
+ public void runStats() {
+ String id = "BOO";
+ long timestamp = 1234L;
+ RunStatistics stats = new RunStatistics();
+ stats.setId(id);
+ stats.setRefreshedTimeStamp(timestamp);
+
+ assertThat(stats.getId(), is(equalTo(id)));
+ assertThat(stats.getRefreshedTimeStamp(), is(equalTo(timestamp)));
+ }
+
private void setMapReduceExpectations() {
expect(mongoOperations.mapReduce(eq(WIDGET_COLLECTION),
eq(RATINGS_MAP), eq(RATINGS_REDUCE), isA(MapReduceOptions.class),
eq(WidgetRatingsMapReduceResult.class))).andReturn(null);
- expect(mongoOperations.mapReduce(eq(PAGE_COLLECTION), eq(USERS_MAP),
eq(USERS_REDUCE), isA(MapReduceOptions.class),
eq(WidgetUsersMapReduceResult.class))).andReturn(null);
+ expect(mongoOperations.mapReduce(eq(PAGE_COLLECTION), eq(USERS_MAP),
eq(USERS_REDUCE), isA(MapReduceOptions.class),
eq(WidgetUsersMapReduceResult.class))).andReturn(null);
}
private Map<Long, Long> getRatingsMap() {