/** * Arguments to be passed to the data providing method. * * @param arguments the method arguments to be passed to the repository. * @return The current instance of the builder. * @see RepositoryItemReader#setArguments(List) */ public RepositoryItemReaderBuilder<T> arguments(Object... arguments) { return arguments(Arrays.asList(arguments)); }
@Test public void testCurrentItemCount() throws Exception { RepositoryItemReader<Object> reader = new RepositoryItemReaderBuilder<>().repository(this.repository) .sorts(this.sorts) .currentItemCount(6) .maxItemCount(5) .methodName("foo") .name("bar") .build(); assertNull("Result returned from reader was not null.", reader.read()); }
@Test public void testPageSize() throws Exception { RepositoryItemReader<Object> reader = new RepositoryItemReaderBuilder<>().repository(this.repository) .sorts(this.sorts) .maxItemCount(5) .methodName("foo") .name("bar") .pageSize(2) .build(); reader.read(); assertEquals("page size was not expected value.", 2, this.pageRequestContainer.getValue().getPageSize()); }
@Test public void testSaveState() throws Exception { try { new RepositoryItemReaderBuilder<>().repository(repository) .methodName("foo") .sorts(sorts) .maxItemCount(5) .build(); fail("IllegalArgumentException should have been thrown"); } catch (IllegalStateException ise) { assertEquals("IllegalStateException name was not set when saveState was true.", "A name is required when saveState is set to true.", ise.getMessage()); } // No IllegalStateException for a name that is not set, should not be thrown since // saveState was false. new RepositoryItemReaderBuilder<>().repository(repository) .saveState(false) .methodName("foo") .sorts(sorts) .maxItemCount(5) .build(); }
@Test public void testNoRepository() throws Exception { try { new RepositoryItemReaderBuilder<>().sorts(this.sorts) .maxItemCount(10) .methodName("foo") .build(); fail("IllegalArgumentException should have been thrown"); } catch (IllegalArgumentException iae) { assertEquals("IllegalArgumentException message did not match the expected result.", "repository is required.", iae.getMessage()); } }
@Test public void testBasicRead() throws Exception { RepositoryItemReader<Object> reader = new RepositoryItemReaderBuilder<>().repository(this.repository) .sorts(this.sorts) .maxItemCount(5) .methodName("foo") .name("bar") .build(); String result = (String) reader.read(); assertEquals("Result returned from reader was not expected value.", TEST_CONTENT, result); assertEquals("page size was not expected value.", 10, this.pageRequestContainer.getValue().getPageSize()); }
@Test public void testNullSort() throws Exception { try { new RepositoryItemReaderBuilder<>().repository(repository) .methodName("foo") .maxItemCount(5) .build(); fail("IllegalArgumentException should have been thrown"); } catch (IllegalArgumentException iae) { assertEquals("IllegalArgumentException sorts did not match the expected result.", "sorts map is required.", iae.getMessage()); } }
@Test public void testVarargArguments() throws Exception { ArgumentCaptor<String> arg1Captor = ArgumentCaptor.forClass(String.class); ArgumentCaptor<String> arg2Captor = ArgumentCaptor.forClass(String.class); ArgumentCaptor<String> arg3Captor = ArgumentCaptor.forClass(String.class); when(this.repository.foo(arg1Captor.capture(), arg2Captor.capture(), arg3Captor.capture(), this.pageRequestContainer.capture())).thenReturn(this.page); RepositoryItemReader<Object> reader = new RepositoryItemReaderBuilder<>().repository(this.repository) .sorts(this.sorts) .maxItemCount(5) .methodName("foo") .name("bar") .arguments(ARG1, ARG2, ARG3) .build(); String result = (String) reader.read(); verifyMultiArgRead(arg1Captor, arg2Captor, arg3Captor, result); }
@Test public void testNoMethodName() throws Exception { try { new RepositoryItemReaderBuilder<>().repository(this.repository) .sorts(this.sorts) .maxItemCount(10) .build(); fail("IllegalArgumentException should have been thrown"); } catch (IllegalArgumentException iae) { assertEquals("IllegalArgumentException message did not match the expected result.", "methodName is required.", iae.getMessage()); } try { new RepositoryItemReaderBuilder<>().repository(this.repository) .sorts(this.sorts) .methodName("") .maxItemCount(5) .build(); fail("IllegalArgumentException should have been thrown"); } catch (IllegalArgumentException iae) { assertEquals("IllegalArgumentException message did not match the expected result.", "methodName is required.", iae.getMessage()); } }
@Test public void testArguments() throws Exception { List<String> args = new ArrayList<>(3); args.add(ARG1); args.add(ARG2); args.add(ARG3); ArgumentCaptor<String> arg1Captor = ArgumentCaptor.forClass(String.class); ArgumentCaptor<String> arg2Captor = ArgumentCaptor.forClass(String.class); ArgumentCaptor<String> arg3Captor = ArgumentCaptor.forClass(String.class); when(this.repository.foo(arg1Captor.capture(), arg2Captor.capture(), arg3Captor.capture(), this.pageRequestContainer.capture())).thenReturn(this.page); RepositoryItemReader<Object> reader = new RepositoryItemReaderBuilder<>().repository(this.repository) .sorts(this.sorts) .maxItemCount(5) .methodName("foo") .name("bar") .arguments(args) .build(); String result = (String) reader.read(); verifyMultiArgRead(arg1Captor, arg2Captor, arg3Captor, result); }
@Test public void testRepositoryMethodReference() throws Exception { RepositoryItemReaderBuilder.RepositoryMethodReference<TestRepository> repositoryMethodReference = new RepositoryItemReaderBuilder.RepositoryMethodReference<>(this.repository); repositoryMethodReference.methodIs().foo(null); RepositoryItemReader<Object> reader = new RepositoryItemReaderBuilder<>() .repository(repositoryMethodReference) .sorts(this.sorts) .maxItemCount(5) .name("bar").build(); String result = (String) reader.read(); assertEquals("Result returned from reader was not expected value.", TEST_CONTENT, result); assertEquals("page size was not expected value.", 10, this.pageRequestContainer.getValue().getPageSize()); }
@Test public void testRepositoryMethodReferenceWithArgs() throws Exception { RepositoryItemReaderBuilder.RepositoryMethodReference<TestRepository> repositoryMethodReference = new RepositoryItemReaderBuilder.RepositoryMethodReference<>(this.repository); repositoryMethodReference.methodIs().foo(ARG1, ARG2, ARG3, null); RepositoryItemReader<Object> reader = new RepositoryItemReaderBuilder<>() .repository(repositoryMethodReference) .sorts(this.sorts) .maxItemCount(5) .name("bar").build(); ArgumentCaptor<String> arg1Captor = ArgumentCaptor.forClass(String.class); ArgumentCaptor<String> arg2Captor = ArgumentCaptor.forClass(String.class); ArgumentCaptor<String> arg3Captor = ArgumentCaptor.forClass(String.class); when(this.repository.foo(arg1Captor.capture(), arg2Captor.capture(), arg3Captor.capture(), this.pageRequestContainer.capture())).thenReturn(this.page); String result = (String) reader.read(); assertEquals("Result returned from reader was not expected value.", TEST_CONTENT, result); verifyMultiArgRead(arg1Captor, arg2Captor, arg3Captor, result); }