Home / Class/ AbstractNestedConditionTests Class — spring-boot Architecture

AbstractNestedConditionTests Class — spring-boot Architecture

Architecture documentation for the AbstractNestedConditionTests class in AbstractNestedConditionTests.java from the spring-boot codebase.

Entity Profile

Source Code

core/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/condition/AbstractNestedConditionTests.java lines 33–151

class AbstractNestedConditionTests {

	private final ApplicationContextRunner contextRunner = new ApplicationContextRunner();

	@Test
	void validPhase() {
		this.contextRunner.withUserConfiguration(ValidConfig.class)
			.run((context) -> assertThat(context).hasBean("myBean"));
	}

	@Test
	void invalidMemberPhase() {
		this.contextRunner.withUserConfiguration(InvalidConfig.class).run((context) -> {
			assertThat(context).hasFailed();
			Throwable startupFailure = context.getStartupFailure();
			assertThat(startupFailure).isNotNull();
			assertThat(startupFailure.getCause()).isInstanceOf(IllegalStateException.class)
				.hasMessageContaining("Nested condition " + InvalidNestedCondition.class.getName()
						+ " uses a configuration phase that is inappropriate for class "
						+ OnBeanCondition.class.getName());
		});
	}

	@Test
	void invalidNestedMemberPhase() {
		this.contextRunner.withUserConfiguration(DoubleNestedConfig.class).run((context) -> {
			assertThat(context).hasFailed();
			Throwable startupFailure = context.getStartupFailure();
			assertThat(startupFailure).isNotNull();
			assertThat(startupFailure.getCause()).isInstanceOf(IllegalStateException.class)
				.hasMessageContaining("Nested condition " + DoubleNestedCondition.class.getName()
						+ " uses a configuration phase that is inappropriate for class "
						+ ValidNestedCondition.class.getName());
		});
	}

	@Configuration(proxyBeanMethods = false)
	@Conditional(ValidNestedCondition.class)
	static class ValidConfig {

		@Bean
		String myBean() {
			return "myBean";
		}

	}

	static class ValidNestedCondition extends AbstractNestedCondition {

		ValidNestedCondition() {
			super(ConfigurationPhase.REGISTER_BEAN);
		}

		@Override
		protected ConditionOutcome getFinalMatchOutcome(MemberMatchOutcomes memberOutcomes) {
			return ConditionOutcome.match();
		}

		@ConditionalOnMissingBean(name = "myBean")
		static class MissingMyBean {

		}

	}

	@Configuration(proxyBeanMethods = false)
	@Conditional(InvalidNestedCondition.class)
	static class InvalidConfig {

		@Bean
		String myBean() {
			return "myBean";
		}

	}

	static class InvalidNestedCondition extends AbstractNestedCondition {

		InvalidNestedCondition() {
			super(ConfigurationPhase.PARSE_CONFIGURATION);
		}

		@Override
		protected ConditionOutcome getFinalMatchOutcome(MemberMatchOutcomes memberOutcomes) {
			return ConditionOutcome.match();
		}

		@ConditionalOnMissingBean(name = "myBean")
		static class MissingMyBean {

		}

	}

	@Configuration(proxyBeanMethods = false)
	@Conditional(DoubleNestedCondition.class)
	static class DoubleNestedConfig {

	}

	static class DoubleNestedCondition extends AbstractNestedCondition {

		DoubleNestedCondition() {
			super(ConfigurationPhase.PARSE_CONFIGURATION);
		}

		@Override
		protected ConditionOutcome getFinalMatchOutcome(MemberMatchOutcomes memberOutcomes) {
			return ConditionOutcome.match();
		}

		@Conditional(ValidNestedCondition.class)
		static class NestedConditionThatIsValid {

		}

	}

}

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free