Skip to content
Snippets Groups Projects
Commit 0518aba2 authored by Simon Urli's avatar Simon Urli
Browse files

XWIKI-19212: recomputeAverageRating cannot recompute a like count to 0

  * Fix case when there's no vote
  * Ensure to cover it with test case
parent 25fde477
No related branches found
No related tags found
No related merge requests found
......@@ -554,7 +554,7 @@ public AverageRating recomputeAverageRating(EntityReference entityReference) thr
offsetIndex += BULK_OPERATIONS_BATCH_SIZE;
} while (!ratings.isEmpty());
float newAverage = Float.valueOf(sumOfVotes) / numberOfVotes;
float newAverage = (numberOfVotes > 0) ? Float.valueOf(sumOfVotes) / numberOfVotes : 0;
return this.getAverageRatingManager().resetAverageRating(entityReference, newAverage, numberOfVotes);
} else {
throw new RatingsException(AVERAGE_RATING_NOT_ENABLED_ERROR_MESSAGE);
......
......@@ -822,6 +822,47 @@ void recomputeAverageRating() throws Exception
assertEquals(averageRating, this.manager.recomputeAverageRating(inputReference));
}
@Test
void recomputeAverageRatings_noVote() throws Exception
{
when(this.configuration.isAverageStored()).thenReturn(true);
when(this.solr.getClient(RatingSolrCoreInitializer.DEFAULT_RATINGS_SOLR_CORE)).thenReturn(this.solrClient);
EntityReference inputReference = mock(EntityReference.class);
when(inputReference.toString()).thenReturn("document:Input.Reference");
String managerId = "myManager";
this.manager.setIdentifier(managerId);
String filterQuery = String.format("filter(%s:%s) AND filter(%s:%s)",
RatingQueryField.ENTITY_REFERENCE.getFieldName(), "document\\:Input.Reference",
RatingQueryField.MANAGER_ID.getFieldName(), managerId);
SolrQuery expectedQuery = new SolrQuery()
.addFilterQuery(filterQuery)
.setRows(100)
.setStart(0)
.setSort(RatingQueryField.CREATED_DATE.getFieldName(), SolrQuery.ORDER.asc);
QueryResponse response1 = mock(QueryResponse.class);
when(solrClient.query(any())).then(invocationOnMock -> {
SolrQuery givenQuery = invocationOnMock.getArgument(0);
QueryResponse result = null;
assertEquals(expectedQuery.getQuery(), givenQuery.getQuery());
assertArrayEquals(expectedQuery.getFilterQueries(), givenQuery.getFilterQueries());
assertEquals(expectedQuery.getRows(), givenQuery.getRows());
assertEquals(expectedQuery.getStart(), givenQuery.getStart());
assertEquals(expectedQuery.getSorts(), givenQuery.getSorts());
result = response1;
return result;
});
// empty response
when(response1.getResults()).thenReturn(new SolrDocumentList());
AverageRating averageRating = mock(AverageRating.class);
when(this.averageRatingManager.resetAverageRating(inputReference, 0, 0)).thenReturn(averageRating);
assertEquals(averageRating, this.manager.recomputeAverageRating(inputReference));
}
@Test
void removeRatings() throws Exception
{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment