From 9893884a54614e989bcfe51e3e3610ca04380ccc Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Tue, 11 Oct 2022 14:20:43 +0200 Subject: [PATCH] Polishing. Simplify test. Original pull request: #1356 See #1343 --- .../query/StringBasedJdbcQueryUnitTests.java | 96 ++++++++++++------- 1 file changed, 62 insertions(+), 34 deletions(-) diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQueryUnitTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQueryUnitTests.java index cdef7e3d7..5d6568500 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQueryUnitTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQueryUnitTests.java @@ -194,57 +194,85 @@ class StringBasedJdbcQueryUnitTests { @Test // GH-1212 void convertsEnumCollectionParameterIntoStringCollectionParameter() { - JdbcQueryMethod queryMethod = createMethod("findByEnumTypeIn", Set.class); - BasicJdbcConverter converter = new BasicJdbcConverter(mock(RelationalMappingContext.class), - mock(RelationResolver.class)); - StringBasedJdbcQuery query = new StringBasedJdbcQuery(queryMethod, operations, result -> mock(RowMapper.class), - converter, evaluationContextProvider); + SqlParameterSource sqlParameterSource = forMethod("findByEnumTypeIn", Set.class) + .withArguments(Set.of(Direction.LEFT, Direction.RIGHT)).extractParameterSource(); - query.execute(new Object[] { Set.of(Direction.LEFT, Direction.RIGHT) }); - - ArgumentCaptor captor = ArgumentCaptor.forClass(SqlParameterSource.class); - verify(operations).query(anyString(), captor.capture(), any(ResultSetExtractor.class)); - - SqlParameterSource sqlParameterSource = captor.getValue(); assertThat(sqlParameterSource.getValue("directions")).asList().containsExactlyInAnyOrder("LEFT", "RIGHT"); } @Test // GH-1212 void convertsEnumCollectionParameterUsingCustomConverterWhenRegisteredForType() { - JdbcQueryMethod queryMethod = createMethod("findByEnumTypeIn", Set.class); - BasicJdbcConverter converter = new BasicJdbcConverter(mock(RelationalMappingContext.class), - mock(RelationResolver.class), - new JdbcCustomConversions(List.of(DirectionToIntegerConverter.INSTANCE, IntegerToDirectionConverter.INSTANCE)), - JdbcTypeFactory.unsupported(), IdentifierProcessing.ANSI); - StringBasedJdbcQuery query = new StringBasedJdbcQuery(queryMethod, operations, result -> mock(RowMapper.class), - converter, evaluationContextProvider); - - query.execute(new Object[] { Set.of(Direction.LEFT, Direction.RIGHT) }); - - ArgumentCaptor captor = ArgumentCaptor.forClass(SqlParameterSource.class); - verify(operations).query(anyString(), captor.capture(), any(ResultSetExtractor.class)); + SqlParameterSource sqlParameterSource = forMethod("findByEnumTypeIn", Set.class) // + .withCustomConverters(DirectionToIntegerConverter.INSTANCE, IntegerToDirectionConverter.INSTANCE) + .withArguments(Set.of(Direction.LEFT, Direction.RIGHT)) // + .extractParameterSource(); - SqlParameterSource sqlParameterSource = captor.getValue(); assertThat(sqlParameterSource.getValue("directions")).asList().containsExactlyInAnyOrder(-1, 1); } + @Test // GH-1212 void doesNotConvertNonCollectionParameter() { - JdbcQueryMethod queryMethod = createMethod("findBySimpleValue", Integer.class); - BasicJdbcConverter converter = new BasicJdbcConverter(mock(RelationalMappingContext.class), - mock(RelationResolver.class)); - StringBasedJdbcQuery query = new StringBasedJdbcQuery(queryMethod, operations, result -> mock(RowMapper.class), - converter, evaluationContextProvider); + SqlParameterSource sqlParameterSource = forMethod("findBySimpleValue", Integer.class) // + .withArguments(1) // + .extractParameterSource(); - query.execute(new Object[] { 1 }); + assertThat(sqlParameterSource.getValue("value")).isEqualTo(1); + } - ArgumentCaptor captor = ArgumentCaptor.forClass(SqlParameterSource.class); - verify(operations).query(anyString(), captor.capture(), any(ResultSetExtractor.class)); + QueryFixture forMethod(String name, Class... paramTypes) { + return new QueryFixture(createMethod(name, paramTypes)); + } - SqlParameterSource sqlParameterSource = captor.getValue(); - assertThat(sqlParameterSource.getValue("value")).isEqualTo(1); + private class QueryFixture { + + private final JdbcQueryMethod method; + private Object[] arguments; + private BasicJdbcConverter converter; + + public QueryFixture(JdbcQueryMethod method) { + this.method = method; + } + + public QueryFixture withArguments(Object... arguments) { + + this.arguments = arguments; + + return this; + } + + public SqlParameterSource extractParameterSource() { + + BasicJdbcConverter converter = this.converter == null // + ? new BasicJdbcConverter(mock(RelationalMappingContext.class), // + mock(RelationResolver.class)) + : this.converter; + + StringBasedJdbcQuery query = new StringBasedJdbcQuery(method, operations, result -> mock(RowMapper.class), + converter, evaluationContextProvider); + + query.execute(arguments); + + ArgumentCaptor captor = ArgumentCaptor.forClass(SqlParameterSource.class); + verify(operations).query(anyString(), captor.capture(), any(ResultSetExtractor.class)); + + return captor.getValue(); + } + + public QueryFixture withConverter(BasicJdbcConverter converter) { + + this.converter = converter; + + return this; + } + + public QueryFixture withCustomConverters(Object... converters) { + + return withConverter(new BasicJdbcConverter(mock(RelationalMappingContext.class), mock(RelationResolver.class), + new JdbcCustomConversions(List.of(converters)), JdbcTypeFactory.unsupported(), IdentifierProcessing.ANSI)); + } } private JdbcQueryMethod createMethod(String methodName, Class... paramTypes) {