/** * Values to be substituted in for each of the parameters in the query. * * @param parameterValues values * @return The current instance of the builder * @see MongoItemReader#setParameterValues(List) */ public MongoItemReaderBuilder<T> parameterValues(Object... parameterValues) { return parameterValues(Arrays.asList(parameterValues)); }
private MongoItemReaderBuilder<String> getBasicBuilder() { return new MongoItemReaderBuilder<String>().template(this.template) .targetType(String.class) .jsonQuery("{ }") .sorts(this.sortOptions) .name("mongoReaderTest") .pageSize(50); } }
@Test public void testCollection() throws Exception { MongoItemReader<String> reader = getBasicBuilder() .parameterValues(Collections.singletonList("foo")) .jsonQuery("{ name : ?0 }") .collection("collection") .build(); ArgumentCaptor<String> collectionContainer = ArgumentCaptor.forClass(String.class); when(this.template.find(this.queryContainer.capture(), eq(String.class), collectionContainer.capture())) .thenReturn(new ArrayList<>()); assertNull("reader should not return result", reader.read()); Query query = this.queryContainer.getValue(); assertEquals("{ \"name\" : \"foo\" }", query.getQueryObject().toJson()); assertEquals("{ \"name\" : -1 }", query.getSortObject().toJson()); assertEquals("collection", collectionContainer.getValue()); }
@Test public void testHint() throws Exception { MongoItemReader<String> reader = getBasicBuilder() .hint("{ $natural : 1}") .build(); when(this.template.find(this.queryContainer.capture(), eq(String.class))).thenReturn(new ArrayList<>()); assertNull("reader should not return result", reader.read()); Query query = this.queryContainer.getValue(); assertEquals("{ $natural : 1}", query.getHint()); }
@Test public void testFields() throws Exception { MongoItemReader<String> reader = getBasicBuilder() .fields("{name : 1, age : 1, _id: 0}") .build(); when(this.template.find(this.queryContainer.capture(), eq(String.class))).thenReturn(new ArrayList<>()); assertNull("reader should not return result", reader.read()); Query query = this.queryContainer.getValue(); assertEquals(1, query.getFieldsObject().get("name")); assertEquals(1, query.getFieldsObject().get("age")); assertEquals(0, query.getFieldsObject().get("_id")); }
private void validateExceptionMessage(MongoItemReaderBuilder<String> builder, String message) { try { builder.build(); fail("Exception should have been thrown"); } catch (IllegalArgumentException iae) { assertEquals("IllegalArgumentException message did not match the expected result.", message, iae.getMessage()); } catch (IllegalStateException ise) { assertEquals("IllegalStateException message did not match the expected result.", message, ise.getMessage()); } }
@Test public void testVarargs() throws Exception { MongoItemReader<String> reader = getBasicBuilder() .parameterValues("foo") .jsonQuery("{ name : ?0 }") .collection("collection") .build(); ArgumentCaptor<String> collectionContainer = ArgumentCaptor.forClass(String.class); when(this.template.find(this.queryContainer.capture(), eq(String.class), collectionContainer.capture())) .thenReturn(new ArrayList<>()); assertNull("reader should not return result", reader.read()); Query query = this.queryContainer.getValue(); assertEquals("{ \"name\" : \"foo\" }", query.getQueryObject().toJson()); assertEquals("{ \"name\" : -1 }", query.getSortObject().toJson()); assertEquals("collection", collectionContainer.getValue()); }
@Test public void testBasic() throws Exception { MongoItemReader<String> reader = getBasicBuilder().build(); when(template.find(this.queryContainer.capture(), eq(String.class))).thenReturn(new ArrayList<>()); assertNull("reader should not return result", reader.read()); Query query = this.queryContainer.getValue(); assertEquals(50, query.getLimit()); assertEquals(0, query.getSkip()); assertEquals("{ }", query.getQueryObject().toJson()); assertEquals("{ \"name\" : -1 }", query.getSortObject().toJson()); }
@Test public void testNullQuery() { validateExceptionMessage(new MongoItemReaderBuilder<String>().template(this.template) .targetType(String.class) .sorts(this.sortOptions) .name("mongoReaderTest") .pageSize(50), "A query is required"); }
@Test public void testNullSorts() { validateExceptionMessage(new MongoItemReaderBuilder<String>().template(this.template) .targetType(String.class) .jsonQuery("{ }") .name("mongoReaderTest") .pageSize(50), "sorts map is required."); }
@Test public void testNullTemplate() { validateExceptionMessage(new MongoItemReaderBuilder<String>().targetType(String.class) .jsonQuery("{ }") .sorts(this.sortOptions) .name("mongoReaderTest") .pageSize(50), "template is required."); }
@Test public void testNullName() { validateExceptionMessage(new MongoItemReaderBuilder<String>().template(this.template) .targetType(String.class) .jsonQuery("{ }") .sorts(this.sortOptions) .pageSize(50), "A name is required when saveState is set to true"); }