Merge pull request #19556 from scottfrederick
* pr/19556: Add profiles directly to the application environment for tests Closes gh-19556
This commit is contained in:
		
						commit
						6d6bbfb731
					
				| 
						 | 
				
			
			@ -28,7 +28,6 @@ import org.springframework.boot.context.properties.bind.Binder;
 | 
			
		|||
import org.springframework.boot.context.properties.source.ConfigurationPropertySource;
 | 
			
		||||
import org.springframework.boot.context.properties.source.MapConfigurationPropertySource;
 | 
			
		||||
import org.springframework.boot.test.mock.web.SpringBootMockServletContext;
 | 
			
		||||
import org.springframework.boot.test.util.TestPropertyValues;
 | 
			
		||||
import org.springframework.boot.web.reactive.context.GenericReactiveWebApplicationContext;
 | 
			
		||||
import org.springframework.boot.web.servlet.support.ServletContextApplicationContextInitializer;
 | 
			
		||||
import org.springframework.context.ApplicationContext;
 | 
			
		||||
| 
						 | 
				
			
			@ -73,6 +72,7 @@ import org.springframework.web.context.support.GenericWebApplicationContext;
 | 
			
		|||
 * @author Andy Wilkinson
 | 
			
		||||
 * @author Stephane Nicoll
 | 
			
		||||
 * @author Madhura Bhave
 | 
			
		||||
 * @author Scott Frederick
 | 
			
		||||
 * @since 1.4.0
 | 
			
		||||
 * @see SpringBootTest
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -92,7 +92,7 @@ public class SpringBootContextLoader extends AbstractContextLoader {
 | 
			
		|||
		application.getSources().addAll(Arrays.asList(configLocations));
 | 
			
		||||
		ConfigurableEnvironment environment = getEnvironment();
 | 
			
		||||
		if (!ObjectUtils.isEmpty(config.getActiveProfiles())) {
 | 
			
		||||
			setActiveProfiles(environment, config.getActiveProfiles());
 | 
			
		||||
			environment.setActiveProfiles(config.getActiveProfiles());
 | 
			
		||||
		}
 | 
			
		||||
		ResourceLoader resourceLoader = (application.getResourceLoader() != null) ? application.getResourceLoader()
 | 
			
		||||
				: new DefaultResourceLoader(getClass().getClassLoader());
 | 
			
		||||
| 
						 | 
				
			
			@ -138,11 +138,6 @@ public class SpringBootContextLoader extends AbstractContextLoader {
 | 
			
		|||
		return new StandardEnvironment();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private void setActiveProfiles(ConfigurableEnvironment environment, String[] profiles) {
 | 
			
		||||
		TestPropertyValues.of("spring.profiles.active=" + StringUtils.arrayToCommaDelimitedString(profiles))
 | 
			
		||||
				.applyTo(environment);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	protected String[] getInlinedProperties(MergedContextConfiguration config) {
 | 
			
		||||
		ArrayList<String> properties = new ArrayList<>();
 | 
			
		||||
		// JMX bean names will clash if the same bean is used in multiple contexts
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,6 +22,8 @@ import org.junit.Ignore;
 | 
			
		|||
import org.junit.Test;
 | 
			
		||||
 | 
			
		||||
import org.springframework.context.annotation.Configuration;
 | 
			
		||||
import org.springframework.core.env.Environment;
 | 
			
		||||
import org.springframework.test.context.ActiveProfiles;
 | 
			
		||||
import org.springframework.test.context.ContextConfiguration;
 | 
			
		||||
import org.springframework.test.context.MergedContextConfiguration;
 | 
			
		||||
import org.springframework.test.context.TestContext;
 | 
			
		||||
| 
						 | 
				
			
			@ -35,6 +37,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 | 
			
		|||
 * Tests for {@link SpringBootContextLoader}
 | 
			
		||||
 *
 | 
			
		||||
 * @author Stephane Nicoll
 | 
			
		||||
 * @author Scott Frederick
 | 
			
		||||
 */
 | 
			
		||||
public class SpringBootContextLoaderTests {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -88,13 +91,40 @@ public class SpringBootContextLoaderTests {
 | 
			
		|||
		assertKey(config, "variables", "foo=FOO\n bar=BAR");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void noActiveProfiles() {
 | 
			
		||||
		Environment environment = getApplicationEnvironment(SimpleConfig.class);
 | 
			
		||||
		assertThat(environment.getActiveProfiles()).isEmpty();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void multipleActiveProfiles() {
 | 
			
		||||
		Environment environment = getApplicationEnvironment(MultipleActiveProfiles.class);
 | 
			
		||||
		assertThat(environment.getActiveProfiles()).containsExactly("profile1", "profile2");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void activeProfileWithComma() {
 | 
			
		||||
		Environment environment = getApplicationEnvironment(ActiveProfileWithComma.class);
 | 
			
		||||
		assertThat(environment.getActiveProfiles()).containsExactly("profile1,2");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private Map<String, Object> getEnvironmentProperties(Class<?> testClass) {
 | 
			
		||||
		TestContext context = new ExposedTestContextManager(testClass).getExposedTestContext();
 | 
			
		||||
		TestContext context = getTestContext(testClass);
 | 
			
		||||
		MergedContextConfiguration config = (MergedContextConfiguration) ReflectionTestUtils.getField(context,
 | 
			
		||||
				"mergedContextConfiguration");
 | 
			
		||||
		return TestPropertySourceUtils.convertInlinedPropertiesToMap(config.getPropertySourceProperties());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private Environment getApplicationEnvironment(Class<?> testClass) {
 | 
			
		||||
		TestContext context = getTestContext(testClass);
 | 
			
		||||
		return context.getApplicationContext().getEnvironment();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private TestContext getTestContext(Class<?> testClass) {
 | 
			
		||||
		return new ExposedTestContextManager(testClass).getExposedTestContext();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private void assertKey(Map<String, Object> actual, String key, Object value) {
 | 
			
		||||
		assertThat(actual.containsKey(key)).as("Key '" + key + "' not found").isTrue();
 | 
			
		||||
		assertThat(actual.get(key)).isEqualTo(value);
 | 
			
		||||
| 
						 | 
				
			
			@ -142,6 +172,20 @@ public class SpringBootContextLoaderTests {
 | 
			
		|||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@SpringBootTest
 | 
			
		||||
	@ActiveProfiles({ "profile1", "profile2" })
 | 
			
		||||
	@ContextConfiguration(classes = Config.class)
 | 
			
		||||
	static class MultipleActiveProfiles {
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@SpringBootTest
 | 
			
		||||
	@ActiveProfiles({ "profile1,2" })
 | 
			
		||||
	@ContextConfiguration(classes = Config.class)
 | 
			
		||||
	static class ActiveProfileWithComma {
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Configuration
 | 
			
		||||
	static class Config {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue