package com.spring.loader.configuration; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.HashMap; import java.util.Map; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.core.env.Environment; import org.springframework.core.type.AnnotationMetadata; import com.spring.loader.S3PropertiesLocation; @RunWith(MockitoJUnitRunner.class) public class S3PropertiesLocationRegistrarTest { private S3PropertiesLocationRegistrar subject; private Map<String, Object> attributes; @Mock private Environment environment; @Mock private AnnotationMetadata importingClassMetadata; @Mock private BeanDefinitionRegistry registry; @Before public void setup() { subject = new S3PropertiesLocationRegistrar(); subject.setEnvironment(environment); attributes = new HashMap<>(); attributes.put("path", new String[] { "my-bucket/my.properties" }); attributes.put("value", new String[] { "my-bucket/my.properties" }); when(importingClassMetadata.getAnnotationAttributes(S3PropertiesLocation.class.getName())).thenReturn(attributes); } @Test public void shouldLoadPropertiesWhenThereisNoProfiles() { attributes.put("profiles", new String[] {}); subject.registerBeanDefinitions(importingClassMetadata, registry); verify(registry).registerBeanDefinition(anyString(), any(BeanDefinition.class)); } @Test public void shouldLoadPropertiesWhenThereisProfilesActive() { String[] profiles = new String[] { "prod" }; attributes.put("profiles", profiles); when(environment.acceptsProfiles(profiles)).thenReturn(true); subject.registerBeanDefinitions(importingClassMetadata, registry); verify(registry).registerBeanDefinition(anyString(), any(BeanDefinition.class)); } @Test public void shouldNotLoadPropertiesWhenThereisNoProfilesActive() { String[] profiles = new String[] { "prod" }; attributes.put("profiles", profiles); when(environment.acceptsProfiles(profiles)).thenReturn(false); subject.registerBeanDefinitions(importingClassMetadata, registry); verify(registry, never()).registerBeanDefinition(anyString(), any(BeanDefinition.class)); } }