@Test public void testResultsWithMatchAndWhereWithParametersWithSession() throws Exception { Map<String, Object> params = new HashMap<>(); params.put("foo", "bar"); Neo4jItemReader<String> itemReader = new Neo4jItemReaderBuilder<String>() .sessionFactory(this.sessionFactory) .targetType(String.class) .startStatement("n=node(*)") .returnStatement("*") .orderByStatement("n.age") .pageSize(50) .name("foo") .parameterValues(params) .matchStatement("n -- m") .whereStatement("has(n.name)") .returnStatement("m") .build(); when(this.sessionFactory.openSession()).thenReturn(this.session); when(this.session.query(String.class, "START n=node(*) MATCH n -- m WHERE has(n.name) RETURN m ORDER BY n.age SKIP 0 LIMIT 50", params)) .thenReturn(result); when(result.iterator()).thenReturn(Arrays.asList("foo", "bar", "baz").iterator()); assertEquals("The expected value was not returned by reader.", "foo", itemReader.read()); }
@Test public void testCurrentSize() throws Exception { Neo4jItemReader<String> itemReader = new Neo4jItemReaderBuilder<String>() .sessionFactory(this.sessionFactory) .targetType(String.class) .startStatement("n=node(*)") .orderByStatement("n.age") .pageSize(50).name("bar") .returnStatement("m") .currentItemCount(0) .maxItemCount(1) .build(); when(this.sessionFactory.openSession()).thenReturn(this.session); when(this.session.query(String.class, "START n=node(*) RETURN m ORDER BY n.age SKIP 0 LIMIT 50", null)) .thenReturn(result); when(result.iterator()).thenReturn(Arrays.asList("foo", "bar", "baz").iterator()); assertEquals("The expected value was not returned by reader.", "foo", itemReader.read()); assertNull("The expected value was not should be null.", itemReader.read()); }
@Test public void testFullyQualifiedItemReader() throws Exception { Neo4jItemReader<String> itemReader = new Neo4jItemReaderBuilder<String>() .sessionFactory(this.sessionFactory) .targetType(String.class) .startStatement("n=node(*)") .orderByStatement("n.age") .pageSize(50).name("bar") .matchStatement("n -- m") .whereStatement("has(n.name)") .returnStatement("m").build(); when(this.sessionFactory.openSession()).thenReturn(this.session); when(this.session.query(String.class, "START n=node(*) MATCH n -- m WHERE has(n.name) RETURN m ORDER BY n.age SKIP 0 LIMIT 50", null)) .thenReturn(result); when(result.iterator()).thenReturn(Arrays.asList("foo", "bar", "baz").iterator()); assertEquals("The expected value was not returned by reader.", "foo", itemReader.read()); assertEquals("The expected value was not returned by reader.", "bar", itemReader.read()); assertEquals("The expected value was not returned by reader.", "baz", itemReader.read()); }
@Test public void testNoSessionFactory() { try { new Neo4jItemReaderBuilder<String>() .targetType(String.class) .startStatement("n=node(*)") .returnStatement("*") .orderByStatement("n.age") .pageSize(50) .name("bar").build(); fail("IllegalArgumentException should have been thrown"); } catch (IllegalArgumentException iae) { assertEquals("IllegalArgumentException message did not match the expected result.", "sessionFactory is required.", iae.getMessage()); } }
@Test public void testNullReturnStatement() { validateExceptionMessage(new Neo4jItemReaderBuilder<String>() .sessionFactory(this.sessionFactory) .targetType(String.class) .startStatement("n=node(*)") .orderByStatement("n.age") .pageSize(50).name("bar") .matchStatement("n -- m") .whereStatement("has(n.name)"), "returnStatement is required."); }
@Test public void testNullName() { validateExceptionMessage( new Neo4jItemReaderBuilder<String>() .sessionFactory(this.sessionFactory) .targetType(String.class) .startStatement("n=node(*)") .returnStatement("*") .orderByStatement("n.age") .pageSize(50), "A name is required when saveState is set to true"); // tests that name is not required if saveState is set to false. new Neo4jItemReaderBuilder<String>() .sessionFactory(this.sessionFactory) .targetType(String.class) .startStatement("n=node(*)") .returnStatement("*") .orderByStatement("n.age") .saveState(false) .pageSize(50) .build(); }
@Test public void testNullStartStatement() { validateExceptionMessage( new Neo4jItemReaderBuilder<String>() .sessionFactory(this.sessionFactory) .targetType(String.class) .returnStatement("*") .orderByStatement("n.age") .pageSize(50).name("bar") .matchStatement("n -- m") .whereStatement("has(n.name)") .returnStatement("m"), "startStatement is required."); }
@Test public void testNullTargetType() { validateExceptionMessage( new Neo4jItemReaderBuilder<String>() .sessionFactory(this.sessionFactory) .startStatement("n=node(*)") .returnStatement("*") .orderByStatement("n.age") .pageSize(50) .name("bar") .matchStatement("n -- m") .whereStatement("has(n.name)") .returnStatement("m"), "targetType is required."); }
@Test public void testZeroPageSize() { validateExceptionMessage(new Neo4jItemReaderBuilder<String>() .sessionFactory(this.sessionFactory) .targetType(String.class) .startStatement("n=node(*)") .returnStatement("*") .orderByStatement("n.age") .pageSize(0) .name("foo") .matchStatement("n -- m") .whereStatement("has(n.name)") .returnStatement("m"), "pageSize must be greater than zero"); }
@Test public void testZeroMaxItemCount() { validateExceptionMessage(new Neo4jItemReaderBuilder<String>() .sessionFactory(this.sessionFactory) .targetType(String.class) .startStatement("n=node(*)") .returnStatement("*") .orderByStatement("n.age") .pageSize(5) .maxItemCount(0) .name("foo") .matchStatement("n -- m") .whereStatement("has(n.name)") .returnStatement("m"), "maxItemCount must be greater than zero"); }
@Test public void testCurrentItemCountGreaterThanMaxItemCount() { validateExceptionMessage(new Neo4jItemReaderBuilder<String>() .sessionFactory(this.sessionFactory) .targetType(String.class) .startStatement("n=node(*)") .returnStatement("*") .orderByStatement("n.age") .pageSize(5) .maxItemCount(5) .currentItemCount(6) .name("foo") .matchStatement("n -- m") .whereStatement("has(n.name)") .returnStatement("m"), "maxItemCount must be greater than currentItemCount"); }