|  | 
| 16 | 16 | 
 | 
| 17 | 17 | package org.springframework.r2dbc.connection; | 
| 18 | 18 | 
 | 
|  | 19 | +import java.util.List; | 
|  | 20 | + | 
| 19 | 21 | import io.r2dbc.spi.R2dbcBadGrammarException; | 
| 20 | 22 | import io.r2dbc.spi.R2dbcDataIntegrityViolationException; | 
| 21 | 23 | import io.r2dbc.spi.R2dbcException; | 
|  | 
| 27 | 29 | import org.junit.jupiter.api.Test; | 
| 28 | 30 | import org.junit.jupiter.params.ParameterizedTest; | 
| 29 | 31 | import org.junit.jupiter.params.provider.Arguments; | 
| 30 |  | -import org.junit.jupiter.params.provider.MethodSource; | 
|  | 32 | +import org.junit.jupiter.params.provider.FieldSource; | 
|  | 33 | + | 
| 31 | 34 | import org.springframework.dao.CannotAcquireLockException; | 
| 32 | 35 | import org.springframework.dao.DataAccessResourceFailureException; | 
| 33 | 36 | import org.springframework.dao.DataIntegrityViolationException; | 
|  | 
| 39 | 42 | import org.springframework.r2dbc.BadSqlGrammarException; | 
| 40 | 43 | import org.springframework.r2dbc.UncategorizedR2dbcException; | 
| 41 | 44 | 
 | 
| 42 |  | -import java.util.stream.Stream; | 
| 43 |  | - | 
| 44 | 45 | import static org.assertj.core.api.Assertions.assertThat; | 
| 45 |  | - | 
| 46 |  | - | 
|  | 46 | +import static org.junit.jupiter.params.provider.Arguments.arguments; | 
| 47 | 47 | 
 | 
| 48 | 48 | /** | 
| 49 | 49 |  * Tests for {@link ConnectionFactoryUtils}. | 
| @@ -92,34 +92,32 @@ void shouldTranslateNonTransientResourceException() { | 
| 92 | 92 | 		assertThat(exception).isExactlyInstanceOf(DataAccessResourceFailureException.class); | 
| 93 | 93 | 	} | 
| 94 | 94 | 
 | 
| 95 |  | -	private static Stream<Arguments> duplicateKeyErrorCodes() { | 
| 96 |  | -		return Stream.of( | 
| 97 |  | -				Arguments.of("Oracle", "23505", 0), | 
| 98 |  | -				Arguments.of("Oracle", "23000", 1), | 
| 99 |  | -				Arguments.of("SAP HANA", "23000", 301), | 
| 100 |  | -				Arguments.of("MySQL/MariaDB", "23000", 1062), | 
| 101 |  | -				Arguments.of("MS SQL Server", "23000", 2601), | 
| 102 |  | -				Arguments.of("MS SQL Server", "23000", 2627), | 
| 103 |  | -				Arguments.of("Informix", "23000", -239), | 
| 104 |  | -				Arguments.of("Informix", "23000", -268) | 
| 105 |  | -		); | 
|  | 95 | +	@Test | 
|  | 96 | +	void shouldTranslateIntegrityViolationException() { | 
|  | 97 | +		Exception exception = ConnectionFactoryUtils.convertR2dbcException("", "", | 
|  | 98 | +				new R2dbcDataIntegrityViolationException()); | 
|  | 99 | +		assertThat(exception).isExactlyInstanceOf(DataIntegrityViolationException.class); | 
| 106 | 100 | 	} | 
| 107 | 101 | 
 | 
|  | 102 | +	static final List<Arguments> duplicateKeyErrorCodes = List.of( | 
|  | 103 | +			arguments("Oracle", "23505", 0), | 
|  | 104 | +			arguments("Oracle", "23000", 1), | 
|  | 105 | +			arguments("SAP HANA", "23000", 301), | 
|  | 106 | +			arguments("MySQL/MariaDB", "23000", 1062), | 
|  | 107 | +			arguments("MS SQL Server", "23000", 2601), | 
|  | 108 | +			arguments("MS SQL Server", "23000", 2627), | 
|  | 109 | +			arguments("Informix", "23000", -239), | 
|  | 110 | +			arguments("Informix", "23000", -268) | 
|  | 111 | +		); | 
|  | 112 | + | 
| 108 | 113 | 	@ParameterizedTest | 
| 109 |  | -	@MethodSource("duplicateKeyErrorCodes") | 
| 110 |  | -	void shouldTranslateIntegrityViolationException(final String db, String sqlState, final int errorCode) { | 
|  | 114 | +	@FieldSource("duplicateKeyErrorCodes") | 
|  | 115 | +	void shouldTranslateIntegrityViolationExceptionToDuplicateKeyException(String db, String sqlState, int errorCode) { | 
| 111 | 116 | 		Exception exception = ConnectionFactoryUtils.convertR2dbcException("", "", | 
| 112 | 117 | 				new R2dbcDataIntegrityViolationException("reason", sqlState, errorCode)); | 
| 113 | 118 | 		assertThat(exception).as(db).isExactlyInstanceOf(DuplicateKeyException.class); | 
| 114 | 119 | 	} | 
| 115 | 120 | 
 | 
| 116 |  | -	@Test | 
| 117 |  | -	void shouldTranslateGenericIntegrityViolationException() { | 
| 118 |  | -		Exception exception = ConnectionFactoryUtils.convertR2dbcException("", "", | 
| 119 |  | -				new R2dbcDataIntegrityViolationException()); | 
| 120 |  | -		assertThat(exception).isExactlyInstanceOf(DataIntegrityViolationException.class); | 
| 121 |  | -	} | 
| 122 |  | - | 
| 123 | 121 | 	@Test | 
| 124 | 122 | 	void shouldTranslatePermissionDeniedException() { | 
| 125 | 123 | 		Exception exception = ConnectionFactoryUtils.convertR2dbcException("", "", | 
|  | 
0 commit comments