diff --git a/service/src/main/java/greencity/service/NotificationServiceImpl.java b/service/src/main/java/greencity/service/NotificationServiceImpl.java index ca7f665b6..8b9031c1c 100644 --- a/service/src/main/java/greencity/service/NotificationServiceImpl.java +++ b/service/src/main/java/greencity/service/NotificationServiceImpl.java @@ -37,6 +37,8 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import static greencity.utils.NotificationUtils.resolveTimesInEnglish; +import static greencity.utils.NotificationUtils.resolveTimesInUkrainian; @Slf4j @Service @@ -384,28 +386,4 @@ private ScheduledEmailMessage createScheduledEmailMessage(Notification notificat private String createBaseLink(Notification notification) { return clientAddress + "/#/profile/" + notification.getTargetUser().getId() + "/notifications"; } - - private String resolveTimesInEnglish(final int number) { - return switch (number) { - case 1 -> ""; - case 2 -> "twice"; - default -> number + " times"; - }; - } - - private String resolveTimesInUkrainian(int number) { - number = Math.abs(number); - final int lastTwoDigits = number % 100; - final int lastDigit = number % 10; - - if (lastTwoDigits >= 11 && lastTwoDigits <= 19) { - return number + " разів"; - } - - return switch (lastDigit) { - case 1 -> ""; - case 2, 3, 4 -> number + " рази"; - default -> number + " разів"; - }; - } } diff --git a/service/src/main/java/greencity/service/UserNotificationServiceImpl.java b/service/src/main/java/greencity/service/UserNotificationServiceImpl.java index 79eaf66bd..7306fbac4 100644 --- a/service/src/main/java/greencity/service/UserNotificationServiceImpl.java +++ b/service/src/main/java/greencity/service/UserNotificationServiceImpl.java @@ -32,6 +32,8 @@ import java.util.Locale; import java.util.Optional; import java.util.ResourceBundle; +import static greencity.utils.NotificationUtils.resolveTimesInEnglish; +import static greencity.utils.NotificationUtils.resolveTimesInUkrainian; /** * Implementation of {@link UserNotificationService}. @@ -379,30 +381,6 @@ private NotificationDto createNotificationDto(Notification notification, String return dto; } - private String resolveTimesInEnglish(final int number) { - return switch (number) { - case 1 -> ""; - case 2 -> "twice"; - default -> number + " times"; - }; - } - - private String resolveTimesInUkrainian(int number) { - number = Math.abs(number); - final int lastTwoDigits = number % 100; - final int lastDigit = number % 10; - - if (lastTwoDigits >= 11 && lastTwoDigits <= 19) { - return number + " разів"; - } - - return switch (lastDigit) { - case 1 -> ""; - case 2, 3, 4 -> number + " рази"; - default -> number + " разів"; - }; - } - /** * Sends a new notification to a specified user. * diff --git a/service/src/main/java/greencity/utils/NotificationUtils.java b/service/src/main/java/greencity/utils/NotificationUtils.java new file mode 100644 index 000000000..af9d9c9fd --- /dev/null +++ b/service/src/main/java/greencity/utils/NotificationUtils.java @@ -0,0 +1,31 @@ +package greencity.utils; + +public class NotificationUtils { + public static String resolveTimesInEnglish(final int number) { + return switch (number) { + case 1 -> ""; + case 2 -> "twice"; + default -> number + " times"; + }; + } + + public static String resolveTimesInUkrainian(int number) { + number = Math.abs(number); + final int lastTwoDigits = number % 100; + final int lastDigit = number % 10; + + if (number == 1) { + return ""; + } + + if (lastTwoDigits >= 11 && lastTwoDigits <= 19) { + return number + " разів"; + } + + return switch (lastDigit) { + case 1 -> number + " раз"; + case 2, 3, 4 -> number + " рази"; + default -> number + " разів"; + }; + } +} diff --git a/service/src/test/java/greencity/utils/NotificationUtilsTest.java b/service/src/test/java/greencity/utils/NotificationUtilsTest.java new file mode 100644 index 000000000..5aaebfe48 --- /dev/null +++ b/service/src/test/java/greencity/utils/NotificationUtilsTest.java @@ -0,0 +1,51 @@ +package greencity.utils; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import java.util.stream.Stream; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class NotificationUtilsTest { + @ParameterizedTest(name = "Test resolveTimeInUkrainian with input {0}") + @MethodSource("provideUkrainianTestCases") + void testResolveTimeInUkrainian(int input, String expected) { + String result = NotificationUtils.resolveTimesInUkrainian(input); + assertEquals(expected, result); + } + + private static Stream provideUkrainianTestCases() { + return Stream.of( + Arguments.of(1, ""), + Arguments.of(2, "2 рази"), + Arguments.of(4, "4 рази"), + Arguments.of(5, "5 разів"), + Arguments.of(11, "11 разів"), + Arguments.of(19, "19 разів"), + Arguments.of(21, "21 раз"), + Arguments.of(22, "22 рази"), + Arguments.of(25, "25 разів"), + Arguments.of(100, "100 разів"), + Arguments.of(101, "101 раз"), + Arguments.of(102, "102 рази"), + Arguments.of(112, "112 разів"), + Arguments.of(123, "123 рази")); + } + + @ParameterizedTest(name = "Test resolveTimesInEnglish with input {0}") + @MethodSource("provideEnglishTestCases") + void testResolveTimesInEnglish(int input, String expected) { + String result = NotificationUtils.resolveTimesInEnglish(input); + assertEquals(expected, result); + } + + private static Stream provideEnglishTestCases() { + return Stream.of( + Arguments.of(1, ""), + Arguments.of(2, "twice"), + Arguments.of(3, "3 times"), + Arguments.of(5, "5 times"), + Arguments.of(11, "11 times"), + Arguments.of(21, "21 times")); + } +} \ No newline at end of file