MultiIndexDao implements IndexDao { @Override public Document getLatest(final String guid, String sensorType) throws IOException { List<DocumentContainer> output = indices .parallelStream() .map(dao -> getLatest(dao, guid, sensorType)) .collect(Collectors.toList()); return getLatestDocument(output); } MultiIndexDao(IndexDao... composedDao);  MultiIndexDao(Iterable<IndexDao> composedDao);  MultiIndexDao(Iterable<IndexDao> composedDao, Function<IndexDao, IndexDao> decoratorTransformation); @Override Document update(final Document update, Optional<String> index); @Override Map<Document, Optional<String>> batchUpdate(Map<Document, Optional<String>> updates); @Override Map<String, FieldType> getColumnMetadata(List<String> in); @Override Document addCommentToAlert(CommentAddRemoveRequest request); @Override Document addCommentToAlert(CommentAddRemoveRequest request, Document latest); @Override Document removeCommentFromAlert(CommentAddRemoveRequest request); @Override Document removeCommentFromAlert(CommentAddRemoveRequest request, Document latest); @Override SearchResponse search(SearchRequest searchRequest); @Override GroupResponse group(GroupRequest groupRequest); @Override void init(AccessConfig config); @Override Document getLatest(final String guid, String sensorType); @Override Iterable<Document> getAllLatest(List<GetRequest> getRequests); List<IndexDao> getIndices();  }
@Test public void getLatestShouldReturnLatestAlert() throws Exception { CommentAddRemoveRequest request = new CommentAddRemoveRequest(); request.setGuid("guid"); when(dao1.getLatest("guid", "bro")).thenReturn(document1); when(dao2.getLatest("guid", "bro")).thenReturn(document2); Document expected = new Document(new HashMap<>(), "guid", "bro", 2L); assertEquals(expected, multiIndexDao.getLatest("guid", "bro")); }