@ -20,19 +20,23 @@ import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.* ;
import static org.mockito.Mockito.* ;
import java.lang.annotation.Annotation ;
import java.lang.annotation.Annotation ;
import java.util.Optional ;
import org.junit.jupiter.api.Test ;
import org.junit.jupiter.api.Test ;
import org.junit.jupiter.api.extension.ExtendWith ;
import org.junit.jupiter.api.extension.ExtendWith ;
import org.mockito.Mock ;
import org.mockito.Mock ;
import org.mockito.junit.jupiter.MockitoExtension ;
import org.mockito.junit.jupiter.MockitoExtension ;
import org.springframework.beans.factory.config.AutowiredPropertyMarker ;
import org.springframework.beans.factory.config.BeanDefinition ;
import org.springframework.beans.factory.config.BeanDefinition ;
import org.springframework.beans.factory.support.AbstractBeanDefinition ;
import org.springframework.beans.factory.support.AbstractBeanDefinition ;
import org.springframework.beans.factory.support.BeanDefinitionBuilder ;
import org.springframework.beans.factory.support.BeanDefinitionBuilder ;
import org.springframework.beans.factory.support.BeanDefinitionRegistry ;
import org.springframework.beans.factory.support.BeanDefinitionRegistry ;
import org.springframework.context.support.GenericApplicationContext ;
import org.springframework.core.type.AnnotationMetadata ;
import org.springframework.core.type.AnnotationMetadata ;
import org.springframework.data.auditing.AuditingHandler ;
import org.springframework.data.auditing.AuditingHandler ;
import org.springframework.data.auditing.EnableAuditing ;
import org.springframework.data.auditing.EnableAuditing ;
import org.springframework.data.mapping.context.PersistentEntities ;
/ * *
/ * *
* Unit tests for { @link AuditingBeanDefinitionRegistrarSupport } .
* Unit tests for { @link AuditingBeanDefinitionRegistrarSupport } .
@ -42,6 +46,7 @@ import org.springframework.data.auditing.EnableAuditing;
* @author Oliver Gierke
* @author Oliver Gierke
* @author Francisco Soler
* @author Francisco Soler
* @author Jaeyeon Kim
* @author Jaeyeon Kim
* @author Mark Paluch
* /
* /
@ExtendWith ( MockitoExtension . class )
@ExtendWith ( MockitoExtension . class )
class AuditingBeanDefinitionRegistrarSupportUnitTests {
class AuditingBeanDefinitionRegistrarSupportUnitTests {
@ -77,13 +82,28 @@ class AuditingBeanDefinitionRegistrarSupportUnitTests {
. isThrownBy ( ( ) - > registrar . registerBeanDefinitions ( metadata , null ) ) ;
. isThrownBy ( ( ) - > registrar . registerBeanDefinitions ( metadata , null ) ) ;
}
}
@Test // DATACMNS -3177
@Test // GH -3177
void setsAuditorAwareAndDateTimeProviderIfConfigured ( ) {
void setsAuditorAwareAndDateTimeProviderIfConfigured ( ) {
AuditingConfiguration configuration = new DummyAuditingBeanDefinitionRegistrarSupport ( ) . getConfiguration ( null ) ;
BeanDefinitionBuilder builder = BeanDefinitionBuilder . rootBeanDefinition ( AuditingHandler . class ) ;
DummyAuditingBeanDefinitionRegistrarSupport registrar = new DummyAuditingBeanDefinitionRegistrarSupport ( ) ;
BeanDefinitionBuilder result = registrar . configureDefaultAuditHandlerAttributes ( configuration , builder ) ;
AbstractBeanDefinition beanDefinition = result . getBeanDefinition ( ) ;
assertThat ( beanDefinition . getPropertyValues ( ) . contains ( "auditorAware" ) ) . isTrue ( ) ;
assertThat ( beanDefinition . getPropertyValues ( ) . contains ( "dateTimeProvider" ) ) . isTrue ( ) ;
}
@Test // GH-3177
void doesNotSetAuditorAwareAndDateTimeProviderIfNotConfigured ( ) {
AuditingConfiguration configuration = new AuditingConfiguration ( ) {
AuditingConfiguration configuration = new AuditingConfiguration ( ) {
@Override
@Override
public String getAuditorAwareRef ( ) {
public String getAuditorAwareRef ( ) {
return "auditorAwareBean" ;
return "" ;
}
}
@Override
@Override
@ -93,7 +113,7 @@ class AuditingBeanDefinitionRegistrarSupportUnitTests {
@Override
@Override
public String getDateTimeProviderRef ( ) {
public String getDateTimeProviderRef ( ) {
return "dateTimeProviderBean " ;
return "" ;
}
}
@Override
@Override
@ -108,13 +128,12 @@ class AuditingBeanDefinitionRegistrarSupportUnitTests {
BeanDefinitionBuilder result = registrar . configureDefaultAuditHandlerAttributes ( configuration , builder ) ;
BeanDefinitionBuilder result = registrar . configureDefaultAuditHandlerAttributes ( configuration , builder ) ;
AbstractBeanDefinition beanDefinition = result . getBeanDefinition ( ) ;
AbstractBeanDefinition beanDefinition = result . getBeanDefinition ( ) ;
assertThat ( beanDefinition . getAutowireMode ( ) ) . isEqualTo ( AbstractBeanDefinition . AUTOWIRE_BY_TYPE ) ;
assertThat ( beanDefinition . getPropertyValues ( ) . get ( "auditorAware" ) ) . isEqualTo ( AutowiredPropertyMarker . INSTANCE ) ;
assertThat ( beanDefinition . getPropertyValues ( ) . contains ( "auditorAware" ) ) . isTrue ( ) ;
assertThat ( beanDefinition . getPropertyValues ( ) . get ( "dateTimeProvider" ) ) . isEqualTo ( AutowiredPropertyMarker . INSTANCE ) ;
assertThat ( beanDefinition . getPropertyValues ( ) . contains ( "dateTimeProvider" ) ) . isTrue ( ) ;
}
}
@Test // DATACMNS -3177
@Test // GH -3177
void doesNotSetAuditorAwareAndDateTimeProviderIfNotConfigured ( ) {
void optionalAutowiringShouldConsiderOptionalProperties ( ) {
AuditingConfiguration configuration = new AuditingConfiguration ( ) {
AuditingConfiguration configuration = new AuditingConfiguration ( ) {
@Override
@Override
@ -133,18 +152,24 @@ class AuditingBeanDefinitionRegistrarSupportUnitTests {
}
}
@Override
@Override
public boolean isModifyOnCreate ( ) { return true ; }
public boolean isModifyOnCreate ( ) {
return true ;
}
} ;
} ;
BeanDefinitionBuilder builder = BeanDefinitionBuilder . rootBeanDefinition ( AuditingHandler . class ) ;
BeanDefinitionBuilder builder = BeanDefinitionBuilder . rootBeanDefinition ( AuditingHandler . class ) ;
builder . addConstructorArgValue ( PersistentEntities . of ( ) ) ;
DummyAuditingBeanDefinitionRegistrarSupport registrar = new DummyAuditingBeanDefinitionRegistrarSupport ( ) ;
DummyAuditingBeanDefinitionRegistrarSupport registrar = new DummyAuditingBeanDefinitionRegistrarSupport ( ) ;
BeanDefinitionBuilder result = registrar . configureDefaultAuditHandlerAttributes ( configuration , builder ) ;
BeanDefinitionBuilder result = registrar . configureDefaultAuditHandlerAttributes ( configuration , builder ) ;
AbstractBeanDefinition beanDefinition = result . getBeanDefinition ( ) ;
assertThat ( beanDefinition . getAutowireMode ( ) ) . isEqualTo ( AbstractBeanDefinition . AUTOWIRE_BY_TYPE ) ;
GenericApplicationContext context = new GenericApplicationContext ( ) ;
assertThat ( beanDefinition . getPropertyValues ( ) . contains ( "auditorAware" ) ) . isFalse ( ) ;
context . registerBeanDefinition ( "auditingHandler" , result . getBeanDefinition ( ) ) ;
assertThat ( beanDefinition . getPropertyValues ( ) . contains ( "dateTimeProvider" ) ) . isFalse ( ) ;
context . refresh ( ) ;
AuditingHandler handler = context . getBean ( AuditingHandler . class ) ;
assertThat ( handler ) . extracting ( "auditorAware" ) . isEqualTo ( Optional . empty ( ) ) ;
}
}
static class SampleConfig { }
static class SampleConfig { }