diff --git a/spring-boot-modules/spring-boot-annotations/pom.xml b/spring-boot-modules/spring-boot-annotations/pom.xml index 4ee40bb90b..0affed0746 100644 --- a/spring-boot-modules/spring-boot-annotations/pom.xml +++ b/spring-boot-modules/spring-boot-annotations/pom.xml @@ -42,6 +42,11 @@ org.hibernate hibernate-core + + org.mockito + mockito-inline + test + org.springframework.boot diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/ConditionalUtils.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/ConditionalUtils.java new file mode 100644 index 0000000000..7294d843d1 --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/ConditionalUtils.java @@ -0,0 +1,20 @@ +package com.baeldung.annotations.conditional; + +import org.apache.commons.lang3.SystemUtils; +import org.springframework.boot.system.JavaVersion; + +public class ConditionalUtils { + + public static boolean isWindows() { + return SystemUtils.IS_OS_WINDOWS; + } + + public static boolean isJava8() { + return JavaVersion.getJavaVersion().equals(JavaVersion.EIGHT); + } + + public static boolean isJava9() { + return JavaVersion.getJavaVersion().equals(JavaVersion.NINE); + } + +} diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java index 7a866560c8..768cd9f6ed 100644 --- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsDevEnvCondition.java @@ -8,6 +8,6 @@ public class IsDevEnvCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { - return System.getProperty("env").equals("dev"); + return "dev".equals(System.getProperty("env")); } } diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsWindowsCondition.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsWindowsCondition.java index 21702ed9b8..24aa4f4b1c 100644 --- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsWindowsCondition.java +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/IsWindowsCondition.java @@ -1,7 +1,5 @@ package com.baeldung.annotations.conditional; -import org.apache.commons.lang3.SystemUtils; - import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; import org.springframework.core.type.AnnotatedTypeMetadata; @@ -10,6 +8,6 @@ public class IsWindowsCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { - return SystemUtils.IS_OS_WINDOWS; + return ConditionalUtils.isWindows(); } } diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8Condition.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8Condition.java index 0d2ad56917..c5f5e16d52 100644 --- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8Condition.java +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java8Condition.java @@ -1,6 +1,5 @@ package com.baeldung.annotations.conditional; -import org.springframework.boot.system.JavaVersion; import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; import org.springframework.core.type.AnnotatedTypeMetadata; @@ -9,6 +8,6 @@ public class Java8Condition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { - return JavaVersion.getJavaVersion().equals(JavaVersion.EIGHT); + return ConditionalUtils.isJava8(); } } diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java9Condition.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java9Condition.java index 6a21be8bde..2afa8b25a7 100644 --- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java9Condition.java +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/Java9Condition.java @@ -1,6 +1,5 @@ package com.baeldung.annotations.conditional; -import org.springframework.boot.system.JavaVersion; import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; import org.springframework.core.type.AnnotatedTypeMetadata; @@ -9,6 +8,6 @@ public class Java9Condition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { - return JavaVersion.getJavaVersion().equals(JavaVersion.NINE); + return ConditionalUtils.isJava9(); } } diff --git a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java index 1a65a16763..e104ec86e1 100644 --- a/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java +++ b/spring-boot-modules/spring-boot-annotations/src/main/java/com/baeldung/annotations/conditional/LoggingService.java @@ -13,7 +13,7 @@ import org.springframework.stereotype.Service; value = "logging.enabled", havingValue = "true", matchIfMissing = true) -@ConditionalOnExpression("${logging.enabled:true} and ${logging.level:DEBUG}") +@ConditionalOnExpression("${logging.enabled:true} and '${logging.level}'.equals('DEBUG')") @ConditionalOnJava(JavaVersion.EIGHT) public class LoggingService { } diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/ConditionalTestConfiguration.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/ConditionalTestConfiguration.java new file mode 100644 index 0000000000..6b23433422 --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/ConditionalTestConfiguration.java @@ -0,0 +1,10 @@ +package com.baeldung.annotations.conditional; + +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.ComponentScan; + +@TestConfiguration +@ComponentScan("com.baeldung.annotations.conditional") +public class ConditionalTestConfiguration { + +} diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/DevEnvLoggingConfigurationTest.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/DevEnvLoggingConfigurationTest.java new file mode 100644 index 0000000000..54899f523d --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/DevEnvLoggingConfigurationTest.java @@ -0,0 +1,50 @@ +package com.baeldung.annotations.conditional; + +import org.junit.Test; +import org.junit.jupiter.api.Assertions; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +public class DevEnvLoggingConfigurationTest { + + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner(); + + @Test + public void whenDevEnvEnabled_thenDevEnvLoggingConfigurationAndLoggingServiceShouldBeCreated() { + System.setProperty("env", "dev"); + + contextRunner + .withUserConfiguration(ConditionalTestConfiguration.class) + .run(context -> + Assertions.assertNotNull( + context.getBean(DevEnvLoggingConfiguration.class) + ) + ); + contextRunner + .withUserConfiguration(ConditionalTestConfiguration.class) + .run(context -> + Assertions.assertNotNull( + context.getBean(LoggingService.class) + ) + ); + } + + @Test + public void whenDevEnvNotEnabled_thenDevEnvLoggingConfigurationAndLoggingServiceShouldNotBeCreated() { + contextRunner + .withUserConfiguration(ConditionalTestConfiguration.class) + .run(context -> + Assertions.assertThrows(NoSuchBeanDefinitionException.class, () -> + context.getBean(DevEnvLoggingConfiguration.class) + ) + ); + contextRunner + .withUserConfiguration(ConditionalTestConfiguration.class) + .run(context -> + Assertions.assertThrows(NoSuchBeanDefinitionException.class, () -> + context.getBean(LoggingService.class) + ) + ); + } + +} diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsDevEnvConditionUnitTest.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsDevEnvConditionUnitTest.java new file mode 100644 index 0000000000..f4ef471f76 --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsDevEnvConditionUnitTest.java @@ -0,0 +1,31 @@ +package com.baeldung.annotations.conditional; + +import org.junit.Test; +import org.junit.jupiter.api.Assertions; +import org.mockito.Mockito; +import org.springframework.context.annotation.ConditionContext; +import org.springframework.core.type.AnnotatedTypeMetadata; + +public class IsDevEnvConditionUnitTest { + + @Test + public void whenDevEnvEnabled_thenDevEnvConditionShouldPass() { + System.setProperty("env", "dev"); + + Assertions.assertTrue( + new IsDevEnvCondition().matches( + Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class) + ) + ); + } + + @Test + public void whenDevEnvNotEnabled_thenDevEnvConditionShouldNotPass() { + Assertions.assertTrue( + new IsDevEnvCondition().matches( + Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class) + ) + ); + } + +} diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsWindowsConditionUnitTest.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsWindowsConditionUnitTest.java new file mode 100644 index 0000000000..8f632aed1d --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/IsWindowsConditionUnitTest.java @@ -0,0 +1,40 @@ +package com.baeldung.annotations.conditional; + +import org.junit.Test; +import org.junit.jupiter.api.Assertions; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.springframework.context.annotation.ConditionContext; +import org.springframework.core.type.AnnotatedTypeMetadata; + +public class IsWindowsConditionUnitTest { + + @Test + public void whenOnWindows_thenIsWindowsConditionShouldPass() { + + try (MockedStatic theMock = Mockito.mockStatic(ConditionalUtils.class)) { + theMock.when(ConditionalUtils::isWindows) + .thenReturn(true); + Assertions.assertTrue( + new IsWindowsCondition().matches( + Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class) + ) + ); + } + + } + + @Test + public void whenNotOnWindows_thenIsWindowsConditionShouldNotPass() { + try (MockedStatic theMock = Mockito.mockStatic(ConditionalUtils.class)) { + theMock.when(ConditionalUtils::isWindows) + .thenReturn(false); + Assertions.assertFalse( + new IsWindowsCondition().matches( + Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class) + ) + ); + } + } + +} diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java8ConditionUnitTest.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java8ConditionUnitTest.java new file mode 100644 index 0000000000..37bf002ae2 --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java8ConditionUnitTest.java @@ -0,0 +1,40 @@ +package com.baeldung.annotations.conditional; + +import org.junit.Test; +import org.junit.jupiter.api.Assertions; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.springframework.context.annotation.ConditionContext; +import org.springframework.core.type.AnnotatedTypeMetadata; + +public class Java8ConditionUnitTest { + + @Test + public void whenOnJava8_thenJava8ConditionShouldPass() { + + try (MockedStatic theMock = Mockito.mockStatic(ConditionalUtils.class)) { + theMock.when(ConditionalUtils::isJava8) + .thenReturn(true); + Assertions.assertTrue( + new Java8Condition().matches( + Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class) + ) + ); + } + + } + + @Test + public void whenNotOnJava8_thenJava8ConditionShouldNotPass() { + try (MockedStatic theMock = Mockito.mockStatic(ConditionalUtils.class)) { + theMock.when(ConditionalUtils::isJava8) + .thenReturn(false); + Assertions.assertFalse( + new Java8Condition().matches( + Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class) + ) + ); + } + } + +} diff --git a/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java9ConditionUnitTest.java b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java9ConditionUnitTest.java new file mode 100644 index 0000000000..5808569107 --- /dev/null +++ b/spring-boot-modules/spring-boot-annotations/src/test/java/com/baeldung/annotations/conditional/Java9ConditionUnitTest.java @@ -0,0 +1,40 @@ +package com.baeldung.annotations.conditional; + +import org.junit.Test; +import org.junit.jupiter.api.Assertions; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.springframework.context.annotation.ConditionContext; +import org.springframework.core.type.AnnotatedTypeMetadata; + +public class Java9ConditionUnitTest { + + @Test + public void whenOnJava9_thenJava9ConditionShouldPass() { + + try (MockedStatic theMock = Mockito.mockStatic(ConditionalUtils.class)) { + theMock.when(ConditionalUtils::isJava9) + .thenReturn(true); + Assertions.assertTrue( + new Java9Condition().matches( + Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class) + ) + ); + } + + } + + @Test + public void whenNotOnJava9_thenJava9ConditionShouldNotPass() { + try (MockedStatic theMock = Mockito.mockStatic(ConditionalUtils.class)) { + theMock.when(ConditionalUtils::isJava9) + .thenReturn(false); + Assertions.assertFalse( + new Java9Condition().matches( + Mockito.mock(ConditionContext.class), Mockito.mock(AnnotatedTypeMetadata.class) + ) + ); + } + } + +}