public List<MessageRange> batchMessages(MessageRange set, BatchedOperation batchedOperation) throws MailboxException { if (moveBatchSize > 0) { List<MessageRange> movedRanges = new ArrayList<>(); for (MessageRange messageRange : set.split(moveBatchSize)) { movedRanges.addAll(batchedOperation.execute(messageRange)); } return movedRanges; } else { return batchedOperation.execute(set); } }
@Test public void splitUnboundedRangeShouldReturnTheSameRange() { MessageRange from = MessageRange.from(MessageUid.of(1)); List<MessageRange> ranges = from.split(2); assertThat(ranges).containsExactly(MessageRange.from(MessageUid.of(1))); }
@Test public void splitASingletonRangeShouldReturnASingleRange() { MessageRange one = MessageUid.of(1).toRange(); List<MessageRange> ranges = one.split(2); assertThat(ranges).containsExactly(MessageUid.of(1).toRange()); }
@Test public void splitTenElementsRangeShouldReturn4Ranges() { MessageRange range = MessageRange.range(MessageUid.of(1),MessageUid.of(10)); List<MessageRange> ranges = range.split(3); assertThat(ranges).containsExactly( MessageRange.range(MessageUid.of(1), MessageUid.of(3)), MessageRange.range(MessageUid.of(4), MessageUid.of(6)), MessageRange.range(MessageUid.of(7), MessageUid.of(9)), MessageUid.of(10).toRange()); }