@Test public void testBasicQueryFirstPage() { ArgumentCaptor<Query> queryContainer = ArgumentCaptor.forClass(Query.class); when(template.find(queryContainer.capture(), eq(String.class))).thenReturn(new ArrayList<>()); assertFalse(reader.doPageRead().hasNext()); Query query = queryContainer.getValue(); assertEquals(50, query.getLimit()); assertEquals(0, query.getSkip()); assertEquals("{ }", query.getQueryObject().toJson()); assertEquals("{ \"name\" : -1 }", query.getSortObject().toJson()); }
@Test public void testBasicQuerySecondPage() { reader.page = 2; ArgumentCaptor<Query> queryContainer = ArgumentCaptor.forClass(Query.class); when(template.find(queryContainer.capture(), eq(String.class))).thenReturn(new ArrayList<>()); assertFalse(reader.doPageRead().hasNext()); Query query = queryContainer.getValue(); assertEquals(50, query.getLimit()); assertEquals(100, query.getSkip()); assertEquals("{ }", query.getQueryObject().toJson()); assertEquals("{ \"name\" : -1 }", query.getSortObject().toJson()); assertTrue(query.getFieldsObject().isEmpty()); }
@Test public void testQueryObject() throws Exception { reader = new MongoItemReader<>(); reader.setTemplate(template); Query query = new Query() .with(Sort.by(new Order(Sort.Direction.ASC, "_id"))); reader.setQuery(query); reader.setTargetType(String.class); reader.afterPropertiesSet(); ArgumentCaptor<Query> queryContainer = ArgumentCaptor.forClass(Query.class); when(template.find(queryContainer.capture(), eq(String.class))).thenReturn(new ArrayList<>()); assertFalse(reader.doPageRead().hasNext()); Query actualQuery = queryContainer.getValue(); assertFalse(reader.doPageRead().hasNext()); assertEquals(10, actualQuery.getLimit()); assertEquals(0, actualQuery.getSkip()); }
@SuppressWarnings("serial") @Test public void testQueryWithParameters() { reader.setParameterValues(new ArrayList<Object>(){{ add("foo"); }}); reader.setQuery("{ name : ?0 }"); ArgumentCaptor<Query> queryContainer = ArgumentCaptor.forClass(Query.class); when(template.find(queryContainer.capture(), eq(String.class))).thenReturn(new ArrayList<>()); assertFalse(reader.doPageRead().hasNext()); Query query = queryContainer.getValue(); assertEquals(50, query.getLimit()); assertEquals(0, query.getSkip()); assertEquals("{ \"name\" : \"foo\" }", query.getQueryObject().toJson()); assertEquals("{ \"name\" : -1 }", query.getSortObject().toJson()); }
@Test public void testQueryWithHint() { reader.setHint("{ $natural : 1}"); ArgumentCaptor<Query> queryContainer = ArgumentCaptor.forClass(Query.class); when(template.find(queryContainer.capture(), eq(String.class))).thenReturn(new ArrayList<>()); assertFalse(reader.doPageRead().hasNext()); Query query = queryContainer.getValue(); assertEquals(50, query.getLimit()); assertEquals(0, query.getSkip()); assertEquals("{ }", query.getQueryObject().toJson()); assertEquals("{ \"name\" : -1 }", query.getSortObject().toJson()); assertEquals("{ $natural : 1}", query.getHint()); }
@Test public void testQueryObjectWithCollection() throws Exception { reader = new MongoItemReader<>(); reader.setTemplate(template); Query query = new Query() .with(Sort.by(new Order(Sort.Direction.ASC, "_id"))); reader.setQuery(query); reader.setTargetType(String.class); reader.setCollection("collection"); reader.afterPropertiesSet(); ArgumentCaptor<Query> queryContainer = ArgumentCaptor.forClass(Query.class); ArgumentCaptor<String> stringContainer = ArgumentCaptor.forClass(String.class); when(template.find(queryContainer.capture(), eq(String.class), stringContainer.capture())).thenReturn(new ArrayList<>()); assertFalse(reader.doPageRead().hasNext()); Query actualQuery = queryContainer.getValue(); assertFalse(reader.doPageRead().hasNext()); assertEquals(10, actualQuery.getLimit()); assertEquals(0, actualQuery.getSkip()); assertEquals("collection", stringContainer.getValue()); } }
@Test public void testQueryObjectWithIgnoredPageSize() throws Exception { reader = new MongoItemReader<>(); reader.setTemplate(template); Query query = new Query() .with(Sort.by(new Order(Sort.Direction.ASC, "_id"))) .with(PageRequest.of(0, 50)); reader.setQuery(query); reader.setTargetType(String.class); reader.afterPropertiesSet(); ArgumentCaptor<Query> queryContainer = ArgumentCaptor.forClass(Query.class); when(template.find(queryContainer.capture(), eq(String.class))).thenReturn(new ArrayList<>()); assertFalse(reader.doPageRead().hasNext()); Query actualQuery = queryContainer.getValue(); assertFalse(reader.doPageRead().hasNext()); assertEquals(10, actualQuery.getLimit()); assertEquals(0, actualQuery.getSkip()); }
@Test public void testQueryObjectWithPageSize() throws Exception { reader = new MongoItemReader<>(); reader.setTemplate(template); Query query = new Query() .with(Sort.by(new Order(Sort.Direction.ASC, "_id"))) .with(PageRequest.of(30, 50)); reader.setQuery(query); reader.setTargetType(String.class); reader.setPageSize(100); reader.afterPropertiesSet(); ArgumentCaptor<Query> queryContainer = ArgumentCaptor.forClass(Query.class); when(template.find(queryContainer.capture(), eq(String.class))).thenReturn(new ArrayList<>()); assertFalse(reader.doPageRead().hasNext()); Query actualQuery = queryContainer.getValue(); assertFalse(reader.doPageRead().hasNext()); assertEquals(100, actualQuery.getLimit()); assertEquals(0, actualQuery.getSkip()); }
@SuppressWarnings("serial") @Test public void testQueryWithCollection() { reader.setParameterValues(new ArrayList<Object>(){{ add("foo"); }}); reader.setQuery("{ name : ?0 }"); reader.setCollection("collection"); ArgumentCaptor<Query> queryContainer = ArgumentCaptor.forClass(Query.class); ArgumentCaptor<String> collectionContainer = ArgumentCaptor.forClass(String.class); when(template.find(queryContainer.capture(), eq(String.class), collectionContainer.capture())).thenReturn(new ArrayList<>()); assertFalse(reader.doPageRead().hasNext()); Query query = queryContainer.getValue(); assertEquals(50, query.getLimit()); assertEquals(0, query.getSkip()); assertEquals("{ \"name\" : \"foo\" }", query.getQueryObject().toJson()); assertEquals("{ \"name\" : -1 }", query.getSortObject().toJson()); assertEquals("collection", collectionContainer.getValue()); }
@Test public void testQueryWithFields() { reader.setFields("{name : 1, age : 1, _id: 0}"); ArgumentCaptor<Query> queryContainer = ArgumentCaptor.forClass(Query.class); when(template.find(queryContainer.capture(), eq(String.class))).thenReturn(new ArrayList<>()); assertFalse(reader.doPageRead().hasNext()); Query query = queryContainer.getValue(); assertEquals(50, query.getLimit()); assertEquals(0, query.getSkip()); assertEquals("{ }", query.getQueryObject().toJson()); assertEquals("{ \"name\" : -1 }", query.getSortObject().toJson()); assertEquals(1, query.getFieldsObject().get("name")); assertEquals(1, query.getFieldsObject().get("age")); assertEquals(0, query.getFieldsObject().get("_id")); }