@ -16,10 +16,7 @@
package org.springframework.data.jdbc.repository.support ;
package org.springframework.data.jdbc.repository.support ;
import static org.assertj.core.api.Assertions.* ;
import static org.assertj.core.api.Assertions.* ;
import static org.mockito.ArgumentMatchers.any ;
import static org.mockito.ArgumentMatchers.* ;
import static org.mockito.ArgumentMatchers.anyString ;
import static org.mockito.ArgumentMatchers.eq ;
import static org.mockito.ArgumentMatchers.isA ;
import static org.mockito.Mockito.* ;
import static org.mockito.Mockito.* ;
import java.sql.ResultSet ;
import java.sql.ResultSet ;
@ -31,7 +28,9 @@ import org.junit.Test;
import org.mockito.ArgumentCaptor ;
import org.mockito.ArgumentCaptor ;
import org.springframework.context.ApplicationEventPublisher ;
import org.springframework.context.ApplicationEventPublisher ;
import org.springframework.dao.DataAccessException ;
import org.springframework.dao.DataAccessException ;
import org.springframework.data.mapping.callback.EntityCallbacks ;
import org.springframework.data.relational.core.mapping.RelationalMappingContext ;
import org.springframework.data.relational.core.mapping.RelationalMappingContext ;
import org.springframework.data.relational.core.mapping.event.AfterLoadCallback ;
import org.springframework.data.relational.core.mapping.event.AfterLoadEvent ;
import org.springframework.data.relational.core.mapping.event.AfterLoadEvent ;
import org.springframework.data.repository.query.DefaultParameters ;
import org.springframework.data.repository.query.DefaultParameters ;
import org.springframework.data.repository.query.Parameters ;
import org.springframework.data.repository.query.Parameters ;
@ -57,6 +56,7 @@ public class JdbcRepositoryQueryUnitTests {
ResultSetExtractor < ? > defaultResultSetExtractor ;
ResultSetExtractor < ? > defaultResultSetExtractor ;
NamedParameterJdbcOperations operations ;
NamedParameterJdbcOperations operations ;
ApplicationEventPublisher publisher ;
ApplicationEventPublisher publisher ;
EntityCallbacks callbacks ;
RelationalMappingContext context ;
RelationalMappingContext context ;
@Before
@Before
@ -71,6 +71,7 @@ public class JdbcRepositoryQueryUnitTests {
this . defaultRowMapper = mock ( RowMapper . class ) ;
this . defaultRowMapper = mock ( RowMapper . class ) ;
this . operations = mock ( NamedParameterJdbcOperations . class ) ;
this . operations = mock ( NamedParameterJdbcOperations . class ) ;
this . publisher = mock ( ApplicationEventPublisher . class ) ;
this . publisher = mock ( ApplicationEventPublisher . class ) ;
this . callbacks = mock ( EntityCallbacks . class ) ;
this . context = mock ( RelationalMappingContext . class , RETURNS_DEEP_STUBS ) ;
this . context = mock ( RelationalMappingContext . class , RETURNS_DEEP_STUBS ) ;
}
}
@ -80,7 +81,8 @@ public class JdbcRepositoryQueryUnitTests {
doReturn ( null ) . when ( queryMethod ) . getAnnotatedQuery ( ) ;
doReturn ( null ) . when ( queryMethod ) . getAnnotatedQuery ( ) ;
Assertions . assertThatExceptionOfType ( IllegalStateException . class ) //
Assertions . assertThatExceptionOfType ( IllegalStateException . class ) //
. isThrownBy ( ( ) - > new JdbcRepositoryQuery ( publisher , context , queryMethod , operations , defaultRowMapper )
. isThrownBy (
( ) - > new JdbcRepositoryQuery ( publisher , callbacks , context , queryMethod , operations , defaultRowMapper )
. execute ( new Object [ ] { } ) ) ;
. execute ( new Object [ ] { } ) ) ;
}
}
@ -89,7 +91,8 @@ public class JdbcRepositoryQueryUnitTests {
doReturn ( "some sql statement" ) . when ( queryMethod ) . getAnnotatedQuery ( ) ;
doReturn ( "some sql statement" ) . when ( queryMethod ) . getAnnotatedQuery ( ) ;
doReturn ( RowMapper . class ) . when ( queryMethod ) . getRowMapperClass ( ) ;
doReturn ( RowMapper . class ) . when ( queryMethod ) . getRowMapperClass ( ) ;
JdbcRepositoryQuery query = new JdbcRepositoryQuery ( publisher , context , queryMethod , operations , defaultRowMapper ) ;
JdbcRepositoryQuery query = new JdbcRepositoryQuery ( publisher , callbacks , context , queryMethod , operations ,
defaultRowMapper ) ;
query . execute ( new Object [ ] { } ) ;
query . execute ( new Object [ ] { } ) ;
@ -100,7 +103,8 @@ public class JdbcRepositoryQueryUnitTests {
public void defaultRowMapperIsUsedForNull ( ) {
public void defaultRowMapperIsUsedForNull ( ) {
doReturn ( "some sql statement" ) . when ( queryMethod ) . getAnnotatedQuery ( ) ;
doReturn ( "some sql statement" ) . when ( queryMethod ) . getAnnotatedQuery ( ) ;
JdbcRepositoryQuery query = new JdbcRepositoryQuery ( publisher , context , queryMethod , operations , defaultRowMapper ) ;
JdbcRepositoryQuery query = new JdbcRepositoryQuery ( publisher , callbacks , context , queryMethod , operations ,
defaultRowMapper ) ;
query . execute ( new Object [ ] { } ) ;
query . execute ( new Object [ ] { } ) ;
@ -113,7 +117,8 @@ public class JdbcRepositoryQueryUnitTests {
doReturn ( "some sql statement" ) . when ( queryMethod ) . getAnnotatedQuery ( ) ;
doReturn ( "some sql statement" ) . when ( queryMethod ) . getAnnotatedQuery ( ) ;
doReturn ( CustomRowMapper . class ) . when ( queryMethod ) . getRowMapperClass ( ) ;
doReturn ( CustomRowMapper . class ) . when ( queryMethod ) . getRowMapperClass ( ) ;
new JdbcRepositoryQuery ( publisher , context , queryMethod , operations , defaultRowMapper ) . execute ( new Object [ ] { } ) ;
new JdbcRepositoryQuery ( publisher , callbacks , context , queryMethod , operations , defaultRowMapper )
. execute ( new Object [ ] { } ) ;
verify ( operations ) //
verify ( operations ) //
. queryForObject ( anyString ( ) , any ( SqlParameterSource . class ) , isA ( CustomRowMapper . class ) ) ;
. queryForObject ( anyString ( ) , any ( SqlParameterSource . class ) , isA ( CustomRowMapper . class ) ) ;
@ -125,7 +130,8 @@ public class JdbcRepositoryQueryUnitTests {
doReturn ( "some sql statement" ) . when ( queryMethod ) . getAnnotatedQuery ( ) ;
doReturn ( "some sql statement" ) . when ( queryMethod ) . getAnnotatedQuery ( ) ;
doReturn ( CustomResultSetExtractor . class ) . when ( queryMethod ) . getResultSetExtractorClass ( ) ;
doReturn ( CustomResultSetExtractor . class ) . when ( queryMethod ) . getResultSetExtractorClass ( ) ;
new JdbcRepositoryQuery ( publisher , context , queryMethod , operations , defaultRowMapper ) . execute ( new Object [ ] { } ) ;
new JdbcRepositoryQuery ( publisher , callbacks , context , queryMethod , operations , defaultRowMapper )
. execute ( new Object [ ] { } ) ;
ArgumentCaptor < CustomResultSetExtractor > captor = ArgumentCaptor . forClass ( CustomResultSetExtractor . class ) ;
ArgumentCaptor < CustomResultSetExtractor > captor = ArgumentCaptor . forClass ( CustomResultSetExtractor . class ) ;
@ -143,7 +149,8 @@ public class JdbcRepositoryQueryUnitTests {
doReturn ( CustomResultSetExtractor . class ) . when ( queryMethod ) . getResultSetExtractorClass ( ) ;
doReturn ( CustomResultSetExtractor . class ) . when ( queryMethod ) . getResultSetExtractorClass ( ) ;
doReturn ( CustomRowMapper . class ) . when ( queryMethod ) . getRowMapperClass ( ) ;
doReturn ( CustomRowMapper . class ) . when ( queryMethod ) . getRowMapperClass ( ) ;
new JdbcRepositoryQuery ( publisher , context , queryMethod , operations , defaultRowMapper ) . execute ( new Object [ ] { } ) ;
new JdbcRepositoryQuery ( publisher , callbacks , context , queryMethod , operations , defaultRowMapper )
. execute ( new Object [ ] { } ) ;
ArgumentCaptor < CustomResultSetExtractor > captor = ArgumentCaptor . forClass ( CustomResultSetExtractor . class ) ;
ArgumentCaptor < CustomResultSetExtractor > captor = ArgumentCaptor . forClass ( CustomResultSetExtractor . class ) ;
@ -165,7 +172,8 @@ public class JdbcRepositoryQueryUnitTests {
when ( context . getRequiredPersistentEntity ( DummyEntity . class ) . getIdentifierAccessor ( any ( ) ) . getIdentifier ( ) )
when ( context . getRequiredPersistentEntity ( DummyEntity . class ) . getIdentifierAccessor ( any ( ) ) . getIdentifier ( ) )
. thenReturn ( "some identifier" ) ;
. thenReturn ( "some identifier" ) ;
new JdbcRepositoryQuery ( publisher , context , queryMethod , operations , defaultRowMapper ) . execute ( new Object [ ] { } ) ;
new JdbcRepositoryQuery ( publisher , callbacks , context , queryMethod , operations , defaultRowMapper )
. execute ( new Object [ ] { } ) ;
verify ( publisher ) . publishEvent ( any ( AfterLoadEvent . class ) ) ;
verify ( publisher ) . publishEvent ( any ( AfterLoadEvent . class ) ) ;
}
}
@ -181,11 +189,31 @@ public class JdbcRepositoryQueryUnitTests {
when ( context . getRequiredPersistentEntity ( DummyEntity . class ) . getIdentifierAccessor ( any ( ) ) . getIdentifier ( ) )
when ( context . getRequiredPersistentEntity ( DummyEntity . class ) . getIdentifierAccessor ( any ( ) ) . getIdentifier ( ) )
. thenReturn ( "some identifier" ) ;
. thenReturn ( "some identifier" ) ;
new JdbcRepositoryQuery ( publisher , context , queryMethod , operations , defaultRowMapper ) . execute ( new Object [ ] { } ) ;
new JdbcRepositoryQuery ( publisher , callbacks , context , queryMethod , operations , defaultRowMapper )
. execute ( new Object [ ] { } ) ;
verify ( publisher , times ( 2 ) ) . publishEvent ( any ( AfterLoadEvent . class ) ) ;
verify ( publisher , times ( 2 ) ) . publishEvent ( any ( AfterLoadEvent . class ) ) ;
}
}
@Test // DATAJDBC-400
public void publishesCallbacks ( ) {
doReturn ( "some sql statement" ) . when ( queryMethod ) . getAnnotatedQuery ( ) ;
doReturn ( false ) . when ( queryMethod ) . isCollectionQuery ( ) ;
DummyEntity dummyEntity = new DummyEntity ( 1L ) ;
doReturn ( dummyEntity ) . when ( operations ) . queryForObject ( anyString ( ) , any ( SqlParameterSource . class ) ,
any ( RowMapper . class ) ) ;
doReturn ( true ) . when ( context ) . hasPersistentEntityFor ( DummyEntity . class ) ;
when ( context . getRequiredPersistentEntity ( DummyEntity . class ) . getIdentifierAccessor ( any ( ) ) . getIdentifier ( ) )
. thenReturn ( "some identifier" ) ;
new JdbcRepositoryQuery ( publisher , callbacks , context , queryMethod , operations , defaultRowMapper ) . execute ( new Object [ ] { } ) ;
verify ( publisher ) . publishEvent ( any ( AfterLoadEvent . class ) ) ;
verify ( callbacks ) . callback ( AfterLoadCallback . class , dummyEntity ) ;
}
/ * *
/ * *
* The whole purpose of this method is to easily generate a { @link DefaultParameters } instance during test setup .
* The whole purpose of this method is to easily generate a { @link DefaultParameters } instance during test setup .
* /
* /