From 62f7a1911fda8407be1647b085920f6ab2f9126a Mon Sep 17 00:00:00 2001 From: Eugene Kovko <37694937+eukovko@users.noreply.github.com> Date: Fri, 29 Dec 2023 19:18:06 +0100 Subject: [PATCH] Bael 7212 (#15499) * BAEL-7212: Lenient converter tests * BAEL-7212: Extracted provider * BAEL-7212: Include only one holder * BAEL-7212: Custom strict converter * BAEL-7212: Renamed converter * BAEL-7212: Renamed WeekDays * BAEL-7212: Added tests for non-conventional weekdays * BAEL-7212: Added tests for case insensitive converter * BAEL-7212: Removed strict prefix * BAEL-7212: Removed lenient prefix * BAEL-7212: Removed non-conventional prefix * BAEL-7212: Removed strict prefix * BAEL-7212: Removed lenient holder * BAEL-7212: Moved to packages * BAEL-7212: Removed Application class * BAEL-7212: Removed interface * BAEL-7212: Renamed test classes * BAEL-7212: Renamed WeekDays * BAEL-7212: Added negative tests * BAEL-7212: Added other test * BAEL-7212: Move providers * BAEL-7212: SpEL conversion * BAEL-7212: Rename holders --- .../CaseInsensitiveWeekDayConverter.java | 16 ++++ .../StrictNullableWeekDayConverter.java | 15 ++++ .../NonConventionalWeekDays.java | 5 ++ .../NonConventionalWeekDaysHolder.java | 85 +++++++++++++++++++ .../week/SpELWeekDaysHolder.java | 85 +++++++++++++++++++ .../caseinsensitiveenum/week/WeekDays.java | 5 ++ .../week/WeekDaysHolder.java | 85 +++++++++++++++++++ ...ensitiveStringToEnumConverterUnitTest.java | 49 +++++++++++ .../LenientStringToEnumConverterUnitTest.java | 35 ++++++++ ...lStringToEnumLenientConverterUnitTest.java | 35 ++++++++ ...ensitiveStringToEnumConverterUnitTest.java | 49 +++++++++++ ...StringToEnumConverterNegativeUnitTest.java | 49 +++++++++++ ...StringToEnumConverterPositiveUnitTest.java | 49 +++++++++++ ...ntionalWeekDayHolderArgumentsProvider.java | 35 ++++++++ .../SpELWeekDayHolderArgumentsProvider.java | 34 ++++++++ .../WeekDayHolderArgumentsProvider.java | 34 ++++++++ 16 files changed, 665 insertions(+) create mode 100644 spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/converter/CaseInsensitiveWeekDayConverter.java create mode 100644 spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/converter/StrictNullableWeekDayConverter.java create mode 100644 spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/nonconventionalweek/NonConventionalWeekDays.java create mode 100644 spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/nonconventionalweek/NonConventionalWeekDaysHolder.java create mode 100644 spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/week/SpELWeekDaysHolder.java create mode 100644 spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/week/WeekDays.java create mode 100644 spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/week/WeekDaysHolder.java create mode 100644 spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/CaseInsensitiveStringToEnumConverterUnitTest.java create mode 100644 spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/LenientStringToEnumConverterUnitTest.java create mode 100644 spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/NonConventionalStringToEnumLenientConverterUnitTest.java create mode 100644 spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/SpELCaseInsensitiveStringToEnumConverterUnitTest.java create mode 100644 spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/StrictStringToEnumConverterNegativeUnitTest.java create mode 100644 spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/StrictStringToEnumConverterPositiveUnitTest.java create mode 100644 spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/providers/NonConventionalWeekDayHolderArgumentsProvider.java create mode 100644 spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/providers/SpELWeekDayHolderArgumentsProvider.java create mode 100644 spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/providers/WeekDayHolderArgumentsProvider.java diff --git a/spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/converter/CaseInsensitiveWeekDayConverter.java b/spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/converter/CaseInsensitiveWeekDayConverter.java new file mode 100644 index 0000000000..8b06fedc78 --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/converter/CaseInsensitiveWeekDayConverter.java @@ -0,0 +1,16 @@ +package com.baeldung.caseinsensitiveenum.converter; + +import com.baeldung.caseinsensitiveenum.week.WeekDays; +import org.springframework.core.convert.converter.Converter; + +public class CaseInsensitiveWeekDayConverter implements Converter { + + @Override + public WeekDays convert(final String source) { + try { + return WeekDays.valueOf(source.trim()); + } catch (IllegalArgumentException exception) { + return WeekDays.valueOf(source.trim().toUpperCase()); + } + } +} diff --git a/spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/converter/StrictNullableWeekDayConverter.java b/spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/converter/StrictNullableWeekDayConverter.java new file mode 100644 index 0000000000..dd9f7fb92a --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/converter/StrictNullableWeekDayConverter.java @@ -0,0 +1,15 @@ +package com.baeldung.caseinsensitiveenum.converter; + +import com.baeldung.caseinsensitiveenum.week.WeekDays; +import org.springframework.core.convert.converter.Converter; + +public class StrictNullableWeekDayConverter implements Converter { + @Override + public WeekDays convert(final String source) { + try { + return WeekDays.valueOf(source.trim()); + } catch (IllegalArgumentException e) { + return null; + } + } +} diff --git a/spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/nonconventionalweek/NonConventionalWeekDays.java b/spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/nonconventionalweek/NonConventionalWeekDays.java new file mode 100644 index 0000000000..72e1589de7 --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/nonconventionalweek/NonConventionalWeekDays.java @@ -0,0 +1,5 @@ +package com.baeldung.caseinsensitiveenum.nonconventionalweek; + +public enum NonConventionalWeekDays { + Mon$Day, Tues$DAY_, Wednes$day, THURS$day_, Fri$Day$_$, Satur$DAY_, Sun$Day +} diff --git a/spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/nonconventionalweek/NonConventionalWeekDaysHolder.java b/spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/nonconventionalweek/NonConventionalWeekDaysHolder.java new file mode 100644 index 0000000000..9cd2cf4369 --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/nonconventionalweek/NonConventionalWeekDaysHolder.java @@ -0,0 +1,85 @@ +package com.baeldung.caseinsensitiveenum.nonconventionalweek; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component +public class NonConventionalWeekDaysHolder { + + @Value("${monday}") + private NonConventionalWeekDays monday; + + @Value("${tuesday}") + private NonConventionalWeekDays tuesday; + + @Value("${wednesday}") + private NonConventionalWeekDays wednesday; + + @Value("${thursday}") + private NonConventionalWeekDays thursday; + + @Value("${friday}") + private NonConventionalWeekDays friday; + + @Value("${saturday}") + private NonConventionalWeekDays saturday; + + @Value("${sunday}") + private NonConventionalWeekDays sunday; + + public NonConventionalWeekDays getMonday() { + return monday; + } + + public void setMonday(final NonConventionalWeekDays monday) { + this.monday = monday; + } + + public NonConventionalWeekDays getTuesday() { + return tuesday; + } + + public void setTuesday(final NonConventionalWeekDays tuesday) { + this.tuesday = tuesday; + } + + public NonConventionalWeekDays getWednesday() { + return wednesday; + } + + public void setWednesday(final NonConventionalWeekDays wednesday) { + this.wednesday = wednesday; + } + + public NonConventionalWeekDays getThursday() { + return thursday; + } + + public void setThursday(final NonConventionalWeekDays thursday) { + this.thursday = thursday; + } + + public NonConventionalWeekDays getFriday() { + return friday; + } + + public void setFriday(final NonConventionalWeekDays friday) { + this.friday = friday; + } + + public NonConventionalWeekDays getSaturday() { + return saturday; + } + + public void setSaturday(final NonConventionalWeekDays saturday) { + this.saturday = saturday; + } + + public NonConventionalWeekDays getSunday() { + return sunday; + } + + public void setSunday(final NonConventionalWeekDays sunday) { + this.sunday = sunday; + } +} diff --git a/spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/week/SpELWeekDaysHolder.java b/spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/week/SpELWeekDaysHolder.java new file mode 100644 index 0000000000..6c56c0a9fe --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/week/SpELWeekDaysHolder.java @@ -0,0 +1,85 @@ +package com.baeldung.caseinsensitiveenum.week; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component +public class SpELWeekDaysHolder { + + @Value("#{'${monday}'.toUpperCase()}") + private WeekDays monday; + + @Value("#{'${tuesday}'.toUpperCase()}") + private WeekDays tuesday; + + @Value("#{'${wednesday}'.toUpperCase()}") + private WeekDays wednesday; + + @Value("#{'${thursday}'.toUpperCase()}") + private WeekDays thursday; + + @Value("#{'${friday}'.toUpperCase()}") + private WeekDays friday; + + @Value("#{'${saturday}'.toUpperCase()}") + private WeekDays saturday; + + @Value("#{'${sunday}'.toUpperCase()}") + private WeekDays sunday; + + public WeekDays getMonday() { + return monday; + } + + public void setMonday(final WeekDays monday) { + this.monday = monday; + } + + public WeekDays getTuesday() { + return tuesday; + } + + public void setTuesday(final WeekDays tuesday) { + this.tuesday = tuesday; + } + + public WeekDays getWednesday() { + return wednesday; + } + + public void setWednesday(final WeekDays wednesday) { + this.wednesday = wednesday; + } + + public WeekDays getThursday() { + return thursday; + } + + public void setThursday(final WeekDays thursday) { + this.thursday = thursday; + } + + public WeekDays getFriday() { + return friday; + } + + public void setFriday(final WeekDays friday) { + this.friday = friday; + } + + public WeekDays getSaturday() { + return saturday; + } + + public void setSaturday(final WeekDays saturday) { + this.saturday = saturday; + } + + public WeekDays getSunday() { + return sunday; + } + + public void setSunday(final WeekDays sunday) { + this.sunday = sunday; + } +} diff --git a/spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/week/WeekDays.java b/spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/week/WeekDays.java new file mode 100644 index 0000000000..21e7b6662a --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/week/WeekDays.java @@ -0,0 +1,5 @@ +package com.baeldung.caseinsensitiveenum.week; + +public enum WeekDays { + MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY +} diff --git a/spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/week/WeekDaysHolder.java b/spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/week/WeekDaysHolder.java new file mode 100644 index 0000000000..299a61a3fd --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-4/src/main/java/com/baeldung/caseinsensitiveenum/week/WeekDaysHolder.java @@ -0,0 +1,85 @@ +package com.baeldung.caseinsensitiveenum.week; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +@Component +public class WeekDaysHolder { + + @Value("${monday}") + private WeekDays monday; + + @Value("${tuesday}") + private WeekDays tuesday; + + @Value("${wednesday}") + private WeekDays wednesday; + + @Value("${thursday}") + private WeekDays thursday; + + @Value("${friday}") + private WeekDays friday; + + @Value("${saturday}") + private WeekDays saturday; + + @Value("${sunday}") + private WeekDays sunday; + + public WeekDays getMonday() { + return monday; + } + + public void setMonday(final WeekDays monday) { + this.monday = monday; + } + + public WeekDays getTuesday() { + return tuesday; + } + + public void setTuesday(final WeekDays tuesday) { + this.tuesday = tuesday; + } + + public WeekDays getWednesday() { + return wednesday; + } + + public void setWednesday(final WeekDays wednesday) { + this.wednesday = wednesday; + } + + public WeekDays getThursday() { + return thursday; + } + + public void setThursday(final WeekDays thursday) { + this.thursday = thursday; + } + + public WeekDays getFriday() { + return friday; + } + + public void setFriday(final WeekDays friday) { + this.friday = friday; + } + + public WeekDays getSaturday() { + return saturday; + } + + public void setSaturday(final WeekDays saturday) { + this.saturday = saturday; + } + + public WeekDays getSunday() { + return sunday; + } + + public void setSunday(final WeekDays sunday) { + this.sunday = sunday; + } +} diff --git a/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/CaseInsensitiveStringToEnumConverterUnitTest.java b/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/CaseInsensitiveStringToEnumConverterUnitTest.java new file mode 100644 index 0000000000..7470b3d9dd --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/CaseInsensitiveStringToEnumConverterUnitTest.java @@ -0,0 +1,49 @@ +package com.baeldung.caseinsensitiveenum; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.baeldung.caseinsensitiveenum.CaseInsensitiveStringToEnumConverterUnitTest.WeekDayConverterConfiguration; +import com.baeldung.caseinsensitiveenum.converter.CaseInsensitiveWeekDayConverter; +import com.baeldung.caseinsensitiveenum.providers.WeekDayHolderArgumentsProvider; +import com.baeldung.caseinsensitiveenum.week.WeekDays; +import com.baeldung.caseinsensitiveenum.week.WeekDaysHolder; +import java.util.function.Function; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ArgumentsSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Bean; +import org.springframework.core.convert.ConversionService; +import org.springframework.core.convert.support.DefaultConversionService; + +@SpringBootTest(properties = { + "monday=monday", + "tuesday=tuesday", + "wednesday=wednesday", + "thursday=THURSDAY", + "friday=Friday", + "saturday=saturDAY", + "sunday=sUndAy", +}, classes = {WeekDaysHolder.class, WeekDayConverterConfiguration.class}) +class CaseInsensitiveStringToEnumConverterUnitTest { + + public static class WeekDayConverterConfiguration { + @Bean + public ConversionService conversionService() { + final DefaultConversionService defaultConversionService = new DefaultConversionService(); + defaultConversionService.addConverter(new CaseInsensitiveWeekDayConverter()); + return defaultConversionService; + } + } + + @Autowired + private WeekDaysHolder holder; + + @ParameterizedTest + @ArgumentsSource(WeekDayHolderArgumentsProvider.class) + void givenPropertiesWhenInjectEnumThenValueIsNull( + Function methodReference, WeekDays expected) { + WeekDays actual = methodReference.apply(holder); + assertThat(actual).isEqualTo(expected); + } +} diff --git a/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/LenientStringToEnumConverterUnitTest.java b/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/LenientStringToEnumConverterUnitTest.java new file mode 100644 index 0000000000..3f739b10cf --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/LenientStringToEnumConverterUnitTest.java @@ -0,0 +1,35 @@ +package com.baeldung.caseinsensitiveenum; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.baeldung.caseinsensitiveenum.providers.WeekDayHolderArgumentsProvider; +import com.baeldung.caseinsensitiveenum.week.WeekDays; +import com.baeldung.caseinsensitiveenum.week.WeekDaysHolder; +import java.util.function.Function; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ArgumentsSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest(properties = { + "monday=Mon-Day!", + "tuesday=TuesDAY#", + "wednesday=Wednes@day", + "thursday=THURSday^", + "friday=Fri:Day_%", + "saturday=Satur_DAY*", + "sunday=Sun+Day", +}, classes = WeekDaysHolder.class) +class LenientStringToEnumConverterUnitTest { + + @Autowired + private WeekDaysHolder holder; + + @ParameterizedTest + @ArgumentsSource(WeekDayHolderArgumentsProvider.class) + void givenPropertiesWhenInjectEnumThenValueIsPresent( + Function methodReference, WeekDays expected) { + WeekDays actual = methodReference.apply(holder); + assertThat(actual).isEqualTo(expected); + } +} diff --git a/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/NonConventionalStringToEnumLenientConverterUnitTest.java b/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/NonConventionalStringToEnumLenientConverterUnitTest.java new file mode 100644 index 0000000000..21c2e35799 --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/NonConventionalStringToEnumLenientConverterUnitTest.java @@ -0,0 +1,35 @@ +package com.baeldung.caseinsensitiveenum; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.baeldung.caseinsensitiveenum.nonconventionalweek.NonConventionalWeekDays; +import com.baeldung.caseinsensitiveenum.nonconventionalweek.NonConventionalWeekDaysHolder; +import com.baeldung.caseinsensitiveenum.providers.NonConventionalWeekDayHolderArgumentsProvider; +import java.util.function.Function; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ArgumentsSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest(properties = { + "monday=Mon-Day!", + "tuesday=TuesDAY#", + "wednesday=Wednes@day", + "thursday=THURSday^", + "friday=Fri:Day_%", + "saturday=Satur_DAY*", + "sunday=Sun+Day", +}, classes = NonConventionalWeekDaysHolder.class) +class NonConventionalStringToEnumLenientConverterUnitTest { + + @Autowired + private NonConventionalWeekDaysHolder holder; + + @ParameterizedTest + @ArgumentsSource(NonConventionalWeekDayHolderArgumentsProvider.class) + void givenPropertiesWhenInjectEnumThenValueIsPresent( + Function methodReference, NonConventionalWeekDays expected) { + NonConventionalWeekDays actual = methodReference.apply(holder); + assertThat(actual).isEqualTo(expected); + } +} diff --git a/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/SpELCaseInsensitiveStringToEnumConverterUnitTest.java b/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/SpELCaseInsensitiveStringToEnumConverterUnitTest.java new file mode 100644 index 0000000000..7d259c6de4 --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/SpELCaseInsensitiveStringToEnumConverterUnitTest.java @@ -0,0 +1,49 @@ +package com.baeldung.caseinsensitiveenum; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.baeldung.caseinsensitiveenum.CaseInsensitiveStringToEnumConverterUnitTest.WeekDayConverterConfiguration; +import com.baeldung.caseinsensitiveenum.converter.StrictNullableWeekDayConverter; +import com.baeldung.caseinsensitiveenum.providers.SpELWeekDayHolderArgumentsProvider; +import com.baeldung.caseinsensitiveenum.week.SpELWeekDaysHolder; +import com.baeldung.caseinsensitiveenum.week.WeekDays; +import java.util.function.Function; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ArgumentsSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Bean; +import org.springframework.core.convert.ConversionService; +import org.springframework.core.convert.support.DefaultConversionService; + +@SpringBootTest(properties = { + "monday=monday", + "tuesday=tuesday", + "wednesday=wednesday", + "thursday=THURSDAY", + "friday=Friday", + "saturday=saturDAY", + "sunday=sUndAy", +}, classes = {SpELWeekDaysHolder.class, WeekDayConverterConfiguration.class}) +class SpELCaseInsensitiveStringToEnumConverterUnitTest { + + public static class WeekDayConverterConfiguration { + @Bean + public ConversionService conversionService() { + final DefaultConversionService defaultConversionService = new DefaultConversionService(); + defaultConversionService.addConverter(new StrictNullableWeekDayConverter()); + return defaultConversionService; + } + } + + @Autowired + private SpELWeekDaysHolder holder; + + @ParameterizedTest + @ArgumentsSource(SpELWeekDayHolderArgumentsProvider.class) + void givenPropertiesWhenInjectEnumThenValueIsNull( + Function methodReference, WeekDays expected) { + WeekDays actual = methodReference.apply(holder); + assertThat(actual).isEqualTo(expected); + } +} diff --git a/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/StrictStringToEnumConverterNegativeUnitTest.java b/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/StrictStringToEnumConverterNegativeUnitTest.java new file mode 100644 index 0000000000..ffa3ee14be --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/StrictStringToEnumConverterNegativeUnitTest.java @@ -0,0 +1,49 @@ +package com.baeldung.caseinsensitiveenum; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.baeldung.caseinsensitiveenum.StrictStringToEnumConverterNegativeUnitTest.WeekDayConverterConfiguration; +import com.baeldung.caseinsensitiveenum.converter.StrictNullableWeekDayConverter; +import com.baeldung.caseinsensitiveenum.providers.WeekDayHolderArgumentsProvider; +import com.baeldung.caseinsensitiveenum.week.WeekDays; +import com.baeldung.caseinsensitiveenum.week.WeekDaysHolder; +import java.util.function.Function; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ArgumentsSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Bean; +import org.springframework.core.convert.ConversionService; +import org.springframework.core.convert.support.DefaultConversionService; + +@SpringBootTest(properties = { + "monday=monday", + "tuesday=tuesday", + "wednesday=wednesday", + "thursday=thursday", + "friday=friday", + "saturday=saturday", + "sunday=sunday", +}, classes = {WeekDaysHolder.class, WeekDayConverterConfiguration.class}) +class StrictStringToEnumConverterNegativeUnitTest { + + public static class WeekDayConverterConfiguration { + @Bean + public ConversionService conversionService() { + final DefaultConversionService defaultConversionService = new DefaultConversionService(); + defaultConversionService.addConverter(new StrictNullableWeekDayConverter()); + return defaultConversionService; + } + } + + @Autowired + private WeekDaysHolder holder; + + @ParameterizedTest + @ArgumentsSource(WeekDayHolderArgumentsProvider.class) + void givenPropertiesWhenInjectEnumThenValueIsNull( + Function methodReference, WeekDays ignored) { + WeekDays actual = methodReference.apply(holder); + assertThat(actual).isNull(); + } +} diff --git a/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/StrictStringToEnumConverterPositiveUnitTest.java b/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/StrictStringToEnumConverterPositiveUnitTest.java new file mode 100644 index 0000000000..2d057a4f4d --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/StrictStringToEnumConverterPositiveUnitTest.java @@ -0,0 +1,49 @@ +package com.baeldung.caseinsensitiveenum; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.baeldung.caseinsensitiveenum.StrictStringToEnumConverterNegativeUnitTest.WeekDayConverterConfiguration; +import com.baeldung.caseinsensitiveenum.converter.StrictNullableWeekDayConverter; +import com.baeldung.caseinsensitiveenum.providers.WeekDayHolderArgumentsProvider; +import com.baeldung.caseinsensitiveenum.week.WeekDays; +import com.baeldung.caseinsensitiveenum.week.WeekDaysHolder; +import java.util.function.Function; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ArgumentsSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Bean; +import org.springframework.core.convert.ConversionService; +import org.springframework.core.convert.support.DefaultConversionService; + +@SpringBootTest(properties = { + "monday=MONDAY", + "tuesday=TUESDAY", + "wednesday=WEDNESDAY", + "thursday=THURSDAY", + "friday=FRIDAY", + "saturday=SATURDAY", + "sunday=SUNDAY", +}, classes = {WeekDaysHolder.class, WeekDayConverterConfiguration.class}) +class StrictStringToEnumConverterPositiveUnitTest { + + public static class WeekDayConverterConfiguration { + @Bean + public ConversionService conversionService() { + final DefaultConversionService defaultConversionService = new DefaultConversionService(); + defaultConversionService.addConverter(new StrictNullableWeekDayConverter()); + return defaultConversionService; + } + } + + @Autowired + private WeekDaysHolder holder; + + @ParameterizedTest + @ArgumentsSource(WeekDayHolderArgumentsProvider.class) + void givenPropertiesWhenInjectEnumThenValueIsNull( + Function methodReference, WeekDays expected) { + WeekDays actual = methodReference.apply(holder); + assertThat(actual).isEqualTo(expected); + } +} diff --git a/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/providers/NonConventionalWeekDayHolderArgumentsProvider.java b/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/providers/NonConventionalWeekDayHolderArgumentsProvider.java new file mode 100644 index 0000000000..b4ed8f8388 --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/providers/NonConventionalWeekDayHolderArgumentsProvider.java @@ -0,0 +1,35 @@ +package com.baeldung.caseinsensitiveenum.providers; + + + +import static com.baeldung.caseinsensitiveenum.nonconventionalweek.NonConventionalWeekDays.Fri$Day$_$; +import static com.baeldung.caseinsensitiveenum.nonconventionalweek.NonConventionalWeekDays.Mon$Day; +import static com.baeldung.caseinsensitiveenum.nonconventionalweek.NonConventionalWeekDays.Satur$DAY_; +import static com.baeldung.caseinsensitiveenum.nonconventionalweek.NonConventionalWeekDays.Sun$Day; +import static com.baeldung.caseinsensitiveenum.nonconventionalweek.NonConventionalWeekDays.THURS$day_; +import static com.baeldung.caseinsensitiveenum.nonconventionalweek.NonConventionalWeekDays.Tues$DAY_; +import static com.baeldung.caseinsensitiveenum.nonconventionalweek.NonConventionalWeekDays.Wednes$day; + +import com.baeldung.caseinsensitiveenum.nonconventionalweek.NonConventionalWeekDays; +import com.baeldung.caseinsensitiveenum.nonconventionalweek.NonConventionalWeekDaysHolder; +import java.util.function.Function; +import java.util.stream.Stream; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.ArgumentsProvider; + +public class NonConventionalWeekDayHolderArgumentsProvider implements ArgumentsProvider { + + @Override + public Stream provideArguments(final ExtensionContext extensionContext) { + return Stream.of( + Arguments.of(((Function) NonConventionalWeekDaysHolder::getMonday),Mon$Day), + Arguments.of(((Function) NonConventionalWeekDaysHolder::getTuesday),Tues$DAY_), + Arguments.of(((Function) NonConventionalWeekDaysHolder::getWednesday),Wednes$day), + Arguments.of(((Function) NonConventionalWeekDaysHolder::getThursday),THURS$day_), + Arguments.of(((Function) NonConventionalWeekDaysHolder::getFriday),Fri$Day$_$), + Arguments.of(((Function) NonConventionalWeekDaysHolder::getSaturday),Satur$DAY_), + Arguments.of(((Function) NonConventionalWeekDaysHolder::getSunday),Sun$Day) + ); + } +} diff --git a/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/providers/SpELWeekDayHolderArgumentsProvider.java b/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/providers/SpELWeekDayHolderArgumentsProvider.java new file mode 100644 index 0000000000..d6e91be0a1 --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/providers/SpELWeekDayHolderArgumentsProvider.java @@ -0,0 +1,34 @@ +package com.baeldung.caseinsensitiveenum.providers; + + +import static com.baeldung.caseinsensitiveenum.week.WeekDays.FRIDAY; +import static com.baeldung.caseinsensitiveenum.week.WeekDays.MONDAY; +import static com.baeldung.caseinsensitiveenum.week.WeekDays.SATURDAY; +import static com.baeldung.caseinsensitiveenum.week.WeekDays.SUNDAY; +import static com.baeldung.caseinsensitiveenum.week.WeekDays.THURSDAY; +import static com.baeldung.caseinsensitiveenum.week.WeekDays.TUESDAY; +import static com.baeldung.caseinsensitiveenum.week.WeekDays.WEDNESDAY; + +import com.baeldung.caseinsensitiveenum.week.WeekDays; +import com.baeldung.caseinsensitiveenum.week.SpELWeekDaysHolder; +import java.util.function.Function; +import java.util.stream.Stream; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.ArgumentsProvider; + +public class SpELWeekDayHolderArgumentsProvider implements ArgumentsProvider { + + @Override + public Stream provideArguments(final ExtensionContext extensionContext) { + return Stream.of( + Arguments.of(((Function) SpELWeekDaysHolder::getMonday), MONDAY), + Arguments.of(((Function) SpELWeekDaysHolder::getTuesday), TUESDAY), + Arguments.of(((Function) SpELWeekDaysHolder::getWednesday), WEDNESDAY), + Arguments.of(((Function) SpELWeekDaysHolder::getThursday), THURSDAY), + Arguments.of(((Function) SpELWeekDaysHolder::getFriday), FRIDAY), + Arguments.of(((Function) SpELWeekDaysHolder::getSaturday), SATURDAY), + Arguments.of(((Function) SpELWeekDaysHolder::getSunday), SUNDAY) + ); + } +} diff --git a/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/providers/WeekDayHolderArgumentsProvider.java b/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/providers/WeekDayHolderArgumentsProvider.java new file mode 100644 index 0000000000..6c0ebd2a20 --- /dev/null +++ b/spring-boot-modules/spring-boot-properties-4/src/test/java/com/baeldung/caseinsensitiveenum/providers/WeekDayHolderArgumentsProvider.java @@ -0,0 +1,34 @@ +package com.baeldung.caseinsensitiveenum.providers; + + +import static com.baeldung.caseinsensitiveenum.week.WeekDays.FRIDAY; +import static com.baeldung.caseinsensitiveenum.week.WeekDays.MONDAY; +import static com.baeldung.caseinsensitiveenum.week.WeekDays.SATURDAY; +import static com.baeldung.caseinsensitiveenum.week.WeekDays.SUNDAY; +import static com.baeldung.caseinsensitiveenum.week.WeekDays.THURSDAY; +import static com.baeldung.caseinsensitiveenum.week.WeekDays.TUESDAY; +import static com.baeldung.caseinsensitiveenum.week.WeekDays.WEDNESDAY; + +import com.baeldung.caseinsensitiveenum.week.WeekDays; +import com.baeldung.caseinsensitiveenum.week.WeekDaysHolder; +import java.util.function.Function; +import java.util.stream.Stream; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.ArgumentsProvider; + +public class WeekDayHolderArgumentsProvider implements ArgumentsProvider { + + @Override + public Stream provideArguments(final ExtensionContext extensionContext) { + return Stream.of( + Arguments.of(((Function) WeekDaysHolder::getMonday), MONDAY), + Arguments.of(((Function) WeekDaysHolder::getTuesday), TUESDAY), + Arguments.of(((Function) WeekDaysHolder::getWednesday), WEDNESDAY), + Arguments.of(((Function) WeekDaysHolder::getThursday), THURSDAY), + Arguments.of(((Function) WeekDaysHolder::getFriday), FRIDAY), + Arguments.of(((Function) WeekDaysHolder::getSaturday), SATURDAY), + Arguments.of(((Function) WeekDaysHolder::getSunday), SUNDAY) + ); + } +}