CosmosDBDocumentStoreReader implements DocumentStoreReader<TimelineDoc> { @VisibleForTesting String addPredicates(TimelineReaderContext context, String collectionName, StringBuilder queryStrBuilder) { boolean hasPredicate = false; queryStrBuilder.append(WHERE_CLAUSE); if (!DocumentStoreUtils.isNullOrEmpty(context.getClusterId())) { hasPredicate = true; queryStrBuilder.append(String.format(CONTAINS_FUNC_FOR_ID, context.getClusterId())); } if (!DocumentStoreUtils.isNullOrEmpty(context.getUserId())) { hasPredicate = true; queryStrBuilder.append(AND_OPERATOR) .append(String.format(CONTAINS_FUNC_FOR_ID, context.getUserId())); } if (!DocumentStoreUtils.isNullOrEmpty(context.getFlowName())) { hasPredicate = true; queryStrBuilder.append(AND_OPERATOR) .append(String.format(CONTAINS_FUNC_FOR_ID, context.getFlowName())); } if (!DocumentStoreUtils.isNullOrEmpty(context.getAppId())) { hasPredicate = true; queryStrBuilder.append(AND_OPERATOR) .append(String.format(CONTAINS_FUNC_FOR_ID, context.getAppId())); } if (!DocumentStoreUtils.isNullOrEmpty(context.getEntityId())) { hasPredicate = true; queryStrBuilder.append(AND_OPERATOR) .append(String.format(CONTAINS_FUNC_FOR_ID, context.getEntityId())); } if (context.getFlowRunId() != null) { hasPredicate = true; queryStrBuilder.append(AND_OPERATOR) .append(String.format(CONTAINS_FUNC_FOR_ID, context.getFlowRunId())); } if (!DocumentStoreUtils.isNullOrEmpty(context.getEntityType())){ hasPredicate = true; queryStrBuilder.append(AND_OPERATOR) .append(String.format(CONTAINS_FUNC_FOR_TYPE, context.getEntityType())); } if (hasPredicate) { queryStrBuilder.append(ORDER_BY_CLAUSE); LOG.debug("CosmosDB Sql Query with predicates : {}", queryStrBuilder); return queryStrBuilder.toString(); } throw new IllegalArgumentException("The TimelineReaderContext does not " + "have enough information to query documents for Collection : " + collectionName); } CosmosDBDocumentStoreReader(Configuration conf); @Override List<TimelineDoc> readDocumentList(String collectionName,
      TimelineReaderContext context, final Class<TimelineDoc> timelineDocClass,
      long size); @Override Set<String> fetchEntityTypes(String collectionName,
      TimelineReaderContext context); @Override TimelineDoc readDocument(String collectionName, TimelineReaderContext
      context, final Class<TimelineDoc> timelineDocClass); @Override synchronized void close();  }
@Test(expected = IllegalArgumentException.class) public void testFailureFOnEmptyPredicates() { PowerMockito.when(DocumentStoreUtils.isNullOrEmpty( ArgumentMatchers.any())) .thenReturn(Boolean.TRUE); CosmosDBDocumentStoreReader cosmosDBDocumentStoreReader = new CosmosDBDocumentStoreReader(null); cosmosDBDocumentStoreReader.addPredicates( new TimelineReaderContext(null, "", "", null, "", "", null), "DummyCollection", new StringBuilder()); }