From 736f44d8e4ee1a51ef3c8a39a572a44486b11d42 Mon Sep 17 00:00:00 2001 From: Anton Bondar <53192419+ABbondar@users.noreply.github.com> Date: Sat, 24 Jun 2023 11:58:26 +0300 Subject: [PATCH 01/80] addresses regexp (#1149) --- .../constant/ValidationConstant.java | 3 +- .../dto/courier/address/AddressDtoTest.java | 46 ++++++++++--------- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/service-api/src/main/java/greencity/constant/ValidationConstant.java b/service-api/src/main/java/greencity/constant/ValidationConstant.java index 4596de082..3e9d52c78 100644 --- a/service-api/src/main/java/greencity/constant/ValidationConstant.java +++ b/service-api/src/main/java/greencity/constant/ValidationConstant.java @@ -10,7 +10,8 @@ public class ValidationConstant { + "name cannot starts with a number or not a capital letter and could contain numbers and whitespaces"; public static final String CITY_UK_REGEXP = "^([А-ЯЇІЄҐ][а-яіїєґ]{0,39}[ʼ'`ʹ]?[а-яіїєґ]{1,39}($|[ -](?=[А-ЯЇІЄҐ]))){1,10}$"; - public static final String CITY_EN_REGEXP = "^([A-Z][a-z]{0,39}[ʼ'`ʹ]?[a-z]{1,39}($|[ -](?=[A-Z]))){1,10}$"; + public static final String CITY_EN_REGEXP = + "^([A-Z][a-z]{0,39}[ʼ'`ʹ]?[a-z]{0,39}'?[a-z]{0,39}($|[ -](?=[A-Z]))){1,10}$"; public static final String CH_EN = "[A-Za-z\\s-ʼ'`ʹ,.]"; public static final String CH_UA = "[ЁёІіЇїҐґЄєА-Яа-я\\s-ʼ'`ʹ,.]"; public static final String CH_NUM = "[-A-Za-zА-Яа-яЁёЇїІіЄєҐґ0-9.,ʼ'`ʹ—/\"\\s]"; diff --git a/service-api/src/test/java/greencity/dto/courier/address/AddressDtoTest.java b/service-api/src/test/java/greencity/dto/courier/address/AddressDtoTest.java index ecf47739e..9648e8432 100644 --- a/service-api/src/test/java/greencity/dto/courier/address/AddressDtoTest.java +++ b/service-api/src/test/java/greencity/dto/courier/address/AddressDtoTest.java @@ -20,10 +20,11 @@ class AddressDtoTest { @SneakyThrows @ParameterizedTest @MethodSource("provideFieldsAndValidValues") - void validHouseNumbersInAddressDtoTest(String houseNumber) { + void validFieldsInAddressDtoTest(String houseNumber, String cityEn) { var dto = AddressDto.builder() .id(1L) .houseNumber(houseNumber) + .cityEn(cityEn) .build(); ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); @@ -38,10 +39,11 @@ void validHouseNumbersInAddressDtoTest(String houseNumber) { @SneakyThrows @ParameterizedTest @MethodSource("provideFieldsAndInvalidValues") - void invalidHouseNumbersInAddressDtoTest(String houseNumber) { + void invalidFieldsInAddressDtoTest(String houseNumber, String cityEn) { var dto = AddressDto.builder() .id(1L) .houseNumber(houseNumber) + .cityEn(cityEn) .build(); ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); @@ -50,33 +52,33 @@ void invalidHouseNumbersInAddressDtoTest(String houseNumber) { Set> constraintViolations = validator.validate(dto); - assertThat(constraintViolations).hasSize(1); + assertThat(constraintViolations).hasSize(2); } private static Stream provideFieldsAndValidValues() { return Stream.of( - Arguments.of("1"), - Arguments.of("1F"), - Arguments.of("1B"), - Arguments.of("1Ї"), - Arguments.of("1-А"), - Arguments.of("1.Б"), - Arguments.of("1 G"), - Arguments.of("ЁёІіЇ"), - Arguments.of("їҐґЄє"), - Arguments.of("1/3"), - Arguments.of("35/34"), - Arguments.of("35-/34"), - Arguments.of("35-/ 34"), - Arguments.of("35-/\"34"), - Arguments.of("14\"o\"")); + Arguments.of("1", "Kharkiv"), + Arguments.of("1F", "Kyiv"), + Arguments.of("1B", "Pryp'yat'"), + Arguments.of("1Ї", "Kam'yanets Podilskyi"), + Arguments.of("1-А", "Korsun Shevchenkivskiy"), + Arguments.of("1.Б", "Bila Krynytsya"), + Arguments.of("1 G", "Kam'yanets Podilskyi"), + Arguments.of("ЁёІіЇ", "Bilgorod-Dnistrovskyi"), + Arguments.of("їҐґЄє", "Blagovishchens'k"), + Arguments.of("1/3", "Ternopil'"), + Arguments.of("35/34", "Vinnitsa"), + Arguments.of("35-/34", "Vilnohirs'k"), + Arguments.of("35-/ 34", "Rivne"), + Arguments.of("35-/\"34", "Pereyaslav"), + Arguments.of("14\"o\"", "Zytomyr")); } private static Stream provideFieldsAndInvalidValues() { return Stream.of( - Arguments.of(""), - Arguments.of("@#$"), - Arguments.of("Testtttttttt"), - Arguments.of("Тесттттттттт")); + Arguments.of("", "0Kharkiv"), + Arguments.of("@#$", "kyiv"), + Arguments.of("Testtttttttt", " kharkiv"), + Arguments.of("Тесттттттттт", "-Rivne")); } } From e28e931ae29d44c5819c04bb9f7a0f1abc755d49 Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Mon, 26 Jun 2023 11:22:18 +0300 Subject: [PATCH 02/80] Added UBS_EMPLOYEE to access notifications (#1148) --- core/src/main/java/greencity/configuration/SecurityConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/greencity/configuration/SecurityConfig.java b/core/src/main/java/greencity/configuration/SecurityConfig.java index 264a82360..546a06042 100644 --- a/core/src/main/java/greencity/configuration/SecurityConfig.java +++ b/core/src/main/java/greencity/configuration/SecurityConfig.java @@ -224,7 +224,7 @@ protected void configure(HttpSecurity http) throws Exception { "/notifications", "/notifications/**", "/notifications/quantityUnreadenNotifications") - .hasAnyRole(USER, ADMIN) + .hasAnyRole(USER, ADMIN, UBS_EMPLOYEE) .antMatchers(HttpMethod.PUT, UBS_LINK + "/userProfile/**", UBS_LINK + "/update-order-address") From 24c391712ab69b13399d82ab2cfe42c09b05286e Mon Sep 17 00:00:00 2001 From: Anatolii <108548978+Markiro1@users.noreply.github.com> Date: Mon, 26 Jun 2023 16:59:24 +0300 Subject: [PATCH 03/80] - unnecessary check removed (#1150) - extra test removed added new sql methods: deleteIfConfirmedQuantityIsZero() and deleteIfExportedQuantityIsZero() --- .../repository/OrderDetailRepository.java | 24 +++++++++++++++++++ .../service/ubs/UBSManagementServiceImpl.java | 14 +++++------ .../ubs/UBSManagementServiceImplTest.java | 18 -------------- 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/dao/src/main/java/greencity/repository/OrderDetailRepository.java b/dao/src/main/java/greencity/repository/OrderDetailRepository.java index 3d2dcaceb..665fef381 100644 --- a/dao/src/main/java/greencity/repository/OrderDetailRepository.java +++ b/dao/src/main/java/greencity/repository/OrderDetailRepository.java @@ -55,6 +55,30 @@ public interface OrderDetailRepository extends JpaRepository { + "WHERE ORDER_ID = :orderId AND BAG_ID = :bagId", nativeQuery = true) void updateConfirm(Integer valueConfirmed, Long orderId, Long bagId); + /** + * Method for delete Confirm value when it equals zero. + * + * @param orderId order id {@link Long} + * @param bagId bag id {@link Long} + * @author Anatolii Shapiro + */ + @Modifying + @Query(value = "DELETE FROM ORDER_BAG_MAPPING WHERE CONFIRMED_QUANTITY = 0 " + + "AND ORDER_ID = :orderId AND BAG_ID = :bagId", nativeQuery = true) + void deleteIfConfirmedQuantityIsZero(Long orderId, Long bagId); + + /** + * Method for delete Exported value when it equals zero. + * + * @param orderId order id {@link Long} + * @param bagId bag id {@link Long} + * @author Anatolii Shapiro + */ + @Modifying + @Query(value = "DELETE FROM ORDER_BAG_MAPPING WHERE EXPORTED_QUANTITY = 0 " + + "AND ORDER_ID = :orderId AND BAG_ID = :bagId", nativeQuery = true) + void deleteIfExportedQuantityIsZero(Long orderId, Long bagId); + /** * Method for INSERT new record for ability to update value in next steps. * diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java index 963de5dda..63f588d53 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java @@ -424,7 +424,7 @@ private Boolean isContainsExportedBags(CounterOrderDetailsDto dto) { /** * This is private method which formed {@link AddressExportDetailsDto} in order * to collect information about Address and order formed data and order id. - * + * * @param address {@link Address}. * @return {@link AddressExportDetailsDto}. * @@ -452,7 +452,7 @@ private AddressExportDetailsDto getAddressDtoForAdminPage(OrderAddress address) * about order data formed and about current order status and order payment * status with some translation with some language and arrays with orderStatuses * and OrderPaymentStatuses with translation. - * + * * @param order {@link Order}. * @return {@link GeneralOrderInfo}. * @@ -601,14 +601,14 @@ public void setOrderDetail(Long orderId, if (nonNull(confirmed)) { for (Map.Entry entry : confirmed.entrySet()) { if (Boolean.TRUE - .equals(orderDetailRepository.ifRecordExist(orderId, entry.getKey().longValue()) <= 0) - && entry.getValue() != 0) { + .equals(orderDetailRepository.ifRecordExist(orderId, entry.getKey().longValue()) <= 0)) { orderDetailRepository.insertNewRecord(orderId, entry.getKey().longValue()); orderDetailRepository.updateAmount(0, orderId, entry.getKey().longValue()); } orderDetailRepository .updateConfirm(entry.getValue(), orderId, entry.getKey().longValue()); + orderDetailRepository.deleteIfConfirmedQuantityIsZero(orderId, entry.getKey().longValue()); } } @@ -622,6 +622,7 @@ public void setOrderDetail(Long orderId, orderDetailRepository .updateExporter(entry.getValue(), orderId, entry.getKey().longValue()); + orderDetailRepository.deleteIfExportedQuantityIsZero(orderId, entry.getKey().longValue()); } } @@ -1538,7 +1539,6 @@ public void saveAdminCommentToOrder(AdminCommentDto adminCommentDto, String emai * @param ecoNumberDto {@link EcoNumberDto}. * @param orderId {@link Long}. * @param email {@link String}. - * * @author Yuriy Bahlay, Sikhovskiy Rostyslav. */ @Override @@ -1582,7 +1582,6 @@ private String collectInfoAboutChangesOfEcoNumber(Collection newEcoNumbe * * @param updateOrderPageDto {@link UpdateOrderPageAdminDto}. * @param orderId {@link Long}. - * * @author Yuriy Bahlay, Sikhovskiy Rostyslav. */ @Override @@ -1691,10 +1690,9 @@ private List listAvailableEmployeeWithPosition(Order order, Position p /** * This method checks if Employee is assigned to the order. - * + * * @param orderId - ID of chosen order {@link Long}. * @param email - employee's email {@link String}. - * * @return {@link Boolean} */ public Boolean checkEmployeeForOrder(Long orderId, String email) { diff --git a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java index fc548e794..8ff1bd1db 100644 --- a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java @@ -1335,24 +1335,6 @@ void testSetOrderDetailFormedWithBagNoPresent() { } - @Test - void testSetOrderDetailWithBagConfirmedHasValueZero() { - when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto())); - when(bagRepository.findCapacityById(1)).thenReturn(1); - when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.empty()); - - UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().setAmountOfBagsConfirmed(Map.of(1, 0)); - - ubsManagementService.setOrderDetail(1L, - UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), - UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "test@gmail.com"); - - verify(orderDetailRepository, times(0)).updateExporter(anyInt(), anyLong(), anyLong()); - verify(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); - - } - @Test void testSetOrderDetailNotTakenOut() { when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusNotTakenOutDto())); From f87ba60eddc2942c49bd4af63b44623b8d09d560 Mon Sep 17 00:00:00 2001 From: Maksym Date: Tue, 27 Jun 2023 12:18:23 +0300 Subject: [PATCH 04/80] #5978 [UBS] update notification templates (#1151) * updated notification templates * updated service and tests * fix test --- .../db/changelog/db.changelog-master.xml | 1 + ...ication-platforms-body-body_eng-Lenets.xml | 135 ++++++++++++++++++ .../notification/NotificationServiceImpl.java | 67 ++++++--- .../src/test/java/greencity/ModelUtils.java | 6 +- .../NotificationServiceImplTest.java | 31 +++- 5 files changed, 211 insertions(+), 29 deletions(-) create mode 100644 dao/src/main/resources/db/changelog/logs/ch-upd-notification-platforms-body-body_eng-Lenets.xml diff --git a/dao/src/main/resources/db/changelog/db.changelog-master.xml b/dao/src/main/resources/db/changelog/db.changelog-master.xml index 5ab82d83e..9bf308708 100644 --- a/dao/src/main/resources/db/changelog/db.changelog-master.xml +++ b/dao/src/main/resources/db/changelog/db.changelog-master.xml @@ -210,4 +210,5 @@ + \ No newline at end of file diff --git a/dao/src/main/resources/db/changelog/logs/ch-upd-notification-platforms-body-body_eng-Lenets.xml b/dao/src/main/resources/db/changelog/logs/ch-upd-notification-platforms-body-body_eng-Lenets.xml new file mode 100644 index 000000000..8b7737a7b --- /dev/null +++ b/dao/src/main/resources/db/changelog/logs/ch-upd-notification-platforms-body-body_eng-Lenets.xml @@ -0,0 +1,135 @@ + + + + + + + notification_id=1 + + + + notification_id=1 + + + + + notification_id=2 + + + + notification_id=2 + + + + + notification_id=3 + + + + notification_id=3 + + + + + notification_id=4 + + + + notification_id=4 + + + + + notification_id=5 + + + + notification_id=5 + + + + + notification_id=6 + + + + notification_id=6 + + + + + notification_id=7 + + + + notification_id=7 + + + + + notification_id=8 + + + + notification_id=8 + + + + + notification_id=9 + + + + notification_id=9 + + + + + notification_id=10 + + + + notification_id=10 + + + + + notification_id=11 + + + + notification_id=11 + + + + + notification_id=12 + + + + notification_id=12 + + + + + notification_id=13 + + + + notification_id=13 + + + + + + id=11 + + + + id=11 + + + \ No newline at end of file diff --git a/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java b/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java index 4cd1b2453..56d7aec6a 100644 --- a/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java +++ b/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java @@ -133,12 +133,11 @@ private Set initialiseNotificationParametersForUnpaidOrde */ @Override public void notifyPaidOrder(Order order) { - UserNotification userNotification = new UserNotification(); - userNotification.setNotificationType(NotificationType.ORDER_IS_PAID); - userNotification.setUser(order.getUser()); - userNotification.setOrder(order); - UserNotification notification = userNotificationRepository.save(userNotification); - sendNotificationsForBotsAndEmail(notification, 0L); + NotificationParameter orderNumber = NotificationParameter.builder() + .key(ORDER_NUMBER_KEY) + .value(order.getId().toString()) + .build(); + fillAndSendNotification(Set.of(orderNumber), order, NotificationType.ORDER_IS_PAID); } @Override @@ -156,20 +155,29 @@ public void notifyPaidOrder(PaymentResponseDto dto) { @Override public void notifyCourierItineraryFormed(Order order) { Set parameters = new HashSet<>(); - parameters.add(NotificationParameter.builder().key("date") + parameters.add(NotificationParameter.builder() + .key("date") .value(order.getDeliverFrom() != null ? order.getDeliverFrom().format(DateTimeFormatter.ofPattern("dd-MM")) : "") .build()); - parameters.add(NotificationParameter.builder().key("startTime") + parameters.add(NotificationParameter.builder() + .key("startTime") .value(order.getDeliverFrom() != null ? order.getDeliverFrom().format(DateTimeFormatter.ofPattern("hh:mm")) : "") .build()); - parameters.add(NotificationParameter.builder().key("endTime") + parameters.add(NotificationParameter.builder() + .key("endTime") .value( order.getDeliverTo() != null ? order.getDeliverTo().format(DateTimeFormatter.ofPattern("hh:mm")) : "") .build()); - parameters.add(NotificationParameter.builder().key("phoneNumber") - .value("+380638175035, +380931038987").build()); + parameters.add(NotificationParameter.builder() + .key("phoneNumber") + .value("+380638175035, +380931038987") + .build()); + parameters.add(NotificationParameter.builder() + .key(ORDER_NUMBER_KEY) + .value(order.getId().toString()) + .build()); fillAndSendNotification(parameters, order, NotificationType.COURIER_ITINERARY_FORMED); } @@ -300,12 +308,22 @@ public void notifyBonuses(Order order, Long overpayment) { Integer exportedBags = order.getExportedQuantity().values().stream() .reduce(0, Integer::sum); - parameters.add(NotificationParameter.builder().key("overpayment") - .value(String.valueOf(overpayment)).build()); - parameters.add(NotificationParameter.builder().key("realPackageNumber") - .value(exportedBags.toString()).build()); - parameters.add(NotificationParameter.builder().key("paidPackageNumber") - .value(paidBags.toString()).build()); + parameters.add(NotificationParameter.builder() + .key("overpayment") + .value(String.valueOf(overpayment)) + .build()); + parameters.add(NotificationParameter.builder() + .key("realPackageNumber") + .value(exportedBags.toString()) + .build()); + parameters.add(NotificationParameter.builder() + .key("paidPackageNumber") + .value(paidBags.toString()) + .build()); + parameters.add(NotificationParameter.builder() + .key(ORDER_NUMBER_KEY) + .value(order.getId().toString()) + .build()); fillAndSendNotification(parameters, order, NotificationType.ACCRUED_BONUSES_TO_ACCOUNT); } @@ -319,9 +337,13 @@ public void notifyBonusesFromCanceledOrder(Order order) { if (isNull(pointsToReturn) || pointsToReturn == 0) { return; } - parameters.add(NotificationParameter.builder().key("returnedPayment") + parameters.add(NotificationParameter.builder() + .key("returnedPayment") .value(String.valueOf(order.getPointsToUse())).build()); - + parameters.add(NotificationParameter.builder() + .key(ORDER_NUMBER_KEY) + .value(order.getId().toString()) + .build()); fillAndSendNotification(parameters, order, NotificationType.BONUSES_FROM_CANCELLED_ORDER); } @@ -335,7 +357,12 @@ public void notifyAddViolation(Long orderId) { .orElseThrow(() -> new NotFoundException(VIOLATION_DOES_NOT_EXIST)); parameters.add(NotificationParameter.builder() .key("violationDescription") - .value(violation.getDescription()).build()); + .value(violation.getDescription()) + .build()); + parameters.add(NotificationParameter.builder() + .key(ORDER_NUMBER_KEY) + .value(orderId.toString()) + .build()); fillAndSendNotification(parameters, violation.getOrder(), NotificationType.VIOLATION_THE_RULES); } diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index e29b3c476..1ba67765a 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -2444,7 +2444,8 @@ private static Set createNotificationParameterSet() { .value(String.valueOf(0)).build()); parameters.add(NotificationParameter.builder().key("paidPackageNumber") .value(String.valueOf(0)).build()); - + parameters.add(NotificationParameter.builder().key("orderNumber") + .value("45").build()); return parameters; } @@ -2453,7 +2454,8 @@ private static Set createNotificationParameterSet2() { parameters.add(NotificationParameter.builder().key("returnedPayment") .value(String.valueOf(200L)).build()); - + parameters.add(NotificationParameter.builder().key("orderNumber") + .value("45").build()); return parameters; } diff --git a/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java b/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java index 6aeee1a37..bebf741f7 100644 --- a/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java +++ b/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java @@ -177,10 +177,18 @@ void testNotifyPaidOrder() { @SneakyThrows void notifyPaidOrder() { Order order = Order.builder().id(1L).build(); + NotificationParameter orderNumber = NotificationParameter.builder() + .key("orderNumber") + .value(order.getId().toString()) + .build(); when(orderRepository.findById(order.getId())).thenReturn(Optional.of(order)); + when(notificationParameterRepository.saveAll(Set.of(orderNumber))).thenReturn(List.of(orderNumber)); + when(userNotificationRepository.save(TEST_USER_NOTIFICATION)).thenReturn(TEST_USER_NOTIFICATION); PaymentResponseDto dto = PaymentResponseDto.builder().order_id("1_1").build(); notificationService.notifyPaidOrder(dto); verify(notificationService).notifyPaidOrder(order); + verify(userNotificationRepository).save(any(UserNotification.class)); + verify(notificationParameterRepository).saveAll(Set.of(orderNumber)); } @Test @@ -198,7 +206,6 @@ void testNotifyCourierItineraryFormed() { userNotification.setNotificationType(NotificationType.COURIER_ITINERARY_FORMED); userNotification.setUser(order.getUser()); userNotification.setOrder(order); - when(userNotificationRepository.save(any())).thenReturn(userNotification); List parameters = new LinkedList<>(); parameters.add(NotificationParameter.builder().key("date") @@ -209,6 +216,10 @@ void testNotifyCourierItineraryFormed() { .value(order.getDeliverTo().format(DateTimeFormatter.ofPattern("hh:mm"))).build()); parameters.add(NotificationParameter.builder().key("phoneNumber") .value("+380638175035, +380931038987").build()); + parameters.add(NotificationParameter.builder().key("orderNumber") + .value(order.getId().toString()).build()); + + when(userNotificationRepository.save(any())).thenReturn(userNotification); parameters.forEach(parameter -> parameter.setUserNotification(userNotification)); when(notificationParameterRepository.saveAll(new HashSet<>(parameters))).thenReturn(parameters); @@ -217,7 +228,6 @@ void testNotifyCourierItineraryFormed() { verify(userNotificationRepository).save(any()); verify(notificationParameterRepository).saveAll(new HashSet<>(parameters)); - } @Test @@ -255,18 +265,25 @@ void testNotifyBonusesFromCanceledOrder() { @Test void testNotifyAddViolation() { + Set parameters = new HashSet<>(); + parameters.add(NotificationParameter.builder() + .key("violationDescription") + .value("violation description") + .build()); + parameters.add(NotificationParameter.builder() + .key("orderNumber") + .value("46") + .build()); Violation violation = TEST_VIOLATION.setOrder(TEST_ORDER_4); when(violationRepository.findByOrderId(TEST_ORDER_4.getId())).thenReturn(Optional.of(violation)); when(userNotificationRepository.save(TEST_USER_NOTIFICATION_3)).thenReturn(TEST_USER_NOTIFICATION_3); - TEST_NOTIFICATION_PARAMETER.setUserNotification(TEST_USER_NOTIFICATION_3); - when(notificationParameterRepository.saveAll(Collections.singleton(TEST_NOTIFICATION_PARAMETER))) - .thenReturn(Collections.singletonList(TEST_NOTIFICATION_PARAMETER)); - TEST_NOTIFICATION_PARAMETER.setUserNotification(TEST_USER_NOTIFICATION_3); + parameters.forEach(p -> p.setUserNotification(TEST_USER_NOTIFICATION_3)); + when(notificationParameterRepository.saveAll(parameters)).thenReturn(new LinkedList<>(parameters)); notificationService.notifyAddViolation(TEST_ORDER_4.getId()); verify(userNotificationRepository).save(any()); - verify(notificationParameterRepository).saveAll(Collections.singleton(TEST_NOTIFICATION_PARAMETER)); + verify(notificationParameterRepository).saveAll(parameters); } @Test From e0b7006ad8da5623d4dd29b429c36cf58940be6c Mon Sep 17 00:00:00 2001 From: Maksym Date: Tue, 27 Jun 2023 16:14:55 +0300 Subject: [PATCH 05/80] update big_order_table (#1152) --- .../db/changelog/db.changelog-master.xml | 1 + ...er_table_view-with-bags-sorting-Lenets.xml | 121 ++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 dao/src/main/resources/db/changelog/logs/ch-update_big_order_table_view-with-bags-sorting-Lenets.xml diff --git a/dao/src/main/resources/db/changelog/db.changelog-master.xml b/dao/src/main/resources/db/changelog/db.changelog-master.xml index 9bf308708..c7a7969cb 100644 --- a/dao/src/main/resources/db/changelog/db.changelog-master.xml +++ b/dao/src/main/resources/db/changelog/db.changelog-master.xml @@ -211,4 +211,5 @@ + \ No newline at end of file diff --git a/dao/src/main/resources/db/changelog/logs/ch-update_big_order_table_view-with-bags-sorting-Lenets.xml b/dao/src/main/resources/db/changelog/logs/ch-update_big_order_table_view-with-bags-sorting-Lenets.xml new file mode 100644 index 000000000..80733c08b --- /dev/null +++ b/dao/src/main/resources/db/changelog/logs/ch-update_big_order_table_view-with-bags-sorting-Lenets.xml @@ -0,0 +1,121 @@ + + + + + + + with group_capacity as + (SELECT this.order_id, + case when + ((select sum(obm.confirmed_quantity) from order_bag_mapping obm + where obm.order_id = this.order_id) is NULL + and (select sum(obm.exported_quantity) from order_bag_mapping obm + where obm.order_id = this.order_id) is NULL) + then concat(bag.capacity,'л - ',sum(amount),'шт') + when ((select sum(obm.exported_quantity) from order_bag_mapping obm + where obm.order_id = this.order_id) is NULL + and (select sum(obm.confirmed_quantity) from order_bag_mapping obm + where obm.order_id = this.order_id) is not NULL) + then concat(bag.capacity,'л - ',sum(confirmed_quantity),'шт') + when ((select sum(obm.exported_quantity) from order_bag_mapping obm + where obm.order_id = this.order_id) is not NULL) + then concat(bag.capacity,'л - ',sum(exported_quantity),'шт') + end + as amount_cap + from order_bag_mapping this + left join bag on this.bag_id = bag.id + group by bag.capacity , this.order_id + order by this.order_id asc, bag.capacity desc) + + SELECT + o.id as id, + o.order_status as order_status , + o.order_payment_status as order_payment_status, + cast(o.order_date as date) as order_date, + cast ((select max(cast(p.settlement_date as date)) from payment p where p.order_id = o.id and o.order_payment_status='PAID') as date ) as payment_date, + concat_ws(' ',uu.first_name,uu.last_name) as client_name, + uu.phone_number as client_phone_number, + uu.email as client_email, + concat_ws(' ',uu.sender_first_name,uu.sender_last_name ) as sender_name, + uu.sender_phone_number as sender_phone, + uu.sender_email as sender_email, + u.violations as violations_amount, + a.region as region, + a.city as city, + a.district as district, + concat_ws(', ',concat(a.street , ' ' , a.house_number), + case when (a.house_corpus) is not null and a.house_corpus != '' then concat('корп.',a.house_corpus) else 'корп.- ' end , + case when (a.entrance_number) is not null and a.entrance_number != '' then concat('п.', a.entrance_number) else 'п.- ' end) + as address, + a.address_comment as comment_to_address_for_client, + (select string_agg(amount_cap,'; ')from group_capacity + where order_id = o.id) as bag_amount, + o.sum_total_amount_without_discounts as total_order_sum, + (select string_agg(c.code,', ') from certificate c where c.order_id=o.id) as order_certificate_code, + cast(coalesce((select sum(c.points) from certificate c where c.order_id=o.id), 0) + + coalesce(o.points_to_use, 0) as bigint) as general_discount, + cast(coalesce(o.sum_total_amount_without_discounts, 0) + - (coalesce((select sum(p.amount) from payment p where p.order_id=o.id and p.payment_status='PAID'), 0) + + (coalesce((select sum(c.points) from certificate c where c.order_id=o.id), 0) * 100 + + coalesce(o.points_to_use, 0) * 100)) as bigint ) as amount_due, + o.comment as comment_for_order_by_client, + cast(coalesce((select sum(p.amount) from payment p where p.order_id=o.id and p.payment_status='PAID'), 0) + + (coalesce((select sum(c.points) from certificate c where c.order_id=o.id), 0) * 100 + coalesce(o.points_to_use, 0) * 100) as bigint) as total_payment, + o.date_of_export as date_of_export, + concat_ws('-', cast(o.deliver_from as time), cast (o.deliver_to as time)) as time_of_export, + (select string_agg(oe.additional_order, '; ') from order_additional oe where oe.orders_id = o.id) as id_order_from_shop, + r.name as receiving_station, + r.id as receiving_station_id, + + (select concat_ws(', ',e.first_name,e.last_name) from employee_order_position eop + left join employees e on eop.employee_id = e.id where order_id =o.id and eop.position_id=3 ) as responsible_logic_man, + (select e.id from employee_order_position eop + left join employees e on eop.employee_id = e.id where order_id =o.id and eop.position_id=3 ) as responsible_logic_man_id, + + (select concat_ws(', ',e.first_name,e.last_name) from employee_order_position eop + left join employees e on eop.employee_id = e.id where order_id =o.id and eop.position_id=5 ) as responsible_driver, + (select e.id from employee_order_position eop + left join employees e on eop.employee_id = e.id where order_id =o.id and eop.position_id=5 ) as responsible_driver_id, + + (select concat_ws(', ',e.first_name,e.last_name) from employee_order_position eop + left join employees e on eop.employee_id = e.id where order_id =o.id and eop.position_id=2 ) as responsible_caller, + (select e.id from employee_order_position eop + left join employees e on eop.employee_id = e.id where order_id =o.id and eop.position_id=2 ) as responsible_caller_id, + + (select concat_ws(', ',e.first_name,e.last_name) from employee_order_position eop + left join employees e on eop.employee_id = e.id where order_id =o.id and eop.position_id=4 ) as responsible_navigator, + (select e.id from employee_order_position eop + left join employees e on eop.employee_id = e.id where order_id =o.id and eop.position_id=4 ) as responsible_navigator_id, + o.blocked as is_blocked, + concat_ws(', ',e.first_name,e.last_name) as blocked_by, + a.region_en as region_en, + a.city_en as city_en, + a.district_en as district_en, + concat_ws(', ',concat(a.street_en , ' ' , a.house_number), + case when (a.house_corpus) is not null and a.house_corpus != '' then concat('b.',a.house_corpus) else 'b.- ' end , + case when (a.entrance_number) is not null and a.entrance_number != '' then concat('e.', a.entrance_number) else 'e.- ' end) + as address_en, + o.tariffs_info_id as tariffs_info_id, + o.admin_comment as comment_for_order_by_admin + + from orders o + + left join employees e on o.employee_id = e.id + left join receiving_stations r on o.receiving_station_id = r.id + left join ubs_user uu on o.ubs_user_id = uu.id + left join order_address a on uu.id = a.id + left join users u on o.users_id = u.id + + + + + + + + + + \ No newline at end of file From af9fd1280c356d52b502ec7cf59803f6c91603bd Mon Sep 17 00:00:00 2001 From: Yurii Midianyi <45738210+Yurii-Midianyi@users.noreply.github.com> Date: Fri, 30 Jun 2023 11:46:53 +0300 Subject: [PATCH 06/80] changed repetitive strings on constants (#1154) * changed repetitive strings on constants * used maven formatter * created tests for OrderStatus * removed public modifier from the class name * changed format of the file --- .../java/greencity/enums/OrderStatus.java | 23 +++++++++---- .../java/greencity/enums/OrderStatusTest.java | 32 +++++++++++++++++++ 2 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 dao/src/test/java/greencity/enums/OrderStatusTest.java diff --git a/dao/src/main/java/greencity/enums/OrderStatus.java b/dao/src/main/java/greencity/enums/OrderStatus.java index 3b2e20e68..456312de6 100644 --- a/dao/src/main/java/greencity/enums/OrderStatus.java +++ b/dao/src/main/java/greencity/enums/OrderStatus.java @@ -3,16 +3,25 @@ import java.util.Arrays; public enum OrderStatus { - FORMED(1, "ADJUSTMENT", "BROUGHT_IT_HIMSELF", OrderStatus.CANCELED_STR), - ADJUSTMENT(2, "FORMED", "BROUGHT_IT_HIMSELF", "CONFIRMED", OrderStatus.CANCELED_STR), - BROUGHT_IT_HIMSELF(3, "DONE", OrderStatus.CANCELED_STR), - CONFIRMED(4, "FORMED", "ON_THE_ROUTE", "BROUGHT_IT_HIMSELF", OrderStatus.CANCELED_STR), - ON_THE_ROUTE(5, "DONE", "NOT_TAKEN_OUT", OrderStatus.CANCELED_STR), - DONE(6, "DONE"), - NOT_TAKEN_OUT(7, "ADJUSTMENT", "BROUGHT_IT_HIMSELF", OrderStatus.CANCELED_STR), + FORMED(1, OrderStatus.ADJUSTMENT_STR, OrderStatus.BROUGHT_IT_HIMSELF_STR, OrderStatus.CANCELED_STR), + ADJUSTMENT(2, OrderStatus.FORMED_STR, OrderStatus.BROUGHT_IT_HIMSELF_STR, OrderStatus.CONFIRMED_STR, + OrderStatus.CANCELED_STR), + BROUGHT_IT_HIMSELF(3, OrderStatus.DONE_STR, OrderStatus.CANCELED_STR), + CONFIRMED(4, OrderStatus.FORMED_STR, OrderStatus.ON_THE_ROUTE_STR, OrderStatus.BROUGHT_IT_HIMSELF_STR, + OrderStatus.CANCELED_STR), + ON_THE_ROUTE(5, OrderStatus.DONE_STR, OrderStatus.NOT_TAKEN_OUT_STR, OrderStatus.CANCELED_STR), + DONE(6, OrderStatus.DONE_STR), + NOT_TAKEN_OUT(7, OrderStatus.ADJUSTMENT_STR, OrderStatus.BROUGHT_IT_HIMSELF_STR, OrderStatus.CANCELED_STR), CANCELED(8, OrderStatus.CANCELED_STR); private static final String CANCELED_STR = "CANCELED"; + private static final String BROUGHT_IT_HIMSELF_STR = "BROUGHT_IT_HIMSELF"; + private static final String ADJUSTMENT_STR = "ADJUSTMENT"; + private static final String DONE_STR = "DONE"; + private static final String FORMED_STR = "FORMED"; + private static final String CONFIRMED_STR = "CONFIRMED"; + private static final String ON_THE_ROUTE_STR = "ON_THE_ROUTE"; + private static final String NOT_TAKEN_OUT_STR = "NOT_TAKEN_OUT"; private final int statusValue; private final String[] possibleStatus; diff --git a/dao/src/test/java/greencity/enums/OrderStatusTest.java b/dao/src/test/java/greencity/enums/OrderStatusTest.java new file mode 100644 index 000000000..5f93d799a --- /dev/null +++ b/dao/src/test/java/greencity/enums/OrderStatusTest.java @@ -0,0 +1,32 @@ +package greencity.enums; + +import org.junit.jupiter.api.Test; +import static greencity.enums.OrderStatus.getConvertedEnumFromLongToEnum; +import static org.junit.jupiter.api.Assertions.*; + +class OrderStatusTest { + + @Test + void getNumValueTest() { + assertEquals(1, OrderStatus.FORMED.getNumValue()); + assertEquals(2, OrderStatus.ADJUSTMENT.getNumValue()); + assertEquals(3, OrderStatus.BROUGHT_IT_HIMSELF.getNumValue()); + assertEquals(4, OrderStatus.CONFIRMED.getNumValue()); + assertEquals(5, OrderStatus.ON_THE_ROUTE.getNumValue()); + assertEquals(6, OrderStatus.DONE.getNumValue()); + assertEquals(7, OrderStatus.NOT_TAKEN_OUT.getNumValue()); + assertEquals(8, OrderStatus.CANCELED.getNumValue()); + } + + @Test + void getConvertedEnumFromLongToEnumTest() { + assertEquals(OrderStatus.ON_THE_ROUTE.toString(), getConvertedEnumFromLongToEnum(5L)); + assertEquals("", getConvertedEnumFromLongToEnum(-22L)); + } + + @Test + void checkPossibleStatusTest() { + assertTrue(OrderStatus.FORMED.checkPossibleStatus("ADJUSTMENT")); + assertFalse(OrderStatus.ADJUSTMENT.checkPossibleStatus("ON_THE_ROUTE")); + } +} From ca4240dd2b11a829c5a82492580e04b4d43b1497 Mon Sep 17 00:00:00 2001 From: Yurii Midianyi <45738210+Yurii-Midianyi@users.noreply.github.com> Date: Mon, 3 Jul 2023 10:59:08 +0300 Subject: [PATCH 07/80] Fix code smell in table column width for employee test (#1158) * refactored test to fix code smell and added coverage * refactored issues with code styling * deleted unused library * changed name for constants according to the code conventions * fixed method imports from library --- dao/pom.xml | 5 + .../TableColumnWidthForEmployeeTest.java | 117 ++++++++++++------ 2 files changed, 83 insertions(+), 39 deletions(-) diff --git a/dao/pom.xml b/dao/pom.xml index 7f7a2150b..6eed0dea8 100644 --- a/dao/pom.xml +++ b/dao/pom.xml @@ -41,6 +41,11 @@ ${junit-jupiter.version} test + + org.junit.jupiter + junit-jupiter-params + test + \ No newline at end of file diff --git a/dao/src/test/java/greencity/entity/table/TableColumnWidthForEmployeeTest.java b/dao/src/test/java/greencity/entity/table/TableColumnWidthForEmployeeTest.java index ef6af1cac..048d65af5 100644 --- a/dao/src/test/java/greencity/entity/table/TableColumnWidthForEmployeeTest.java +++ b/dao/src/test/java/greencity/entity/table/TableColumnWidthForEmployeeTest.java @@ -2,49 +2,88 @@ import greencity.entity.user.employee.Employee; import org.junit.jupiter.api.Test; - +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; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; class TableColumnWidthForEmployeeTest { + private static final Employee EMPLOYEE = Employee.builder().build(); + private static final TableColumnWidthForEmployee TABLE_COLUMN_WIDTH = new TableColumnWidthForEmployee(EMPLOYEE); + @Test - void TableColumnWidthForEmployeeWithDefaultWidthTest() { - Employee employee = Employee.builder().build(); - TableColumnWidthForEmployee tableColumnWidth = new TableColumnWidthForEmployee(employee); + void checkTableColumnWidthEmployee() { + assertEquals(EMPLOYEE, TABLE_COLUMN_WIDTH.getEmployee()); + } + + static Stream testArguments() { int defaultWidth = 120; - assertEquals(employee, tableColumnWidth.getEmployee()); - assertEquals(defaultWidth, tableColumnWidth.getAddress()); - assertEquals(defaultWidth, tableColumnWidth.getAmountDue()); - assertEquals(defaultWidth, tableColumnWidth.getBagsAmount()); - assertEquals(defaultWidth, tableColumnWidth.getBlockedBy()); - assertEquals(defaultWidth, tableColumnWidth.getCity()); - assertEquals(defaultWidth, tableColumnWidth.getClientEmail()); - assertEquals(defaultWidth, tableColumnWidth.getClientName()); - assertEquals(defaultWidth, tableColumnWidth.getClientPhone()); - assertEquals(defaultWidth, tableColumnWidth.getCommentForOrderByClient()); - assertEquals(defaultWidth, tableColumnWidth.getCommentToAddressForClient()); - assertEquals(defaultWidth, tableColumnWidth.getCommentsForOrder()); - assertEquals(defaultWidth, tableColumnWidth.getDateOfExport()); - assertEquals(defaultWidth, tableColumnWidth.getDistrict()); - assertEquals(defaultWidth, tableColumnWidth.getGeneralDiscount()); - assertEquals(defaultWidth, tableColumnWidth.getOrderId()); - assertEquals(defaultWidth, tableColumnWidth.getIdOrderFromShop()); - assertEquals(defaultWidth, tableColumnWidth.getOrderCertificateCode()); - assertEquals(defaultWidth, tableColumnWidth.getOrderDate()); - assertEquals(defaultWidth, tableColumnWidth.getOrderPaymentStatus()); - assertEquals(defaultWidth, tableColumnWidth.getOrderStatus()); - assertEquals(defaultWidth, tableColumnWidth.getPaymentDate()); - assertEquals(defaultWidth, tableColumnWidth.getReceivingStatus()); - assertEquals(defaultWidth, tableColumnWidth.getRegion()); - assertEquals(defaultWidth, tableColumnWidth.getResponsibleCaller()); - assertEquals(defaultWidth, tableColumnWidth.getResponsibleDriver()); - assertEquals(defaultWidth, tableColumnWidth.getResponsibleLogicMan()); - assertEquals(defaultWidth, tableColumnWidth.getResponsibleNavigator()); - assertEquals(defaultWidth, tableColumnWidth.getSenderEmail()); - assertEquals(defaultWidth, tableColumnWidth.getSenderName()); - assertEquals(defaultWidth, tableColumnWidth.getSenderPhone()); - assertEquals(defaultWidth, tableColumnWidth.getTimeOfExport()); - assertEquals(defaultWidth, tableColumnWidth.getTotalOrderSum()); - assertEquals(defaultWidth, tableColumnWidth.getTotalPayment()); - assertEquals(defaultWidth, tableColumnWidth.getViolationsAmount()); + return Stream.of( + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getAddress()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getAmountDue()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getBagsAmount()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getBlockedBy()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getCity()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getClientEmail()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getClientName()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getClientPhone()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getCommentForOrderByClient()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getCommentToAddressForClient()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getCommentsForOrder()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getDateOfExport()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getDistrict()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getGeneralDiscount()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getOrderId()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getIdOrderFromShop()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getOrderCertificateCode()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getOrderDate()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getOrderPaymentStatus()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getOrderStatus()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getPaymentDate()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getReceivingStatus()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getRegion()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getResponsibleCaller()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getResponsibleDriver()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getResponsibleLogicMan()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getResponsibleNavigator()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getSenderEmail()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getSenderName()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getSenderPhone()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getTimeOfExport()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getTotalOrderSum()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getTotalPayment()), + Arguments.of(defaultWidth, TABLE_COLUMN_WIDTH.getViolationsAmount())); + } + + @ParameterizedTest + @MethodSource("testArguments") + void tableColumnWidthForEmployeeWithDefaultWidthTest(int expected, int actual) { + assertEquals(expected, actual); + } + + @Test + void testNoArgsConstructor() { + TableColumnWidthForEmployee tableColumnWidth = new TableColumnWidthForEmployee(); + assertNotNull(tableColumnWidth); + assertNull(tableColumnWidth.getId()); + assertNull(tableColumnWidth.getEmployee()); + } + + @Test + void testBuilder() { + Employee newEmployee = Employee.builder().build(); + TableColumnWidthForEmployee tableColumnWidth = TableColumnWidthForEmployee.builder() + .employee(newEmployee) + .address(100) + .amountDue(200) + .build(); + + assertNotNull(tableColumnWidth); + assertEquals(EMPLOYEE, tableColumnWidth.getEmployee()); + assertEquals(100, tableColumnWidth.getAddress()); + assertEquals(200, tableColumnWidth.getAmountDue()); } } From 3a3c514430798504da6a14e09aad2d63e3d2c7d1 Mon Sep 17 00:00:00 2001 From: Anton Bondar <53192419+ABbondar@users.noreply.github.com> Date: Mon, 3 Jul 2023 15:44:47 +0300 Subject: [PATCH 08/80] [API. Save order address] The API documentation includes an incorrect 200 status code, causing confusion and issues with data processing. #5461 (#1165) * remove default 200 OK response * imports --- core/src/main/java/greencity/controller/AddressController.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/src/main/java/greencity/controller/AddressController.java b/core/src/main/java/greencity/controller/AddressController.java index 10c21f2cf..921d9c1f4 100644 --- a/core/src/main/java/greencity/controller/AddressController.java +++ b/core/src/main/java/greencity/controller/AddressController.java @@ -23,6 +23,7 @@ import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; import springfox.documentation.annotations.ApiIgnore; @@ -66,6 +67,7 @@ public ResponseEntity getAllAddressesForCurrentUs @ApiResponse(code = 401, message = HttpStatuses.UNAUTHORIZED), @ApiResponse(code = 404, message = HttpStatuses.NOT_FOUND) }) + @ResponseStatus(HttpStatus.CREATED) @PostMapping("/save-order-address") public ResponseEntity saveAddressForOrder( @Valid @RequestBody CreateAddressRequestDto dtoRequest, From e84a157613c5a201643a9b82b7baadbd915f9d22 Mon Sep 17 00:00:00 2001 From: Anton Bondar <53192419+ABbondar@users.noreply.github.com> Date: Mon, 3 Jul 2023 15:46:32 +0300 Subject: [PATCH 09/80] [API] [User Bonuses] Mistake in Swagger documentation #6027 Open (#1167) * remove default 403 response * formatter --- .../greencity/controller/ClientController.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/greencity/controller/ClientController.java b/core/src/main/java/greencity/controller/ClientController.java index f93a88fec..094da35b5 100644 --- a/core/src/main/java/greencity/controller/ClientController.java +++ b/core/src/main/java/greencity/controller/ClientController.java @@ -4,7 +4,13 @@ import greencity.annotations.CurrentUserUuid; import greencity.annotations.ValidLanguage; import greencity.constants.HttpStatuses; -import greencity.dto.order.*; +import greencity.dto.order.FondyOrderResponse; +import greencity.dto.order.MakeOrderAgainDto; +import greencity.dto.order.OrderClientDto; +import greencity.dto.order.OrderFondyClientDto; +import greencity.dto.order.OrderPaymentDetailDto; +import greencity.dto.order.OrderStatusPageDto; +import greencity.dto.order.OrdersDataForUserDto; import greencity.dto.pageble.PageableDto; import greencity.dto.user.AllPointsUserDto; import greencity.dto.user.UserPointDto; @@ -19,7 +25,14 @@ import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; import springfox.documentation.annotations.ApiIgnore; import javax.validation.Valid; @@ -223,7 +236,6 @@ public ResponseEntity getDataForOrderSurcharge( @ApiResponses(value = { @ApiResponse(code = 200, message = HttpStatuses.OK, response = UserPointDto.class), @ApiResponse(code = 401, message = HttpStatuses.UNAUTHORIZED), - @ApiResponse(code = 403, message = HttpStatuses.FORBIDDEN), @ApiResponse(code = 404, message = HttpStatuses.NOT_FOUND) }) @GetMapping("/user-bonuses") From 63c2f2d8a1040f684fe5f9385e4a439bd6bc8a18 Mon Sep 17 00:00:00 2001 From: Anton Bondar <53192419+ABbondar@users.noreply.github.com> Date: Tue, 4 Jul 2023 11:47:29 +0300 Subject: [PATCH 10/80] =?UTF-8?q?[Admin.=20Orders]=20Missing=20of=20the=20?= =?UTF-8?q?option=20"=D0=91=D0=B5=D0=B7=20=D0=BC=D0=B5=D0=BD=D0=B5=D0=B4?= =?UTF-8?q?=D0=B6=D0=B5=D1=80=D0=B0/=D0=BB=D0=BE=D0=B3=D1=96=D1=81=D1=82?= =?UTF-8?q?=D0=B0/=D1=88=D1=82=D1=83=D1=80=D0=BC=D0=B0=D0=BD=D0=B0/=D0=B2?= =?UTF-8?q?=D0=BE=D0=B4=D1=96=D1=8F"=20in=20the=20relevant=20filters=20#42?= =?UTF-8?q?39=20(#1162)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * filters for null ids * order page size --- .../repository/BigOrderTableRepository.java | 12 +++++++++++- .../repository/CustomCriteriaPredicate.java | 4 ++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/dao/src/main/java/greencity/repository/BigOrderTableRepository.java b/dao/src/main/java/greencity/repository/BigOrderTableRepository.java index f831bf6ef..0e38ae6d9 100644 --- a/dao/src/main/java/greencity/repository/BigOrderTableRepository.java +++ b/dao/src/main/java/greencity/repository/BigOrderTableRepository.java @@ -16,6 +16,7 @@ import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import static java.util.Objects.nonNull; @@ -105,7 +106,16 @@ private void getPredicateByLongValue(List predicates, OrderSearchCrit Root orderRoot) { orderFilterDataProvider.getFiltersLong().entrySet().stream() .filter(e -> e.getValue().apply(sc) != null) - .map(e -> criteriaPredicate.filter(e.getValue().apply(sc), orderRoot, e.getKey())) + .map(e -> { + Long[] values = e.getValue().apply(sc); + Predicate predicate; + if (Arrays.stream(values).anyMatch(value -> value != null && value != -1L)) { + predicate = criteriaPredicate.filter(values, orderRoot, e.getKey()); + } else { + predicate = criteriaPredicate.filter(orderRoot, e.getKey()); + } + return predicate; + }) .forEach(predicates::add); } diff --git a/dao/src/main/java/greencity/repository/CustomCriteriaPredicate.java b/dao/src/main/java/greencity/repository/CustomCriteriaPredicate.java index b52277e8e..179e89ff8 100644 --- a/dao/src/main/java/greencity/repository/CustomCriteriaPredicate.java +++ b/dao/src/main/java/greencity/repository/CustomCriteriaPredicate.java @@ -66,6 +66,10 @@ Predicate filter(Long[] id, Root root, String nameColumn) { return predicate; } + Predicate filter(Root root, String nameColumn) { + return criteriaBuilder.isNull(root.get(nameColumn)); + } + Predicate filter(List ids, Root root, String nameColumn) { List predicateList = new ArrayList<>(); for (Long id : ids) { From bffd6d623362aedfe864d92d0c2579b6d1689483 Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Tue, 4 Jul 2023 12:37:22 +0300 Subject: [PATCH 11/80] [Admin cabinet] Fixed nameEN in Position (#1166) * Replaced PositionWithTranslateDto with PositionDto * Fixed bug with errors and sign in --- .../controller/ManagementEmployeeController.java | 3 +-- .../service/ubs/UBSManagementEmployeeService.java | 3 +-- service-api/src/test/java/greencity/ModelUtils.java | 1 + .../config/UserRemoteClientFallbackFactoryTest.java | 6 ++++++ .../service/ubs/UBSManagementEmployeeServiceImpl.java | 8 ++++---- service/src/test/java/greencity/ModelUtils.java | 1 + .../service/ubs/UBSManagementEmployeeServiceImplTest.java | 4 ++-- 7 files changed, 16 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/greencity/controller/ManagementEmployeeController.java b/core/src/main/java/greencity/controller/ManagementEmployeeController.java index 830a28746..d64e8b604 100644 --- a/core/src/main/java/greencity/controller/ManagementEmployeeController.java +++ b/core/src/main/java/greencity/controller/ManagementEmployeeController.java @@ -10,7 +10,6 @@ import greencity.dto.pageble.PageableAdvancedDto; import greencity.dto.position.PositionAuthoritiesDto; import greencity.dto.position.PositionDto; -import greencity.dto.position.PositionWithTranslateDto; import greencity.dto.tariff.GetTariffInfoForEmployeeDto; import greencity.filters.EmployeeFilterCriteria; import greencity.filters.EmployeePage; @@ -153,7 +152,7 @@ public ResponseEntity deleteEmployee(@PathVariable Long id) { }) @PreAuthorize("@preAuthorizer.hasAuthority('SEE_EMPLOYEES_PAGE', authentication)") @GetMapping("/get-all-positions") - public ResponseEntity> getAllPositions() { + public ResponseEntity> getAllPositions() { return ResponseEntity.status(HttpStatus.OK).body(employeeService.getAllPositions()); } diff --git a/service-api/src/main/java/greencity/service/ubs/UBSManagementEmployeeService.java b/service-api/src/main/java/greencity/service/ubs/UBSManagementEmployeeService.java index 5e4d47a9e..f2c792c80 100644 --- a/service-api/src/main/java/greencity/service/ubs/UBSManagementEmployeeService.java +++ b/service-api/src/main/java/greencity/service/ubs/UBSManagementEmployeeService.java @@ -5,7 +5,6 @@ import greencity.dto.employee.EmployeeWithTariffsIdDto; import greencity.dto.position.AddingPositionDto; import greencity.dto.position.PositionDto; -import greencity.dto.position.PositionWithTranslateDto; import greencity.dto.tariff.GetTariffInfoForEmployeeDto; import greencity.filters.EmployeeFilterCriteria; import greencity.filters.EmployeePage; @@ -74,7 +73,7 @@ public interface UBSManagementEmployeeService { * @return {@link PositionDto} * @author Mykola Danylko */ - List getAllPositions(); + List getAllPositions(); /** * Method deletes position by id. diff --git a/service-api/src/test/java/greencity/ModelUtils.java b/service-api/src/test/java/greencity/ModelUtils.java index 4bd11ed28..dd8fbafc1 100644 --- a/service-api/src/test/java/greencity/ModelUtils.java +++ b/service-api/src/test/java/greencity/ModelUtils.java @@ -129,6 +129,7 @@ public static PositionDto getEmployeePosition() { return PositionDto.builder() .id(1L) .name("Менеджер послуги") + .name("Service Manager") .build(); } } diff --git a/service-api/src/test/java/greencity/client/config/UserRemoteClientFallbackFactoryTest.java b/service-api/src/test/java/greencity/client/config/UserRemoteClientFallbackFactoryTest.java index fd9223f71..b059fab3f 100644 --- a/service-api/src/test/java/greencity/client/config/UserRemoteClientFallbackFactoryTest.java +++ b/service-api/src/test/java/greencity/client/config/UserRemoteClientFallbackFactoryTest.java @@ -98,6 +98,12 @@ void signUpEmployee() { assertThrows(RemoteServerUnavailableException.class, () -> client.signUpEmployee(dto)); } + @Test + void signUpEmployeeError() { + EmployeeSignUpDto dto = EmployeeSignUpDto.builder().build(); + assertThrows(RemoteServerUnavailableException.class, () -> client.signUpEmployee(dto)); + } + @Test void updateEmployeeEmailTest() { String newEmail = "new@mail.com"; diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java index 6b6a6738b..2e87aad93 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java @@ -13,7 +13,6 @@ import greencity.dto.employee.EmployeePositionsDto; import greencity.dto.position.AddingPositionDto; import greencity.dto.position.PositionDto; -import greencity.dto.position.PositionWithTranslateDto; import greencity.dto.tariff.GetTariffInfoForEmployeeDto; import greencity.entity.order.TariffsInfo; import greencity.entity.user.employee.Employee; @@ -104,7 +103,8 @@ private void signUpEmployee(Employee employee) { try { userRemoteClient.signUpEmployee(signUpDto); } catch (HystrixRuntimeException e) { - throw new BadRequestException("User with this email already exists: " + signUpDto.getEmail()); + throw new BadRequestException( + "Error to create user(): User with this email already exists or not valid data "); } } @@ -329,9 +329,9 @@ private Position buildPosition(AddingPositionDto dto) { * {@inheritDoc} */ @Override - public List getAllPositions() { + public List getAllPositions() { return positionRepository.findAll().stream() - .map(p -> modelMapper.map(p, PositionWithTranslateDto.class)) + .map(p -> modelMapper.map(p, PositionDto.class)) .collect(Collectors.toList()); } diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index 1ba67765a..3196cae40 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -1212,6 +1212,7 @@ public static List getEmployeeList() { .employeePosition(Set.of(Position.builder() .id(6L) .name("Супер адмін") + .nameEn("Super admin") .build())) .tariffInfos(new HashSet<>()) .imagePath("path") diff --git a/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java index f70fa22fa..aee8d334c 100644 --- a/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java @@ -353,9 +353,9 @@ void updatePositionTest() { @Test void getAllPositionTest() { when(positionRepository.findAll()).thenReturn(List.of(getPosition())); - when(modelMapper.map(any(), any())).thenReturn(getPositionWithTranslateDto(1L)); + when(modelMapper.map(any(), any())).thenReturn(getPositionDto(1L)); - List positionWithTranslateDtos = employeeService.getAllPositions(); + List positionWithTranslateDtos = employeeService.getAllPositions(); assertEquals(1, positionWithTranslateDtos.size()); verify(positionRepository, times(1)).findAll(); From b69e08e37b9986e310812672e0079c7d8bb97126 Mon Sep 17 00:00:00 2001 From: Yurii Midianyi <45738210+Yurii-Midianyi@users.noreply.github.com> Date: Tue, 4 Jul 2023 16:36:54 +0300 Subject: [PATCH 12/80] refactored method getPriceDetails in order to decrease its cognitive complexity (#1164) --- .../service/ubs/UBSManagementServiceImpl.java | 51 ++++++++++--------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java index 63f588d53..49f92194e 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java @@ -784,6 +784,30 @@ public CounterOrderDetailsDto getOrderSumDetails(Long orderId) { return dto; } + /** + * Helper method of {@link #getPriceDetails(Long)} which calculates the total + * price in coins based on the provided entries and bag items. + * + * @param entries the set of entries representing the quantity of bags of + * {@link java.util.Map.Entry} + * @param bag the list of bags to calculate the price from {@link Bag} + * @return the total price in coins {@link Long} + * @throws NotFoundException if a bag with a specific ID was not found + * @author Yurii Midianyi + */ + private Long getSumInCoins(Set> entries, List bag) { + long result = 0L; + for (Map.Entry entry : entries) { + result += entry.getValue() * bag + .stream() + .filter(b -> b.getId().equals(entry.getKey())) + .findFirst() + .orElseThrow(() -> new NotFoundException(BAG_NOT_FOUND + entry.getKey())) + .getFullPrice(); + } + return result; + } + private CounterOrderDetailsDto getPriceDetails(Long id) { CounterOrderDetailsDto dto = new CounterOrderDetailsDto(); Order order = orderRepository.getOrderDetails(id) @@ -798,30 +822,9 @@ private CounterOrderDetailsDto getPriceDetails(Long id) { long totalSumConfirmedInCoins; long totalSumExportedInCoins; if (!bag.isEmpty()) { - for (Map.Entry entry : order.getAmountOfBagsOrdered().entrySet()) { - sumAmountInCoins += entry.getValue() * bag - .stream() - .filter(b -> b.getId().equals(entry.getKey())) - .findFirst() - .orElseThrow(() -> new NotFoundException(BAG_NOT_FOUND + entry.getKey())) - .getFullPrice(); - } - for (Map.Entry entry : order.getConfirmedQuantity().entrySet()) { - sumConfirmedInCoins += entry.getValue() * bag - .stream() - .filter(b -> b.getId().equals(entry.getKey())) - .findFirst() - .orElseThrow(() -> new NotFoundException(BAG_NOT_FOUND + entry.getKey())) - .getFullPrice(); - } - for (Map.Entry entry : order.getExportedQuantity().entrySet()) { - sumExportedInCoins += entry.getValue() * bag - .stream() - .filter(b -> b.getId().equals(entry.getKey())) - .findFirst() - .orElseThrow(() -> new NotFoundException(BAG_NOT_FOUND + entry.getKey())) - .getFullPrice(); - } + sumAmountInCoins = getSumInCoins(order.getAmountOfBagsOrdered().entrySet(), bag); + sumConfirmedInCoins = getSumInCoins(order.getConfirmedQuantity().entrySet(), bag); + sumExportedInCoins = getSumInCoins(order.getExportedQuantity().entrySet(), bag); if (order.getExportedQuantity().size() != 0) { sumExportedInCoins += getUbsCourierOrWriteOffStationSum(order); From 02d2305f10901f50c747dae5d915ce1a0a6b76a2 Mon Sep 17 00:00:00 2001 From: Anton Bondar <53192419+ABbondar@users.noreply.github.com> Date: Tue, 4 Jul 2023 16:44:47 +0300 Subject: [PATCH 13/80] added table params (#1170) --- .../ubs/OrdersAdminsPageServiceImpl.java | 72 ++++++++++++++++--- 1 file changed, 63 insertions(+), 9 deletions(-) diff --git a/service/src/main/java/greencity/service/ubs/OrdersAdminsPageServiceImpl.java b/service/src/main/java/greencity/service/ubs/OrdersAdminsPageServiceImpl.java index e11749b1a..28e2f5665 100644 --- a/service/src/main/java/greencity/service/ubs/OrdersAdminsPageServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/OrdersAdminsPageServiceImpl.java @@ -12,6 +12,10 @@ import greencity.dto.table.ColumnWidthDto; import greencity.dto.table.TableParamsDto; import greencity.entity.table.TableColumnWidthForEmployee; +import greencity.entity.user.employee.Employee; +import greencity.entity.user.employee.EmployeeOrderPosition; +import greencity.entity.user.employee.Position; +import greencity.entity.user.employee.ReceivingStation; import greencity.enums.CancellationReason; import greencity.enums.EditType; import greencity.enums.OrderStatus; @@ -22,11 +26,21 @@ import greencity.entity.order.Event; import greencity.entity.order.OrderPaymentStatusTranslation; import greencity.entity.user.User; -import greencity.entity.user.employee.*; -import greencity.exceptions.*; +import greencity.exceptions.BadRequestException; +import greencity.exceptions.NotFoundException; import greencity.filters.OrderPage; import greencity.filters.OrderSearchCriteria; -import greencity.repository.*; +import greencity.repository.AddressRepository; +import greencity.repository.CertificateRepository; +import greencity.repository.EmployeeOrderPositionRepository; +import greencity.repository.EmployeeRepository; +import greencity.repository.OrderPaymentStatusTranslationRepository; +import greencity.repository.OrderRepository; +import greencity.repository.OrderStatusTranslationRepository; +import greencity.repository.PositionRepository; +import greencity.repository.ReceivingStationRepository; +import greencity.repository.TableColumnWidthForEmployeeRepository; +import greencity.repository.UserRepository; import greencity.service.SuperAdminService; import greencity.service.notification.NotificationServiceImpl; import lombok.Data; @@ -41,10 +55,27 @@ import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; -import java.util.*; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; import java.util.stream.Collectors; -import static greencity.constant.ErrorMessage.*; +import static greencity.constant.ErrorMessage.DATE_OF_EXPORT_NOT_SPECIFIED_FOR_ORDER; +import static greencity.constant.ErrorMessage.EMPLOYEE_DOESNT_EXIST; +import static greencity.constant.ErrorMessage.EMPLOYEE_NOT_FOUND; +import static greencity.constant.ErrorMessage.EMPLOYEE_WITH_UUID_NOT_FOUND; +import static greencity.constant.ErrorMessage.EMPTY_ORDERS_ID_COLLECTION; +import static greencity.constant.ErrorMessage.ORDER_IS_BLOCKED; +import static greencity.constant.ErrorMessage.ORDER_PAYMENT_STATUS_NOT_FOUND; +import static greencity.constant.ErrorMessage.ORDER_STATUS_NOT_FOUND; +import static greencity.constant.ErrorMessage.ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST; +import static greencity.constant.ErrorMessage.POSITION_NOT_FOUND_BY_ID; +import static greencity.constant.ErrorMessage.USER_WITH_CURRENT_UUID_DOES_NOT_EXIST; import static java.util.Objects.isNull; import static java.util.Objects.nonNull; @@ -79,6 +110,15 @@ public class OrdersAdminsPageServiceImpl implements OrdersAdminsPageService { private static final String CANCELLATION_REASON = "cancellationReason"; private static final String CANCELLATION_COMMENT = "cancellationComment"; private static final String ADMIN_COMMENT = "adminComment"; + private static final String WITHOUT_ID = "-1"; + private static final String WITHOUT_MANAGER_EN = "Without manager"; + private static final String WITHOUT_MANAGER_UA = "Без менеджера"; + private static final String WITHOUT_LOGISTICIAN_EN = "Without logistician"; + private static final String WITHOUT_LOGISTICIAN_UA = "Без логіста"; + private static final String WITHOUT_NAVIGATOR_EN = "Without navigator"; + private static final String WITHOUT_NAVIGATOR_UA = "Без штурмана"; + private static final String WITHOUT_DRIVER_EN = "Without driver"; + private static final String WITHOUT_DRIVER_UA = "Без водія"; @Override public TableParamsDto getParametersForOrdersTable(String uuid) { @@ -340,7 +380,8 @@ private List receivingStationList() { private List callerList() { List employeeList = employeeRepository.findAllByEmployeePositionId(2L); - List optionForColumnDTOS = new ArrayList<>(); + List optionForColumnDTOS = + includeItemsWithoutResponsiblePerson(WITHOUT_MANAGER_UA, WITHOUT_MANAGER_EN); for (Employee e : employeeList) { optionForColumnDTOS.add(modelMapper.map(e, OptionForColumnDTO.class)); } @@ -349,7 +390,8 @@ private List callerList() { private List logicManList() { List employeeList = employeeRepository.findAllByEmployeePositionId(3L); - List optionForColumnDTOS = new ArrayList<>(); + List optionForColumnDTOS = + includeItemsWithoutResponsiblePerson(WITHOUT_LOGISTICIAN_UA, WITHOUT_LOGISTICIAN_EN); for (Employee e : employeeList) { optionForColumnDTOS.add(modelMapper.map(e, OptionForColumnDTO.class)); } @@ -358,7 +400,8 @@ private List logicManList() { private List navigatorList() { List employeeList = employeeRepository.findAllByEmployeePositionId(4L); - List optionForColumnDTOS = new ArrayList<>(); + List optionForColumnDTOS = + includeItemsWithoutResponsiblePerson(WITHOUT_NAVIGATOR_UA, WITHOUT_NAVIGATOR_EN); for (Employee e : employeeList) { optionForColumnDTOS.add(modelMapper.map(e, OptionForColumnDTO.class)); } @@ -367,7 +410,8 @@ private List navigatorList() { private List driverList() { List employeeList = employeeRepository.findAllByEmployeePositionId(5L); - List optionForColumnDTOS = new ArrayList<>(); + List optionForColumnDTOS = + includeItemsWithoutResponsiblePerson(WITHOUT_DRIVER_UA, WITHOUT_DRIVER_EN); for (Employee e : employeeList) { optionForColumnDTOS.add(modelMapper.map(e, OptionForColumnDTO.class)); } @@ -398,6 +442,16 @@ private List cityList() { .collect(Collectors.toList()); } + private List includeItemsWithoutResponsiblePerson(String nameUa, String nameEn) { + List optionForColumnDTOS = new ArrayList<>(); + optionForColumnDTOS.add(OptionForColumnDTO.builder() + .key(WITHOUT_ID) + .ua(nameUa) + .en(nameEn) + .build()); + return optionForColumnDTOS; + } + /* methods for changing order */ @Override public synchronized List orderStatusForDevelopStage(List ordersId, String value, Long employeeId) { From cf1aad8924d54026401eefeff359e9178eccb476 Mon Sep 17 00:00:00 2001 From: Maksym Date: Wed, 5 Jul 2023 11:06:18 +0300 Subject: [PATCH 14/80] update GetEmployeeDto (#1171) --- .../src/main/java/greencity/dto/employee/GetEmployeeDto.java | 1 + .../EmployeeFilterViewToGetEmployeeDtoMapper.java | 1 + service/src/test/java/greencity/ModelUtils.java | 2 ++ 3 files changed, 4 insertions(+) diff --git a/service-api/src/main/java/greencity/dto/employee/GetEmployeeDto.java b/service-api/src/main/java/greencity/dto/employee/GetEmployeeDto.java index 367d65b19..f684bec3a 100644 --- a/service-api/src/main/java/greencity/dto/employee/GetEmployeeDto.java +++ b/service-api/src/main/java/greencity/dto/employee/GetEmployeeDto.java @@ -20,6 +20,7 @@ public class GetEmployeeDto { private String phoneNumber; private String email; private String image; + private String employeeStatus; private List employeePositions; private List tariffs; } diff --git a/service/src/main/java/greencity/mapping/employeefilterview/EmployeeFilterViewToGetEmployeeDtoMapper.java b/service/src/main/java/greencity/mapping/employeefilterview/EmployeeFilterViewToGetEmployeeDtoMapper.java index 40d569ff3..bacdb8fa5 100644 --- a/service/src/main/java/greencity/mapping/employeefilterview/EmployeeFilterViewToGetEmployeeDtoMapper.java +++ b/service/src/main/java/greencity/mapping/employeefilterview/EmployeeFilterViewToGetEmployeeDtoMapper.java @@ -16,6 +16,7 @@ protected GetEmployeeDto convert(EmployeeFilterView employeeFilterView) { .phoneNumber(employeeFilterView.getPhoneNumber()) .email(employeeFilterView.getEmail()) .image(employeeFilterView.getImage()) + .employeeStatus(employeeFilterView.getEmployeeStatus()) .build(); } } diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index 3196cae40..3f1c2fe6b 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -241,6 +241,7 @@ public static EmployeeFilterView getEmployeeFilterViewWithPassedIds( .lastName("Last Name") .phoneNumber("Phone Number") .email("employee@gmail.com") + .employeeStatus("ACTIVE") .image("Image") .regionId(15L) .regionNameEn("Kyiv region") @@ -287,6 +288,7 @@ public static GetEmployeeDto getEmployeeDto() { .lastName("Last Name") .phoneNumber("Phone Number") .email("employee@gmail.com") + .employeeStatus("ACTIVE") .image("Image") .build(); } From 1d4e95ed674eb98ee3bef607c38a65d42c287322 Mon Sep 17 00:00:00 2001 From: Anton Bondar <53192419+ABbondar@users.noreply.github.com> Date: Wed, 5 Jul 2023 11:41:07 +0300 Subject: [PATCH 15/80] delete location endpoint (#1172) --- .../controller/SuperAdminController.java | 21 ++++++++++++++++++ .../controller/SuperAdminControllerTest.java | 5 +++++ .../java/greencity/constant/ErrorMessage.java | 2 ++ .../greencity/service/SuperAdminService.java | 8 +++++++ .../service/ubs/SuperAdminServiceImpl.java | 9 ++++++++ .../ubs/SuperAdminServiceImplTest.java | 22 +++++++++++++++++++ 6 files changed, 67 insertions(+) diff --git a/core/src/main/java/greencity/controller/SuperAdminController.java b/core/src/main/java/greencity/controller/SuperAdminController.java index 1319ee9ba..95543e9a1 100644 --- a/core/src/main/java/greencity/controller/SuperAdminController.java +++ b/core/src/main/java/greencity/controller/SuperAdminController.java @@ -344,6 +344,27 @@ public ResponseEntity addLocation( return ResponseEntity.status(HttpStatus.CREATED).build(); } + /** + * Controller for deleting location. + * + * @param id {@link Long} - location id. + * @author Anton Bondar + */ + @ApiOperation(value = "Delete location") + @ApiResponses(value = { + @ApiResponse(code = 200, message = HttpStatuses.OK), + @ApiResponse(code = 400, message = HttpStatuses.BAD_REQUEST), + @ApiResponse(code = 401, message = HttpStatuses.UNAUTHORIZED), + @ApiResponse(code = 403, message = HttpStatuses.FORBIDDEN), + @ApiResponse(code = 404, message = HttpStatuses.NOT_FOUND) + }) + @PreAuthorize("@preAuthorizer.hasAuthority('EDIT_DELETE_LOCATION_CARD', authentication)") + @DeleteMapping("/deleteLocation/{id}") + public ResponseEntity deleteLocation(@PathVariable Long id) { + superAdminService.deleteLocation(id); + return ResponseEntity.status(HttpStatus.OK).build(); + } + /** * Controller for activating location by Id. * diff --git a/core/src/test/java/greencity/controller/SuperAdminControllerTest.java b/core/src/test/java/greencity/controller/SuperAdminControllerTest.java index 3c3aceba9..205fe9042 100644 --- a/core/src/test/java/greencity/controller/SuperAdminControllerTest.java +++ b/core/src/test/java/greencity/controller/SuperAdminControllerTest.java @@ -585,6 +585,11 @@ void addLocation() throws Exception { .andExpect(status().isCreated()); } + @Test + void deleteLocationTest() throws Exception { + mockMvc.perform(delete(ubsLink + "/deleteLocation/" + 1L).principal(principal)).andExpect(status().isOk()); + } + @Test void addLocationInterceptLocationAlreadyCreatedException() throws Exception { List dto = ModelUtils.getLocationCreateDtoList(); diff --git a/service-api/src/main/java/greencity/constant/ErrorMessage.java b/service-api/src/main/java/greencity/constant/ErrorMessage.java index 7bc6962b4..1a554ec78 100644 --- a/service-api/src/main/java/greencity/constant/ErrorMessage.java +++ b/service-api/src/main/java/greencity/constant/ErrorMessage.java @@ -153,6 +153,8 @@ public final class ErrorMessage { public static final String REGIONS_NOT_FOUND_BY_LOCATION_STATUS = "Regions containing locations with a status: %s, not found"; public static final String ORDER_CAN_NOT_BE_UPDATED = "An order with the status: %s, can not be updated"; + public static final String LOCATION_CAN_NOT_BE_DELETED = + "Such location cannot be deleted as it is linked to the tariff"; /** * Constructor. diff --git a/service-api/src/main/java/greencity/service/SuperAdminService.java b/service-api/src/main/java/greencity/service/SuperAdminService.java index 515f15a86..8535fa69c 100644 --- a/service-api/src/main/java/greencity/service/SuperAdminService.java +++ b/service-api/src/main/java/greencity/service/SuperAdminService.java @@ -131,6 +131,14 @@ public interface SuperAdminService { */ void addLocation(List dto); + /** + * Method for deleting location. + * + * @param id {@link Long} - location id. + * @author Anton Bondar + */ + void deleteLocation(Long id); + /** * Method for activate location. * diff --git a/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java b/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java index 615d55342..3ae1c256c 100644 --- a/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java @@ -291,6 +291,15 @@ public void addLocation(List dtoList) { }); } + @Override + public void deleteLocation(Long id) { + Location location = tryToFindLocationById(id); + if (location.getTariffLocations().stream().anyMatch(tl -> tl.getLocation().getId().equals(id))) { + throw new BadRequestException(ErrorMessage.LOCATION_CAN_NOT_BE_DELETED); + } + locationRepository.delete(location); + } + private Location createNewLocation(LocationCreateDto dto, Region region) { return Location.builder() .locationStatus(LocationStatus.ACTIVE) diff --git a/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java b/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java index e89ac632d..facbb9060 100644 --- a/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java @@ -70,6 +70,7 @@ import java.util.Collections; import java.util.List; import java.util.Optional; +import java.util.Set; import java.util.UUID; import java.util.stream.Stream; @@ -641,6 +642,27 @@ void addLocationCreateNewRegionTest() { verify(locationRepository).save(location); } + @Test + void deleteLocationTest() { + Location location = ModelUtils.getLocationDto(); + location + .setTariffLocations(Set.of(TariffLocation.builder().location(Location.builder().id(2L).build()).build())); + when(locationRepository.findById(1L)).thenReturn(Optional.of(location)); + superAdminService.deleteLocation(1L); + verify(locationRepository).findById(1L); + verify(locationRepository).delete(any(Location.class)); + } + + @Test + void deleteLocationThrowsBadRequestExceptionTest() { + Location location = ModelUtils.getLocationDto(); + location + .setTariffLocations(Set.of(TariffLocation.builder().location(Location.builder().id(1L).build()).build())); + when(locationRepository.findById(1L)).thenReturn(Optional.of(location)); + assertThrows(BadRequestException.class, () -> superAdminService.deleteLocation(1L)); + verify(locationRepository).findById(1L); + } + @Test void activateLocation() { Location location = ModelUtils.getLocationDto(); From 90c59d4988f93cb1f7b513822d049e9218335d16 Mon Sep 17 00:00:00 2001 From: Yurii Midianyi <45738210+Yurii-Midianyi@users.noreply.github.com> Date: Wed, 5 Jul 2023 13:24:43 +0300 Subject: [PATCH 16/80] Fix minor code smell in files (#1169) * deleted unused libraries * deleted unused variable authorities and used immediate return instead * added testing for FeignClientCallAsync * added test coverage for JwtTool * deleted public access modifier from class and test methods --- .../main/java/greencity/security/JwtTool.java | 3 +- .../java/greencity/security/JwtToolTest.java | 93 +++++++++++++++++++ .../service/FeignClientCallAsync.java | 3 - .../service/FeignClientCallAsyncTest.java | 30 ++++++ 4 files changed, 124 insertions(+), 5 deletions(-) create mode 100644 service-api/src/test/java/greencity/security/JwtToolTest.java create mode 100644 service/src/test/java/greencity/service/FeignClientCallAsyncTest.java diff --git a/service-api/src/main/java/greencity/security/JwtTool.java b/service-api/src/main/java/greencity/security/JwtTool.java index ace0a2b54..010f15ed8 100644 --- a/service-api/src/main/java/greencity/security/JwtTool.java +++ b/service-api/src/main/java/greencity/security/JwtTool.java @@ -79,11 +79,10 @@ public String createAccessToken(String email, int ttl) { * */ public List getAuthoritiesFromToken(String accessToken) { - List authorities = (List) Jwts.parser() + return (List) Jwts.parser() .setSigningKey(getAccessTokenKey()) .parseClaimsJws(accessToken) .getBody() .get("employee_authorities"); - return authorities; } } diff --git a/service-api/src/test/java/greencity/security/JwtToolTest.java b/service-api/src/test/java/greencity/security/JwtToolTest.java new file mode 100644 index 000000000..5eabf1d46 --- /dev/null +++ b/service-api/src/test/java/greencity/security/JwtToolTest.java @@ -0,0 +1,93 @@ +package greencity.security; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import javax.servlet.http.HttpServletRequest; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class JwtToolTest { + @Mock + private HttpServletRequest mockHttpServletRequest; + + private JwtTool jwtTool; + + @BeforeEach + public void setup() { + jwtTool = new JwtTool("testAccessTokenKey"); + } + + @Test + void testGetAccessTokenKey() { + String accessTokenKey = jwtTool.getAccessTokenKey(); + assertEquals("testAccessTokenKey", accessTokenKey); + } + + @Test + void testGetTokenFromHttpServletRequest() { + when(mockHttpServletRequest.getHeader("Authorization")).thenReturn("Bearer testToken"); + String token = jwtTool.getTokenFromHttpServletRequest(mockHttpServletRequest); + assertEquals("testToken", token); + verify(mockHttpServletRequest).getHeader("Authorization"); + } + + @Test + void testGetTokenFromHttpServletRequest_NullToken() { + when(mockHttpServletRequest.getHeader("Authorization")).thenReturn(null); + String token = jwtTool.getTokenFromHttpServletRequest(mockHttpServletRequest); + assertNull(token); + verify(mockHttpServletRequest).getHeader("Authorization"); + } + + @Test + void testCreateAccessToken() { + String email = "test@example.com"; + int ttl = 60; + String accessToken = jwtTool.createAccessToken(email, ttl); + assertNotNull(accessToken); + + Claims claims = Jwts.parser().setSigningKey(jwtTool.getAccessTokenKey()).parseClaimsJws(accessToken).getBody(); + + // Verify the subject (email) claim + assertEquals(email, claims.getSubject()); + + // Verify the role claim + List roles = (List) claims.get("role"); + assertEquals(Arrays.asList("ROLE_USER", "ROLE_ADMIN"), roles); + + // Verify the expiration time + Date expiration = claims.getExpiration(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(expiration); + calendar.add(Calendar.MINUTE, -ttl); + Date expectedExpiration = calendar.getTime(); + assertEquals(expectedExpiration, claims.getIssuedAt()); + } + + @Test + void testGetAuthoritiesFromToken() { + String accessToken = Jwts.builder() + .setSubject("test@example.com") + .claim("employee_authorities", Arrays.asList("ROLE_USER", "ROLE_ADMIN")) + .signWith(SignatureAlgorithm.HS256, "testAccessTokenKey") + .compact(); + + List authorities = jwtTool.getAuthoritiesFromToken(accessToken); + List expectedAuthorities = Arrays.asList("ROLE_USER", "ROLE_ADMIN"); + assertEquals(expectedAuthorities, authorities); + } +} diff --git a/service/src/main/java/greencity/service/FeignClientCallAsync.java b/service/src/main/java/greencity/service/FeignClientCallAsync.java index ced23d628..07dd3e0a2 100644 --- a/service/src/main/java/greencity/service/FeignClientCallAsync.java +++ b/service/src/main/java/greencity/service/FeignClientCallAsync.java @@ -3,11 +3,8 @@ import greencity.client.UserRemoteClient; import greencity.dto.user.UserVO; import lombok.RequiredArgsConstructor; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; - -import java.util.Map; import java.util.Optional; import java.util.concurrent.CompletableFuture; diff --git a/service/src/test/java/greencity/service/FeignClientCallAsyncTest.java b/service/src/test/java/greencity/service/FeignClientCallAsyncTest.java new file mode 100644 index 000000000..79c89566b --- /dev/null +++ b/service/src/test/java/greencity/service/FeignClientCallAsyncTest.java @@ -0,0 +1,30 @@ +package greencity.service; + +import greencity.client.UserRemoteClient; +import greencity.dto.user.UserVO; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.junit.jupiter.api.Test; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class FeignClientCallAsyncTest { + @Mock + private UserRemoteClient userRemoteClient; + + @Test + void testGetRecordsAsync() throws Exception { + String email = "example@example.com"; + UserVO userVO = new UserVO(); + when(userRemoteClient.findNotDeactivatedByEmail(email)).thenReturn(Optional.of(userVO)); + FeignClientCallAsync feignClient = new FeignClientCallAsync(userRemoteClient); + CompletableFuture> result = feignClient.getRecordsAsync(email); + Optional userResult = result.get(); + + assertEquals(Optional.of(userVO), userResult); + } +} From 95cd5ad13a4c14d3753258add7ac5c6b8ca6145b Mon Sep 17 00:00:00 2001 From: Yurii Midianyi <45738210+Yurii-Midianyi@users.noreply.github.com> Date: Thu, 6 Jul 2023 14:32:28 +0300 Subject: [PATCH 17/80] refactored updateOrderAdminPageInfo to decrease its cognitive complexity (#1168) * refactored updateOrderAdminPageInfo to decrease its cognitive complexity --- .../service/ubs/UBSManagementServiceImpl.java | 97 ++++++++++--------- 1 file changed, 52 insertions(+), 45 deletions(-) diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java index 49f92194e..fe21ad61c 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java @@ -1580,6 +1580,56 @@ private String collectInfoAboutChangesOfEcoNumber(Collection newEcoNumbe return String.format("%s: %s; ", orderHistory, String.join("; ", newEcoNumbers)); } + private void isOrderStatusCanceledOrDone(Order order) { + if (order.getOrderStatus() == OrderStatus.CANCELED || order.getOrderStatus() == OrderStatus.DONE) { + throw new IllegalStateException(String.format(ORDER_CAN_NOT_BE_UPDATED, order.getOrderStatus())); + } + } + + private void updateOrderPageFields(UpdateOrderPageAdminDto updateOrderPageDto, Order order, String email) { + long orderId = order.getId(); + if (nonNull(updateOrderPageDto.getUserInfoDto())) { + ubsClientService.updateUbsUserInfoInOrder(updateOrderPageDto.getUserInfoDto(), email); + } + if (nonNull(updateOrderPageDto.getAddressExportDetailsDto())) { + updateAddress(updateOrderPageDto.getAddressExportDetailsDto(), orderId, email); + } + setUbsCourierSumAndWriteOffStationSum(orderId, updateOrderPageDto.getWriteOffStationSum(), + updateOrderPageDto.getUbsCourierSum()); + if (nonNull(updateOrderPageDto.getExportDetailsDto())) { + updateOrderExportDetails(orderId, updateOrderPageDto.getExportDetailsDto(), email); + } + if (nonNull(updateOrderPageDto.getGeneralOrderInfo())) { + updateOrderDetailStatus(orderId, updateOrderPageDto.getGeneralOrderInfo(), email); + } + if (nonNull(updateOrderPageDto.getEcoNumberFromShop())) { + updateEcoNumberForOrder(updateOrderPageDto.getEcoNumberFromShop(), orderId, email); + } + if (nonNull(updateOrderPageDto.getOrderDetailDto())) { + setOrderDetail( + orderId, + updateOrderPageDto.getOrderDetailDto().getAmountOfBagsConfirmed(), + updateOrderPageDto.getOrderDetailDto().getAmountOfBagsExported(), + email); + } + if (nonNull(updateOrderPageDto.getUpdateResponsibleEmployeeDto())) { + updateOrderPageDto.getUpdateResponsibleEmployeeDto().stream() + .forEach(dto -> ordersAdminsPageService.responsibleEmployee(List.of(orderId), + dto.getEmployeeId().toString(), + dto.getPositionId(), + email)); + } else if (isOrderStatusFormedOrCanceledOrBroughtHimself(order)) { + List employeeOrderPositions = employeeOrderPositionRepository + .findAllByOrderId(orderId); + if (!employeeOrderPositions.isEmpty()) { + employeeOrderPositionRepository.deleteAll(employeeOrderPositions); + } + } + if (order.getOrderPaymentStatus().equals(OrderPaymentStatus.UNPAID)) { + notificationService.notifyUnpaidOrder(order); + } + } + /** * This is method which is updates admin page info for order. * @@ -1594,9 +1644,7 @@ public void updateOrderAdminPageInfo(UpdateOrderPageAdminDto updateOrderPageDto, Order order = orderRepository.findById(orderId) .orElseThrow(() -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST + orderId)); - if (order.getOrderStatus() == OrderStatus.CANCELED || order.getOrderStatus() == OrderStatus.DONE) { - throw new IllegalStateException(String.format(ORDER_CAN_NOT_BE_UPDATED, order.getOrderStatus())); - } + isOrderStatusCanceledOrDone(order); checkAvailableOrderForEmployee(order, email); @@ -1605,48 +1653,7 @@ && nonNull(updateOrderPageDto.getGeneralOrderInfo())) { updateOrderDetailStatus(orderId, updateOrderPageDto.getGeneralOrderInfo(), email); } else { try { - if (nonNull(updateOrderPageDto.getUserInfoDto())) { - ubsClientService.updateUbsUserInfoInOrder(updateOrderPageDto.getUserInfoDto(), email); - } - if (nonNull(updateOrderPageDto.getAddressExportDetailsDto())) { - updateAddress(updateOrderPageDto.getAddressExportDetailsDto(), orderId, email); - } - setUbsCourierSumAndWriteOffStationSum(orderId, updateOrderPageDto.getWriteOffStationSum(), - updateOrderPageDto.getUbsCourierSum()); - if (nonNull(updateOrderPageDto.getExportDetailsDto())) { - updateOrderExportDetails(orderId, updateOrderPageDto.getExportDetailsDto(), email); - } - if (nonNull(updateOrderPageDto.getGeneralOrderInfo())) { - updateOrderDetailStatus(orderId, updateOrderPageDto.getGeneralOrderInfo(), email); - } - if (nonNull(updateOrderPageDto.getEcoNumberFromShop())) { - updateEcoNumberForOrder(updateOrderPageDto.getEcoNumberFromShop(), orderId, email); - } - if (nonNull(updateOrderPageDto.getOrderDetailDto())) { - setOrderDetail( - orderId, - updateOrderPageDto.getOrderDetailDto().getAmountOfBagsConfirmed(), - updateOrderPageDto.getOrderDetailDto().getAmountOfBagsExported(), - email); - } - if (nonNull(updateOrderPageDto.getUpdateResponsibleEmployeeDto())) { - updateOrderPageDto.getUpdateResponsibleEmployeeDto().stream() - .forEach(dto -> ordersAdminsPageService.responsibleEmployee(List.of(orderId), - dto.getEmployeeId().toString(), - dto.getPositionId(), - email)); - } else { - if (isOrderStatusFormedOrCanceledOrBroughtHimself(order)) { - List employeeOrderPositions = employeeOrderPositionRepository - .findAllByOrderId(orderId); - if (!employeeOrderPositions.isEmpty()) { - employeeOrderPositionRepository.deleteAll(employeeOrderPositions); - } - } - } - if (order.getOrderPaymentStatus().equals(OrderPaymentStatus.UNPAID)) { - notificationService.notifyUnpaidOrder(order); - } + updateOrderPageFields(updateOrderPageDto, order, email); } catch (Exception e) { throw new BadRequestException(e.getMessage()); } From 799da3ac79cb1ae943299aa45e28ead1da19099e Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Thu, 6 Jul 2023 14:52:43 +0300 Subject: [PATCH 18/80] [UBS Address] User can choose districts on own (#1161) * Added dto to work with data * Added methods to get Districts from City * Added necessary error messages * Added tests to all function * Added endpoint to method * Added javadoc to method --- .../configuration/SecurityConfig.java | 4 + .../controller/AddressController.java | 41 +- .../controller/AddressControllerTest.java | 34 ++ .../greencity/enums/LocationDivision.java | 55 ++ .../greencity/enums/LocationDivisionTest.java | 32 ++ .../java/greencity/constant/ErrorMessage.java | 8 + .../dto/location/api/LocationDto.java | 14 + .../service/locations/LocationApiService.java | 367 +++++++++++++ .../locations/LocationApiServiceTest.java | 497 ++++++++++++++++++ .../service/ubs/UBSClientServiceImplTest.java | 18 +- .../UBSManagementEmployeeServiceImplTest.java | 45 +- 11 files changed, 1097 insertions(+), 18 deletions(-) create mode 100644 dao/src/main/java/greencity/enums/LocationDivision.java create mode 100644 dao/src/test/java/greencity/enums/LocationDivisionTest.java create mode 100644 service-api/src/main/java/greencity/dto/location/api/LocationDto.java create mode 100644 service/src/main/java/greencity/service/locations/LocationApiService.java create mode 100644 service/src/test/java/greencity/service/locations/LocationApiServiceTest.java diff --git a/core/src/main/java/greencity/configuration/SecurityConfig.java b/core/src/main/java/greencity/configuration/SecurityConfig.java index 546a06042..c8d3ff64e 100644 --- a/core/src/main/java/greencity/configuration/SecurityConfig.java +++ b/core/src/main/java/greencity/configuration/SecurityConfig.java @@ -229,6 +229,10 @@ protected void configure(HttpSecurity http) throws Exception { UBS_LINK + "/userProfile/**", UBS_LINK + "/update-order-address") .hasAnyRole(USER, ADMIN) + .antMatchers(HttpMethod.GET, + UBS_LINK + "/userProfile/**", + UBS_LINK + "/get-all-districts") + .hasAnyRole(USER, ADMIN) .antMatchers(HttpMethod.PATCH, UBS_LINK + "/userProfile/**", UBS_LINK + "/client/**", diff --git a/core/src/main/java/greencity/controller/AddressController.java b/core/src/main/java/greencity/controller/AddressController.java index 921d9c1f4..8d0d465b8 100644 --- a/core/src/main/java/greencity/controller/AddressController.java +++ b/core/src/main/java/greencity/controller/AddressController.java @@ -4,9 +4,12 @@ import greencity.constants.HttpStatuses; import greencity.dto.CreateAddressRequestDto; import greencity.dto.address.AddressDto; +import greencity.dto.location.api.LocationDto; import greencity.dto.order.OrderAddressDtoRequest; +import greencity.dto.order.OrderCancellationReasonDto; import greencity.dto.order.OrderWithAddressesResponseDto; import greencity.dto.user.UserVO; +import greencity.service.locations.LocationApiService; import greencity.service.ubs.UBSClientService; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; @@ -15,19 +18,21 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PatchMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.RequestParam; import springfox.documentation.annotations.ApiIgnore; import javax.validation.Valid; +import java.util.List; @RestController @RequestMapping("/ubs") @@ -35,6 +40,7 @@ @RequiredArgsConstructor public class AddressController { private final UBSClientService ubsClientService; + private final LocationApiService locationApiService; /** * Controller for getting all addresses for current order. @@ -144,4 +150,27 @@ public ResponseEntity makeAddressActual( return ResponseEntity.status(HttpStatus.OK) .body(ubsClientService.makeAddressActual(addressId, uuid)); } + + /** + * Controller to get all districts for a given region and city. + * + * @param region Name of the region. + * @param city Name of the city. + * @return A List of LocationDtos containing a list of all districts for the + * specified region and city. + */ + @ApiOperation(value = "Get all districts for a given region and city", + notes = "Provide a region and a city to look up for associated districts") + @ApiResponses(value = { + @ApiResponse(code = 200, message = HttpStatuses.OK, response = OrderCancellationReasonDto.class), + @ApiResponse(code = 401, message = HttpStatuses.UNAUTHORIZED), + @ApiResponse(code = 403, message = HttpStatuses.FORBIDDEN), + @ApiResponse(code = 404, message = HttpStatuses.NOT_FOUND) + }) + @GetMapping("/get-all-districts") + public ResponseEntity> getAllDistrictsForRegionAndCity(@RequestParam String region, + @RequestParam String city) { + return ResponseEntity.status(HttpStatus.OK) + .body(locationApiService.getAllDistrictsInCityByNames(region, city)); + } } diff --git a/core/src/test/java/greencity/controller/AddressControllerTest.java b/core/src/test/java/greencity/controller/AddressControllerTest.java index bf721b7e2..09bf448b4 100644 --- a/core/src/test/java/greencity/controller/AddressControllerTest.java +++ b/core/src/test/java/greencity/controller/AddressControllerTest.java @@ -6,7 +6,9 @@ import greencity.configuration.SecurityConfig; import greencity.converters.UserArgumentResolver; import greencity.dto.CreateAddressRequestDto; +import greencity.dto.location.api.LocationDto; import greencity.dto.order.OrderAddressDtoRequest; +import greencity.service.locations.LocationApiService; import greencity.service.ubs.UBSClientService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -21,6 +23,10 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders; import java.security.Principal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import static greencity.ModelUtils.getPrincipal; import static org.mockito.ArgumentMatchers.any; @@ -46,6 +52,9 @@ class AddressControllerTest { @Mock private UBSClientService ubsClientService; + @Mock + private LocationApiService locationApiService; + @Mock private UserRemoteClient userRemoteClient; @@ -128,4 +137,29 @@ void makeAddressActual() throws Exception { verify(ubsClientService).makeAddressActual(addressId, uuid); } + + @Test + void getAllDistrictsForRegionAndCity() throws Exception { + String region = "Львівська"; + String city = "Львів"; + Map nameMap = new HashMap<>(); + nameMap.put("name", "Львів"); + nameMap.put("nameEn", "Lviv"); + List mockLocationDtoList = new ArrayList<>(); + LocationDto mockLocationDto = LocationDto.builder() + .id("UA46060250010015970") + .parentId("UA46060250000025047") + .locationNameMap(nameMap) + .build(); + when(locationApiService.getAllDistrictsInCityByNames(region, city)).thenReturn(mockLocationDtoList); + mockMvc.perform(get(ubsLink + "/get-all-districts") + .param("region", region) + .param("city", city) + .principal(principal) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + + verify(locationApiService).getAllDistrictsInCityByNames(region, city); + } + } diff --git a/dao/src/main/java/greencity/enums/LocationDivision.java b/dao/src/main/java/greencity/enums/LocationDivision.java new file mode 100644 index 000000000..07e313ad8 --- /dev/null +++ b/dao/src/main/java/greencity/enums/LocationDivision.java @@ -0,0 +1,55 @@ +package greencity.enums; + +/** + * Enum for representing various location divisions. Each enum instance + * represents a different level of division, with an associated level ID + */ +public enum LocationDivision { + /** + * Represents a region or autonomous republic. + */ + REGION(1), + + /** + * Represents a district within a region or autonomous republic. + */ + DISTRICT_IN_REGION(2), + + /** + * Represents a local community. + */ + LOCAL_COMMUNITY(3), + + /** + * Represents a city or village. + */ + CITY(4), + + /** + * Represents a district within a city. + */ + DISTRICT_IN_CITY(5); + + /** + * ID for the location division level. + */ + int levelId; + + /** + * Constructor for creating a location division instance. + * + * @param levelId The ID for the location division level. + */ + LocationDivision(int levelId) { + this.levelId = levelId; + } + + /** + * Returns the ID for the location division level. + * + * @return The ID for the location division level. + */ + public int getLevelId() { + return levelId; + } +} diff --git a/dao/src/test/java/greencity/enums/LocationDivisionTest.java b/dao/src/test/java/greencity/enums/LocationDivisionTest.java new file mode 100644 index 000000000..38e77bd52 --- /dev/null +++ b/dao/src/test/java/greencity/enums/LocationDivisionTest.java @@ -0,0 +1,32 @@ +package greencity.enums; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class LocationDivisionTest { + + @Test + void testRegionLevelId() { + Assertions.assertEquals(1, LocationDivision.REGION.getLevelId()); + } + + @Test + void testDistrictInRegionLevelId() { + Assertions.assertEquals(2, LocationDivision.DISTRICT_IN_REGION.getLevelId()); + } + + @Test + void testLocalCommunityLevelId() { + Assertions.assertEquals(3, LocationDivision.LOCAL_COMMUNITY.getLevelId()); + } + + @Test + void testCityLevelId() { + Assertions.assertEquals(4, LocationDivision.CITY.getLevelId()); + } + + @Test + void testDistrictInCityLevelId() { + Assertions.assertEquals(5, LocationDivision.DISTRICT_IN_CITY.getLevelId()); + } +} diff --git a/service-api/src/main/java/greencity/constant/ErrorMessage.java b/service-api/src/main/java/greencity/constant/ErrorMessage.java index 1a554ec78..5793d2a82 100644 --- a/service-api/src/main/java/greencity/constant/ErrorMessage.java +++ b/service-api/src/main/java/greencity/constant/ErrorMessage.java @@ -53,6 +53,13 @@ public final class ErrorMessage { public static final String PAYMENT_NOT_FOUND = "Payment not found for order id: "; public static final String ADDRESS_ALREADY_EXISTS = "Address already exists"; public static final String ADDRESS_NOT_FOUND = "Address not found"; + public static final String NOT_FOUND_LOCATION_ON_LEVEL_AND_BY_CODE = + "Not found locations on level: %s, and by code: %s"; + public static final String VALUE_CAN_NOT_BE_NULL_OR_EMPTY = "The value parameter cannot be null or empty"; + public static final String NOT_FOUND_LOCATION_BY_URL = "Not found locations by url: "; + public static final String REGION_NOT_FOUND = "Region not found: "; + public static final String CITY_NOT_FOUND = "City not found: "; + public static final String CITY_NOT_FOUND_IN_REGION = "City not found in region: "; public static final String ACTUAL_ADDRESS_NOT_FOUND = "Actual address not found"; public static final String LOCATION_DOESNT_FOUND_BY_ID = "Location does not exist by id: "; public static final String LOCATIONS_BELONG_TO_DIFFERENT_REGIONS = @@ -153,6 +160,7 @@ public final class ErrorMessage { public static final String REGIONS_NOT_FOUND_BY_LOCATION_STATUS = "Regions containing locations with a status: %s, not found"; public static final String ORDER_CAN_NOT_BE_UPDATED = "An order with the status: %s, can not be updated"; + public static final String INVALID_URL = "Invalid URL: "; public static final String LOCATION_CAN_NOT_BE_DELETED = "Such location cannot be deleted as it is linked to the tariff"; diff --git a/service-api/src/main/java/greencity/dto/location/api/LocationDto.java b/service-api/src/main/java/greencity/dto/location/api/LocationDto.java new file mode 100644 index 000000000..8f373a8f7 --- /dev/null +++ b/service-api/src/main/java/greencity/dto/location/api/LocationDto.java @@ -0,0 +1,14 @@ +package greencity.dto.location.api; + +import lombok.Builder; +import lombok.Data; + +import java.util.Map; + +@Data +@Builder +public class LocationDto { + private String parentId; + private String id; + private Map locationNameMap; +} \ No newline at end of file diff --git a/service/src/main/java/greencity/service/locations/LocationApiService.java b/service/src/main/java/greencity/service/locations/LocationApiService.java new file mode 100644 index 000000000..74ec5b7ac --- /dev/null +++ b/service/src/main/java/greencity/service/locations/LocationApiService.java @@ -0,0 +1,367 @@ +package greencity.service.locations; + +import greencity.constant.ErrorMessage; +import greencity.dto.location.api.LocationDto; +import greencity.enums.LocationDivision; +import greencity.exceptions.NotFoundException; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; + +import java.net.URI; +import java.util.Map; +import java.util.HashMap; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.Arrays; +import org.apache.commons.collections4.CollectionUtils; + +@Service +public class LocationApiService { + private static final String API_URL = "https://directory.org.ua/api/katottg"; + private static final int DEFAULT_PAGE_SIZE = 125; + private static final String LEVEL = "level"; + private static final String NAME = "name"; + private static final String NAME_EN = "name_en"; + private static final String CODE = "code"; + private static final String PAGE_SIZE = "page_size"; + private static final String PARENT = "parent"; + private static final String PARENT_ID = "parent_id"; + private static final String RESULTS = "results"; + private static final String NAME_KYIV_UA = "Київ"; + private static final String NAME_KYIV_EN = "Kyiv"; + private static final String KYIV_ID = "UA80000000000093317"; + private static final LocationDto KYIV = LocationDto.builder() + .id(KYIV_ID) + .locationNameMap(Map.of(NAME, NAME_KYIV_UA, NAME_EN, NAME_KYIV_EN)) + .build(); + private RestTemplate restTemplate; + + /** + * Constructor for the LocationApiService class. + * + * @param restTemplate An instance of RestTemplate for making HTTP requests. + */ + @Autowired + public LocationApiService(RestTemplate restTemplate) { + this.restTemplate = restTemplate; + } + + /** + * Retrieves all districts in a city by the city's name. There's a special case + * for Kyiv, the capital of Ukraine. In the system, due to the API having + * references only to the previous element, the search for districts occurs + * sequentially: region -> district in region -> local community -> city -> + * district. Generally, the city corresponds to level 4 in the hierarchical + * structure. However, Kyiv is unique in that it is at level 1, and its + * districts are at level 5. Therefore, a separate logic is implemented because + * the system can't go through all the steps from level 1 to level 4, and has to + * directly access the districts from level 5 when dealing with Kyiv. + * + * @param regionName The name of the region. + * @param cityName The name of the city. + * @return A list of LocationDto that represent districts in the city. + */ + public List getAllDistrictsInCityByNames(String regionName, String cityName) { + checkIfNotNull(regionName, cityName); + if (cityName.equals(KYIV.getLocationNameMap().get(NAME)) + || cityName.equals(KYIV.getLocationNameMap().get(NAME_EN))) { + return getAllDistrictsInCityByCityID(KYIV.getId()); + } + List cities = getCitiesByName(regionName, cityName); + LocationDto city = getCityInRegion(regionName, cities); + String cityId = city.getId(); + List allDistricts = getAllDistrictsInCityByCityID(cityId); + if (allDistricts.isEmpty()) { + allDistricts.add(city); + } + return allDistricts; + } + + /** + * Retrieves a list of cities by name. + * + * @param regionName The name of the region. + * @param cityName The name of the city. + * @return A list of matching city locations. + */ + private List getCitiesByName(String regionName, String cityName) { + List allCities = getLocationDataByName(LocationDivision.CITY.getLevelId(), cityName); + if (allCities.isEmpty()) { + allCities.add(getCityByNameFromRegionSide(regionName, cityName)); + return allCities; + } + return allCities.stream() + .filter(location -> location.getLocationNameMap().containsValue(cityName)) + .collect(Collectors.toList()); + } + + /** + * Finds a location by its name. + * + * @param locations The list of locations. + * @param locationName The location name. + * @return A LocationDto matching the provided name. + */ + private LocationDto findLocationByName(List locations, String locationName) { + return locations.stream() + .filter(location -> location.getLocationNameMap().containsValue(locationName)) + .findFirst() + .orElseThrow(() -> new NotFoundException(ErrorMessage.CITY_NOT_FOUND + locationName)); + } + + /** + * Retrieves a city by name from a specified region. + * + * @param regionName The name of the region. + * @param cityName The name of the city. + * @return The LocationDto that represents the city in the specified region. + * @throws NotFoundException if the city is not found. + */ + private LocationDto getCityByNameFromRegionSide(String regionName, String cityName) { + LocationDto region = getRegionByName(regionName); + List districts = getAllDistrictInTheRegionsById(region.getId()); + List localCommunities = districts.stream() + .flatMap(district -> getAllLocalCommunitiesById(district.getId()).stream()) + .collect(Collectors.toList()); + List cities = localCommunities.stream() + .flatMap(community -> getAllCitiesById(community.getId()).stream()) + .collect(Collectors.toList()); + if (cities.isEmpty()) { + throw new NotFoundException(ErrorMessage.CITY_NOT_FOUND + cityName); + } + return findLocationByName(cities, cityName); + } + + /** + * Retrieves a region by name. + * + * @param regionName The name of the region. + * @return The region matching the provided name. + */ + private LocationDto getRegionByName(String regionName) { + List allRegions; + try { + allRegions = getLocationDataByName(LocationDivision.REGION.getLevelId(), regionName); + if (allRegions.isEmpty()) { + allRegions = getAllRegions(); + } + } catch (NotFoundException e) { + allRegions = getAllRegions(); + } + + return allRegions.stream() + .filter(region -> region.getLocationNameMap().containsValue(regionName)) + .findFirst() + .orElseThrow(() -> new NotFoundException(ErrorMessage.REGION_NOT_FOUND + regionName)); + } + + /** + * Retrieves the city in a specified region. + * + * @param regionName The name of the region. + * @param cities A list of LocationDto that represent cities. + * @return The LocationDto that represents the city in the specified region. + * @throws NotFoundException if the city is not found in the region. + */ + private LocationDto getCityInRegion(String regionName, List cities) { + LocationDto region = getRegionByName(regionName); + String regionID = region.getId(); + + return cities.stream() + .filter(city -> { + LocationDto localCommunity = + getLocationDataByCode(LocationDivision.LOCAL_COMMUNITY.getLevelId(), city.getParentId()); + LocationDto districtRegion = getLocationDataByCode(LocationDivision.DISTRICT_IN_REGION.getLevelId(), + localCommunity.getParentId()); + return districtRegion.getParentId().equals(regionID); + }) + .findFirst() + .orElseThrow(() -> new NotFoundException(ErrorMessage.CITY_NOT_FOUND_IN_REGION + regionID)); + } + + /** + * Retrieves all regions. + * + * @return A list of LocationDto that represent all regions. + */ + + private List getAllRegions() { + return getLocationDataByLevel(LocationDivision.REGION.getLevelId()); + } + + /** + * Retrieves all cities by their ID. + * + * @param upperId The ID of the city. + * @return A list of LocationDto that represent the cities. + */ + + private List getAllCitiesById(String upperId) { + return getLocationDataByUpperId(LocationDivision.CITY.getLevelId(), upperId); + } + + /** + * Retrieves all districts in the region by the region's ID. + * + * @param upperId The ID of the region. + * @return A list of LocationDto that represent districts in the region. + */ + private List getAllDistrictInTheRegionsById(String upperId) { + return getLocationDataByUpperId(LocationDivision.DISTRICT_IN_REGION.getLevelId(), upperId); + } + + /** + * Retrieves all local communities by their ID. + * + * @param upperId The ID of the local community. + * @return A list of LocationDto that represent local communities. + */ + private List getAllLocalCommunitiesById(String upperId) { + return getLocationDataByUpperId(LocationDivision.LOCAL_COMMUNITY.getLevelId(), upperId); + } + + /** + * Retrieves all districts in a city by the city's ID. + * + * @param upperId The ID of the city. + * @return A list of LocationDto that represent districts in the city. + */ + private List getAllDistrictsInCityByCityID(String upperId) { + return getLocationDataByUpperId(LocationDivision.DISTRICT_IN_CITY.getLevelId(), upperId); + } + + /** + * Retrieves location data by level and code. + * + * @param level The hierarchical level of the location. + * @param code The code of the location. + * @return The LocationDto that matches the specified level and code. + * @throws NotFoundException if the location is not found. + */ + private LocationDto getLocationDataByCode(int level, String code) { + UriComponentsBuilder builder = buildUrl() + .queryParam(CODE, code) + .queryParam(LEVEL, level); + List resultFromUrl = getResultFromUrl(builder.build().encode().toUri()); + if (CollectionUtils.isEmpty(resultFromUrl)) { + throw new NotFoundException( + String.format(ErrorMessage.NOT_FOUND_LOCATION_ON_LEVEL_AND_BY_CODE, level, code)); + } + return resultFromUrl.get(0); + } + + /** + * Fetches a list of location data by level. + * + * @param level The level of the location. + * @return A list of LocationDto for the specified level. + */ + private List getLocationDataByLevel(int level) { + UriComponentsBuilder builder = buildUrl().queryParam(LEVEL, level); + return getResultFromUrl(builder.build().encode().toUri()); + } + + private boolean checkIfNotNull(String... names) { + if (Arrays.stream(names).anyMatch(StringUtils::isBlank)) { + throw new IllegalArgumentException(ErrorMessage.VALUE_CAN_NOT_BE_NULL_OR_EMPTY); + } + return true; + } + + /** + * Retrieves a list of location data by level and name. + * + * @param level The hierarchical level of the location. + * @param name The name of the location. + * @return A list of LocationDto that matches the specified level and name. + * @throws IllegalArgumentException if the name is null. + */ + + private List getLocationDataByName(int level, String name) { + UriComponentsBuilder builder = buildUrl() + .queryParam(NAME, name) + .queryParam(LEVEL, level); + return getResultFromUrl(builder.build().encode().toUri()); + } + + /** + * Extracts location data from a URL. + * + * @param url The URL to retrieve the data from. + * @return A list of LocationDto. + */ + private List getResultFromUrl(URI url) { + ParameterizedTypeReference> typeRef = + new ParameterizedTypeReference>() { + }; + ResponseEntity> response = restTemplate.exchange(url, HttpMethod.GET, null, typeRef); + return Optional.ofNullable(response) + .map(ResponseEntity::getBody) + .map(body -> (List>) body.get(RESULTS)) + .orElseThrow(() -> new NotFoundException(ErrorMessage.NOT_FOUND_LOCATION_BY_URL + url)) + .stream() + .map(this::mapToLocationDto) + .collect(Collectors.toList()); + } + + /** + * Transforms a map into a LocationDto. + * + * @param result The map with location data. + * @return The transformed LocationDto. + */ + private LocationDto mapToLocationDto(Map result) { + Map nameMap = new HashMap<>(); + nameMap.put(NAME, getValueFromMap(result, NAME)); + nameMap.put(NAME_EN, getValueFromMap(result, NAME_EN)); + return LocationDto.builder() + .id(getValueFromMap(result, CODE)) + .parentId(getValueFromMap(result, PARENT_ID)) + .locationNameMap(nameMap) + .build(); + } + + /** + * Retrieves a value from a map based on a specified key. + * + * @param The type of the object being returned. + * @param map The map from which to retrieve the value. + * @param key The key associated with the value to retrieve. + * @return The value associated with the specified key. + */ + private T getValueFromMap(Map map, String key) { + return (T) map.get(key); + } + + /** + * Retrieves location data by its upper Id. + * + * @param level The hierarchical level of the location. + * @param upperId The upperId associated with the location. + * @return A list of LocationDto associated with the specified upperId. + * @throws IllegalArgumentException if the upperId is null. + */ + private List getLocationDataByUpperId(int level, String upperId) { + UriComponentsBuilder builder = buildUrl().queryParam(LEVEL, level) + .queryParam(PARENT, upperId); + return getResultFromUrl(builder.build().encode().toUri()); + } + + /** + * Constructs a URL using UriComponentsBuilder. + * + * @return A UriComponentsBuilder instance with the API URL, page, and page size + * parameters set. + */ + private UriComponentsBuilder buildUrl() { + return UriComponentsBuilder.fromHttpUrl(API_URL) + .queryParam(PAGE_SIZE, DEFAULT_PAGE_SIZE); + } +} diff --git a/service/src/test/java/greencity/service/locations/LocationApiServiceTest.java b/service/src/test/java/greencity/service/locations/LocationApiServiceTest.java new file mode 100644 index 000000000..34cdbfb62 --- /dev/null +++ b/service/src/test/java/greencity/service/locations/LocationApiServiceTest.java @@ -0,0 +1,497 @@ +package greencity.service.locations; + +import greencity.dto.location.api.LocationDto; +import greencity.enums.LocationDivision; +import greencity.exceptions.NotFoundException; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; + +import java.util.Map; +import java.util.HashMap; +import java.util.List; +import java.util.Arrays; +import java.util.ArrayList; +import java.util.Collections; + +import static org.hibernate.validator.internal.util.Contracts.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertFalse; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.when; + +class LocationApiServiceTest { + private static final String API_URL = "https://directory.org.ua/api/katottg"; + private static final String PAGE_SIZE_VALUE = "125"; + private static final String LEVEL = "level"; + private static final String NAME = "name"; + private static final String NAME_EN = "name_en"; + private static final String CODE = "code"; + private static final String PAGE_SIZE = "page_size"; + private static final String PARENT = "parent"; + private static final String PARENT_ID = "parent_id"; + private static final String RESULTS = "results"; + @InjectMocks + LocationApiService locationApiService; + @Mock + RestTemplate restTemplate; + + static Map getApiResult(String code, String parent_id, String name, String nameEn) { + Map apiResult = new HashMap<>(); + apiResult.put(CODE, code); + apiResult.put(PARENT_ID, parent_id); + apiResult.put(NAME, name); + apiResult.put(NAME_EN, nameEn); + return apiResult; + } + + @BeforeEach + void setUp() { + MockitoAnnotations.initMocks(this); + } + + private UriComponentsBuilder buildCode(String code, int level) { + return UriComponentsBuilder + .fromHttpUrl(API_URL) + .queryParam(PAGE_SIZE, PAGE_SIZE_VALUE) + .queryParam(CODE, code) + .queryParam(LEVEL, level); + } + + private UriComponentsBuilder buildParent(int level, String parent) { + return UriComponentsBuilder + .fromHttpUrl(API_URL) + .queryParam(PAGE_SIZE, PAGE_SIZE_VALUE) + .queryParam(LEVEL, level) + .queryParam(PARENT, parent); + } + + private UriComponentsBuilder build(int level) { + return UriComponentsBuilder + .fromHttpUrl(API_URL) + .queryParam(PAGE_SIZE, PAGE_SIZE_VALUE) + .queryParam(LEVEL, level); + } + + private UriComponentsBuilder buildName(String name, int level) { + return UriComponentsBuilder + .fromHttpUrl(API_URL) + .queryParam(PAGE_SIZE, PAGE_SIZE_VALUE) + .queryParam(NAME, name) + .queryParam(LEVEL, level); + } + + private void respond(UriComponentsBuilder builder, List> list) { + when(restTemplate.exchange(eq(builder.build().encode().toUri()), eq(HttpMethod.GET), eq(null), + any(ParameterizedTypeReference.class))) + .thenReturn(prepareResponseEntity(list)); + } + + ResponseEntity prepareResponseEntity(List> results) { + Map apiResponse = new HashMap<>(); + apiResponse.put(RESULTS, results); + return new ResponseEntity<>(apiResponse, HttpStatus.OK); + } + + private void assertLocationDto(LocationDto locationDto, String expectedId, String expectedParentId, + String expectedName, String expectedNameEn) { + assertEquals(expectedId, locationDto.getId()); + assertEquals(expectedParentId, locationDto.getParentId()); + assertEquals(expectedName, locationDto.getLocationNameMap().get(NAME)); + assertEquals(expectedNameEn, locationDto.getLocationNameMap().get(NAME_EN)); + } + + private void initLviv() { + Map lvivskaResult = + getApiResult("UA46000000000026241", null, "Львівська", "Lvivska"); + Map lviv2Result = + getApiResult("UA05020030010063857", "UA05020000000026686", "Львів", "Lviv"); + Map lvivDistrictResult = + getApiResult("UA46060000000042587", "UA46000000000026241", "Львівський", "Lvivskyi"); + Map lvivska2Result = + getApiResult("UA05020030000031457", "UA46060000000042587", "Львівська", "Lvivska"); + Map lvivResult = + getApiResult("UA46060250010015970", "UA05020030000031457", "Львів", "Lviv"); + Map halytskyiResult = + getApiResult("UA46060250010121390", "UA46060250010015970", "Галицький", "Halytskyi"); + Map zaliznychnyiResult = + getApiResult("UA46060250010259421", "UA46060250010015970", "Залізничний", "Zaliznychnyi"); + UriComponentsBuilder level1Builder = build(LocationDivision.REGION.getLevelId()); + UriComponentsBuilder level2BuilderLviv = + buildCode("UA46060000000042587", LocationDivision.DISTRICT_IN_REGION.getLevelId()); + UriComponentsBuilder level2BuilderLvivParent = + buildParent(LocationDivision.DISTRICT_IN_REGION.getLevelId(), "UA46000000000026241"); + UriComponentsBuilder level3CityBuilder = + buildCode("UA05020030000031457", LocationDivision.LOCAL_COMMUNITY.getLevelId()); + UriComponentsBuilder level3BuilderParentLviv = + buildParent(LocationDivision.LOCAL_COMMUNITY.getLevelId(), "UA46060000000042587"); + UriComponentsBuilder level4BuilderParentLvivCity = + buildParent(LocationDivision.CITY.getLevelId(), "UA05020030000031457"); + UriComponentsBuilder level4BuilderLvivCity = buildName("Львів", LocationDivision.CITY.getLevelId()); + UriComponentsBuilder level4BuilderLviv2City = buildName("Миколаїв", LocationDivision.CITY.getLevelId()); + + UriComponentsBuilder level5BuilderVillage = + buildParent(LocationDivision.DISTRICT_IN_CITY.getLevelId(), "UA46060230040034427"); + UriComponentsBuilder level5BuilderCity = + buildParent(LocationDivision.DISTRICT_IN_CITY.getLevelId(), "UA46060250010015970"); + + respond(level1Builder, Arrays.asList(lvivskaResult)); + respond(level2BuilderLviv, Arrays.asList(lvivDistrictResult)); + respond(level2BuilderLvivParent, Arrays.asList(lvivDistrictResult)); + respond(level3BuilderParentLviv, Arrays.asList(lvivska2Result)); + respond(level3BuilderParentLviv, Arrays.asList(lvivska2Result)); + respond(level3CityBuilder, Arrays.asList(lvivska2Result)); + respond(level4BuilderParentLvivCity, Arrays.asList(lvivResult, lviv2Result)); + respond(level4BuilderLvivCity, Arrays.asList(lvivResult)); + respond(level4BuilderLviv2City, Arrays.asList(lviv2Result)); + respond(level5BuilderVillage, new ArrayList<>()); + respond(level5BuilderCity, Arrays.asList(halytskyiResult, zaliznychnyiResult)); + + } + + private void initKyiv() { + Map kyivResult = getApiResult("UA80000000000093317", null, "Київ", "Kyiv"); + Map holosiivskyiResult = + getApiResult("UA80000000000126643", "UA80000000000093317", "Голосіївський", "Holosiivskyi"); + Map darnytskyiResult = + getApiResult("UA80000000000210193", "UA80000000000093317", "Дарницький", "Darnytskyi"); + + UriComponentsBuilder kyivBuilder = build(LocationDivision.REGION.getLevelId()); + UriComponentsBuilder kyivDistrictsBuilder = + buildParent(LocationDivision.DISTRICT_IN_CITY.getLevelId(), "UA80000000000093317"); + respond(kyivBuilder, Arrays.asList(kyivResult)); + respond(kyivDistrictsBuilder, Arrays.asList(holosiivskyiResult, darnytskyiResult)); + + } + + @Test + void testGetDisctrictByName_whenNameEn() { + initLviv(); + UriComponentsBuilder lvivBuilder = buildName("Lviv", LocationDivision.CITY.getLevelId()); + UriComponentsBuilder lvivskaBuilder = buildName("Lvivska", LocationDivision.REGION.getLevelId()); + respond(lvivBuilder, new ArrayList<>()); + respond(lvivskaBuilder, new ArrayList<>()); + List districts = locationApiService.getAllDistrictsInCityByNames("Lvivska", "Lviv"); + assertEquals(2, districts.size()); + assertLocationDto(districts.get(0), "UA46060250010121390", "UA46060250010015970", "Галицький", "Halytskyi"); + assertLocationDto(districts.get(1), "UA46060250010259421", "UA46060250010015970", "Залізничний", + "Zaliznychnyi"); + } + + @Test + void testGetAllDistrictsInCityByNames_whenKyiv() { + initKyiv(); + List districts = locationApiService.getAllDistrictsInCityByNames("Київська", "Київ"); + assertEquals(2, districts.size()); + assertLocationDto(districts.get(0), "UA80000000000126643", "UA80000000000093317", "Голосіївський", + "Holosiivskyi"); + assertLocationDto(districts.get(1), "UA80000000000210193", "UA80000000000093317", "Дарницький", "Darnytskyi"); + + } + + @Test + void testGetAllDistrictsInCityByNames_whenKyivEn() { + initKyiv(); + List districts = locationApiService.getAllDistrictsInCityByNames("Київська", "Kyiv"); + assertEquals(2, districts.size()); + assertLocationDto(districts.get(0), "UA80000000000126643", "UA80000000000093317", "Голосіївський", + "Holosiivskyi"); + assertLocationDto(districts.get(1), "UA80000000000210193", "UA80000000000093317", "Дарницький", "Darnytskyi"); + + } + + @Test + void testGetAllDistrictsInCityByNames_whenCityNotExist() { + initLviv(); + assertThrows(NotFoundException.class, () -> { + locationApiService.getAllDistrictsInCityByNames("Вінницька", "Львів"); + }); + } + + @Test + void testGetAllDistrictsInCityByNames() { + initLviv(); + List districts = locationApiService.getAllDistrictsInCityByNames("Львівська", "Львів"); + assertEquals(2, districts.size()); + assertLocationDto(districts.get(0), "UA46060250010121390", "UA46060250010015970", "Галицький", "Halytskyi"); + assertLocationDto(districts.get(1), "UA46060250010259421", "UA46060250010015970", "Залізничний", + "Zaliznychnyi"); + + } + + @Test + void testGetAllDistrictsInCityByNames_whenCityNotFound() { + assertThrows(NotFoundException.class, () -> { + locationApiService.getAllDistrictsInCityByNames("Львівська", "UNREAL"); + }); + } + + @Test + void testGetAllDistrictsInCityByNames_whenLocalCommunityNotFound() { + Map apiResult1 = getApiResult("UA000000001", "UA000000000", "No Community", "No Community En"); + List> results = Collections.singletonList(apiResult1); + ResponseEntity responseEntity = prepareResponseEntity(results); + when(restTemplate.getForEntity((API_URL), Map.class)).thenReturn(responseEntity); + assertThrows(NotFoundException.class, () -> { + locationApiService.getAllDistrictsInCityByNames("RegionName", "CityName"); + }); + + } + + @Test + void testGetAllDistrictsInCityByNames_whenNoDistricts() { + + Map lvivskaResult = + getApiResult("UA46000000000026241", null, "Львівська", "Lvivska"); + Map lvivDistrictResult = + getApiResult("UA46060000000042587", "UA46000000000026241", "Львівський", "Lvivskyi"); + Map kulykivskaResult = + getApiResult("UA46060230000093092", "UA46060000000042587", "Куликівська", "Kulykivska"); + Map kulykivResult = + getApiResult("UA46060230010099970", "UA46060230000093092", "Куликів", "Kulykiv"); + Map vidnivResult = + getApiResult("UA46060230040034427", "UA46060230000093092", "Віднів", "Vidniv"); + UriComponentsBuilder level1Builder = build(LocationDivision.REGION.getLevelId()); + UriComponentsBuilder level2BuilderLviv = + buildCode("UA46060000000042587", LocationDivision.DISTRICT_IN_REGION.getLevelId()); + UriComponentsBuilder level2BuilderLvivParent = + buildParent(LocationDivision.DISTRICT_IN_REGION.getLevelId(), "UA46000000000026241"); + UriComponentsBuilder level3VillageBuilder = + buildCode("UA46060230000093092", LocationDivision.LOCAL_COMMUNITY.getLevelId()); + + UriComponentsBuilder level4BuilderParentLvivCity = + buildParent(LocationDivision.CITY.getLevelId(), "UA05020030000031457"); + UriComponentsBuilder level4BuilderVillage = buildName("Віднів", LocationDivision.CITY.getLevelId()); + UriComponentsBuilder level5BuilderVillage = + buildParent(LocationDivision.DISTRICT_IN_CITY.getLevelId(), "UA46060230040034427"); + + respond(level1Builder, Arrays.asList(lvivskaResult)); + respond(level2BuilderLviv, Arrays.asList(lvivDistrictResult)); + respond(level2BuilderLvivParent, Arrays.asList(lvivDistrictResult)); + respond(level3VillageBuilder, Arrays.asList(kulykivskaResult)); + respond(level4BuilderVillage, Arrays.asList(kulykivResult, vidnivResult)); + respond(level4BuilderParentLvivCity, Arrays.asList(kulykivResult, vidnivResult)); + respond(level5BuilderVillage, new ArrayList<>()); + List allDistricts = locationApiService.getAllDistrictsInCityByNames("Львівська", "Віднів"); + assertNotNull(allDistricts); + assertFalse(allDistricts.isEmpty()); + assertEquals(1, allDistricts.size()); + assertLocationDto(allDistricts.get(0), "UA46060230040034427", "UA46060230000093092", "Віднів", "Vidniv"); + } + + @Test + void testGetAllDistrictsInCityByNames_whenNameEn() { + initLviv(); + List result = locationApiService.getAllDistrictsInCityByNames("Lvivska", "Львів"); + assertEquals(2, result.size()); + } + + @Test + void testGetGetAllDistrictsInCityByNames_whenCityValueNulOrEmpty() { + assertThrows(IllegalArgumentException.class, () -> { + locationApiService.getAllDistrictsInCityByNames("Lvivska", null); + }); + assertThrows(IllegalArgumentException.class, () -> { + locationApiService.getAllDistrictsInCityByNames("Lvivska", ""); + }); + } + + @Test + void testGetGetAllDistrictsInCityByNames_whenRegionValueNullOrEmpty() { + assertThrows(IllegalArgumentException.class, () -> { + locationApiService.getAllDistrictsInCityByNames(null, "Lviv"); + }); + assertThrows(IllegalArgumentException.class, () -> { + locationApiService.getAllDistrictsInCityByNames("", "Lviv"); + }); + } + + @Test + void testGetGetAllDistrictsInCityByNames_whenValuesNullOrEmpty() { + assertThrows(IllegalArgumentException.class, () -> { + locationApiService.getAllDistrictsInCityByNames(null, null); + }); + assertThrows(IllegalArgumentException.class, () -> { + locationApiService.getAllDistrictsInCityByNames("", ""); + }); + } + + @Test + void testGetGetAllDistrictsInCityByNames_whenResultEmpty() { + initLviv(); + assertThrows(NotFoundException.class, () -> { + locationApiService.getAllDistrictsInCityByNames("Львівська", "Тест"); + }); + } + + @Test + void testGetGetAllDistrictsInCityByNames_whenUrlEmpty() { + assertThrows(NotFoundException.class, () -> { + locationApiService.getAllDistrictsInCityByNames("Тест", "Тест"); + }); + } + + @Test + void testGetGetAllDistrictsInCityByNames_noCities() { + Map mykolaivskaResult = + getApiResult("UA48000000000039575", null, "Миколаївська", "Mykolaivska"); + Map chernihivskaResult = + getApiResult("UA74000000000025378", null, "Чернігівська", "Chernihivska"); + Map nizhynskyiResult = + getApiResult("UA74040000000028062", "UA74000000000025378", "Ніжинський", "Nizhynskyi"); + Map bobrovytskaDistrictResult = + getApiResult("UA74040050000013413", "UA74040000000028062", "Бобровицька", "Bobrovytska"); + Map mykolaiv2Result = + getApiResult("UA74040050200013786", "UA74040050000013413", "Миколаїв", "Mykolaiv"); + + UriComponentsBuilder builder = build(LocationDivision.REGION.getLevelId()); + UriComponentsBuilder builder4 = buildName("Миколаїв", LocationDivision.CITY.getLevelId()); + UriComponentsBuilder builder3 = buildCode("UA74040050000013413", LocationDivision.LOCAL_COMMUNITY.getLevelId()); + UriComponentsBuilder builder2 = + buildCode("UA74040000000028062", LocationDivision.DISTRICT_IN_REGION.getLevelId()); + + respond(builder, Arrays.asList(mykolaivskaResult, chernihivskaResult)); + respond(builder4, Arrays.asList(mykolaiv2Result)); + respond(builder3, Arrays.asList(bobrovytskaDistrictResult)); + respond(builder2, Arrays.asList(nizhynskyiResult)); + + assertThrows(NotFoundException.class, () -> { + locationApiService.getAllDistrictsInCityByNames("Миколаївська", "Миколаїв"); + }); + } + + @Test + void testGetGetAllDistrictsInCityByNames_noCitiesEmptyList() { + Map mykolaivskaResult = + getApiResult("UA48000000000039575", null, "Миколаївська", "Mykolaivska"); + Map mykolaivskyiResult = + getApiResult("UA48060000000094390", "UA48000000000039575", "Миколаївський", "Mykolaivskyi"); + Map mykolaivskaDistrictResult = + getApiResult("UA48060150000071713", "UA48060000000094390", "Миколаївська", "Mykolaivska"); + Map chernihivskaResult = + getApiResult("UA74000000000025378", null, "Чернігівська", "Chernihivska"); + Map nizhynskyiResult = + getApiResult("UA74040000000028062", "UA74000000000025378", "Ніжинський", "Nizhynskyi"); + Map bobrovytskaDistrictResult = + getApiResult("UA74040050000013413", "UA74040000000028062", "Бобровицька", "Bobrovytska"); + UriComponentsBuilder builder = build(LocationDivision.REGION.getLevelId()); + UriComponentsBuilder builder4 = buildName("Миколаїв", LocationDivision.CITY.getLevelId()); + UriComponentsBuilder builder3 = buildCode("UA74040050000013413", LocationDivision.LOCAL_COMMUNITY.getLevelId()); + UriComponentsBuilder builder2 = + buildCode("UA74040000000028062", LocationDivision.DISTRICT_IN_REGION.getLevelId()); + UriComponentsBuilder builder2_2 = + buildParent(LocationDivision.DISTRICT_IN_REGION.getLevelId(), "UA48000000000039575"); + UriComponentsBuilder builder3_2 = + buildParent(LocationDivision.LOCAL_COMMUNITY.getLevelId(), "UA48060000000094390"); + UriComponentsBuilder builder4_2 = buildParent(LocationDivision.CITY.getLevelId(), "UA48060150000071713"); + + respond(builder, Arrays.asList(mykolaivskaResult, chernihivskaResult)); + respond(builder4, new ArrayList<>()); + respond(builder3, Arrays.asList(bobrovytskaDistrictResult)); + respond(builder2, Arrays.asList(nizhynskyiResult)); + respond(builder2_2, Arrays.asList(mykolaivskyiResult)); + respond(builder3_2, Arrays.asList(mykolaivskaDistrictResult)); + respond(builder4_2, new ArrayList<>()); + + assertThrows(NotFoundException.class, () -> { + locationApiService.getAllDistrictsInCityByNames("Миколаївська", "Миколаїв"); + }); + } + + @Test + void testGetCityByNameFromRegionSide_ResultFromUrlEmpty() { + Map mykolaivskaResult = + getApiResult("UA48000000000039575", null, "Миколаївська", "Mykolaivska"); + Map mykolaivskyiResult = + getApiResult("UA48060000000094390", "UA48000000000039575", "Миколаївський", "Mykolaivskyi"); + Map mykolaivskaDistrictResult = + getApiResult("UA48060150000071713", "UA48060000000094390", "Миколаївська", "Mykolaivska"); + Map chernihivskaResult = + getApiResult("UA74000000000025378", null, "Чернігівська", "Chernihivska"); + Map nizhynskyiResult = + getApiResult("UA74040000000028062", "UA74000000000025378", "Ніжинський", "Nizhynskyi"); + Map bobrovytskaDistrictResult = + getApiResult("UA74040050000013413", "UA74040000000028062", "Бобровицька", "Bobrovytska"); + Map mykolaiv2Result = + getApiResult("UA74040050200013786", "UA74040050000013413", "Миколаїв", "Mykolaiv"); + + UriComponentsBuilder builder = build(LocationDivision.REGION.getLevelId()); + UriComponentsBuilder builder4 = buildName("Миколаїв", LocationDivision.CITY.getLevelId()); + UriComponentsBuilder builder3 = buildCode("UA74040050000013413", LocationDivision.LOCAL_COMMUNITY.getLevelId()); + UriComponentsBuilder builder2 = + buildCode("UA74040000000028062", LocationDivision.DISTRICT_IN_REGION.getLevelId()); + UriComponentsBuilder builder2_2 = + buildParent(LocationDivision.DISTRICT_IN_REGION.getLevelId(), "UA48000000000039575"); + UriComponentsBuilder builder3_2 = + buildParent(LocationDivision.LOCAL_COMMUNITY.getLevelId(), "UA48060000000094390"); + UriComponentsBuilder builder4_2 = buildParent(LocationDivision.CITY.getLevelId(), "UA48060150000071713"); + + respond(builder, Arrays.asList(mykolaivskaResult, chernihivskaResult)); + respond(builder4, new ArrayList<>()); + respond(builder3, Arrays.asList(bobrovytskaDistrictResult)); + respond(builder2, new ArrayList<>()); + respond(builder2_2, Arrays.asList(mykolaivskyiResult)); + respond(builder3_2, Arrays.asList(mykolaivskaDistrictResult)); + respond(builder4_2, Arrays.asList(mykolaiv2Result)); + + assertThrows(NotFoundException.class, () -> { + locationApiService.getAllDistrictsInCityByNames("Миколаївська", "Миколаїв"); + }); + } + + @Test + void testGetCityByNameFromRegionSide_RegionListEmpty() { + Map mykolaivskaResult = + getApiResult("UA48000000000039575", null, "Миколаївська", "Mykolaivska"); + Map mykolaivskyiResult = + getApiResult("UA48060000000094390", "UA48000000000039575", "Миколаївський", "Mykolaivskyi"); + Map mykolaivskaDistrictResult = + getApiResult("UA48060150000071713", "UA48060000000094390", "Миколаївська", "Mykolaivska"); + Map chernihivskaResult = + getApiResult("UA74000000000025378", null, "Чернігівська", "Chernihivska"); + Map nizhynskyiResult = + getApiResult("UA74040000000028062", "UA74000000000025378", "Ніжинський", "Nizhynskyi"); + Map bobrovytskaDistrictResult = + getApiResult("UA74040050000013413", "UA74040000000028062", "Бобровицька", "Bobrovytska"); + Map mykolaiv2Result = + getApiResult("UA74040050200013786", "UA74040050000013413", "Миколаїв", "Mykolaiv"); + + UriComponentsBuilder builder = build(LocationDivision.REGION.getLevelId()); + UriComponentsBuilder builder_2 = buildName("Миколаївська", LocationDivision.REGION.getLevelId()); + + UriComponentsBuilder builder4 = buildName("Миколаїв", LocationDivision.CITY.getLevelId()); + UriComponentsBuilder builder3 = buildCode("UA74040050000013413", LocationDivision.LOCAL_COMMUNITY.getLevelId()); + UriComponentsBuilder builder2 = + buildCode("UA74040000000028062", LocationDivision.DISTRICT_IN_REGION.getLevelId()); + UriComponentsBuilder builder2_2 = + buildParent(LocationDivision.DISTRICT_IN_REGION.getLevelId(), "UA48000000000039575"); + UriComponentsBuilder builder3_2 = + buildParent(LocationDivision.LOCAL_COMMUNITY.getLevelId(), "UA48060000000094390"); + UriComponentsBuilder builder4_2 = buildParent(LocationDivision.CITY.getLevelId(), "UA48060150000071713"); + + respond(builder, Arrays.asList(mykolaivskaResult, chernihivskaResult)); + respond(builder_2, Arrays.asList(chernihivskaResult)); + respond(builder4, new ArrayList<>()); + respond(builder3, Arrays.asList(bobrovytskaDistrictResult)); + respond(builder2, new ArrayList<>()); + respond(builder2_2, Arrays.asList(mykolaivskyiResult)); + respond(builder3_2, Arrays.asList(mykolaivskaDistrictResult)); + respond(builder4_2, Arrays.asList(mykolaiv2Result)); + + assertThrows(NotFoundException.class, () -> { + locationApiService.getAllDistrictsInCityByNames("Миколаївська", "Миколаїв"); + }); + } + +} diff --git a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java index be618ecb3..9b899004f 100644 --- a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java @@ -17,6 +17,7 @@ import greencity.dto.customer.UbsCustomersDtoUpdate; import greencity.dto.courier.CourierDto; import greencity.dto.employee.UserEmployeeAuthorityDto; +import greencity.dto.location.api.LocationDto; import greencity.dto.order.EventDto; import greencity.dto.order.FondyOrderResponse; import greencity.dto.order.MakeOrderAgainDto; @@ -102,7 +103,6 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.transaction.annotation.Transactional; - import javax.persistence.EntityNotFoundException; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; @@ -143,17 +143,17 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.any; -import static org.mockito.Mockito.anyList; import static org.mockito.Mockito.anyString; -import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.eq; -import static org.mockito.Mockito.lenient; -import static org.mockito.Mockito.never; +import static org.mockito.Mockito.anyList; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; @ExtendWith({MockitoExtension.class}) class UBSClientServiceImplTest { @@ -236,6 +236,8 @@ class UBSClientServiceImplTest { private ViberBotRepository viberBotRepository; @Mock private UBSManagementService ubsManagementService; + @Mock + private UBSClientServiceImpl ubsClientService; @Test @Transactional diff --git a/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java index aee8d334c..e7b883ca5 100644 --- a/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java @@ -8,9 +8,9 @@ import greencity.dto.courier.GetReceivingStationDto; import greencity.dto.employee.EmployeeWithTariffsIdDto; import greencity.dto.employee.GetEmployeeDto; +import greencity.dto.location.api.LocationDto; import greencity.dto.position.AddingPositionDto; import greencity.dto.position.PositionDto; -import greencity.dto.position.PositionWithTranslateDto; import greencity.dto.tariff.GetTariffInfoForEmployeeDto; import greencity.entity.order.TariffsInfo; import greencity.entity.user.employee.Employee; @@ -23,6 +23,7 @@ import greencity.filters.EmployeeFilterCriteria; import greencity.filters.EmployeePage; import greencity.repository.*; +import greencity.service.locations.LocationApiService; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -30,15 +31,25 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.modelmapper.ModelMapper; import org.springframework.mock.web.MockMultipartFile; - +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Optional; +import java.util.ArrayList; import java.util.Set; - import static greencity.ModelUtils.*; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.atLeastOnce; +import static org.mockito.Mockito.anyLong; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.anyString; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.lenient; @ExtendWith(MockitoExtension.class) class UBSManagementEmployeeServiceImplTest { @@ -60,6 +71,8 @@ class UBSManagementEmployeeServiceImplTest { private UBSManagementEmployeeServiceImpl employeeService; @Mock private EmployeeCriteriaRepository employeeCriteriaRepository; + @Mock + private LocationApiService locationApiService; @Test void saveEmployeeTest() { @@ -427,4 +440,28 @@ void getTariffsForEmployeeTest() { verify(modelMapper, times(1)).map(any(), any()); verify(tariffsInfoRepository).findAll(); } + + @Test + void getAllDistrictsForRegionAndCityTest() { + String region = "Львівська"; + String city = "Львів"; + Map nameMap = new HashMap<>(); + nameMap.put("name", "Львів"); + nameMap.put("nameEn", "Lviv"); + List mockLocationDtoList = new ArrayList<>(); + LocationDto mockLocationDto = LocationDto.builder() + .id("UA46060250010015970") + .parentId("UA46060250000025047") + .locationNameMap(nameMap) + .build(); + when(locationApiService.getAllDistrictsInCityByNames(region, city)).thenReturn(mockLocationDtoList); + + List locationDtoList = locationApiService.getAllDistrictsInCityByNames(region, city); + + assertNotNull(locationDtoList); + assertEquals(mockLocationDtoList, locationDtoList); + + verify(locationApiService, times(1)).getAllDistrictsInCityByNames(region, city); + } + } From ee0f657a22d57a5c3c895b92ad681e73ecdbee4e Mon Sep 17 00:00:00 2001 From: Maksym Date: Fri, 7 Jul 2023 14:52:32 +0300 Subject: [PATCH 19/80] updated changelog with new titles for notifications (#1174) --- .../db/changelog/db.changelog-master.xml | 1 + ...d-notification-templates-titles-Lenets.xml | 35 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 dao/src/main/resources/db/changelog/logs/ch-upd-notification-templates-titles-Lenets.xml diff --git a/dao/src/main/resources/db/changelog/db.changelog-master.xml b/dao/src/main/resources/db/changelog/db.changelog-master.xml index c7a7969cb..1a18d28e5 100644 --- a/dao/src/main/resources/db/changelog/db.changelog-master.xml +++ b/dao/src/main/resources/db/changelog/db.changelog-master.xml @@ -212,4 +212,5 @@ + \ No newline at end of file diff --git a/dao/src/main/resources/db/changelog/logs/ch-upd-notification-templates-titles-Lenets.xml b/dao/src/main/resources/db/changelog/logs/ch-upd-notification-templates-titles-Lenets.xml new file mode 100644 index 000000000..da0d09e7f --- /dev/null +++ b/dao/src/main/resources/db/changelog/logs/ch-upd-notification-templates-titles-Lenets.xml @@ -0,0 +1,35 @@ + + + + + + + id=4 + + + + id=4 + + + + + id=7 + + + + id=7 + + + + + id=10 + + + + id=10 + + + \ No newline at end of file From a25748a807ca232118792597d7a13e07af0ef462 Mon Sep 17 00:00:00 2001 From: Yurii Midianyi <45738210+Yurii-Midianyi@users.noreply.github.com> Date: Sun, 9 Jul 2023 15:58:27 +0300 Subject: [PATCH 20/80] Resolved codeSmells in ViolationServiceImpl and UBSManagementEmployeeServiceImplTest (#1173) * Removed the unnecessary boolean literal and deleted one lambda in assertThrow * added more tests * added more test coverage --- .../service/ubs/ViolationServiceImpl.java | 5 +- .../UBSManagementEmployeeServiceImplTest.java | 3 +- .../service/ubs/ViolationServiceImplTest.java | 168 +++++++++++++++++- 3 files changed, 171 insertions(+), 5 deletions(-) diff --git a/service/src/main/java/greencity/service/ubs/ViolationServiceImpl.java b/service/src/main/java/greencity/service/ubs/ViolationServiceImpl.java index b4696ba87..7fb28fbfd 100644 --- a/service/src/main/java/greencity/service/ubs/ViolationServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/ViolationServiceImpl.java @@ -114,7 +114,10 @@ private void checkAvailableOrderForEmployee(Long orderId, String email) { boolean status = false; List tariffsInfoIds = employeeRepository.findTariffsInfoForEmployee(employeeId); for (Long id : tariffsInfoIds) { - status = id.equals(order.getTariffsInfo().getId()) ? true : status; + if (id.equals(order.getTariffsInfo().getId())) { + status = true; + break; + } } if (!status) { throw new BadRequestException(ErrorMessage.CANNOT_ACCESS_ORDER_FOR_EMPLOYEE + orderId); diff --git a/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java index e7b883ca5..0b970df6b 100644 --- a/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java @@ -312,11 +312,12 @@ void deactivateEmployeeInactiveTest() { @Test void deactivateEmployeeHystrixRuntimeExceptionTest() { Employee employee = getEmployee(); + long employeeId = employee.getId(); employee.setImagePath("Pass"); when(repository.findById(1L)).thenReturn(Optional.of(employee)); doThrow(HystrixRuntimeException.class).when(userRemoteClient).deactivateEmployee("Test"); - assertThrows(BadRequestException.class, () -> employeeService.deactivateEmployee(employee.getId())); + assertThrows(BadRequestException.class, () -> employeeService.deactivateEmployee(employeeId)); verify(repository).findById(1L); } diff --git a/service/src/test/java/greencity/service/ubs/ViolationServiceImplTest.java b/service/src/test/java/greencity/service/ubs/ViolationServiceImplTest.java index e83e3dfe8..b8df76c36 100644 --- a/service/src/test/java/greencity/service/ubs/ViolationServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/ViolationServiceImplTest.java @@ -1,16 +1,18 @@ package greencity.service.ubs; +import java.util.Arrays; import java.util.List; import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; import java.util.stream.Stream; - import greencity.constant.ErrorMessage; +import greencity.constant.OrderHistory; import greencity.entity.order.TariffsInfo; import greencity.entity.user.employee.Employee; import greencity.enums.OrderStatus; import greencity.exceptions.BadRequestException; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; @@ -24,6 +26,7 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; +import org.springframework.mock.web.MockMultipartFile; import org.springframework.web.multipart.MultipartFile; import greencity.ModelUtils; @@ -42,7 +45,6 @@ import greencity.repository.UserViolationsTableRepo; import greencity.repository.ViolationRepository; import greencity.service.notification.NotificationServiceImpl; - import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.any; @@ -223,4 +225,164 @@ void returnsViolationDetailsByOrderId() { assertEquals(expected, actual); } + @Test + void getViolationDetailsByOrderIdWhenOptionalViolationIsEmptyTest() { + when(violationRepository.findByOrderId(anyLong())).thenReturn(Optional.empty()); + assertEquals(Optional.empty(), violationService.getViolationDetailsByOrderId(1L)); + } + + @Test + void checkAvailableOrderForEmployeeWhenStatusIsFalseTest() { + AddingViolationsToUserDto add = ModelUtils.getAddingViolationsToUserDto(); + Order order = ModelUtils.getOrder(); + Employee employee = Employee.builder() + .id(1L) + .firstName("Петро") + .lastName("Петренко") + .phoneNumber("+380935577455") + .email("test@gmail.com") + .uuid("Test") + .tariffInfos(Set.of( + TariffsInfo.builder() + .id(2L) + .service(ModelUtils.getService()) + .build())) + .imagePath("path") + .build(); + + order.setTariffsInfo(ModelUtils.getTariffsInfo()); + when(orderRepository.findById(anyLong())).thenReturn(Optional.ofNullable(order)); + when(employeeRepository.findByEmail(anyString())).thenReturn(Optional.ofNullable(employee)); + when(employeeRepository.findTariffsInfoForEmployee(anyLong())) + .thenReturn(employee.getTariffInfos().stream().map(TariffsInfo::getId).collect(Collectors.toList())); + assertThrows(BadRequestException.class, () -> { + violationService.addUserViolation(add, new MultipartFile[2], "test@gmail.com"); + }); + verify(orderRepository, times(2)).findById(anyLong()); + verify(employeeRepository).findByEmail(anyString()); + } + + @Test + void testAddUserViolationWithMultipartFiles() { + Employee employee = ModelUtils.getEmployee(); + User user = ModelUtils.getTestUser(); + Order order = user.getOrders().get(0); + order.setOrderStatus(OrderStatus.DONE); + order.setUser(user); + TariffsInfo tariffsInfo = ModelUtils.getTariffInfo(); + order.setTariffsInfo(tariffsInfo); + AddingViolationsToUserDto add = ModelUtils.getAddingViolationsToUserDto(); + MockMultipartFile[] multipartFiles = new MockMultipartFile[1]; + multipartFiles[0] = new MockMultipartFile("file", "test.jpg", "image/jpeg", "test data".getBytes()); + + when(orderRepository.findById(anyLong())).thenReturn(Optional.of(order)); + when(employeeRepository.findByEmail(anyString())).thenReturn(Optional.ofNullable(employee)); + when(employeeRepository.findTariffsInfoForEmployee(anyLong())).thenReturn(Arrays.asList(1L, 2L)); + violationService.addUserViolation(add, multipartFiles, employee.getEmail()); + + verify(orderRepository, times(2)).findById(anyLong()); + verify(employeeRepository).findTariffsInfoForEmployee(anyLong()); + verify(violationRepository).save(any(Violation.class)); + verify(userRepository).save(user); + verify(eventService).saveEvent(OrderHistory.ADD_VIOLATION, employee.getEmail(), order); + verify(notificationService).notifyAddViolation(order.getId()); + } + + @Test + void testAddUserViolationWithoutMultipartFiles() { + Employee employee = ModelUtils.getEmployee(); + User user = ModelUtils.getTestUser(); + Order order = user.getOrders().get(0); + order.setOrderStatus(OrderStatus.DONE); + order.setUser(user); + TariffsInfo tariffsInfo = ModelUtils.getTariffInfo(); + order.setTariffsInfo(tariffsInfo); + AddingViolationsToUserDto add = ModelUtils.getAddingViolationsToUserDto(); + MockMultipartFile[] multipartFiles = new MockMultipartFile[0]; + + when(orderRepository.findById(anyLong())).thenReturn(Optional.of(order)); + when(employeeRepository.findByEmail(anyString())).thenReturn(Optional.ofNullable(employee)); + when(employeeRepository.findTariffsInfoForEmployee(anyLong())).thenReturn(Arrays.asList(1L, 2L)); + violationService.addUserViolation(add, multipartFiles, employee.getEmail()); + + verify(orderRepository, times(2)).findById(anyLong()); + verify(employeeRepository).findTariffsInfoForEmployee(anyLong()); + verify(violationRepository).save(any(Violation.class)); + verify(userRepository).save(user); + verify(eventService).saveEvent(OrderHistory.ADD_VIOLATION, employee.getEmail(), order); + verify(notificationService).notifyAddViolation(order.getId()); + } + + @Test + void testUpdateViolationWhenImagesIsNotEmpty() { + Employee employee = ModelUtils.getEmployee(); + User user = ModelUtils.getTestUser(); + Order order = user.getOrders().get(0); + Violation violation = ModelUtils.getViolation(); + violation.setImages(Arrays.asList("img", "test")); + MockMultipartFile[] multipartFiles = new MockMultipartFile[2]; + UpdateViolationToUserDto add = ModelUtils.getUpdateViolationToUserDto(); + multipartFiles[0] = new MockMultipartFile("file", "test.jpg", "image/jpeg", "test data".getBytes()); + when(employeeRepository.findByUuid(anyString())).thenReturn(Optional.ofNullable(employee)); + when(violationRepository.findByOrderId(order.getId())).thenReturn(Optional.of(violation)); + violationService.updateUserViolation(add, multipartFiles, "uuid"); + + verify(employeeRepository).findByUuid(anyString()); + verify(violationRepository).findByOrderId(order.getId()); + } + + @Test + void testUpdateViolationWhenMultipartFilesAreEmpty() { + Employee employee = ModelUtils.getEmployee(); + User user = ModelUtils.getTestUser(); + Order order = user.getOrders().get(0); + Violation violation = ModelUtils.getViolation(); + violation.setImages(Arrays.asList("img", "test")); + MockMultipartFile[] multipartFiles = new MockMultipartFile[0]; + UpdateViolationToUserDto add = ModelUtils.getUpdateViolationToUserDto(); + when(employeeRepository.findByUuid(anyString())).thenReturn(Optional.ofNullable(employee)); + when(violationRepository.findByOrderId(order.getId())).thenReturn(Optional.of(violation)); + + violationService.updateUserViolation(add, multipartFiles, "uuid"); + verify(employeeRepository).findByUuid(anyString()); + verify(violationRepository).findByOrderId(order.getId()); + } + + @Test + void testUpdateViolationWhenImagesToDeleteAreNull() { + Employee employee = ModelUtils.getEmployee(); + User user = ModelUtils.getTestUser(); + Order order = user.getOrders().get(0); + Violation violation = ModelUtils.getViolation(); + violation.setImages(Arrays.asList("img", "test")); + MockMultipartFile[] multipartFiles = new MockMultipartFile[0]; + + UpdateViolationToUserDto add = UpdateViolationToUserDto.builder() + .orderID(1L) + .violationDescription("String1 string1 string1") + .violationLevel("low") + .imagesToDelete(null) + .build(); + + when(employeeRepository.findByUuid(anyString())).thenReturn(Optional.ofNullable(employee)); + when(violationRepository.findByOrderId(order.getId())).thenReturn(Optional.of(violation)); + + violationService.updateUserViolation(add, multipartFiles, "uuid"); + verify(employeeRepository).findByUuid(anyString()); + verify(violationRepository).findByOrderId(order.getId()); + } + + @Test + void testDeleteViolationWhenImagesAreNull() { + Employee user = ModelUtils.getEmployee(); + when(employeeRepository.findByUuid("abc")).thenReturn(Optional.of(user)); + Violation violation = ModelUtils.getViolation(); + Long id = ModelUtils.getViolation().getOrder().getId(); + when(violationRepository.findByOrderId(1L)).thenReturn(Optional.of(violation)); + doNothing().when(violationRepository).deleteById(1L); + violationService.deleteViolation(1L, "abc"); + + verify(violationRepository, times(1)).deleteById(id); + verify(employeeRepository, times(1)).findByUuid(anyString()); + } } From 98291d7cf9edeb9d8d22e5241cedf8c43b8651cf Mon Sep 17 00:00:00 2001 From: Anton Bondar <53192419+ABbondar@users.noreply.github.com> Date: Mon, 10 Jul 2023 23:48:04 +0300 Subject: [PATCH 21/80] =?UTF-8?q?[Pick=20up=20city=20UBS.Admin=20Cabinet]?= =?UTF-8?q?=20=E2=80=9CReturn=20money=E2=80=9D=20button=20in=20the=20"Orde?= =?UTF-8?q?r=20payment"=20section=20is=20disabled=20when=20admin=20cancels?= =?UTF-8?q?=20the=20order=20and=20selects=20the=20"Return=20money"=20optio?= =?UTF-8?q?n=20#5803=20(#1176)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * payment refund * fix bug --- .../configuration/SecurityConfig.java | 1 + .../controller/ManagementOrderController.java | 23 + .../ManagementOrderControllerTest.java | 6 + .../java/greencity/entity/order/Refund.java | 30 ++ .../repository/RefundRepository.java | 9 + .../db/changelog/db.changelog-master.xml | 1 + .../logs/ch-add-table-refunds-Bondar.xml | 17 + .../service/ubs/UBSManagementService.java | 28 +- .../service/ubs/UBSManagementServiceImpl.java | 12 +- .../src/test/java/greencity/ModelUtils.java | 5 + .../ubs/UBSManagementServiceImplTest.java | 466 ++++++++++-------- 11 files changed, 404 insertions(+), 194 deletions(-) create mode 100644 dao/src/main/java/greencity/entity/order/Refund.java create mode 100644 dao/src/main/java/greencity/repository/RefundRepository.java create mode 100644 dao/src/main/resources/db/changelog/logs/ch-add-table-refunds-Bondar.xml diff --git a/core/src/main/java/greencity/configuration/SecurityConfig.java b/core/src/main/java/greencity/configuration/SecurityConfig.java index c8d3ff64e..4721adbcc 100644 --- a/core/src/main/java/greencity/configuration/SecurityConfig.java +++ b/core/src/main/java/greencity/configuration/SecurityConfig.java @@ -113,6 +113,7 @@ protected void configure(HttpSecurity http) throws Exception { UBS_MANAG_LINK + "/add-manual-payment/{id}", UBS_MANAG_LINK + "/add-bonuses-user/{id}", UBS_MANAG_LINK + "/order/{id}/cancellation", + UBS_MANAG_LINK + "/save-order-for-refund/{orderId}", ADMIN_EMPL_LINK + "/**", SUPER_ADMIN_LINK + "/add-new-tariff", SUPER_ADMIN_LINK + "/check-if-tariff-exists", diff --git a/core/src/main/java/greencity/controller/ManagementOrderController.java b/core/src/main/java/greencity/controller/ManagementOrderController.java index 0a505213e..d356ab351 100644 --- a/core/src/main/java/greencity/controller/ManagementOrderController.java +++ b/core/src/main/java/greencity/controller/ManagementOrderController.java @@ -1041,4 +1041,27 @@ public ResponseEntity updateCancellationReason( @ApiIgnore @CurrentUserUuid String uuid) { return ResponseEntity.status(HttpStatus.OK).body(ubsClientService.updateOrderCancellationReason(id, dto, uuid)); } + + /** + * Controller saves order ID of order for which we need to make a refund. + * + * @param orderId {@link Long}. + * @return {@link HttpStatus} - http status. + * + * @author Anton Bondar + */ + @ApiOperation(value = "saves order ID of order for which we need to make a refund") + @ApiResponses(value = { + @ApiResponse(code = 201, message = HttpStatuses.CREATED), + @ApiResponse(code = 400, message = HttpStatuses.BAD_REQUEST), + @ApiResponse(code = 401, message = HttpStatuses.UNAUTHORIZED), + @ApiResponse(code = 404, message = HttpStatuses.NOT_FOUND) + }) + @ResponseStatus(value = HttpStatus.CREATED) + @PostMapping("/save-order-for-refund/{orderId}") + public ResponseEntity saveOrderIdForRefund( + @Valid @PathVariable("orderId") Long orderId) { + ubsManagementService.saveOrderIdForRefund(orderId); + return new ResponseEntity<>(HttpStatus.CREATED); + } } diff --git a/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java b/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java index d6296206d..afc765953 100644 --- a/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java +++ b/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java @@ -501,4 +501,10 @@ void updatesCancellationReason() throws Exception { .content(objectMapper.writeValueAsString(dto))) .andExpect(status().isOk()); } + + @Test + void saveOrderIdForRefundTest() throws Exception { + mockMvc.perform(post(ubsLink + "/save-order-for-refund/{orderId}", 1L) + .principal(principal)).andExpect(status().isCreated()); + } } diff --git a/dao/src/main/java/greencity/entity/order/Refund.java b/dao/src/main/java/greencity/entity/order/Refund.java new file mode 100644 index 000000000..0d0875d1e --- /dev/null +++ b/dao/src/main/java/greencity/entity/order/Refund.java @@ -0,0 +1,30 @@ +package greencity.entity.order; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.validation.constraints.NotNull; + +@Entity +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +@Table(name = "refunds") +public class Refund { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "order_id") + @NotNull + private Long orderId; +} diff --git a/dao/src/main/java/greencity/repository/RefundRepository.java b/dao/src/main/java/greencity/repository/RefundRepository.java new file mode 100644 index 000000000..4b55e9e11 --- /dev/null +++ b/dao/src/main/java/greencity/repository/RefundRepository.java @@ -0,0 +1,9 @@ +package greencity.repository; + +import greencity.entity.order.Refund; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface RefundRepository extends JpaRepository { +} diff --git a/dao/src/main/resources/db/changelog/db.changelog-master.xml b/dao/src/main/resources/db/changelog/db.changelog-master.xml index 1a18d28e5..db07e44e8 100644 --- a/dao/src/main/resources/db/changelog/db.changelog-master.xml +++ b/dao/src/main/resources/db/changelog/db.changelog-master.xml @@ -213,4 +213,5 @@ + \ No newline at end of file diff --git a/dao/src/main/resources/db/changelog/logs/ch-add-table-refunds-Bondar.xml b/dao/src/main/resources/db/changelog/logs/ch-add-table-refunds-Bondar.xml new file mode 100644 index 000000000..b0f040076 --- /dev/null +++ b/dao/src/main/resources/db/changelog/logs/ch-add-table-refunds-Bondar.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/service-api/src/main/java/greencity/service/ubs/UBSManagementService.java b/service-api/src/main/java/greencity/service/ubs/UBSManagementService.java index 09b056099..443ed3b08 100644 --- a/service-api/src/main/java/greencity/service/ubs/UBSManagementService.java +++ b/service-api/src/main/java/greencity/service/ubs/UBSManagementService.java @@ -4,7 +4,24 @@ import greencity.dto.bag.ReasonNotTakeBagDto; import greencity.dto.certificate.CertificateDtoForSearching; import greencity.dto.employee.EmployeePositionDtoRequest; -import greencity.dto.order.*; +import greencity.dto.order.AdminCommentDto; +import greencity.dto.order.CounterOrderDetailsDto; +import greencity.dto.order.DetailsOrderInfoDto; +import greencity.dto.order.EcoNumberDto; +import greencity.dto.order.ExportDetailsDto; +import greencity.dto.order.ExportDetailsDtoUpdate; +import greencity.dto.order.NotTakenOrderReasonDto; +import greencity.dto.order.OrderAddressDtoResponse; +import greencity.dto.order.OrderAddressExportDetailsDtoUpdate; +import greencity.dto.order.OrderCancellationReasonDto; +import greencity.dto.order.OrderDetailInfoDto; +import greencity.dto.order.OrderDetailStatusDto; +import greencity.dto.order.OrderDetailStatusRequestDto; +import greencity.dto.order.OrderInfoDto; +import greencity.dto.order.OrderStatusPageDto; +import greencity.dto.order.ReadAddressByOrderDto; +import greencity.dto.order.UpdateAllOrderPageDto; +import greencity.dto.order.UpdateOrderPageAdminDto; import greencity.dto.pageble.PageableDto; import greencity.dto.payment.ManualPaymentRequestDto; import greencity.dto.payment.ManualPaymentResponseDto; @@ -301,4 +318,13 @@ void updateOrderAdminPageInfo(UpdateOrderPageAdminDto updateOrderPageAdminDto, L * @author Kharchenko Volodymyr. */ NotTakenOrderReasonDto getNotTakenOrderReason(Long orderId); + + /** + * Method saves order ID of order for which we need to make a refund. + * + * @param orderId {@link Long}. + * + * @author Anton Bondar. + */ + void saveOrderIdForRefund(Long orderId); } diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java index fe21ad61c..2ac6fae8b 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java @@ -55,6 +55,7 @@ import greencity.entity.order.OrderPaymentStatusTranslation; import greencity.entity.order.OrderStatusTranslation; import greencity.entity.order.Payment; +import greencity.entity.order.Refund; import greencity.entity.order.TariffsInfo; import greencity.entity.user.User; import greencity.entity.user.employee.Employee; @@ -83,6 +84,7 @@ import greencity.repository.PaymentRepository; import greencity.repository.PositionRepository; import greencity.repository.ReceivingStationRepository; +import greencity.repository.RefundRepository; import greencity.repository.ServiceRepository; import greencity.repository.TariffsInfoRepository; import greencity.repository.UserRepository; @@ -127,13 +129,13 @@ import static greencity.constant.ErrorMessage.EMPLOYEE_NOT_FOUND; import static greencity.constant.ErrorMessage.INCORRECT_ECO_NUMBER; import static greencity.constant.ErrorMessage.NOT_FOUND_ADDRESS_BY_ORDER_ID; +import static greencity.constant.ErrorMessage.ORDER_CAN_NOT_BE_UPDATED; import static greencity.constant.ErrorMessage.ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST; import static greencity.constant.ErrorMessage.PAYMENT_NOT_FOUND; import static greencity.constant.ErrorMessage.RECEIVING_STATION_NOT_FOUND; import static greencity.constant.ErrorMessage.RECEIVING_STATION_NOT_FOUND_BY_ID; import static greencity.constant.ErrorMessage.USER_HAS_NO_OVERPAYMENT; import static greencity.constant.ErrorMessage.USER_WITH_CURRENT_UUID_DOES_NOT_EXIST; -import static greencity.constant.ErrorMessage.ORDER_CAN_NOT_BE_UPDATED; import static java.util.Objects.isNull; import static java.util.Objects.nonNull; @@ -163,6 +165,7 @@ public class UBSManagementServiceImpl implements UBSManagementService { private final OrderPaymentStatusTranslationRepository orderPaymentStatusTranslationRepository; private final ServiceRepository serviceRepository; private final OrdersAdminsPageService ordersAdminsPageService; + private final RefundRepository refundRepository; private static final String DEFAULT_IMAGE_PATH = AppConstant.DEFAULT_IMAGE; @@ -1831,4 +1834,11 @@ public NotTakenOrderReasonDto getNotTakenOrderReason(Long orderId) { .images(order.getImageReasonNotTakingBags()) .build(); } + + @Override + public void saveOrderIdForRefund(Long orderId) { + Order order = orderRepository.findById(orderId) + .orElseThrow(() -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST + orderId)); + refundRepository.save(Refund.builder().orderId(order.getId()).build()); + } } diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index 3f1c2fe6b..e182a029c 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -102,6 +102,7 @@ import greencity.entity.order.OrderPaymentStatusTranslation; import greencity.entity.order.OrderStatusTranslation; import greencity.entity.order.Payment; +import greencity.entity.order.Refund; import greencity.entity.order.Service; import greencity.entity.order.TariffLocation; import greencity.entity.order.TariffsInfo; @@ -4644,4 +4645,8 @@ public static PositionWithTranslateDto getPositionWithTranslateDto(Long id) { .name(nameTranslations) .build(); } + + public static Refund getRefund(Long id) { + return Refund.builder().orderId(id).build(); + } } diff --git a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java index 8ff1bd1db..cdfa9b4ad 100644 --- a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java @@ -39,6 +39,7 @@ import greencity.entity.order.OrderPaymentStatusTranslation; import greencity.entity.order.OrderStatusTranslation; import greencity.entity.order.Payment; +import greencity.entity.order.Refund; import greencity.entity.order.TariffsInfo; import greencity.entity.user.User; import greencity.entity.user.employee.Employee; @@ -63,6 +64,7 @@ import greencity.repository.PaymentRepository; import greencity.repository.PositionRepository; import greencity.repository.ReceivingStationRepository; +import greencity.repository.RefundRepository; import greencity.repository.ServiceRepository; import greencity.repository.TariffsInfoRepository; import greencity.repository.UserRepository; @@ -103,7 +105,66 @@ import java.util.Set; import java.util.stream.Stream; -import static greencity.ModelUtils.*; +import static greencity.ModelUtils.ORDER_DETAIL_STATUS_DTO; +import static greencity.ModelUtils.TEST_ADDITIONAL_BAG_INFO_DTO; +import static greencity.ModelUtils.TEST_ADDITIONAL_BAG_INFO_DTO_LIST; +import static greencity.ModelUtils.TEST_BAG; +import static greencity.ModelUtils.TEST_BAG_INFO_DTO; +import static greencity.ModelUtils.TEST_BAG_LIST; +import static greencity.ModelUtils.TEST_BAG_MAPPING_DTO_LIST; +import static greencity.ModelUtils.TEST_MAP_ADDITIONAL_BAG_LIST; +import static greencity.ModelUtils.TEST_ORDER; +import static greencity.ModelUtils.TEST_ORDER_ADDRESS_DTO_RESPONSE; +import static greencity.ModelUtils.TEST_ORDER_ADDRESS_DTO_UPDATE; +import static greencity.ModelUtils.TEST_ORDER_DETAILS_INFO_DTO_LIST; +import static greencity.ModelUtils.TEST_PAYMENT_LIST; +import static greencity.ModelUtils.TEST_USER; +import static greencity.ModelUtils.UPDATE_ORDER_PAGE_ADMIN_DTO; +import static greencity.ModelUtils.getAddBonusesToUserDto; +import static greencity.ModelUtils.getAdminCommentDto; +import static greencity.ModelUtils.getBag1list; +import static greencity.ModelUtils.getBag2list; +import static greencity.ModelUtils.getBag3list; +import static greencity.ModelUtils.getBagInfoDto; +import static greencity.ModelUtils.getBaglist; +import static greencity.ModelUtils.getCertificateList; +import static greencity.ModelUtils.getEcoNumberDto; +import static greencity.ModelUtils.getEmployee; +import static greencity.ModelUtils.getExportDetailsRequest; +import static greencity.ModelUtils.getExportDetailsRequestToday; +import static greencity.ModelUtils.getFormedOrder; +import static greencity.ModelUtils.getInfoPayment; +import static greencity.ModelUtils.getManualPayment; +import static greencity.ModelUtils.getManualPaymentRequestDto; +import static greencity.ModelUtils.getOrder; +import static greencity.ModelUtils.getOrderAddress; +import static greencity.ModelUtils.getOrderDoneByUser; +import static greencity.ModelUtils.getOrderExportDetails; +import static greencity.ModelUtils.getOrderExportDetailsWithDeliverFromTo; +import static greencity.ModelUtils.getOrderExportDetailsWithExportDate; +import static greencity.ModelUtils.getOrderExportDetailsWithExportDateDeliverFrom; +import static greencity.ModelUtils.getOrderExportDetailsWithExportDateDeliverFromTo; +import static greencity.ModelUtils.getOrderExportDetailsWithNullValues; +import static greencity.ModelUtils.getOrderForGetOrderStatusData2Test; +import static greencity.ModelUtils.getOrderForGetOrderStatusEmptyPriceDetails; +import static greencity.ModelUtils.getOrderStatusPaymentTranslations; +import static greencity.ModelUtils.getOrderStatusTranslation; +import static greencity.ModelUtils.getOrderStatusTranslations; +import static greencity.ModelUtils.getOrderUserFirst; +import static greencity.ModelUtils.getOrderWithoutPayment; +import static greencity.ModelUtils.getOrdersStatusFormedDto; +import static greencity.ModelUtils.getPayment; +import static greencity.ModelUtils.getReceivingList; +import static greencity.ModelUtils.getReceivingStation; +import static greencity.ModelUtils.getRefund; +import static greencity.ModelUtils.getService; +import static greencity.ModelUtils.getStatusTranslation; +import static greencity.ModelUtils.getTariffsInfo; +import static greencity.ModelUtils.getTestDetailsOrderInfoDto; +import static greencity.ModelUtils.getTestOrderDetailStatusRequestDto; +import static greencity.ModelUtils.getTestUser; +import static greencity.ModelUtils.updateAllOrderPageDto; +import static greencity.ModelUtils.updateOrderPageAdminDto; import static greencity.constant.ErrorMessage.EMPLOYEE_NOT_FOUND; import static greencity.constant.ErrorMessage.ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST; import static greencity.constant.ErrorMessage.ORDER_CAN_NOT_BE_UPDATED; @@ -200,6 +261,9 @@ class UBSManagementServiceImplTest { @Mock TariffsInfoRepository tariffsInfoRepository; + @Mock + RefundRepository refundRepository; + @Test void getAllCertificates() { Pageable pageable = @@ -228,7 +292,7 @@ void checkOrderNotFound() { @Test void getAddressByOrderId() { - Order order = ModelUtils.getOrder(); + Order order = getOrder(); ReadAddressByOrderDto readAddressByOrderDto = ModelUtils.getReadAddressByOrderDto(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(ubsManagementService.getAddressByOrderId(1L)).thenReturn(readAddressByOrderDto); @@ -243,7 +307,7 @@ void checkPaymentNotFound() { @Test void returnExportDetailsByOrderId() { ExportDetailsDto expected = ModelUtils.getExportDetails(); - Order order = ModelUtils.getOrderExportDetails(); + Order order = getOrderExportDetails(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); List stations = @@ -255,10 +319,10 @@ void returnExportDetailsByOrderId() { @Test void updateExportDetailsByOrderId() { - ExportDetailsDtoUpdate dto = ModelUtils.getExportDetailsRequest(); - Order order = ModelUtils.getOrderExportDetails(); + ExportDetailsDtoUpdate dto = getExportDetailsRequest(); + Order order = getOrderExportDetails(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); - var receivingStation = ModelUtils.getReceivingStation(); + var receivingStation = getReceivingStation(); when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); List stations = List.of(new ReceivingStation()); @@ -271,10 +335,10 @@ void updateExportDetailsByOrderId() { @Test void updateExportDetailsNotSuccessfulByOrderId() { - ExportDetailsDtoUpdate dto = ModelUtils.getExportDetailsRequest(); - Order order = ModelUtils.getOrderExportDetailsWithNullValues(); + ExportDetailsDtoUpdate dto = getExportDetailsRequest(); + Order order = getOrderExportDetailsWithNullValues(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); - var receivingStation = ModelUtils.getReceivingStation(); + var receivingStation = getReceivingStation(); when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); List stations = List.of(new ReceivingStation()); when(receivingStationRepository.findAll()).thenReturn(stations); @@ -292,14 +356,14 @@ void checkStationNotFound() { @ParameterizedTest @MethodSource("provideManualPaymentRequestDto") void saveNewManualPayment(ManualPaymentRequestDto paymentDetails, MultipartFile image) { - User user = ModelUtils.getTestUser(); + User user = getTestUser(); user.setRecipientName("Петро"); user.setRecipientSurname("Петренко"); - Order order = ModelUtils.getFormedOrder(); + Order order = getFormedOrder(); TariffsInfo tariffsInfo = getTariffsInfo(); order.setTariffsInfo(tariffsInfo); - Payment payment = ModelUtils.getManualPayment(); - Employee employee = ModelUtils.getEmployee(); + Payment payment = getManualPayment(); + Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) @@ -345,7 +409,7 @@ void checkDeleteManualPayment() { @Test void checkUpdateManualPayment() { Employee employee = getEmployee(); - Order order = ModelUtils.getFormedOrder(); + Order order = getFormedOrder(); when(employeeRepository.findByUuid("abc")).thenReturn(Optional.of(employee)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(paymentRepository.findById(1L)).thenReturn(Optional.of(getManualPayment())); @@ -364,20 +428,20 @@ void checkUpdateManualPayment() { @Test void saveNewManualPaymentWithZeroAmount() { - User user = ModelUtils.getTestUser(); + User user = getTestUser(); user.setRecipientName("Петро"); user.setRecipientSurname("Петренко"); - Order order = ModelUtils.getFormedOrder(); + Order order = getFormedOrder(); order.setPointsToUse(0); TariffsInfo tariffsInfo = getTariffsInfo(); order.setTariffsInfo(tariffsInfo); order.setOrderPaymentStatus(OrderPaymentStatus.UNPAID); - Payment payment = ModelUtils.getManualPayment(); + Payment payment = getManualPayment(); payment.setAmount(0L); order.setPayment(singletonList(payment)); ManualPaymentRequestDto paymentDetails = ManualPaymentRequestDto.builder() .settlementdate("02-08-2021").amount(0L).receiptLink("link").paymentId("1").build(); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) @@ -397,20 +461,20 @@ void saveNewManualPaymentWithZeroAmount() { @Test void saveNewManualPaymentWithHalfPaidAmount() { - User user = ModelUtils.getTestUser(); + User user = getTestUser(); user.setRecipientName("Петро"); user.setRecipientSurname("Петренко"); - Order order = ModelUtils.getFormedOrder(); + Order order = getFormedOrder(); order.setPointsToUse(0); TariffsInfo tariffsInfo = getTariffsInfo(); order.setTariffsInfo(tariffsInfo); order.setOrderPaymentStatus(OrderPaymentStatus.HALF_PAID); - Payment payment = ModelUtils.getManualPayment(); + Payment payment = getManualPayment(); payment.setAmount(50_00L); order.setPayment(singletonList(payment)); ManualPaymentRequestDto paymentDetails = ManualPaymentRequestDto.builder() .settlementdate("02-08-2021").amount(50_00L).receiptLink("link").paymentId("1").build(); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) @@ -433,19 +497,19 @@ void saveNewManualPaymentWithHalfPaidAmount() { @Test void saveNewManualPaymentWithPaidAmount() { - User user = ModelUtils.getTestUser(); + User user = getTestUser(); user.setRecipientName("Петро"); user.setRecipientSurname("Петренко"); - Order order = ModelUtils.getFormedOrder(); + Order order = getFormedOrder(); TariffsInfo tariffsInfo = getTariffsInfo(); order.setTariffsInfo(tariffsInfo); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); - Payment payment = ModelUtils.getManualPayment(); + Payment payment = getManualPayment(); payment.setAmount(500_00L); order.setPayment(singletonList(payment)); ManualPaymentRequestDto paymentDetails = ManualPaymentRequestDto.builder() .settlementdate("02-08-2021").amount(500_00L).receiptLink("link").paymentId("1").build(); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) @@ -468,17 +532,17 @@ void saveNewManualPaymentWithPaidAmount() { @Test void saveNewManualPaymentWithPaidOrder() { - User user = ModelUtils.getTestUser(); + User user = getTestUser(); user.setRecipientName("Петро"); user.setRecipientSurname("Петренко"); - Order order = ModelUtils.getFormedOrder(); + Order order = getFormedOrder(); TariffsInfo tariffsInfo = getTariffsInfo(); order.setTariffsInfo(tariffsInfo); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); - Payment payment = ModelUtils.getManualPayment(); + Payment payment = getManualPayment(); ManualPaymentRequestDto paymentDetails = ManualPaymentRequestDto.builder() .settlementdate("02-08-2021").amount(500L).receiptLink("link").paymentId("1").build(); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) @@ -497,17 +561,17 @@ void saveNewManualPaymentWithPaidOrder() { @Test void saveNewManualPaymentWithPartiallyPaidOrder() { - User user = ModelUtils.getTestUser(); + User user = getTestUser(); user.setRecipientName("Петро"); user.setRecipientSurname("Петренко"); - Order order = ModelUtils.getFormedOrder(); + Order order = getFormedOrder(); TariffsInfo tariffsInfo = getTariffsInfo(); order.setTariffsInfo(tariffsInfo); order.setOrderPaymentStatus(OrderPaymentStatus.HALF_PAID); - Payment payment = ModelUtils.getManualPayment(); + Payment payment = getManualPayment(); ManualPaymentRequestDto paymentDetails = ManualPaymentRequestDto.builder() .settlementdate("02-08-2021").amount(200L).receiptLink("link").paymentId("1").build(); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) @@ -526,17 +590,17 @@ void saveNewManualPaymentWithPartiallyPaidOrder() { @Test void saveNewManualPaymentWithUnpaidOrder() { - User user = ModelUtils.getTestUser(); + User user = getTestUser(); user.setRecipientName("Петро"); user.setRecipientSurname("Петренко"); - Order order = ModelUtils.getFormedOrder(); + Order order = getFormedOrder(); TariffsInfo tariffsInfo = getTariffsInfo(); order.setTariffsInfo(tariffsInfo); order.setOrderPaymentStatus(OrderPaymentStatus.UNPAID); - Payment payment = ModelUtils.getManualPayment(); + Payment payment = getManualPayment(); ManualPaymentRequestDto paymentDetails = ManualPaymentRequestDto.builder() .settlementdate("02-08-2021").amount(500L).receiptLink("link").paymentId("1").build(); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) @@ -555,17 +619,17 @@ void saveNewManualPaymentWithUnpaidOrder() { @Test void saveNewManualPaymentWithPaymentRefundedOrder() { - User user = ModelUtils.getTestUser(); + User user = getTestUser(); user.setRecipientName("Петро"); user.setRecipientSurname("Петренко"); - Order order = ModelUtils.getFormedOrder(); + Order order = getFormedOrder(); TariffsInfo tariffsInfo = getTariffsInfo(); order.setTariffsInfo(tariffsInfo); order.setOrderPaymentStatus(OrderPaymentStatus.PAYMENT_REFUNDED); - Payment payment = ModelUtils.getManualPayment(); + Payment payment = getManualPayment(); ManualPaymentRequestDto paymentDetails = ManualPaymentRequestDto.builder() .settlementdate("02-08-2021").amount(500L).receiptLink("link").paymentId("1").build(); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) @@ -616,7 +680,7 @@ void checkManualPaymentNotFound() { @Test void checkReturnOverpaymentInfo() { - Order order = ModelUtils.getOrder(); + Order order = getOrder(); when(orderRepository.findUserById(1L)).thenReturn(Optional.of(order)); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); @@ -642,7 +706,7 @@ void checkReturnOverpaymentThroweException() { @Test void checkReturnOverpaymentThroweExceptioninGetPaymentInfo() { - Order order = ModelUtils.getOrder(); + Order order = getOrder(); when(orderRepository.findUserById(1L)).thenReturn(Optional.of(order)); Assertions.assertThrows(NotFoundException.class, () -> ubsManagementService.returnOverpaymentInfo(1L, 1., 1L)); @@ -650,7 +714,7 @@ void checkReturnOverpaymentThroweExceptioninGetPaymentInfo() { @Test void checkGetPaymentInfo() { - Order order = ModelUtils.getOrder(); + Order order = getOrder(); order.setOrderStatus(OrderStatus.DONE); when(orderRepository.findById(order.getId())).thenReturn(Optional.of(order)); assertEquals(100L, ubsManagementService.getPaymentInfo(order.getId(), 800.).getOverpayment()); @@ -661,7 +725,7 @@ void checkGetPaymentInfo() { @Test void checkGetPaymentInfoIfOrderStatusIsCanceled() { - Order order = ModelUtils.getOrder(); + Order order = getOrder(); order.setOrderStatus(OrderStatus.CANCELED); when(orderRepository.findById(order.getId())).thenReturn(Optional.of(order)); assertEquals(200L, ubsManagementService.getPaymentInfo(order.getId(), 800.).getOverpayment()); @@ -672,7 +736,7 @@ void checkGetPaymentInfoIfOrderStatusIsCanceled() { @Test void checkGetPaymentInfoIfSumToPayIsNull() { - Order order = ModelUtils.getOrder(); + Order order = getOrder(); order.setOrderStatus(OrderStatus.DONE); when(orderRepository.findById(order.getId())).thenReturn(Optional.of(order)); assertEquals(900L, ubsManagementService.getPaymentInfo(order.getId(), null).getOverpayment()); @@ -689,7 +753,7 @@ void updateOrderDetailStatusThrowException() { @Test void updateOrderDetailStatusFirst() { - User user = ModelUtils.getTestUser(); + User user = getTestUser(); user.setRecipientName("Петро"); user.setRecipientSurname("Петренко"); Order order = user.getOrders().get(0); @@ -705,7 +769,7 @@ void updateOrderDetailStatusFirst() { when(paymentRepository.saveAll(any())).thenReturn(payment); when(orderRepository.save(any())).thenReturn(order); - OrderDetailStatusRequestDto testOrderDetail = ModelUtils.getTestOrderDetailStatusRequestDto(); + OrderDetailStatusRequestDto testOrderDetail = getTestOrderDetailStatusRequestDto(); OrderDetailStatusDto expectedObject = ModelUtils.getTestOrderDetailStatusDto(); OrderDetailStatusDto producedObject = ubsManagementService .updateOrderDetailStatus(order.getId(), testOrderDetail, "test@gmail.com"); @@ -809,7 +873,7 @@ void updateOrderDetailStatusFirst() { @Test void updateOrderDetailStatusSecond() { - User user = ModelUtils.getTestUser(); + User user = getTestUser(); user.setRecipientName("Петро"); user.setRecipientSurname("Петренко"); Order order = user.getOrders().get(0); @@ -823,7 +887,7 @@ void updateOrderDetailStatusSecond() { when(paymentRepository.saveAll(any())).thenReturn(payment); when(orderRepository.save(any())).thenReturn(order); - OrderDetailStatusRequestDto testOrderDetail = ModelUtils.getTestOrderDetailStatusRequestDto(); + OrderDetailStatusRequestDto testOrderDetail = getTestOrderDetailStatusRequestDto(); OrderDetailStatusDto expectedObject = ModelUtils.getTestOrderDetailStatusDto(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); expectedObject.setDate(LocalDateTime.now().format(formatter)); @@ -839,17 +903,17 @@ void updateOrderDetailStatusSecond() { @Test void getAllEmployeesByPosition() { - Order order = ModelUtils.getOrder(); - TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); + Order order = getOrder(); + TariffsInfo tariffsInfo = getTariffsInfo(); order.setTariffsInfo(tariffsInfo); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); EmployeePositionDtoRequest dto = ModelUtils.getEmployeePositionDtoRequest(); List newList = new ArrayList<>(); newList.add(ModelUtils.getEmployeeOrderPosition()); List positionList = new ArrayList<>(); positionList.add(ModelUtils.getPosition()); List employeeList = new ArrayList<>(); - employeeList.add(ModelUtils.getEmployee()); + employeeList.add(getEmployee()); when(orderRepository.findById(anyLong())).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) @@ -868,10 +932,10 @@ void getAllEmployeesByPosition() { @Test void getAllEmployeesByPositionThrowBadRequestException() { - Order order = ModelUtils.getOrder(); - TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); + Order order = getOrder(); + TariffsInfo tariffsInfo = getTariffsInfo(); order.setTariffsInfo(tariffsInfo); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); when(orderRepository.findById(anyLong())).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) @@ -993,7 +1057,7 @@ void testGetOrdersBagsDetails() { @Test void testGetOrderExportDetailsReceivingStationNotFoundExceptionThrown() { when(orderRepository.findById(1L)) - .thenReturn(Optional.of(ModelUtils.getOrder())); + .thenReturn(Optional.of(getOrder())); List receivingStations = new ArrayList<>(); when(receivingStationRepository.findAll()) .thenReturn(receivingStations); @@ -1026,7 +1090,7 @@ void checkGetAllUserViolations() { @Test void testAddPointToUserThrowsException() { - User user = ModelUtils.getTestUser(); + User user = getTestUser(); user.setUuid(null); AddingPointsToUserDto addingPointsToUserDto = @@ -1036,7 +1100,7 @@ void testAddPointToUserThrowsException() { @Test void testAddPointsToUser() { - User user = ModelUtils.getTestUser(); + User user = getTestUser(); user.setUuid(userRemoteClient.findUuidByEmail(user.getRecipientEmail())); user.setCurrentPoints(1); @@ -1080,9 +1144,9 @@ void testSetOrderDetail() { doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto())); + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(ModelUtils.getBag1list()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); when(paymentRepository.selectSumPaid(1L)).thenReturn(5000L); ubsManagementService.setOrderDetail(1L, @@ -1100,9 +1164,9 @@ void testSetOrderDetailNeedToChangeStatusToHALF_PAID() { doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto())); + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(ModelUtils.getBag1list()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); when(paymentRepository.selectSumPaid(1L)).thenReturn(5000L); doNothing().when(orderRepository).updateOrderPaymentStatus(1L, OrderPaymentStatus.HALF_PAID.name()); @@ -1123,9 +1187,9 @@ void testSetOrderDetailNeedToChangeStatusToUNPAID() { doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto())); + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(ModelUtils.getBag1list()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); when(paymentRepository.selectSumPaid(1L)).thenReturn(null); doNothing().when(orderRepository).updateOrderPaymentStatus(1L, OrderPaymentStatus.UNPAID.name()); @@ -1145,7 +1209,7 @@ void testSetOrderDetailWhenSumPaidIsNull() { doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto())); + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); when(paymentRepository.selectSumPaid(1L)).thenReturn(null); @@ -1181,7 +1245,7 @@ void testSetOrderDetailWhenOrderNotFound() { @Test void testSetOrderDetailIfHalfPaid() { Order orderDto = ModelUtils.getOrdersStatusDoneDto(); - Order orderDetailDto = ModelUtils.getOrdersStatusFormedDto(); + Order orderDetailDto = getOrdersStatusFormedDto(); Bag tariffBagDto = ModelUtils.getTariffBag(); List bagList = getBaglist(); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(orderDto)); @@ -1247,7 +1311,7 @@ void testSetOrderDetailConfirmed() { when(bagRepository.findCapacityById(1)).thenReturn(1); doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto())); + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(1L, @@ -1264,7 +1328,7 @@ void testSetOrderDetailConfirmed2() { when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusConfirmedDto())); when(bagRepository.findCapacityById(1)).thenReturn(1); when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto())); + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); when(orderDetailRepository.ifRecordExist(any(), any())).thenReturn(1L); when(orderDetailRepository.getAmount(any(), any())).thenReturn(1L); @@ -1288,7 +1352,7 @@ void testSetOrderDetailWithExportedWaste() { doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto())); + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); when(orderDetailRepository.ifRecordExist(any(), any())).thenReturn(1L); ubsManagementService.setOrderDetail(1L, @@ -1305,11 +1369,11 @@ void testSetOrderDetailWithExportedWaste() { @Test void testSetOrderDetailFormed() { - when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto())); + when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findCapacityById(1)).thenReturn(1); doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto())); + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(1L, @@ -1321,7 +1385,7 @@ void testSetOrderDetailFormed() { @Test void testSetOrderDetailFormedWithBagNoPresent() { - when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto())); + when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findCapacityById(1)).thenReturn(1); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.empty()); @@ -1342,7 +1406,7 @@ void testSetOrderDetailNotTakenOut() { doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto())); + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); @@ -1361,7 +1425,7 @@ void testSetOrderDetailOnTheRoute() { when(bagRepository.findCapacityById(1)).thenReturn(1); doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto())); + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(1L, @@ -1380,7 +1444,7 @@ void testSetOrderDetailsDone() { doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto())); + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1398,7 +1462,7 @@ void testSetOrderBroughtItHimself() { when(bagRepository.findCapacityById(1)).thenReturn(1); doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto())); + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1416,7 +1480,7 @@ void testSetOrderDetailsCanseled() { doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto())); + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(1L, @@ -1447,15 +1511,15 @@ void testSetOrderDetailThrowsUserNotFoundException() { @Test void testSaveAdminToOrder() { - Order order = ModelUtils.getOrder(); + Order order = getOrder(); TariffsInfo tariffsInfo = getTariffsInfo(); order.setTariffsInfo(tariffsInfo); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - ubsManagementService.saveAdminCommentToOrder(ModelUtils.getAdminCommentDto(), "test@gmail.com"); + ubsManagementService.saveAdminCommentToOrder(getAdminCommentDto(), "test@gmail.com"); verify(orderRepository, times(1)).save(order); verify(eventService, times(1)).save(any(), any(), any()); verify(tariffsInfoRepository, atLeastOnce()).findTariffsInfoByIdForEmployee(anyLong(), anyLong()); @@ -1463,14 +1527,14 @@ void testSaveAdminToOrder() { @Test void testUpdateEcoNumberForOrder() { - when(orderRepository.findById(1L)).thenReturn(Optional.of(ModelUtils.getOrder())); - ubsManagementService.updateEcoNumberForOrder(ModelUtils.getEcoNumberDto(), 1L, "abc"); + when(orderRepository.findById(1L)).thenReturn(Optional.of(getOrder())); + ubsManagementService.updateEcoNumberForOrder(getEcoNumberDto(), 1L, "abc"); verify(eventService, times(1)).saveEvent(any(), any(), any()); } @Test void testUpdateEcoNumberThrowOrderNotFoundException() { - EcoNumberDto dto = ModelUtils.getEcoNumberDto(); + EcoNumberDto dto = getEcoNumberDto(); when(orderRepository.findById(1L)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> ubsManagementService.updateEcoNumberForOrder(dto, 1L, "test@gmail.com")); @@ -1487,9 +1551,9 @@ void updateEcoNumberTrowsException() { @Test void updateEcoNumberTrowsIncorrectEcoNumberFormatException() { - when(orderRepository.findById(1L)).thenReturn(Optional.of(ModelUtils.getOrder())); + when(orderRepository.findById(1L)).thenReturn(Optional.of(getOrder())); - EcoNumberDto ecoNumberDto = ModelUtils.getEcoNumberDto(); + EcoNumberDto ecoNumberDto = getEcoNumberDto(); ecoNumberDto.setEcoNumber(new HashSet<>(List.of("1234a"))); assertThrows(BadRequestException.class, () -> ubsManagementService.updateEcoNumberForOrder(ecoNumberDto, 1L, "abc")); @@ -1505,7 +1569,7 @@ void saveAdminCommentThrowsException() { @Test void getOrdersForUserTest() { - Order order1 = ModelUtils.getOrderUserFirst(); + Order order1 = getOrderUserFirst(); Order order2 = ModelUtils.getOrderUserSecond(); List orders = List.of(order1, order2); OrderInfoDto info1 = OrderInfoDto.builder().id(1L).orderPrice(10).build(); @@ -1532,17 +1596,17 @@ void getOrderStatusDataThrowsUnexistingOrderExceptionTest() { @Test void updateOrderAdminPageInfoTest() { - OrderDetailStatusRequestDto orderDetailStatusRequestDto = ModelUtils.getTestOrderDetailStatusRequestDto(); - Order order = ModelUtils.getOrder(); + OrderDetailStatusRequestDto orderDetailStatusRequestDto = getTestOrderDetailStatusRequestDto(); + Order order = getOrder(); TariffsInfo tariffsInfo = getTariffsInfo(); order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(paymentRepository.findAllByOrderId(1L)) - .thenReturn(List.of(ModelUtils.getPayment())); + .thenReturn(List.of(getPayment())); lenient().when(ubsManagementServiceMock.updateOrderDetailStatus(1L, orderDetailStatusRequestDto, "abc")) .thenReturn(ModelUtils.getTestOrderDetailStatusDto()); when(ubsClientService.updateUbsUserInfoInOrder(ModelUtils.getUbsCustomersDtoUpdate(), @@ -1550,13 +1614,13 @@ void updateOrderAdminPageInfoTest() { UpdateOrderPageAdminDto updateOrderPageAdminDto = updateOrderPageAdminDto(); updateOrderPageAdminDto.setUserInfoDto(ModelUtils.getUbsCustomersDtoUpdate()); when(orderAddressRepository.findById(1L)) - .thenReturn(Optional.of(ModelUtils.getOrderAddress())); + .thenReturn(Optional.of(getOrderAddress())); when(receivingStationRepository.findAll()) - .thenReturn(List.of(ModelUtils.getReceivingStation())); - var receivingStation = ModelUtils.getReceivingStation(); + .thenReturn(List.of(getReceivingStation())); + var receivingStation = getReceivingStation(); when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto())); + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, 1L, "en", "test@gmail.com"); @@ -1570,17 +1634,17 @@ void updateOrderAdminPageInfoTest() { @Test void updateOrderAdminPageInfoWithUbsCourierSumAndWriteOffStationSum() { - OrderDetailStatusRequestDto orderDetailStatusRequestDto = ModelUtils.getTestOrderDetailStatusRequestDto(); - Order order = ModelUtils.getOrder(); + OrderDetailStatusRequestDto orderDetailStatusRequestDto = getTestOrderDetailStatusRequestDto(); + Order order = getOrder(); TariffsInfo tariffsInfo = getTariffsInfo(); order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(paymentRepository.findAllByOrderId(1L)) - .thenReturn(List.of(ModelUtils.getPayment())); + .thenReturn(List.of(getPayment())); lenient().when(ubsManagementServiceMock.updateOrderDetailStatus(1L, orderDetailStatusRequestDto, "abc")) .thenReturn(ModelUtils.getTestOrderDetailStatusDto()); when(ubsClientService.updateUbsUserInfoInOrder(ModelUtils.getUbsCustomersDtoUpdate(), @@ -1590,13 +1654,13 @@ void updateOrderAdminPageInfoWithUbsCourierSumAndWriteOffStationSum() { updateOrderPageAdminDto.setUbsCourierSum(50.); updateOrderPageAdminDto.setWriteOffStationSum(100.); when(orderAddressRepository.findById(1L)) - .thenReturn(Optional.of(ModelUtils.getOrderAddress())); + .thenReturn(Optional.of(getOrderAddress())); when(receivingStationRepository.findAll()) - .thenReturn(List.of(ModelUtils.getReceivingStation())); - var receivingStation = ModelUtils.getReceivingStation(); + .thenReturn(List.of(getReceivingStation())); + var receivingStation = getReceivingStation(); when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto())); + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, 1L, "en", "test@gmail.com"); @@ -1610,12 +1674,12 @@ void updateOrderAdminPageInfoWithUbsCourierSumAndWriteOffStationSum() { @Test void updateOrderAdminPageInfoWithStatusFormedTest() { - Order order = ModelUtils.getOrder(); + Order order = getOrder(); TariffsInfo tariffsInfo = getTariffsInfo(); order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); order.setOrderStatus(OrderStatus.FORMED); EmployeeOrderPosition employeeOrderPosition = ModelUtils.getEmployeeOrderPosition(); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); UpdateOrderPageAdminDto updateOrderPageAdminDto = ModelUtils.updateOrderPageAdminDtoWithStatusFormed(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); @@ -1623,8 +1687,8 @@ void updateOrderAdminPageInfoWithStatusFormedTest() { when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(paymentRepository.findAllByOrderId(1L)).thenReturn(List.of(ModelUtils.getPayment())); - when(receivingStationRepository.findAll()).thenReturn(List.of(ModelUtils.getReceivingStation())); + when(paymentRepository.findAllByOrderId(1L)).thenReturn(List.of(getPayment())); + when(receivingStationRepository.findAll()).thenReturn(List.of(getReceivingStation())); when(employeeOrderPositionRepository.findAllByOrderId(1L)).thenReturn(List.of(employeeOrderPosition)); ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, 1L, "en", "test@gmail.com"); @@ -1644,7 +1708,7 @@ void updateOrderAdminPageInfoWithStatusFormedTest() { @Test void updateOrderAdminPageInfoWithStatusCanceledTest() { - Order order = ModelUtils.getOrder(); + Order order = getOrder(); TariffsInfo tariffsInfo = getTariffsInfo(); order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); order.setOrderStatus(OrderStatus.CANCELED); @@ -1663,7 +1727,7 @@ void updateOrderAdminPageInfoWithStatusCanceledTest() { @Test void updateOrderAdminPageInfoWithStatusDoneTest() { - Order order = ModelUtils.getOrder(); + Order order = getOrder(); TariffsInfo tariffsInfo = getTariffsInfo(); order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); order.setOrderStatus(OrderStatus.DONE); @@ -1682,7 +1746,7 @@ void updateOrderAdminPageInfoWithStatusDoneTest() { @Test void updateOrderAdminPageInfoWithStatusBroughtItHimselfTest() { - Order order = ModelUtils.getOrder(); + Order order = getOrder(); LocalDateTime orderDate = LocalDateTime.of(2023, 6, 10, 12, 10); LocalDateTime deliverFrom = LocalDateTime.of(2023, 6, 16, 15, 30); LocalDateTime deliverTo = LocalDateTime.of(2023, 6, 16, 19, 30); @@ -1693,7 +1757,7 @@ void updateOrderAdminPageInfoWithStatusBroughtItHimselfTest() { order.setDeliverTo(deliverTo); order.setTariffsInfo(tariffsInfo); order.setOrderStatus(OrderStatus.BROUGHT_IT_HIMSELF); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); UpdateOrderPageAdminDto updateOrderPageAdminDto = ModelUtils.updateOrderPageAdminDtoWithStatusBroughtItHimself(); @@ -1702,7 +1766,7 @@ void updateOrderAdminPageInfoWithStatusBroughtItHimselfTest() { when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(paymentRepository.findAllByOrderId(1L)).thenReturn(List.of(ModelUtils.getPayment())); + when(paymentRepository.findAllByOrderId(1L)).thenReturn(List.of(getPayment())); ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, 1L, "en", "test@gmail.com"); @@ -1720,11 +1784,11 @@ void updateOrderAdminPageInfoWithStatusBroughtItHimselfTest() { @Test void updateOrderAdminPageInfoWithNullFieldsTest() { - Order order = ModelUtils.getOrder(); + Order order = getOrder(); TariffsInfo tariffsInfo = getTariffsInfo(); order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); order.setOrderStatus(OrderStatus.ON_THE_ROUTE); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); UpdateOrderPageAdminDto updateOrderPageAdminDto = ModelUtils.updateOrderPageAdminDtoWithNullFields(); @@ -1733,8 +1797,8 @@ void updateOrderAdminPageInfoWithNullFieldsTest() { when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(paymentRepository.findAllByOrderId(1L)).thenReturn(List.of(ModelUtils.getPayment())); - when(receivingStationRepository.findAll()).thenReturn(List.of(ModelUtils.getReceivingStation())); + when(paymentRepository.findAllByOrderId(1L)).thenReturn(List.of(getPayment())); + when(receivingStationRepository.findAll()).thenReturn(List.of(getReceivingStation())); ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, 1L, "en", "test@gmail.com"); @@ -1753,9 +1817,9 @@ void updateOrderAdminPageInfoWithNullFieldsTest() { void updateOrderAdminPageInfoTestThrowsException() { UpdateOrderPageAdminDto updateOrderPageAdminDto = updateOrderPageAdminDto(); TariffsInfo tariffsInfo = getTariffsInfo(); - Order order = ModelUtils.getOrder(); + Order order = getOrder(); order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) @@ -1778,21 +1842,21 @@ void updateOrderAdminPageInfoForOrderWithStatusBroughtItHimselfTest() { LocalDateTime orderDate = LocalDateTime.now(); TariffsInfo tariffsInfo = getTariffsInfo(); - Order expected = ModelUtils.getOrder(); + Order expected = getOrder(); expected.setOrderDate(orderDate).setTariffsInfo(tariffsInfo); expected.setOrderStatus(OrderStatus.DONE); - Order order = ModelUtils.getOrder(); + Order order = getOrder(); order.setOrderDate(orderDate).setTariffsInfo(tariffsInfo); order.setOrderStatus(OrderStatus.BROUGHT_IT_HIMSELF); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(paymentRepository.findAllByOrderId(1L)).thenReturn(List.of(ModelUtils.getPayment())); + when(paymentRepository.findAllByOrderId(1L)).thenReturn(List.of(getPayment())); ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, 1L, "en", "test@gmail.com"); @@ -1815,7 +1879,7 @@ void saveReason() { @Test void getOrderSumDetailsForFormedOrder() { CounterOrderDetailsDto dto = ModelUtils.getcounterOrderDetailsDto(); - Order order = ModelUtils.getFormedOrder(); + Order order = getFormedOrder(); order.setOrderDate(LocalDateTime.now()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); @@ -1829,7 +1893,7 @@ void getOrderSumDetailsForFormedOrder() { @Test void getOrderSumDetailsForFormedOrderWithUbsCourierSumAndWriteOffStationSum() { CounterOrderDetailsDto dto = ModelUtils.getcounterOrderDetailsDto(); - Order order = ModelUtils.getFormedOrder(); + Order order = getFormedOrder(); order.setOrderDate(LocalDateTime.now()); order.setUbsCourierSum(50_00L); order.setWriteOffStationSum(100_00L); @@ -1937,8 +2001,8 @@ void getOrderSumDetailsThrowsUnexcitingOrderExceptionTest() { @Test void getOrderStatusDataTest() { - Order order = ModelUtils.getOrderForGetOrderStatusData2Test(); - BagInfoDto bagInfoDto = ModelUtils.getBagInfoDto(); + Order order = getOrderForGetOrderStatusData2Test(); + BagInfoDto bagInfoDto = getBagInfoDto(); TariffsInfo tariffsInfo = getTariffsInfo(); order.setTariffsInfo(tariffsInfo); Employee employee = getEmployee(); @@ -1949,7 +2013,7 @@ void getOrderStatusDataTest() { when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); - when(certificateRepository.findCertificate(1L)).thenReturn(ModelUtils.getCertificateList()); + when(certificateRepository.findCertificate(1L)).thenReturn(getCertificateList()); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(getService())); when(modelMapper.map(getBaglist().get(0), BagInfoDto.class)).thenReturn(bagInfoDto); @@ -1961,7 +2025,7 @@ void getOrderStatusDataTest() { .thenReturn(OrderPaymentStatusTranslation.builder().translationValue("name").build()); when(orderPaymentStatusTranslationRepository.getAllBy()).thenReturn(getOrderStatusPaymentTranslations()); when(orderRepository.findById(6L)).thenReturn(Optional.of(order)); - when(receivingStationRepository.findAll()).thenReturn(ModelUtils.getReceivingList()); + when(receivingStationRepository.findAll()).thenReturn(getReceivingList()); ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); @@ -1971,7 +2035,7 @@ void getOrderStatusDataTest() { verify(certificateRepository).findCertificate(1L); verify(orderRepository, times(5)).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); - verify(modelMapper).map(ModelUtils.getBaglist().get(0), BagInfoDto.class); + verify(modelMapper).map(getBaglist().get(0), BagInfoDto.class); verify(orderStatusTranslationRepository).getOrderStatusTranslationById(6L); verify(orderPaymentStatusTranslationRepository).getById(1L); verify(receivingStationRepository).findAll(); @@ -1982,17 +2046,17 @@ void getOrderStatusDataTest() { @Test void saveNewManualPaymentWhenImageNotNull() { - User user = ModelUtils.getTestUser(); + User user = getTestUser(); user.setRecipientName("Петро"); user.setRecipientSurname("Петренко"); - Order order = ModelUtils.getFormedOrder(); + Order order = getFormedOrder(); TariffsInfo tariffsInfo = getTariffsInfo(); order.setTariffsInfo(tariffsInfo); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); - Payment payment = ModelUtils.getManualPayment(); + Payment payment = getManualPayment(); ManualPaymentRequestDto paymentDetails = ManualPaymentRequestDto.builder() .settlementdate("02-08-2021").amount(500L).receiptLink("link").paymentId("1").build(); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) @@ -2046,7 +2110,7 @@ void getOrderStatusDataTestEmptyPriceDetails() { verify(certificateRepository).findCertificate(1L); verify(orderRepository, times(5)).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); - verify(modelMapper).map(ModelUtils.getBaglist().get(0), BagInfoDto.class); + verify(modelMapper).map(getBaglist().get(0), BagInfoDto.class); verify(orderStatusTranslationRepository).getOrderStatusTranslationById(6L); verify(orderPaymentStatusTranslationRepository).getById(1L); verify(receivingStationRepository).findAll(); @@ -2056,11 +2120,11 @@ void getOrderStatusDataTestEmptyPriceDetails() { @Test void getOrderStatusDataWithEmptyCertificateTest() { - Order order = ModelUtils.getOrderForGetOrderStatusData2Test(); - BagInfoDto bagInfoDto = ModelUtils.getBagInfoDto(); + Order order = getOrderForGetOrderStatusData2Test(); + BagInfoDto bagInfoDto = getBagInfoDto(); TariffsInfo tariffsInfo = getTariffsInfo(); order.setTariffsInfo(tariffsInfo); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); when(orderRepository.findById(order.getId())).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) @@ -2077,7 +2141,7 @@ void getOrderStatusDataWithEmptyCertificateTest() { orderPaymentStatusTranslationRepository.getById(1L)) .thenReturn(OrderPaymentStatusTranslation.builder().translationValue("name").build()); when(orderRepository.findById(6L)).thenReturn(Optional.of(order)); - when(receivingStationRepository.findAll()).thenReturn(ModelUtils.getReceivingList()); + when(receivingStationRepository.findAll()).thenReturn(getReceivingList()); ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); @@ -2086,7 +2150,7 @@ void getOrderStatusDataWithEmptyCertificateTest() { verify(bagRepository).findBagsByTariffsInfoId(1L); verify(orderRepository, times(5)).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); - verify(modelMapper).map(ModelUtils.getBaglist().get(0), BagInfoDto.class); + verify(modelMapper).map(getBaglist().get(0), BagInfoDto.class); verify(orderStatusTranslationRepository).getOrderStatusTranslationById(6L); verify(orderPaymentStatusTranslationRepository).getById(1L); verify(receivingStationRepository).findAll(); @@ -2095,11 +2159,11 @@ void getOrderStatusDataWithEmptyCertificateTest() { @Test void getOrderStatusDataWhenOrderTranslationIsNull() { - Order order = ModelUtils.getOrderForGetOrderStatusData2Test(); - BagInfoDto bagInfoDto = ModelUtils.getBagInfoDto(); + Order order = getOrderForGetOrderStatusData2Test(); + BagInfoDto bagInfoDto = getBagInfoDto(); TariffsInfo tariffsInfo = getTariffsInfo(); order.setTariffsInfo(tariffsInfo); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); when(orderRepository.findById(order.getId())).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) @@ -2114,7 +2178,7 @@ void getOrderStatusDataWhenOrderTranslationIsNull() { orderPaymentStatusTranslationRepository.getById(1L)) .thenReturn(OrderPaymentStatusTranslation.builder().translationValue("name").build()); when(orderRepository.findById(6L)).thenReturn(Optional.of(order)); - when(receivingStationRepository.findAll()).thenReturn(ModelUtils.getReceivingList()); + when(receivingStationRepository.findAll()).thenReturn(getReceivingList()); ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); @@ -2123,7 +2187,7 @@ void getOrderStatusDataWhenOrderTranslationIsNull() { verify(bagRepository).findBagsByTariffsInfoId(1L); verify(orderRepository, times(5)).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); - verify(modelMapper).map(ModelUtils.getBaglist().get(0), BagInfoDto.class); + verify(modelMapper).map(getBaglist().get(0), BagInfoDto.class); verify(orderStatusTranslationRepository).getOrderStatusTranslationById(6L); verify(orderPaymentStatusTranslationRepository).getById(1L); verify(receivingStationRepository).findAll(); @@ -2132,21 +2196,21 @@ void getOrderStatusDataWhenOrderTranslationIsNull() { @Test void getOrderStatusDataExceptionTest() { - Order order = ModelUtils.getOrderForGetOrderStatusData2Test(); + Order order = getOrderForGetOrderStatusData2Test(); TariffsInfo tariffsInfo = getTariffsInfo(); - BagInfoDto bagInfoDto = ModelUtils.getBagInfoDto(); + BagInfoDto bagInfoDto = getBagInfoDto(); order.setTariffsInfo(tariffsInfo); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); when(orderRepository.findById(order.getId())).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(ModelUtils.getBaglist()); - when(certificateRepository.findCertificate(1L)).thenReturn(ModelUtils.getCertificateList()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); + when(certificateRepository.findCertificate(1L)).thenReturn(getCertificateList()); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(getService())); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); - when(modelMapper.map(ModelUtils.getBaglist().get(0), BagInfoDto.class)).thenReturn(bagInfoDto); + when(modelMapper.map(getBaglist().get(0), BagInfoDto.class)).thenReturn(bagInfoDto); when(orderStatusTranslationRepository.getOrderStatusTranslationById(6L)) .thenReturn(Optional.ofNullable(getStatusTranslation())); when( @@ -2162,7 +2226,7 @@ void updateOrderExportDetails() { List receivingStations = List.of(getReceivingStation()); ExportDetailsDtoUpdate testDetails = getExportDetailsRequestToday(); - var receivingStation = ModelUtils.getReceivingStation(); + var receivingStation = getReceivingStation(); when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); when(orderRepository.findById(anyLong())).thenReturn(Optional.of(order)); when(receivingStationRepository.findAll()).thenReturn(receivingStations); @@ -2181,7 +2245,7 @@ void updateOrderExportDetailsEmptyDetailsTest() { order.setDeliverFrom(null); List receivingStations = List.of(getReceivingStation()); ExportDetailsDtoUpdate emptyDetails = ExportDetailsDtoUpdate.builder().receivingStationId(1L).build(); - var receivingStation = ModelUtils.getReceivingStation(); + var receivingStation = getReceivingStation(); when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); when(orderRepository.findById(anyLong())).thenReturn(Optional.of(order)); when(receivingStationRepository.findAll()).thenReturn(receivingStations); @@ -2209,7 +2273,7 @@ void updateOrderExportDetailsUnexistingOrderExceptionTest() { void updateOrderExportDetailsReceivingStationNotFoundExceptionTest() { Order order = getOrder(); ExportDetailsDtoUpdate testDetails = getExportDetailsRequest(); - var receivingStation = ModelUtils.getReceivingStation(); + var receivingStation = getReceivingStation(); when(orderRepository.findById(anyLong())).thenReturn(Optional.of(order)); when(receivingStationRepository.findAll()).thenReturn(Collections.emptyList()); assertThrows(NotFoundException.class, @@ -2284,8 +2348,8 @@ void updateManualPaymentPaymentNotFoundExceptionTest() { @Test void updateAllOrderAdminPageInfoUnexistingOrderExceptionTest() { - Order order = ModelUtils.getOrder(); - UpdateAllOrderPageDto updateAllOrderPageDto = ModelUtils.updateAllOrderPageDto(); + Order order = getOrder(); + UpdateAllOrderPageDto updateAllOrderPageDto = updateAllOrderPageDto(); when(orderRepository.findById(4L)).thenReturn(Optional.ofNullable(order)); assertThrows(NotFoundException.class, () -> ubsManagementService.updateAllOrderAdminPageInfo(updateAllOrderPageDto, "uuid", "ua")); @@ -2301,57 +2365,57 @@ void updateAllOrderAdminPageInfoUpdateAdminPageInfoExceptionTest() { @Test void updateAllOrderAdminPageInfoStatusConfirmedTest() { - Order order = ModelUtils.getOrder(); + Order order = getOrder(); order.setOrderDate(LocalDateTime.now()); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(getReceivingStation())); when(receivingStationRepository.findAll()).thenReturn(List.of(getReceivingStation())); - UpdateAllOrderPageDto expectedObject = ModelUtils.updateAllOrderPageDto(); - UpdateAllOrderPageDto actual = ModelUtils.updateAllOrderPageDto(); + UpdateAllOrderPageDto expectedObject = updateAllOrderPageDto(); + UpdateAllOrderPageDto actual = updateAllOrderPageDto(); assertEquals(expectedObject.getExportDetailsDto().getDateExport(), actual.getExportDetailsDto().getDateExport()); ubsManagementService.updateAllOrderAdminPageInfo(expectedObject, "uuid", "ua"); - expectedObject = ModelUtils.updateAllOrderPageDto(); - actual = ModelUtils.updateAllOrderPageDto(); + expectedObject = updateAllOrderPageDto(); + actual = updateAllOrderPageDto(); assertEquals(expectedObject.getExportDetailsDto().getDateExport(), actual.getExportDetailsDto().getDateExport()); ubsManagementService.updateAllOrderAdminPageInfo(expectedObject, "uuid", "ua"); - expectedObject = ModelUtils.updateAllOrderPageDto(); - actual = ModelUtils.updateAllOrderPageDto(); + expectedObject = updateAllOrderPageDto(); + actual = updateAllOrderPageDto(); assertEquals(expectedObject.getExportDetailsDto().getDateExport(), actual.getExportDetailsDto().getDateExport()); ubsManagementService.updateAllOrderAdminPageInfo(expectedObject, "uuid", "ua"); - expectedObject = ModelUtils.updateAllOrderPageDto(); - actual = ModelUtils.updateAllOrderPageDto(); + expectedObject = updateAllOrderPageDto(); + actual = updateAllOrderPageDto(); assertEquals(expectedObject.getExportDetailsDto().getDateExport(), actual.getExportDetailsDto().getDateExport()); ubsManagementService.updateAllOrderAdminPageInfo(expectedObject, "uuid", "ua"); - expectedObject = ModelUtils.updateAllOrderPageDto(); - actual = ModelUtils.updateAllOrderPageDto(); + expectedObject = updateAllOrderPageDto(); + actual = updateAllOrderPageDto(); assertEquals(expectedObject.getExportDetailsDto().getDateExport(), actual.getExportDetailsDto().getDateExport()); ubsManagementService.updateAllOrderAdminPageInfo(expectedObject, "uuid", "ua"); - expectedObject = ModelUtils.updateAllOrderPageDto(); - actual = ModelUtils.updateAllOrderPageDto(); + expectedObject = updateAllOrderPageDto(); + actual = updateAllOrderPageDto(); assertEquals(expectedObject.getExportDetailsDto().getDateExport(), actual.getExportDetailsDto().getDateExport()); ubsManagementService.updateAllOrderAdminPageInfo(expectedObject, "uuid", "ua"); - expectedObject = ModelUtils.updateAllOrderPageDto(); - actual = ModelUtils.updateAllOrderPageDto(); + expectedObject = updateAllOrderPageDto(); + actual = updateAllOrderPageDto(); assertEquals(expectedObject.getExportDetailsDto().getDateExport(), actual.getExportDetailsDto().getDateExport()); @@ -2361,7 +2425,7 @@ void updateAllOrderAdminPageInfoStatusConfirmedTest() { @Test void updateAllOrderAdminPageInfoAdditionalOrdersEmptyTest() { Order order = ModelUtils.getOrder2(); - UpdateAllOrderPageDto updateAllOrderPageDto = ModelUtils.updateAllOrderPageDto(); + UpdateAllOrderPageDto updateAllOrderPageDto = updateAllOrderPageDto(); order.setOrderDate(LocalDateTime.now()); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(getReceivingStation())); @@ -2374,7 +2438,7 @@ void updateAllOrderAdminPageInfoAdditionalOrdersEmptyTest() { @Test void checkGetPaymentInfoWhenPaymentsWithCertificatesAndPointsSmallerThanSumToPay() { - Order order = ModelUtils.getOrder(); + Order order = getOrder(); order.setOrderStatus(OrderStatus.DONE); when(orderRepository.findById(order.getId())).thenReturn(Optional.of(order)); assertEquals(0L, ubsManagementService.getPaymentInfo(order.getId(), 1100.).getOverpayment()); @@ -2382,7 +2446,7 @@ void checkGetPaymentInfoWhenPaymentsWithCertificatesAndPointsSmallerThanSumToPay @Test void testAddPointsToUserWhenCurrentPointIsNull() { - User user = ModelUtils.getTestUser(); + User user = getTestUser(); user.setUuid(userRemoteClient.findUuidByEmail(user.getRecipientEmail())); user.setCurrentPoints(null); @@ -2412,7 +2476,7 @@ void getOrderStatusDataWithNotEmptyLists() { OrderPaymentStatusTranslation orderPaymentStatusTranslation = mock(OrderPaymentStatusTranslation.class); TariffsInfo tariffsInfo = getTariffsInfo(); order.setTariffsInfo(tariffsInfo); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); when(orderRepository.findById(order.getId())).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) @@ -2458,7 +2522,7 @@ void getOrderStatusesTranslationTest() { TariffsInfo tariffsInfo = getTariffsInfo(); list.add(getOrderStatusTranslation()); order.setTariffsInfo(tariffsInfo); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); when(orderRepository.findById(order.getId())).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) @@ -2561,15 +2625,15 @@ void deleteManualTestWithoutPayment() { @Test void addBonusesToUserTest() { - Order order = ModelUtils.getOrderForGetOrderStatusData2Test(); + Order order = getOrderForGetOrderStatusData2Test(); User user = order.getUser(); Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(ModelUtils.getBaglist()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); - ubsManagementService.addBonusesToUser(ModelUtils.getAddBonusesToUserDto(), 1L, employee.getEmail()); + ubsManagementService.addBonusesToUser(getAddBonusesToUserDto(), 1L, employee.getEmail()); verify(orderRepository).findById(1L); verify(orderRepository).save(order); @@ -2580,16 +2644,16 @@ void addBonusesToUserTest() { @Test void addBonusesToUserIfOrderStatusIsCanceled() { - Order order = ModelUtils.getOrderForGetOrderStatusData2Test(); + Order order = getOrderForGetOrderStatusData2Test(); order.setOrderStatus(OrderStatus.CANCELED); User user = order.getUser(); Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(ModelUtils.getBaglist()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); - ubsManagementService.addBonusesToUser(ModelUtils.getAddBonusesToUserDto(), 1L, employee.getEmail()); + ubsManagementService.addBonusesToUser(getAddBonusesToUserDto(), 1L, employee.getEmail()); verify(orderRepository).findById(1L); verify(orderRepository).save(order); @@ -2605,10 +2669,10 @@ void addBonusesToUserWithoutExportedBagsTest() { Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(ModelUtils.getBaglist()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); - ubsManagementService.addBonusesToUser(ModelUtils.getAddBonusesToUserDto(), 1L, employee.getEmail()); + ubsManagementService.addBonusesToUser(getAddBonusesToUserDto(), 1L, employee.getEmail()); verify(orderRepository).findById(1L); verify(orderRepository).save(order); @@ -2631,20 +2695,20 @@ void addBonusesToUserWithNoOverpaymentTest() { String email = getEmployee().getEmail(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(ModelUtils.getBag3list()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag3list()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); - AddBonusesToUserDto addBonusesToUserDto = ModelUtils.getAddBonusesToUserDto(); + AddBonusesToUserDto addBonusesToUserDto = getAddBonusesToUserDto(); assertThrows(BadRequestException.class, () -> ubsManagementService.addBonusesToUser(addBonusesToUserDto, 1L, email)); } @Test void checkEmployeeForOrderTest() { - User user = ModelUtils.getTestUser(); + User user = getTestUser(); Order order = user.getOrders().get(0); order.setOrderStatus(OrderStatus.CANCELED).setTariffsInfo(getTariffsInfo()); - Employee employee = ModelUtils.getEmployee(); + Employee employee = getEmployee(); List tariffsInfoIds = new ArrayList<>(); tariffsInfoIds.add(1L); when(orderRepository.findById(order.getId())).thenReturn(Optional.of(order)); @@ -2667,7 +2731,7 @@ void updateOrderExportDetailsSettingForDifferentInitialExportDetailsTest(Order o Employee employee = getEmployee(); List receivingStations = List.of(getReceivingStation()); ExportDetailsDtoUpdate testDetails = getExportDetailsRequest(); - var receivingStation = ModelUtils.getReceivingStation(); + var receivingStation = getReceivingStation(); when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); when(orderRepository.findById(anyLong())).thenReturn(Optional.of(order)); when(receivingStationRepository.findAll()).thenReturn(receivingStations); @@ -2714,7 +2778,7 @@ void updateOrderExportDetailsWhenDeliverFromIsNull() { List receivingStations = List.of(getReceivingStation()); ExportDetailsDtoUpdate testDetails = getExportDetailsRequest(); Order order = getOrderExportDetails(); - var receivingStation = ModelUtils.getReceivingStation(); + var receivingStation = getReceivingStation(); order.setDeliverFrom(null); testDetails.setTimeDeliveryFrom(null); String expectedHistoryEvent = OrderHistory.UPDATE_EXPORT_DETAILS @@ -2738,7 +2802,7 @@ void updateOrderExportDetailsWhenDeliverToIsNull() { List receivingStations = List.of(getReceivingStation()); ExportDetailsDtoUpdate testDetails = getExportDetailsRequest(); Order order = getOrderExportDetails(); - var receivingStation = ModelUtils.getReceivingStation(); + var receivingStation = getReceivingStation(); order.setDeliverTo(null); testDetails.setTimeDeliveryTo(null); String expectedHistoryEvent = OrderHistory.UPDATE_EXPORT_DETAILS @@ -2800,4 +2864,22 @@ void saveNewManualPaymentWithoutLinkAndImageTest() { assertThrows(BadRequestException.class, () -> ubsManagementService.saveNewManualPayment(1L, paymentDetails, null, "test@gmail.com")); } + + @Test + void saveOrderIdForRefundTest() { + Order order = getOrder(); + Refund refund = getRefund(order.getId()); + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); + when(refundRepository.save(refund)).thenReturn(refund); + ubsManagementService.saveOrderIdForRefund(1L); + verify(orderRepository).findById(1L); + verify(refundRepository).save(refund); + } + + @Test + void saveOrderIdForRefundThrowsNotFoundExceptionTest() { + when(orderRepository.findById(1L)).thenReturn(Optional.empty()); + assertThrows(NotFoundException.class, () -> ubsManagementService.getNotTakenOrderReason(1L)); + verify(orderRepository).findById(1L); + } } \ No newline at end of file From e9f66a6283db793faea417587137607ddbfc7f03 Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Tue, 11 Jul 2023 12:38:24 +0300 Subject: [PATCH 22/80] [Admin cabinet] Fix districts field (#1175) * Created Dto to Districts to return just name * Added mapper to map LocationDto to DistrictDto * Adedd new field to AddressExportDetailsDto * Added mapper and tests to it * Fixed all bugs+added mapper to get districts --- .../controller/AddressController.java | 8 +-- core/src/test/java/greencity/ModelUtils.java | 3 + .../controller/AddressControllerTest.java | 19 +++-- .../greencity/dto/address/AddressDto.java | 16 ++--- .../dto/address/AddressExportDetailsDto.java | 14 ++-- .../dto/location/api/DistrictDto.java | 17 +++++ .../service/ubs/UBSClientService.java | 12 ++++ .../api/LocationToDistrictDtoMapper.java | 24 +++++++ .../user/AddressToAddressDtoMapper.java | 68 ++++++++++++++++++ .../UserToUserProfileUpdateDtoMapper.java | 26 +++++++ .../service/ubs/UBSClientServiceImpl.java | 14 ++++ .../service/ubs/UBSManagementServiceImpl.java | 8 ++- .../src/test/java/greencity/ModelUtils.java | 70 +++++++++++++++++++ .../AddressToAddressDtoMapperTest.java | 45 ++++++++++++ .../LocationToDistrictMapperTest.java | 26 +++++++ .../UserToUserProfileUpdateDtoMapperTest.java | 15 ++++ .../service/ubs/UBSClientServiceImplTest.java | 52 ++++++++++---- .../UBSManagementEmployeeServiceImplTest.java | 34 +++------ .../ubs/UBSManagementServiceImplTest.java | 4 ++ 19 files changed, 403 insertions(+), 72 deletions(-) create mode 100644 service-api/src/main/java/greencity/dto/location/api/DistrictDto.java create mode 100644 service/src/main/java/greencity/mapping/location/api/LocationToDistrictDtoMapper.java create mode 100644 service/src/main/java/greencity/mapping/user/AddressToAddressDtoMapper.java create mode 100644 service/src/test/java/greencity/mapping/location/AddressToAddressDtoMapperTest.java create mode 100644 service/src/test/java/greencity/mapping/location/LocationToDistrictMapperTest.java diff --git a/core/src/main/java/greencity/controller/AddressController.java b/core/src/main/java/greencity/controller/AddressController.java index 8d0d465b8..b3b134f09 100644 --- a/core/src/main/java/greencity/controller/AddressController.java +++ b/core/src/main/java/greencity/controller/AddressController.java @@ -4,12 +4,11 @@ import greencity.constants.HttpStatuses; import greencity.dto.CreateAddressRequestDto; import greencity.dto.address.AddressDto; -import greencity.dto.location.api.LocationDto; +import greencity.dto.location.api.DistrictDto; import greencity.dto.order.OrderAddressDtoRequest; import greencity.dto.order.OrderCancellationReasonDto; import greencity.dto.order.OrderWithAddressesResponseDto; import greencity.dto.user.UserVO; -import greencity.service.locations.LocationApiService; import greencity.service.ubs.UBSClientService; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; @@ -40,7 +39,6 @@ @RequiredArgsConstructor public class AddressController { private final UBSClientService ubsClientService; - private final LocationApiService locationApiService; /** * Controller for getting all addresses for current order. @@ -168,9 +166,9 @@ public ResponseEntity makeAddressActual( @ApiResponse(code = 404, message = HttpStatuses.NOT_FOUND) }) @GetMapping("/get-all-districts") - public ResponseEntity> getAllDistrictsForRegionAndCity(@RequestParam String region, + public ResponseEntity> getAllDistrictsForRegionAndCity(@RequestParam String region, @RequestParam String city) { return ResponseEntity.status(HttpStatus.OK) - .body(locationApiService.getAllDistrictsInCityByNames(region, city)); + .body(ubsClientService.getAllDistricts(region, city)); } } diff --git a/core/src/test/java/greencity/ModelUtils.java b/core/src/test/java/greencity/ModelUtils.java index dfe47523b..65baa095f 100644 --- a/core/src/test/java/greencity/ModelUtils.java +++ b/core/src/test/java/greencity/ModelUtils.java @@ -140,6 +140,7 @@ public static List addressDto() { .region("Регіон") .cityEn("Lviv") .city("Львів") + .addressRegionDistrictList(new ArrayList<>()) .actual(false) .build()); list.add(AddressDto.builder().id(2L) @@ -155,6 +156,8 @@ public static List addressDto() { .region("Регіон") .city("Львів") .cityEn("Lviv") + .addressRegionDistrictList(new ArrayList<>()) + .actual(false) .build()); return list; diff --git a/core/src/test/java/greencity/controller/AddressControllerTest.java b/core/src/test/java/greencity/controller/AddressControllerTest.java index 09bf448b4..0ab805cfd 100644 --- a/core/src/test/java/greencity/controller/AddressControllerTest.java +++ b/core/src/test/java/greencity/controller/AddressControllerTest.java @@ -6,6 +6,7 @@ import greencity.configuration.SecurityConfig; import greencity.converters.UserArgumentResolver; import greencity.dto.CreateAddressRequestDto; +import greencity.dto.location.api.DistrictDto; import greencity.dto.location.api.LocationDto; import greencity.dto.order.OrderAddressDtoRequest; import greencity.service.locations.LocationApiService; @@ -64,7 +65,7 @@ class AddressControllerTest { private final Principal principal = getPrincipal(); @BeforeEach - void setup() { + private void setup() { this.mockMvc = MockMvcBuilders.standaloneSetup(addressController) .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver(), new UserArgumentResolver(userRemoteClient)) @@ -142,16 +143,12 @@ void makeAddressActual() throws Exception { void getAllDistrictsForRegionAndCity() throws Exception { String region = "Львівська"; String city = "Львів"; - Map nameMap = new HashMap<>(); - nameMap.put("name", "Львів"); - nameMap.put("nameEn", "Lviv"); - List mockLocationDtoList = new ArrayList<>(); - LocationDto mockLocationDto = LocationDto.builder() - .id("UA46060250010015970") - .parentId("UA46060250000025047") - .locationNameMap(nameMap) + List mockLocationDtoList = new ArrayList<>(); + DistrictDto mockLocationDto = DistrictDto.builder() + .nameUa("Львів") + .nameEn("Lviv") .build(); - when(locationApiService.getAllDistrictsInCityByNames(region, city)).thenReturn(mockLocationDtoList); + when(ubsClientService.getAllDistricts(region, city)).thenReturn(mockLocationDtoList); mockMvc.perform(get(ubsLink + "/get-all-districts") .param("region", region) .param("city", city) @@ -159,7 +156,7 @@ void getAllDistrictsForRegionAndCity() throws Exception { .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); - verify(locationApiService).getAllDistrictsInCityByNames(region, city); + verify(ubsClientService).getAllDistricts(region, city); } } diff --git a/service-api/src/main/java/greencity/dto/address/AddressDto.java b/service-api/src/main/java/greencity/dto/address/AddressDto.java index 7388658f8..72863ca1c 100644 --- a/service-api/src/main/java/greencity/dto/address/AddressDto.java +++ b/service-api/src/main/java/greencity/dto/address/AddressDto.java @@ -1,19 +1,19 @@ package greencity.dto.address; +import greencity.dto.location.api.DistrictDto; import greencity.entity.coords.Coordinates; import lombok.AllArgsConstructor; import lombok.Builder; -import lombok.EqualsAndHashCode; -import lombok.Getter; +import lombok.Data; + import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.ToString; import org.hibernate.validator.constraints.Length; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import java.io.Serializable; +import java.util.List; import static greencity.constant.ValidationConstant.CH_EN; import static greencity.constant.ValidationConstant.CH_NUM; @@ -21,13 +21,10 @@ import static greencity.constant.ValidationConstant.CITY_EN_REGEXP; import static greencity.constant.ValidationConstant.CITY_UK_REGEXP; -@Getter -@Setter +@Builder +@Data @NoArgsConstructor @AllArgsConstructor -@ToString -@Builder -@EqualsAndHashCode public class AddressDto implements Serializable { @NotNull @Min(1) @@ -73,4 +70,5 @@ public class AddressDto implements Serializable { private String districtEn; private String placeId; + private List addressRegionDistrictList; } \ No newline at end of file diff --git a/service-api/src/main/java/greencity/dto/address/AddressExportDetailsDto.java b/service-api/src/main/java/greencity/dto/address/AddressExportDetailsDto.java index 2a35e9b50..67f175059 100644 --- a/service-api/src/main/java/greencity/dto/address/AddressExportDetailsDto.java +++ b/service-api/src/main/java/greencity/dto/address/AddressExportDetailsDto.java @@ -1,14 +1,13 @@ package greencity.dto.address; -import lombok.*; +import greencity.dto.location.api.DistrictDto; +import lombok.Builder; +import lombok.Data; + +import java.util.List; -@Getter -@Setter -@NoArgsConstructor -@AllArgsConstructor -@ToString @Builder -@EqualsAndHashCode +@Data public class AddressExportDetailsDto { private Long addressId; private String addressCity; @@ -22,4 +21,5 @@ public class AddressExportDetailsDto { private String addressHouseNumber; private String addressStreet; private String addressStreetEng; + private List addressRegionDistrictList; } diff --git a/service-api/src/main/java/greencity/dto/location/api/DistrictDto.java b/service-api/src/main/java/greencity/dto/location/api/DistrictDto.java new file mode 100644 index 000000000..479ec438b --- /dev/null +++ b/service-api/src/main/java/greencity/dto/location/api/DistrictDto.java @@ -0,0 +1,17 @@ +package greencity.dto.location.api; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DistrictDto implements Serializable { + private String nameUa; + private String nameEn; +} diff --git a/service-api/src/main/java/greencity/service/ubs/UBSClientService.java b/service-api/src/main/java/greencity/service/ubs/UBSClientService.java index d1a077bcb..7274ce035 100644 --- a/service-api/src/main/java/greencity/service/ubs/UBSClientService.java +++ b/service-api/src/main/java/greencity/service/ubs/UBSClientService.java @@ -9,6 +9,7 @@ import greencity.dto.customer.UbsCustomersDto; import greencity.dto.customer.UbsCustomersDtoUpdate; import greencity.dto.employee.UserEmployeeAuthorityDto; +import greencity.dto.location.api.DistrictDto; import greencity.dto.order.EventDto; import greencity.dto.order.FondyOrderResponse; import greencity.dto.order.MakeOrderAgainDto; @@ -423,4 +424,15 @@ public interface UBSClientService { * @return an {@link AddressDto} object representing the updated address */ AddressDto makeAddressActual(Long addressId, String uuid); + + /** + * Method gets all districts in city. + * + * @param region - name of region + * @param city - name of city + * + * @return {@link DistrictDto} + */ + + List getAllDistricts(String region, String city); } diff --git a/service/src/main/java/greencity/mapping/location/api/LocationToDistrictDtoMapper.java b/service/src/main/java/greencity/mapping/location/api/LocationToDistrictDtoMapper.java new file mode 100644 index 000000000..3954a6bd6 --- /dev/null +++ b/service/src/main/java/greencity/mapping/location/api/LocationToDistrictDtoMapper.java @@ -0,0 +1,24 @@ +package greencity.mapping.location.api; + +import greencity.dto.location.api.DistrictDto; +import greencity.dto.location.api.LocationDto; +import greencity.dto.position.PositionDto; +import greencity.entity.user.employee.Position; +import org.modelmapper.AbstractConverter; +import org.modelmapper.ModelMapper; +import org.springframework.stereotype.Component; + +/** + * Class that used by {@link ModelMapper} to map {@link PositionDto} into + * {@link Position}. + */ +@Component +public class LocationToDistrictDtoMapper extends AbstractConverter { + @Override + public DistrictDto convert(LocationDto locationDto) { + return DistrictDto.builder() + .nameUa(locationDto.getLocationNameMap().get("name")) + .nameEn(locationDto.getLocationNameMap().get("name_en")) + .build(); + } +} diff --git a/service/src/main/java/greencity/mapping/user/AddressToAddressDtoMapper.java b/service/src/main/java/greencity/mapping/user/AddressToAddressDtoMapper.java new file mode 100644 index 000000000..5a8854b66 --- /dev/null +++ b/service/src/main/java/greencity/mapping/user/AddressToAddressDtoMapper.java @@ -0,0 +1,68 @@ +package greencity.mapping.user; + +import greencity.dto.address.AddressDto; +import greencity.dto.location.api.DistrictDto; +import greencity.dto.location.api.LocationDto; +import greencity.entity.coords.Coordinates; +import greencity.entity.user.ubs.Address; +import greencity.service.locations.LocationApiService; +import org.modelmapper.AbstractConverter; +import org.modelmapper.ModelMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * Class that used by {@link ModelMapper} to map {@link Address} into + * {@link AddressDto}. + */ +@Component +public class AddressToAddressDtoMapper extends AbstractConverter { + /** + * Service for getting districts in city. + */ + @Autowired + private LocationApiService locationApiService; + + /** + * Method convert {@link Address} to {@link AddressDto}. + * + * @return {@link AddressDto} + */ + @Override + public AddressDto convert(Address address) { + return AddressDto.builder() + .id(address.getId()) + .region(address.getRegion()) + .regionEn(address.getRegionEn()) + .city(address.getCity()) + .cityEn(address.getCityEn()) + .street(address.getStreet()) + .streetEn(address.getStreetEn()) + .district(address.getDistrict()) + .districtEn(address.getDistrictEn()) + .entranceNumber(address.getEntranceNumber()) + .houseCorpus(address.getHouseCorpus()) + .houseNumber(address.getHouseNumber()) + .addressComment(address.getAddressComment()) + .coordinates(Coordinates.builder() + .latitude(address.getCoordinates().getLatitude()) + .longitude(address.getCoordinates().getLongitude()) + .build()) + .addressRegionDistrictList(getAllDistricts((address.getRegion()), address.getCity())) + .actual(false) + .build(); + } + + private List getAllDistricts(String region, String city) { + List locationDtos = locationApiService.getAllDistrictsInCityByNames(region, city); + return locationDtos.stream() + .map(locationDto -> DistrictDto.builder() + .nameUa(locationDto.getLocationNameMap().get("name")) + .nameEn(locationDto.getLocationNameMap().get("name_en")) + .build()) + .collect(Collectors.toList()); + } +} diff --git a/service/src/main/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapper.java b/service/src/main/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapper.java index 34ec36133..43853b933 100644 --- a/service/src/main/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapper.java +++ b/service/src/main/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapper.java @@ -1,11 +1,15 @@ package greencity.mapping.user; import greencity.dto.address.AddressDto; +import greencity.dto.location.api.DistrictDto; +import greencity.dto.location.api.LocationDto; import greencity.dto.user.UserProfileUpdateDto; import greencity.entity.coords.Coordinates; import greencity.entity.user.User; import greencity.entity.user.ubs.Address; +import greencity.service.locations.LocationApiService; import org.modelmapper.AbstractConverter; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.List; @@ -13,6 +17,17 @@ @Component public class UserToUserProfileUpdateDtoMapper extends AbstractConverter { + /** + * Service for getting districts in city. + */ + @Autowired + private LocationApiService locationApiService; + + /** + * Method convert {@link User} to {@link UserProfileUpdateDto}. + * + * @return {@link UserProfileUpdateDto} + */ @Override protected UserProfileUpdateDto convert(User user) { List addressDtoList = user.getAddresses().stream() @@ -50,6 +65,17 @@ private AddressDto createAddressDto(Address address) { .longitude(address.getCoordinates().getLongitude()) .build()) .actual(address.getActual()) + .addressRegionDistrictList(getAllDistricts((address.getRegion()), address.getCity())) .build(); } + + private List getAllDistricts(String region, String city) { + List locationDtos = locationApiService.getAllDistrictsInCityByNames(region, city); + return locationDtos.stream() + .map(locationDto -> DistrictDto.builder() + .nameUa(locationDto.getLocationNameMap().get("name")) + .nameEn(locationDto.getLocationNameMap().get("name_en")) + .build()) + .collect(Collectors.toList()); + } } diff --git a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java index 41080b8c4..34d4a6cea 100644 --- a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java @@ -24,6 +24,8 @@ import greencity.dto.customer.UbsCustomersDto; import greencity.dto.customer.UbsCustomersDtoUpdate; import greencity.dto.employee.UserEmployeeAuthorityDto; +import greencity.dto.location.api.DistrictDto; +import greencity.dto.location.api.LocationDto; import greencity.dto.notification.SenderInfoDto; import greencity.dto.order.EventDto; import greencity.dto.order.FondyOrderResponse; @@ -105,6 +107,7 @@ import greencity.repository.UserRepository; import greencity.repository.ViberBotRepository; import greencity.service.google.GoogleApiService; +import greencity.service.locations.LocationApiService; import greencity.service.phone.UAPhoneNumberUtil; import greencity.util.Bot; import greencity.util.EncryptionUtil; @@ -227,6 +230,7 @@ public class UBSClientServiceImpl implements UBSClientService { private final RegionRepository regionRepository; private final TelegramBotRepository telegramBotRepository; private final ViberBotRepository viberBotRepository; + private final LocationApiService locationApiService; @Lazy @Autowired private UBSManagementService ubsManagementService; @@ -1888,4 +1892,14 @@ public AddressDto makeAddressActual(Long addressId, String uuid) { return modelMapper.map(currentAddress, AddressDto.class); } + + /** + * {@inheritDoc} + */ + @Override + public List getAllDistricts(String region, String city) { + List locationDtos = locationApiService.getAllDistrictsInCityByNames(region, city); + return locationDtos.stream().map(p -> modelMapper.map(p, DistrictDto.class)) + .collect(Collectors.toList()); + } } \ No newline at end of file diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java index 2ac6fae8b..49ffcbea7 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java @@ -16,6 +16,7 @@ import greencity.dto.courier.ReceivingStationDto; import greencity.dto.employee.EmployeeNameIdDto; import greencity.dto.employee.EmployeePositionDtoRequest; +import greencity.dto.location.api.DistrictDto; import greencity.dto.order.AdminCommentDto; import greencity.dto.order.CounterOrderDetailsDto; import greencity.dto.order.DetailsOrderInfoDto; @@ -88,6 +89,7 @@ import greencity.repository.ServiceRepository; import greencity.repository.TariffsInfoRepository; import greencity.repository.UserRepository; +import greencity.service.locations.LocationApiService; import greencity.service.notification.NotificationServiceImpl; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -165,8 +167,8 @@ public class UBSManagementServiceImpl implements UBSManagementService { private final OrderPaymentStatusTranslationRepository orderPaymentStatusTranslationRepository; private final ServiceRepository serviceRepository; private final OrdersAdminsPageService ordersAdminsPageService; + private final LocationApiService locationApiService; private final RefundRepository refundRepository; - private static final String DEFAULT_IMAGE_PATH = AppConstant.DEFAULT_IMAGE; private final Set orderStatusesBeforeShipment = @@ -447,6 +449,10 @@ private AddressExportDetailsDto getAddressDtoForAdminPage(OrderAddress address) .addressHouseNumber(address.getHouseNumber()) .addressRegion(address.getRegion()) .addressRegionEng(address.getRegionEn()) + .addressRegionDistrictList( + locationApiService.getAllDistrictsInCityByNames(address.getRegion(), address.getCity()).stream() + .map(p -> modelMapper.map(p, DistrictDto.class)) + .collect(Collectors.toList())) .build(); } diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index e182a029c..f30932f99 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -50,6 +50,8 @@ import greencity.dto.location.LocationTranslationDto; import greencity.dto.location.LocationsDto; import greencity.dto.location.RegionTranslationDto; +import greencity.dto.location.api.DistrictDto; +import greencity.dto.location.api.LocationDto; import greencity.dto.notification.NotificationDto; import greencity.dto.notification.NotificationPlatformDto; import greencity.dto.notification.NotificationShortDto; @@ -1643,6 +1645,74 @@ public static Address getAddress() { .build(); } + public static Address getAddress(long id) { + return Address.builder() + .id(id) + .region("Вінницька") + .city("Вінниця") + .street("Street") + .district("Distinct") + .houseNumber("25") + .houseCorpus("2") + .entranceNumber("7a") + .addressComment("Address Comment") + .actual(false) + .addressStatus(AddressStatus.NEW) + .coordinates(Coordinates.builder() + .latitude(50.4459068) + .longitude(30.4477005) + .build()) + .regionEn("RegionEng") + .cityEn("CityEng") + .streetEn("StreetEng") + .districtEn("DistinctEng") + .build(); + } + + public static LocationDto getLocationApiDto() { + return LocationDto.builder() + .locationNameMap(Map.of("name", "Вінниця", "name_en", "Vinnytsa")) + .build(); + } + + public static List getLocationApiDtoList() { + LocationDto locationDto1 = LocationDto.builder() + .locationNameMap(Map.of("name", "Вінниця", "name_en", "Vinnytsa")) + .build(); + return Arrays.asList(locationDto1); + } + + public static DistrictDto getDistrictDto() { + return DistrictDto.builder() + .nameUa("Вінниця") + .nameEn("Vinnytsa") + .build(); + } + + public static AddressDto getAddressDto(long id) { + return AddressDto.builder() + .id(id) + .region("Вінницька") + .city("Вінниця") + .street("Street") + .district("Distinct") + .houseNumber("25") + .houseCorpus("2") + .entranceNumber("7a") + .addressComment("Address Comment") + .actual(false) + .coordinates(Coordinates.builder() + .latitude(50.4459068) + .longitude(30.4477005) + .build()) + .regionEn("RegionEng") + .cityEn("CityEng") + .streetEn("StreetEng") + .districtEn("DistinctEng") + .addressRegionDistrictList(Arrays.asList(getDistrictDto())) + .build(); + } + public static OrderAddress getOrderAddress() { return OrderAddress.builder() .region("Region") diff --git a/service/src/test/java/greencity/mapping/location/AddressToAddressDtoMapperTest.java b/service/src/test/java/greencity/mapping/location/AddressToAddressDtoMapperTest.java new file mode 100644 index 000000000..7e2e49be7 --- /dev/null +++ b/service/src/test/java/greencity/mapping/location/AddressToAddressDtoMapperTest.java @@ -0,0 +1,45 @@ +package greencity.mapping.location; + +import greencity.ModelUtils; +import greencity.dto.address.AddressDto; +import greencity.dto.location.api.LocationDto; +import greencity.mapping.user.AddressToAddressDtoMapper; +import greencity.service.locations.LocationApiService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.web.client.RestTemplate; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class AddressToAddressDtoMapperTest { + + @Mock + private LocationApiService locationApiService; + + @InjectMocks + private AddressToAddressDtoMapper addressToAddressDtoMapper; + + @Test + void convert() { + MockitoAnnotations.initMocks(this); + AddressDto expected = ModelUtils.getAddressDto(1L); + when(locationApiService.getAllDistrictsInCityByNames(anyString(), anyString())) + .thenReturn(ModelUtils.getLocationApiDtoList()); + AddressDto actual = addressToAddressDtoMapper.convert(ModelUtils.getAddress(1L)); + assertEquals(expected.getAddressRegionDistrictList().size(), actual.getAddressRegionDistrictList().size()); + } +} diff --git a/service/src/test/java/greencity/mapping/location/LocationToDistrictMapperTest.java b/service/src/test/java/greencity/mapping/location/LocationToDistrictMapperTest.java new file mode 100644 index 000000000..dfbc58d3a --- /dev/null +++ b/service/src/test/java/greencity/mapping/location/LocationToDistrictMapperTest.java @@ -0,0 +1,26 @@ +package greencity.mapping.location; + +import greencity.ModelUtils; +import greencity.dto.address.AddressDto; +import greencity.dto.location.api.DistrictDto; +import greencity.mapping.location.api.LocationToDistrictDtoMapper; +import greencity.mapping.user.AddressToAddressDtoMapper; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@ExtendWith(MockitoExtension.class) +class LocationToDistrictMapperTest { + @InjectMocks + private LocationToDistrictDtoMapper locationToDistrictDtoMapper; + + @Test + void convert() { + DistrictDto expected = ModelUtils.getDistrictDto(); + DistrictDto actual = locationToDistrictDtoMapper.convert(ModelUtils.getLocationApiDto()); + assertEquals(expected, actual); + } +} \ No newline at end of file diff --git a/service/src/test/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapperTest.java b/service/src/test/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapperTest.java index b4b9fe3b9..a983d7d7e 100644 --- a/service/src/test/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapperTest.java +++ b/service/src/test/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapperTest.java @@ -1,23 +1,38 @@ package greencity.mapping.user; import greencity.ModelUtils; +import greencity.dto.address.AddressDto; import greencity.dto.user.UserProfileUpdateDto; import greencity.entity.telegram.TelegramBot; import greencity.entity.user.User; import greencity.entity.viber.ViberBot; +import greencity.service.locations.LocationApiService; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.mockito.junit.jupiter.MockitoExtension; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.when; + @ExtendWith(MockitoExtension.class) class UserToUserProfileUpdateDtoMapperTest { @InjectMocks private UserToUserProfileUpdateDtoMapper mapper; + @Mock + private LocationApiService locationApiService; @Test void convert() { + + MockitoAnnotations.initMocks(this); + AddressDto expected = ModelUtils.getAddressDto(1L); + when(locationApiService.getAllDistrictsInCityByNames(anyString(), anyString())) + .thenReturn(ModelUtils.getLocationApiDtoList()); UserProfileUpdateDto userProfileUpdateDto = ModelUtils.updateUserProfileDto(); User user = ModelUtils.getUserWithBotNotifyTrue(); UserProfileUpdateDto converted = mapper.convert(user); diff --git a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java index 9b899004f..ffa0c9f08 100644 --- a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java @@ -17,6 +17,7 @@ import greencity.dto.customer.UbsCustomersDtoUpdate; import greencity.dto.courier.CourierDto; import greencity.dto.employee.UserEmployeeAuthorityDto; +import greencity.dto.location.api.DistrictDto; import greencity.dto.location.api.LocationDto; import greencity.dto.order.EventDto; import greencity.dto.order.FondyOrderResponse; @@ -88,24 +89,36 @@ import greencity.repository.UserRepository; import greencity.repository.ViberBotRepository; import greencity.service.google.GoogleApiService; +import greencity.service.locations.LocationApiService; import greencity.util.Bot; import greencity.util.EncryptionUtil; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.mockito.junit.jupiter.MockitoExtension; import org.modelmapper.ModelMapper; +import org.springframework.core.ParameterizedTypeReference; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; + import javax.persistence.EntityNotFoundException; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; +import java.net.URI; import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; @@ -138,22 +151,10 @@ import static greencity.constant.ErrorMessage.TARIFF_OR_LOCATION_IS_DEACTIVATED; import static greencity.constant.ErrorMessage.USER_WITH_CURRENT_UUID_DOES_NOT_EXIST; import static org.junit.Assert.assertTrue; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.lenient; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.anyString; -import static org.mockito.Mockito.eq; -import static org.mockito.Mockito.anyList; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.*; @ExtendWith({MockitoExtension.class}) class UBSClientServiceImplTest { @@ -236,9 +237,30 @@ class UBSClientServiceImplTest { private ViberBotRepository viberBotRepository; @Mock private UBSManagementService ubsManagementService; - @Mock + @InjectMocks private UBSClientServiceImpl ubsClientService; + @Mock + private LocationApiService locationApiService; + + @Test + void testGetAllDistricts() { + + List locationDtos; + List districtDtos; + locationDtos = Arrays.asList(LocationDto.builder().build(), LocationDto.builder().build()); + districtDtos = Arrays.asList(DistrictDto.builder().build(), DistrictDto.builder().build()); + + when(locationApiService.getAllDistrictsInCityByNames(anyString(), anyString())).thenReturn(locationDtos); + when(modelMapper.map(any(LocationDto.class), eq(DistrictDto.class))).thenAnswer(i -> new DistrictDto()); + + List results = ubsClientService.getAllDistricts("region", "city"); + + assertEquals(districtDtos.size(), results.size()); + verify(locationApiService, times(1)).getAllDistrictsInCityByNames(anyString(), anyString()); + verify(modelMapper, times(locationDtos.size())).map(any(LocationDto.class), eq(DistrictDto.class)); + } + @Test @Transactional void testValidatePayment() { diff --git a/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java index 0b970df6b..c538ea98a 100644 --- a/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java @@ -8,6 +8,7 @@ import greencity.dto.courier.GetReceivingStationDto; import greencity.dto.employee.EmployeeWithTariffsIdDto; import greencity.dto.employee.GetEmployeeDto; +import greencity.dto.location.api.DistrictDto; import greencity.dto.location.api.LocationDto; import greencity.dto.position.AddingPositionDto; import greencity.dto.position.PositionDto; @@ -28,17 +29,23 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.mockito.junit.jupiter.MockitoExtension; import org.modelmapper.ModelMapper; import org.springframework.mock.web.MockMultipartFile; + import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.ArrayList; import java.util.Set; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + import static greencity.ModelUtils.*; -import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -73,6 +80,8 @@ class UBSManagementEmployeeServiceImplTest { private EmployeeCriteriaRepository employeeCriteriaRepository; @Mock private LocationApiService locationApiService; + @Mock + private UBSClientServiceImpl ubsClientService; @Test void saveEmployeeTest() { @@ -442,27 +451,4 @@ void getTariffsForEmployeeTest() { verify(tariffsInfoRepository).findAll(); } - @Test - void getAllDistrictsForRegionAndCityTest() { - String region = "Львівська"; - String city = "Львів"; - Map nameMap = new HashMap<>(); - nameMap.put("name", "Львів"); - nameMap.put("nameEn", "Lviv"); - List mockLocationDtoList = new ArrayList<>(); - LocationDto mockLocationDto = LocationDto.builder() - .id("UA46060250010015970") - .parentId("UA46060250000025047") - .locationNameMap(nameMap) - .build(); - when(locationApiService.getAllDistrictsInCityByNames(region, city)).thenReturn(mockLocationDtoList); - - List locationDtoList = locationApiService.getAllDistrictsInCityByNames(region, city); - - assertNotNull(locationDtoList); - assertEquals(mockLocationDtoList, locationDtoList); - - verify(locationApiService, times(1)).getAllDistrictsInCityByNames(region, city); - } - } diff --git a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java index cdfa9b4ad..33cd2fa91 100644 --- a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java @@ -68,6 +68,7 @@ import greencity.repository.ServiceRepository; import greencity.repository.TariffsInfoRepository; import greencity.repository.UserRepository; +import greencity.service.locations.LocationApiService; import greencity.service.notification.NotificationServiceImpl; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -261,6 +262,9 @@ class UBSManagementServiceImplTest { @Mock TariffsInfoRepository tariffsInfoRepository; + @Mock + private LocationApiService locationApiService; + @Mock RefundRepository refundRepository; From 614673e2536b1cb6a052a76c05f5ffade3c1555c Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Tue, 11 Jul 2023 14:47:57 +0300 Subject: [PATCH 23/80] [UBS user] Fix bug location (#1178) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added remover for word область * Added remover for word область and region * Removed code smell --- .../service/locations/LocationApiService.java | 9 +++++- .../locations/LocationApiServiceTest.java | 30 +++++++++---------- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/service/src/main/java/greencity/service/locations/LocationApiService.java b/service/src/main/java/greencity/service/locations/LocationApiService.java index 74ec5b7ac..eb823e52c 100644 --- a/service/src/main/java/greencity/service/locations/LocationApiService.java +++ b/service/src/main/java/greencity/service/locations/LocationApiService.java @@ -70,6 +70,7 @@ public LocationApiService(RestTemplate restTemplate) { */ public List getAllDistrictsInCityByNames(String regionName, String cityName) { checkIfNotNull(regionName, cityName); + regionName = removeLastWord(regionName); if (cityName.equals(KYIV.getLocationNameMap().get(NAME)) || cityName.equals(KYIV.getLocationNameMap().get(NAME_EN))) { return getAllDistrictsInCityByCityID(KYIV.getId()); @@ -257,6 +258,12 @@ private LocationDto getLocationDataByCode(int level, String code) { return resultFromUrl.get(0); } + private static String removeLastWord(String sentence) { + String withoutSpaces = sentence.replace(" ", ""); + String withoutRegion = withoutSpaces.replaceAll("(?iu)region", ""); + return withoutRegion.replaceAll("(?iu)область", ""); + } + /** * Fetches a list of location data by level. * @@ -268,7 +275,7 @@ private List getLocationDataByLevel(int level) { return getResultFromUrl(builder.build().encode().toUri()); } - private boolean checkIfNotNull(String... names) { + private static boolean checkIfNotNull(String... names) { if (Arrays.stream(names).anyMatch(StringUtils::isBlank)) { throw new IllegalArgumentException(ErrorMessage.VALUE_CAN_NOT_BE_NULL_OR_EMPTY); } diff --git a/service/src/test/java/greencity/service/locations/LocationApiServiceTest.java b/service/src/test/java/greencity/service/locations/LocationApiServiceTest.java index 34cdbfb62..298cda160 100644 --- a/service/src/test/java/greencity/service/locations/LocationApiServiceTest.java +++ b/service/src/test/java/greencity/service/locations/LocationApiServiceTest.java @@ -182,7 +182,7 @@ void testGetDisctrictByName_whenNameEn() { UriComponentsBuilder lvivskaBuilder = buildName("Lvivska", LocationDivision.REGION.getLevelId()); respond(lvivBuilder, new ArrayList<>()); respond(lvivskaBuilder, new ArrayList<>()); - List districts = locationApiService.getAllDistrictsInCityByNames("Lvivska", "Lviv"); + List districts = locationApiService.getAllDistrictsInCityByNames("Lvivska область", "Lviv"); assertEquals(2, districts.size()); assertLocationDto(districts.get(0), "UA46060250010121390", "UA46060250010015970", "Галицький", "Halytskyi"); assertLocationDto(districts.get(1), "UA46060250010259421", "UA46060250010015970", "Залізничний", @@ -192,7 +192,7 @@ void testGetDisctrictByName_whenNameEn() { @Test void testGetAllDistrictsInCityByNames_whenKyiv() { initKyiv(); - List districts = locationApiService.getAllDistrictsInCityByNames("Київська", "Київ"); + List districts = locationApiService.getAllDistrictsInCityByNames("Київська область", "Київ"); assertEquals(2, districts.size()); assertLocationDto(districts.get(0), "UA80000000000126643", "UA80000000000093317", "Голосіївський", "Holosiivskyi"); @@ -203,7 +203,7 @@ void testGetAllDistrictsInCityByNames_whenKyiv() { @Test void testGetAllDistrictsInCityByNames_whenKyivEn() { initKyiv(); - List districts = locationApiService.getAllDistrictsInCityByNames("Київська", "Kyiv"); + List districts = locationApiService.getAllDistrictsInCityByNames("Київська область", "Kyiv"); assertEquals(2, districts.size()); assertLocationDto(districts.get(0), "UA80000000000126643", "UA80000000000093317", "Голосіївський", "Holosiivskyi"); @@ -215,14 +215,14 @@ void testGetAllDistrictsInCityByNames_whenKyivEn() { void testGetAllDistrictsInCityByNames_whenCityNotExist() { initLviv(); assertThrows(NotFoundException.class, () -> { - locationApiService.getAllDistrictsInCityByNames("Вінницька", "Львів"); + locationApiService.getAllDistrictsInCityByNames("Вінницька область", "Львів"); }); } @Test void testGetAllDistrictsInCityByNames() { initLviv(); - List districts = locationApiService.getAllDistrictsInCityByNames("Львівська", "Львів"); + List districts = locationApiService.getAllDistrictsInCityByNames("Львівська область", "Львів"); assertEquals(2, districts.size()); assertLocationDto(districts.get(0), "UA46060250010121390", "UA46060250010015970", "Галицький", "Halytskyi"); assertLocationDto(districts.get(1), "UA46060250010259421", "UA46060250010015970", "Залізничний", @@ -233,7 +233,7 @@ void testGetAllDistrictsInCityByNames() { @Test void testGetAllDistrictsInCityByNames_whenCityNotFound() { assertThrows(NotFoundException.class, () -> { - locationApiService.getAllDistrictsInCityByNames("Львівська", "UNREAL"); + locationApiService.getAllDistrictsInCityByNames("Львівська область", "UNREAL"); }); } @@ -283,7 +283,7 @@ void testGetAllDistrictsInCityByNames_whenNoDistricts() { respond(level4BuilderVillage, Arrays.asList(kulykivResult, vidnivResult)); respond(level4BuilderParentLvivCity, Arrays.asList(kulykivResult, vidnivResult)); respond(level5BuilderVillage, new ArrayList<>()); - List allDistricts = locationApiService.getAllDistrictsInCityByNames("Львівська", "Віднів"); + List allDistricts = locationApiService.getAllDistrictsInCityByNames("Львівська область", "Віднів"); assertNotNull(allDistricts); assertFalse(allDistricts.isEmpty()); assertEquals(1, allDistricts.size()); @@ -293,17 +293,17 @@ void testGetAllDistrictsInCityByNames_whenNoDistricts() { @Test void testGetAllDistrictsInCityByNames_whenNameEn() { initLviv(); - List result = locationApiService.getAllDistrictsInCityByNames("Lvivska", "Львів"); + List result = locationApiService.getAllDistrictsInCityByNames("Lvivska область", "Львів"); assertEquals(2, result.size()); } @Test void testGetGetAllDistrictsInCityByNames_whenCityValueNulOrEmpty() { assertThrows(IllegalArgumentException.class, () -> { - locationApiService.getAllDistrictsInCityByNames("Lvivska", null); + locationApiService.getAllDistrictsInCityByNames("Lvivska область", null); }); assertThrows(IllegalArgumentException.class, () -> { - locationApiService.getAllDistrictsInCityByNames("Lvivska", ""); + locationApiService.getAllDistrictsInCityByNames("Lvivska область", ""); }); } @@ -331,7 +331,7 @@ void testGetGetAllDistrictsInCityByNames_whenValuesNullOrEmpty() { void testGetGetAllDistrictsInCityByNames_whenResultEmpty() { initLviv(); assertThrows(NotFoundException.class, () -> { - locationApiService.getAllDistrictsInCityByNames("Львівська", "Тест"); + locationApiService.getAllDistrictsInCityByNames("Львівська область", "Тест"); }); } @@ -367,7 +367,7 @@ void testGetGetAllDistrictsInCityByNames_noCities() { respond(builder2, Arrays.asList(nizhynskyiResult)); assertThrows(NotFoundException.class, () -> { - locationApiService.getAllDistrictsInCityByNames("Миколаївська", "Миколаїв"); + locationApiService.getAllDistrictsInCityByNames("Миколаївська область", "Миколаїв"); }); } @@ -405,7 +405,7 @@ void testGetGetAllDistrictsInCityByNames_noCitiesEmptyList() { respond(builder4_2, new ArrayList<>()); assertThrows(NotFoundException.class, () -> { - locationApiService.getAllDistrictsInCityByNames("Миколаївська", "Миколаїв"); + locationApiService.getAllDistrictsInCityByNames("Миколаївська область", "Миколаїв"); }); } @@ -446,7 +446,7 @@ void testGetCityByNameFromRegionSide_ResultFromUrlEmpty() { respond(builder4_2, Arrays.asList(mykolaiv2Result)); assertThrows(NotFoundException.class, () -> { - locationApiService.getAllDistrictsInCityByNames("Миколаївська", "Миколаїв"); + locationApiService.getAllDistrictsInCityByNames("Миколаївська область", "Миколаїв"); }); } @@ -490,7 +490,7 @@ void testGetCityByNameFromRegionSide_RegionListEmpty() { respond(builder4_2, Arrays.asList(mykolaiv2Result)); assertThrows(NotFoundException.class, () -> { - locationApiService.getAllDistrictsInCityByNames("Миколаївська", "Миколаїв"); + locationApiService.getAllDistrictsInCityByNames("Миколаївська область", "Миколаїв"); }); } From dbb3464751260b6f50165357f895d2b869003c59 Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Wed, 12 Jul 2023 13:31:14 +0300 Subject: [PATCH 24/80] [UBS user] Fixed bugs with location (#1179) * Fixed bug with default address * Added new method and changed tests --- .../java/greencity/mapping/user/AddressDtoMapper.java | 2 +- .../mapping/user/AddressToAddressDtoMapper.java | 2 +- .../service/locations/LocationApiService.java | 11 +++++++++-- .../service/locations/LocationApiServiceTest.java | 7 ++++--- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/service/src/main/java/greencity/mapping/user/AddressDtoMapper.java b/service/src/main/java/greencity/mapping/user/AddressDtoMapper.java index b2ecfc094..9f4cd99de 100644 --- a/service/src/main/java/greencity/mapping/user/AddressDtoMapper.java +++ b/service/src/main/java/greencity/mapping/user/AddressDtoMapper.java @@ -30,7 +30,7 @@ protected Address convert(AddressDto addressDto) { .latitude(addressDto.getCoordinates().getLatitude()) .longitude(addressDto.getCoordinates().getLongitude()) .build()) - .actual(false) + .actual(addressDto.getActual()) .build(); } } diff --git a/service/src/main/java/greencity/mapping/user/AddressToAddressDtoMapper.java b/service/src/main/java/greencity/mapping/user/AddressToAddressDtoMapper.java index 5a8854b66..ae84ff2b3 100644 --- a/service/src/main/java/greencity/mapping/user/AddressToAddressDtoMapper.java +++ b/service/src/main/java/greencity/mapping/user/AddressToAddressDtoMapper.java @@ -52,7 +52,7 @@ public AddressDto convert(Address address) { .longitude(address.getCoordinates().getLongitude()) .build()) .addressRegionDistrictList(getAllDistricts((address.getRegion()), address.getCity())) - .actual(false) + .actual(address.getActual()) .build(); } diff --git a/service/src/main/java/greencity/service/locations/LocationApiService.java b/service/src/main/java/greencity/service/locations/LocationApiService.java index eb823e52c..e21bef7e2 100644 --- a/service/src/main/java/greencity/service/locations/LocationApiService.java +++ b/service/src/main/java/greencity/service/locations/LocationApiService.java @@ -70,7 +70,8 @@ public LocationApiService(RestTemplate restTemplate) { */ public List getAllDistrictsInCityByNames(String regionName, String cityName) { checkIfNotNull(regionName, cityName); - regionName = removeLastWord(regionName); + regionName = removeWordRegion(regionName); + cityName = removeWordCity(cityName); if (cityName.equals(KYIV.getLocationNameMap().get(NAME)) || cityName.equals(KYIV.getLocationNameMap().get(NAME_EN))) { return getAllDistrictsInCityByCityID(KYIV.getId()); @@ -258,12 +259,18 @@ private LocationDto getLocationDataByCode(int level, String code) { return resultFromUrl.get(0); } - private static String removeLastWord(String sentence) { + private static String removeWordRegion(String sentence) { String withoutSpaces = sentence.replace(" ", ""); String withoutRegion = withoutSpaces.replaceAll("(?iu)region", ""); return withoutRegion.replaceAll("(?iu)область", ""); } + private static String removeWordCity(String sentence) { + String withoutSpaces = sentence.replace(" ", ""); + String withoutRegion = withoutSpaces.replaceAll("(?iu)city", ""); + return withoutRegion.replaceAll("(?iu)місто", ""); + } + /** * Fetches a list of location data by level. * diff --git a/service/src/test/java/greencity/service/locations/LocationApiServiceTest.java b/service/src/test/java/greencity/service/locations/LocationApiServiceTest.java index 298cda160..828d35331 100644 --- a/service/src/test/java/greencity/service/locations/LocationApiServiceTest.java +++ b/service/src/test/java/greencity/service/locations/LocationApiServiceTest.java @@ -203,7 +203,7 @@ void testGetAllDistrictsInCityByNames_whenKyiv() { @Test void testGetAllDistrictsInCityByNames_whenKyivEn() { initKyiv(); - List districts = locationApiService.getAllDistrictsInCityByNames("Київська область", "Kyiv"); + List districts = locationApiService.getAllDistrictsInCityByNames("Київська область", "city Kyiv"); assertEquals(2, districts.size()); assertLocationDto(districts.get(0), "UA80000000000126643", "UA80000000000093317", "Голосіївський", "Holosiivskyi"); @@ -222,7 +222,8 @@ void testGetAllDistrictsInCityByNames_whenCityNotExist() { @Test void testGetAllDistrictsInCityByNames() { initLviv(); - List districts = locationApiService.getAllDistrictsInCityByNames("Львівська область", "Львів"); + List districts = + locationApiService.getAllDistrictsInCityByNames("Львівська область", "місто Львів"); assertEquals(2, districts.size()); assertLocationDto(districts.get(0), "UA46060250010121390", "UA46060250010015970", "Галицький", "Halytskyi"); assertLocationDto(districts.get(1), "UA46060250010259421", "UA46060250010015970", "Залізничний", @@ -313,7 +314,7 @@ void testGetGetAllDistrictsInCityByNames_whenRegionValueNullOrEmpty() { locationApiService.getAllDistrictsInCityByNames(null, "Lviv"); }); assertThrows(IllegalArgumentException.class, () -> { - locationApiService.getAllDistrictsInCityByNames("", "Lviv"); + locationApiService.getAllDistrictsInCityByNames("", "city Lviv"); }); } From 63262f92badaf0a8fb4d2b61c77c8bde5128640e Mon Sep 17 00:00:00 2001 From: Anton Bondar <53192419+ABbondar@users.noreply.github.com> Date: Wed, 12 Jul 2023 15:23:52 +0300 Subject: [PATCH 25/80] delete unused endpoint (#1180) --- .../controller/SuperAdminController.java | 20 ------------- core/src/test/java/greencity/ModelUtils.java | 30 +++++++++---------- .../controller/SuperAdminControllerTest.java | 13 -------- .../repository/LocationRepository.java | 11 ------- .../greencity/service/SuperAdminService.java | 20 +++++-------- .../service/ubs/SuperAdminServiceImpl.java | 21 +------------ .../ubs/SuperAdminServiceImplTest.java | 13 -------- 7 files changed, 24 insertions(+), 104 deletions(-) diff --git a/core/src/main/java/greencity/controller/SuperAdminController.java b/core/src/main/java/greencity/controller/SuperAdminController.java index 95543e9a1..eacd8743b 100644 --- a/core/src/main/java/greencity/controller/SuperAdminController.java +++ b/core/src/main/java/greencity/controller/SuperAdminController.java @@ -10,7 +10,6 @@ import greencity.dto.courier.CreateCourierDto; import greencity.dto.courier.CreateCourierTranslationDto; import greencity.dto.courier.ReceivingStationDto; -import greencity.dto.location.EditLocationDto; import greencity.dto.location.LocationCreateDto; import greencity.dto.location.LocationInfoDto; import greencity.dto.service.GetServiceDto; @@ -697,25 +696,6 @@ public ResponseEntity switchTariffStatus( return ResponseEntity.status(HttpStatus.OK).build(); } - /** - * Controller for editing Locations. - * - * @author Yurii Fedorko - */ - @ApiOperation(value = "Edit Locations") - @ApiResponses(value = { - @ApiResponse(code = 200, message = HttpStatuses.OK), - @ApiResponse(code = 400, message = HttpStatuses.BAD_REQUEST), - @ApiResponse(code = 401, message = HttpStatuses.UNAUTHORIZED), - @ApiResponse(code = 403, message = HttpStatuses.FORBIDDEN) - }) - @PreAuthorize("@preAuthorizer.hasAuthority('EDIT_LOCATION_NAME', authentication)") - @PostMapping("/locations/edit") - public ResponseEntity editLocations(@Valid @RequestBody List editLocationDtoList) { - superAdminService.editLocations(editLocationDtoList); - return ResponseEntity.status(HttpStatus.OK).build(); - } - /** * Controller for activation or deactivation Locations in Tariff depends * on @RequestParam. diff --git a/core/src/test/java/greencity/ModelUtils.java b/core/src/test/java/greencity/ModelUtils.java index 65baa095f..29a6f19d3 100644 --- a/core/src/test/java/greencity/ModelUtils.java +++ b/core/src/test/java/greencity/ModelUtils.java @@ -14,15 +14,14 @@ import greencity.dto.employee.EmployeeNameDto; import greencity.dto.employee.UserEmployeeAuthorityDto; import greencity.dto.location.AddLocationTranslationDto; -import greencity.dto.location.EditLocationDto; import greencity.dto.location.LocationCreateDto; import greencity.dto.location.RegionTranslationDto; import greencity.dto.notification.NotificationDto; -import greencity.dto.notification.NotificationTemplateWithPlatformsDto; -import greencity.dto.notification.NotificationTemplateWithPlatformsUpdateDto; -import greencity.dto.notification.NotificationTemplateMainInfoDto; import greencity.dto.notification.NotificationPlatformDto; import greencity.dto.notification.NotificationTemplateDto; +import greencity.dto.notification.NotificationTemplateMainInfoDto; +import greencity.dto.notification.NotificationTemplateWithPlatformsDto; +import greencity.dto.notification.NotificationTemplateWithPlatformsUpdateDto; import greencity.dto.order.AdminCommentDto; import greencity.dto.order.ChangeOrderResponseDTO; import greencity.dto.order.EcoNumberDto; @@ -38,27 +37,32 @@ import greencity.dto.payment.ManualPaymentRequestDto; import greencity.dto.payment.PaymentResponseDto; import greencity.dto.position.PositionDto; -import greencity.dto.service.ServiceDto; import greencity.dto.service.GetServiceDto; import greencity.dto.service.GetTariffServiceDto; +import greencity.dto.service.ServiceDto; import greencity.dto.service.TariffServiceDto; import greencity.dto.tariff.EditTariffDto; import greencity.dto.tariff.GetTariffsInfoDto; import greencity.dto.tariff.SetTariffLimitsDto; -import greencity.dto.user.*; +import greencity.dto.user.AddBonusesToUserDto; +import greencity.dto.user.AddingPointsToUserDto; +import greencity.dto.user.PersonalDataDto; +import greencity.dto.user.UserInfoDto; +import greencity.dto.user.UserProfileCreateDto; +import greencity.dto.user.UserProfileDto; import greencity.dto.violation.ViolationDetailInfoDto; import greencity.entity.coords.Coordinates; import greencity.entity.user.ubs.Address; -import greencity.enums.OrderStatus; -import greencity.enums.PaymentStatus; import greencity.enums.AddressStatus; -import greencity.enums.NotificationType; +import greencity.enums.CancellationReason; +import greencity.enums.CourierLimit; import greencity.enums.NotificationReceiverType; import greencity.enums.NotificationStatus; import greencity.enums.NotificationTime; import greencity.enums.NotificationTrigger; -import greencity.enums.CancellationReason; -import greencity.enums.CourierLimit; +import greencity.enums.NotificationType; +import greencity.enums.OrderStatus; +import greencity.enums.PaymentStatus; import org.springframework.http.HttpStatus; import java.security.Principal; @@ -589,8 +593,4 @@ public static UserProfileCreateDto getUserProfileCreateDto() { .uuid("f81d4fae-7dec-11d0-a765-00a0c91e6bf6") .build(); } - - public static EditLocationDto getEditLocationDto() { - return new EditLocationDto().setLocationId(1L).setNameEn("name").setNameUa("назва"); - } } diff --git a/core/src/test/java/greencity/controller/SuperAdminControllerTest.java b/core/src/test/java/greencity/controller/SuperAdminControllerTest.java index 205fe9042..d2fda2ab6 100644 --- a/core/src/test/java/greencity/controller/SuperAdminControllerTest.java +++ b/core/src/test/java/greencity/controller/SuperAdminControllerTest.java @@ -53,7 +53,6 @@ import java.util.Optional; import java.util.UUID; -import static greencity.ModelUtils.getEditLocationDto; import static greencity.ModelUtils.getReceivingStationDto; import static greencity.ModelUtils.getUuid; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -989,18 +988,6 @@ void switchTariffStatusThrowBadRequestException() { verify(superAdminService).switchTariffStatus(1L, "Active"); } - @Test - void editLocationsTest() throws Exception { - var dto = getEditLocationDto(); - ObjectMapper objectMapper = new ObjectMapper(); - mockMvc.perform(post(ubsLink + "/locations/edit") - .content(objectMapper.writeValueAsString(List.of(dto))) - .contentType(MediaType.APPLICATION_JSON) - .principal(principal)) - .andExpect(status().isOk()); - verify(superAdminService).editLocations(List.of(dto)); - } - @Test void switchActivationStatusByChosenParamsBadRequest() throws Exception { mockMvc.perform(post(ubsLink + "/deactivate")) diff --git a/dao/src/main/java/greencity/repository/LocationRepository.java b/dao/src/main/java/greencity/repository/LocationRepository.java index 9b5b73adf..26bd232a1 100644 --- a/dao/src/main/java/greencity/repository/LocationRepository.java +++ b/dao/src/main/java/greencity/repository/LocationRepository.java @@ -1,7 +1,6 @@ package greencity.repository; import greencity.entity.user.Location; -import greencity.entity.user.Region; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -82,14 +81,4 @@ Optional findLocationByIdAndRegionId(@Param("locationId") Long locatio value = "SELECT * from locations " + "WHERE region_id = :regionId") List findLocationsByRegionId(@Param("regionId") Long regionId); - - /** - * Method for finding out if the location already exists in the specified - * region. - * - * @param nameUk Ukrainian translation. - * @param nameEn English translation. - * @return {@code true} if exists, {@code else} otherwise. - */ - boolean existsByNameUkAndNameEnAndRegion(String nameUk, String nameEn, Region region); } diff --git a/service-api/src/main/java/greencity/service/SuperAdminService.java b/service-api/src/main/java/greencity/service/SuperAdminService.java index 8535fa69c..bdd2acd40 100644 --- a/service-api/src/main/java/greencity/service/SuperAdminService.java +++ b/service-api/src/main/java/greencity/service/SuperAdminService.java @@ -7,14 +7,18 @@ import greencity.dto.courier.CourierUpdateDto; import greencity.dto.courier.CreateCourierDto; import greencity.dto.courier.ReceivingStationDto; -import greencity.dto.location.EditLocationDto; import greencity.dto.location.LocationCreateDto; import greencity.dto.location.LocationInfoDto; -import greencity.dto.service.TariffServiceDto; -import greencity.dto.service.ServiceDto; import greencity.dto.service.GetServiceDto; -import greencity.dto.tariff.*; import greencity.dto.service.GetTariffServiceDto; +import greencity.dto.service.ServiceDto; +import greencity.dto.service.TariffServiceDto; +import greencity.dto.tariff.AddNewTariffResponseDto; +import greencity.dto.tariff.ChangeTariffLocationStatusDto; +import greencity.dto.tariff.EditTariffDto; +import greencity.dto.tariff.GetTariffLimitsDto; +import greencity.dto.tariff.GetTariffsInfoDto; +import greencity.dto.tariff.SetTariffLimitsDto; import greencity.entity.order.Courier; import greencity.enums.LocationStatus; import greencity.filters.TariffsInfoFilterCriteria; @@ -268,14 +272,6 @@ public interface SuperAdminService { */ void switchTariffStatus(Long tariffId, String tariffStatus); - /** - * Method for editing Locations. - * - * @param editLocationDtoList - dto contains id of location wanted to be edited - * and changed naming - */ - void editLocations(List editLocationDtoList); - /** * Method for changing status of {@link greencity.entity.order.TariffLocation}. * diff --git a/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java b/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java index 3ae1c256c..9d623c99d 100644 --- a/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java @@ -11,7 +11,6 @@ import greencity.dto.courier.CreateCourierDto; import greencity.dto.courier.ReceivingStationDto; import greencity.dto.location.AddLocationTranslationDto; -import greencity.dto.location.EditLocationDto; import greencity.dto.location.LocationCreateDto; import greencity.dto.location.LocationInfoDto; import greencity.dto.service.TariffServiceDto; @@ -68,6 +67,7 @@ import java.math.RoundingMode; import java.time.LocalDate; import java.util.ArrayList; +import java.util.Collections; import java.util.Comparator; import java.util.HashSet; import java.util.List; @@ -75,7 +75,6 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; -import java.util.Collections; @org.springframework.stereotype.Service @Data @@ -793,24 +792,6 @@ private void checkIfTariffParamsAreValidForActivation(TariffsInfo tariffsInfo) { } } - @Override - public void editLocations(List editLocationDtoList) { - editLocationDtoList.forEach(this::editLocation); - } - - private void editLocation(EditLocationDto editLocationDto) { - Location location = tryToFindLocationById(editLocationDto.getLocationId()); - if (!locationExists(editLocationDto.getNameUa(), editLocationDto.getNameEn(), location.getRegion())) { - location.setNameUk(editLocationDto.getNameUa()); - location.setNameEn(editLocationDto.getNameEn()); - locationRepository.save(location); - } - } - - private boolean locationExists(String nameUk, String nameEn, Region region) { - return locationRepository.existsByNameUkAndNameEnAndRegion(nameUk, nameEn, region); - } - @Override @Transactional public void changeTariffLocationsStatus(Long tariffId, ChangeTariffLocationStatusDto dto, String param) { diff --git a/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java b/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java index facbb9060..49327a86e 100644 --- a/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java @@ -10,7 +10,6 @@ import greencity.dto.courier.CourierUpdateDto; import greencity.dto.courier.CreateCourierDto; import greencity.dto.courier.ReceivingStationDto; -import greencity.dto.location.EditLocationDto; import greencity.dto.location.LocationCreateDto; import greencity.dto.location.LocationInfoDto; import greencity.dto.service.GetServiceDto; @@ -1765,18 +1764,6 @@ void switchTariffStatusToActiveWithoutService() { verify(tariffsInfoRepository).save(tariffInfo); } - @Test - void editLocation() { - Location location = ModelUtils.getLocation(); - when(locationRepository.findById(anyLong())).thenReturn(Optional.of(location)); - EditLocationDto dto = new EditLocationDto(1L, "Lviv", "Львів"); - superAdminService.editLocations(List.of(dto)); - verify(locationRepository).save(location); - verify(locationRepository).findById(anyLong()); - verify(locationRepository).existsByNameUkAndNameEnAndRegion("Львів", "Lviv", location.getRegion()); - assertEquals(location.getNameEn(), dto.getNameEn()); - } - @Test void changeTariffLocationsStatusParamActivate() { TariffsInfo tariffsInfo = ModelUtils.getTariffInfo(); From 32ae1ef264d7b4b7de2d3503b619852dc59380a4 Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Thu, 13 Jul 2023 12:44:47 +0300 Subject: [PATCH 26/80] [UBS user] Fix controller (#1183) * Remove from AddressDto list of all districts in that adress * Fixed OrderWithAddressesResponseDto to return list with districts * changed in UserProfileDto field from AddressDto To AddressWIthDIstrcitsDto * deleted unused lines --- core/src/test/java/greencity/ModelUtils.java | 75 ++++++++++++++++++- .../controller/UserProfileControllerTest.java | 3 +- .../greencity/dto/address/AddressDto.java | 3 - .../dto/address/AddressWithDistrictsDto.java | 18 +++++ .../order/OrderWithAddressesResponseDto.java | 13 +++- .../greencity/dto/user/UserProfileDto.java | 4 +- ...dressToAddressWithDistrictsDtoMapper.java} | 15 ++-- .../UserToUserProfileUpdateDtoMapper.java | 21 ------ .../service/ubs/UBSClientServiceImpl.java | 9 ++- .../src/test/java/greencity/ModelUtils.java | 40 ++++++---- ...sToAddressWithDistrictsDtoMapperTest.java} | 22 ++---- .../LocationToDistrictMapperTest.java | 1 - .../UserToUserProfileUpdateDtoMapperTest.java | 10 --- .../service/ubs/UBSClientServiceImplTest.java | 65 +++++++++++----- 14 files changed, 196 insertions(+), 103 deletions(-) create mode 100644 service-api/src/main/java/greencity/dto/address/AddressWithDistrictsDto.java rename service/src/main/java/greencity/mapping/user/{AddressToAddressDtoMapper.java => AddressToAddressWithDistrictsDtoMapper.java} (81%) rename service/src/test/java/greencity/mapping/location/{AddressToAddressDtoMapperTest.java => AddressToAddressWithDistrictsDtoMapperTest.java} (62%) diff --git a/core/src/test/java/greencity/ModelUtils.java b/core/src/test/java/greencity/ModelUtils.java index 29a6f19d3..6a67c92a8 100644 --- a/core/src/test/java/greencity/ModelUtils.java +++ b/core/src/test/java/greencity/ModelUtils.java @@ -4,6 +4,7 @@ import greencity.dto.AddNewTariffDto; import greencity.dto.CreateAddressRequestDto; import greencity.dto.address.AddressDto; +import greencity.dto.address.AddressWithDistrictsDto; import greencity.dto.bag.BagDto; import greencity.dto.bag.BagLimitDto; import greencity.dto.courier.CourierDto; @@ -16,6 +17,7 @@ import greencity.dto.location.AddLocationTranslationDto; import greencity.dto.location.LocationCreateDto; import greencity.dto.location.RegionTranslationDto; +import greencity.dto.location.api.DistrictDto; import greencity.dto.notification.NotificationDto; import greencity.dto.notification.NotificationPlatformDto; import greencity.dto.notification.NotificationTemplateDto; @@ -74,6 +76,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.Arrays; import java.util.stream.Collectors; import static greencity.enums.ViolationLevel.MAJOR; @@ -144,7 +147,6 @@ public static List addressDto() { .region("Регіон") .cityEn("Lviv") .city("Львів") - .addressRegionDistrictList(new ArrayList<>()) .actual(false) .build()); list.add(AddressDto.builder().id(2L) @@ -160,9 +162,78 @@ public static List addressDto() { .region("Регіон") .city("Львів") .cityEn("Lviv") - .addressRegionDistrictList(new ArrayList<>()) + .actual(false) + .build()); + return list; + } + public static AddressWithDistrictsDto getAddressWithDistrictsDto(long id) { + return AddressWithDistrictsDto.builder().addressDto(AddressDto.builder() + .id(id) + .region("Вінницька") + .city("Вінниця") + .street("Street") + .district("Distinct") + .houseNumber("25") + .houseCorpus("2") + .entranceNumber("7a") + .addressComment("Address Comment") .actual(false) + .coordinates(Coordinates.builder() + .latitude(50.4459068) + .longitude(30.4477005) + .build()) + .regionEn("RegionEng") + .cityEn("CityEng") + .streetEn("StreetEng") + .districtEn("DistinctEng").build()) + .addressRegionDistrictList(Arrays.asList(getDistrictDto())) + .build(); + } + + public static DistrictDto getDistrictDto() { + return DistrictDto.builder() + .nameUa("Вінниця") + .nameEn("Vinnytsa") + .build(); + } + + public static List addressWithDistrictsDtoList() { + List list = new ArrayList<>(); + list.add(AddressWithDistrictsDto.builder().addressDto(AddressDto.builder() + .id(1L) + .entranceNumber("7a") + .houseCorpus("2") + .houseNumber("7") + .street("Городоцька") + .streetEn("Gorodotska") + .coordinates(Coordinates.builder().latitude(2.3).longitude(5.6).build()) + .district("Залізничний") + .districtEn("Zaliznuchnuy") + .regionEn("Region") + .region("Регіон") + .cityEn("Lviv") + .city("Львів") + .actual(false).build()) + .addressRegionDistrictList(new ArrayList<>()) + + .build()); + list.add(AddressWithDistrictsDto.builder().addressDto(AddressDto.builder() + .id(2L) + + .entranceNumber("9a") + .houseCorpus("2") + .houseNumber("7") + .street("Шевченка") + .streetEn("Shevchenka") + .coordinates(Coordinates.builder().latitude(3.3).longitude(6.6).build()) + .district("Залізничний") + .districtEn("Zaliznuchnuy") + .regionEn("Region") + .region("Регіон") + .city("Львів") + .cityEn("Lviv").actual(false).build()) + .addressRegionDistrictList(new ArrayList<>()) .build()); return list; } diff --git a/core/src/test/java/greencity/controller/UserProfileControllerTest.java b/core/src/test/java/greencity/controller/UserProfileControllerTest.java index 65c57f870..195183927 100644 --- a/core/src/test/java/greencity/controller/UserProfileControllerTest.java +++ b/core/src/test/java/greencity/controller/UserProfileControllerTest.java @@ -7,6 +7,7 @@ import greencity.constant.AppConstant; import greencity.converters.UserArgumentResolver; import greencity.dto.address.AddressDto; +import greencity.dto.address.AddressWithDistrictsDto; import greencity.dto.user.UserProfileDto; import greencity.exception.handler.CustomExceptionHandler; import greencity.service.ubs.UBSClientService; @@ -72,7 +73,7 @@ void setup() { @Test void saveUserDate() throws Exception { UserProfileDto userProfileDto = ModelUtils.userProfileDto(); - List addressDto = ModelUtils.addressDto(); + List addressDto = ModelUtils.userProfileDto().getAddressDto(); userProfileDto.setAddressDto(addressDto); ObjectMapper objectMapper = new ObjectMapper(); diff --git a/service-api/src/main/java/greencity/dto/address/AddressDto.java b/service-api/src/main/java/greencity/dto/address/AddressDto.java index 72863ca1c..ebe330935 100644 --- a/service-api/src/main/java/greencity/dto/address/AddressDto.java +++ b/service-api/src/main/java/greencity/dto/address/AddressDto.java @@ -1,6 +1,5 @@ package greencity.dto.address; -import greencity.dto.location.api.DistrictDto; import greencity.entity.coords.Coordinates; import lombok.AllArgsConstructor; import lombok.Builder; @@ -13,7 +12,6 @@ import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import java.io.Serializable; -import java.util.List; import static greencity.constant.ValidationConstant.CH_EN; import static greencity.constant.ValidationConstant.CH_NUM; @@ -70,5 +68,4 @@ public class AddressDto implements Serializable { private String districtEn; private String placeId; - private List addressRegionDistrictList; } \ No newline at end of file diff --git a/service-api/src/main/java/greencity/dto/address/AddressWithDistrictsDto.java b/service-api/src/main/java/greencity/dto/address/AddressWithDistrictsDto.java new file mode 100644 index 000000000..0af98b3ab --- /dev/null +++ b/service-api/src/main/java/greencity/dto/address/AddressWithDistrictsDto.java @@ -0,0 +1,18 @@ +package greencity.dto.address; + +import greencity.dto.location.api.DistrictDto; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import java.io.Serializable; +import java.util.List; + +@Builder +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AddressWithDistrictsDto implements Serializable { + private AddressDto addressDto; + private List addressRegionDistrictList; +} \ No newline at end of file diff --git a/service-api/src/main/java/greencity/dto/order/OrderWithAddressesResponseDto.java b/service-api/src/main/java/greencity/dto/order/OrderWithAddressesResponseDto.java index 6786d7008..c731ee863 100644 --- a/service-api/src/main/java/greencity/dto/order/OrderWithAddressesResponseDto.java +++ b/service-api/src/main/java/greencity/dto/order/OrderWithAddressesResponseDto.java @@ -1,8 +1,13 @@ package greencity.dto.order; -import greencity.dto.address.AddressDto; -import lombok.*; - +import greencity.dto.address.AddressWithDistrictsDto; +import lombok.Getter; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Setter; +import lombok.NoArgsConstructor; +import lombok.ToString; +import lombok.EqualsAndHashCode; import java.util.List; @Getter @@ -13,5 +18,5 @@ @EqualsAndHashCode @Builder public class OrderWithAddressesResponseDto { - private List addressList; + private List addressList; } diff --git a/service-api/src/main/java/greencity/dto/user/UserProfileDto.java b/service-api/src/main/java/greencity/dto/user/UserProfileDto.java index 47deba2c0..77f0f0727 100644 --- a/service-api/src/main/java/greencity/dto/user/UserProfileDto.java +++ b/service-api/src/main/java/greencity/dto/user/UserProfileDto.java @@ -1,7 +1,7 @@ package greencity.dto.user; import greencity.annotations.ValidPhoneNumber; -import greencity.dto.address.AddressDto; +import greencity.dto.address.AddressWithDistrictsDto; import greencity.util.Bot; import lombok.AllArgsConstructor; import lombok.Builder; @@ -40,7 +40,7 @@ public class UserProfileDto { @NotBlank @ValidPhoneNumber private String recipientPhone; - private List addressDto; + private List addressDto; private List botList; private Boolean hasPassword; @NonNull diff --git a/service/src/main/java/greencity/mapping/user/AddressToAddressDtoMapper.java b/service/src/main/java/greencity/mapping/user/AddressToAddressWithDistrictsDtoMapper.java similarity index 81% rename from service/src/main/java/greencity/mapping/user/AddressToAddressDtoMapper.java rename to service/src/main/java/greencity/mapping/user/AddressToAddressWithDistrictsDtoMapper.java index ae84ff2b3..385c8d89a 100644 --- a/service/src/main/java/greencity/mapping/user/AddressToAddressDtoMapper.java +++ b/service/src/main/java/greencity/mapping/user/AddressToAddressWithDistrictsDtoMapper.java @@ -1,6 +1,7 @@ package greencity.mapping.user; import greencity.dto.address.AddressDto; +import greencity.dto.address.AddressWithDistrictsDto; import greencity.dto.location.api.DistrictDto; import greencity.dto.location.api.LocationDto; import greencity.entity.coords.Coordinates; @@ -16,10 +17,10 @@ /** * Class that used by {@link ModelMapper} to map {@link Address} into - * {@link AddressDto}. + * {@link AddressWithDistrictsDto}. */ @Component -public class AddressToAddressDtoMapper extends AbstractConverter { +public class AddressToAddressWithDistrictsDtoMapper extends AbstractConverter { /** * Service for getting districts in city. */ @@ -27,13 +28,13 @@ public class AddressToAddressDtoMapper extends AbstractConverter { - /** - * Service for getting districts in city. - */ - @Autowired - private LocationApiService locationApiService; - /** * Method convert {@link User} to {@link UserProfileUpdateDto}. * @@ -65,17 +55,6 @@ private AddressDto createAddressDto(Address address) { .longitude(address.getCoordinates().getLongitude()) .build()) .actual(address.getActual()) - .addressRegionDistrictList(getAllDistricts((address.getRegion()), address.getCity())) .build(); } - - private List getAllDistricts(String region, String city) { - List locationDtos = locationApiService.getAllDistrictsInCityByNames(region, city); - return locationDtos.stream() - .map(locationDto -> DistrictDto.builder() - .nameUa(locationDto.getLocationNameMap().get("name")) - .nameEn(locationDto.getLocationNameMap().get("name_en")) - .build()) - .collect(Collectors.toList()); - } } diff --git a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java index 34d4a6cea..9a54a07ce 100644 --- a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java @@ -15,6 +15,7 @@ import greencity.dto.TariffsForLocationDto; import greencity.dto.address.AddressDto; import greencity.dto.address.AddressInfoDto; +import greencity.dto.address.AddressWithDistrictsDto; import greencity.dto.bag.BagDto; import greencity.dto.bag.BagForUserDto; import greencity.dto.bag.BagOrderDto; @@ -534,10 +535,10 @@ private void checkIfUserHaveEnoughPoints(Integer i1, Integer i2) { @Override public OrderWithAddressesResponseDto findAllAddressesForCurrentOrder(String uuid) { Long id = userRepository.findByUuid(uuid).getId(); - List addressDtoList = addressRepo.findAllNonDeletedAddressesByUserId(id) + List addressDtoList = addressRepo.findAllNonDeletedAddressesByUserId(id) .stream() .sorted(Comparator.comparing(Address::getId)) - .map(u -> modelMapper.map(u, AddressDto.class)) + .map(u -> modelMapper.map(u, AddressWithDistrictsDto.class)) .collect(toList()); return new OrderWithAddressesResponseDto(addressDtoList); } @@ -1310,9 +1311,9 @@ public UserProfileDto getProfileData(String uuid) { List
allAddress = addressRepo.findAllNonDeletedAddressesByUserId(user.getId()); UserProfileDto userProfileDto = modelMapper.map(user, UserProfileDto.class); List botList = getListOfBots(user.getUuid()); - List addressDto = + List addressDto = allAddress.stream() - .map(a -> modelMapper.map(a, AddressDto.class)) + .map(a -> modelMapper.map(a, AddressWithDistrictsDto.class)) .collect(toList()); userProfileDto.setAddressDto(addressDto); userProfileDto.setBotList(botList); diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index f30932f99..2d7a19017 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -15,6 +15,7 @@ import greencity.dto.TariffsForLocationDto; import greencity.dto.address.AddressDto; import greencity.dto.address.AddressInfoDto; +import greencity.dto.address.AddressWithDistrictsDto; import greencity.dto.bag.AdditionalBagInfoDto; import greencity.dto.bag.BagDto; import greencity.dto.bag.BagForUserDto; @@ -1709,6 +1710,29 @@ public static AddressDto getAddressDto(long id) { .cityEn("CityEng") .streetEn("StreetEng") .districtEn("DistinctEng") + .build(); + } + + public static AddressWithDistrictsDto getAddressWithDistrictsDto(long id) { + return AddressWithDistrictsDto.builder().addressDto(AddressDto.builder() + .id(id) + .region("Вінницька") + .city("Вінниця") + .street("Street") + .district("Distinct") + .houseNumber("25") + .houseCorpus("2") + .entranceNumber("7a") + .addressComment("Address Comment") + .actual(false) + .coordinates(Coordinates.builder() + .latitude(50.4459068) + .longitude(30.4477005) + .build()) + .regionEn("RegionEng") + .cityEn("CityEng") + .streetEn("StreetEng") + .districtEn("DistinctEng").build()) .addressRegionDistrictList(Arrays.asList(getDistrictDto())) .build(); } @@ -4303,21 +4327,7 @@ public static User getUserForCreate(AddressStatus addressStatus) { public static OrderWithAddressesResponseDto getAddressDtoResponse() { return OrderWithAddressesResponseDto.builder() - .addressList(List.of( - AddressDto.builder() - .id(1L) - .city("City") - .district("Distinct") - .entranceNumber("7a") - .houseCorpus("2") - .houseNumber("25") - .street("Street") - .coordinates(Coordinates.builder() - .latitude(50.4459068) - .longitude(30.4477005) - .build()) - .actual(false) - .build())) + .addressList(List.of(getAddressWithDistrictsDto(1L))) .build(); } diff --git a/service/src/test/java/greencity/mapping/location/AddressToAddressDtoMapperTest.java b/service/src/test/java/greencity/mapping/location/AddressToAddressWithDistrictsDtoMapperTest.java similarity index 62% rename from service/src/test/java/greencity/mapping/location/AddressToAddressDtoMapperTest.java rename to service/src/test/java/greencity/mapping/location/AddressToAddressWithDistrictsDtoMapperTest.java index 7e2e49be7..e07f139ab 100644 --- a/service/src/test/java/greencity/mapping/location/AddressToAddressDtoMapperTest.java +++ b/service/src/test/java/greencity/mapping/location/AddressToAddressWithDistrictsDtoMapperTest.java @@ -1,27 +1,17 @@ package greencity.mapping.location; import greencity.ModelUtils; -import greencity.dto.address.AddressDto; -import greencity.dto.location.api.LocationDto; -import greencity.mapping.user.AddressToAddressDtoMapper; +import greencity.dto.address.AddressWithDistrictsDto; +import greencity.mapping.user.AddressToAddressWithDistrictsDtoMapper; import greencity.service.locations.LocationApiService; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.web.client.RestTemplate; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) @@ -31,15 +21,17 @@ class AddressToAddressDtoMapperTest { private LocationApiService locationApiService; @InjectMocks - private AddressToAddressDtoMapper addressToAddressDtoMapper; + private AddressToAddressWithDistrictsDtoMapper addressToAddressWithDistrictsDtoMapper; @Test void convert() { MockitoAnnotations.initMocks(this); - AddressDto expected = ModelUtils.getAddressDto(1L); + AddressWithDistrictsDto expected = ModelUtils.getAddressWithDistrictsDto(1L); when(locationApiService.getAllDistrictsInCityByNames(anyString(), anyString())) .thenReturn(ModelUtils.getLocationApiDtoList()); - AddressDto actual = addressToAddressDtoMapper.convert(ModelUtils.getAddress(1L)); + AddressWithDistrictsDto actual = addressToAddressWithDistrictsDtoMapper.convert(ModelUtils.getAddress(1L)); assertEquals(expected.getAddressRegionDistrictList().size(), actual.getAddressRegionDistrictList().size()); + assertEquals(expected.getAddressRegionDistrictList().get(0), actual.getAddressRegionDistrictList().get(0)); + } } diff --git a/service/src/test/java/greencity/mapping/location/LocationToDistrictMapperTest.java b/service/src/test/java/greencity/mapping/location/LocationToDistrictMapperTest.java index dfbc58d3a..de56cfc80 100644 --- a/service/src/test/java/greencity/mapping/location/LocationToDistrictMapperTest.java +++ b/service/src/test/java/greencity/mapping/location/LocationToDistrictMapperTest.java @@ -4,7 +4,6 @@ import greencity.dto.address.AddressDto; import greencity.dto.location.api.DistrictDto; import greencity.mapping.location.api.LocationToDistrictDtoMapper; -import greencity.mapping.user.AddressToAddressDtoMapper; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; diff --git a/service/src/test/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapperTest.java b/service/src/test/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapperTest.java index a983d7d7e..d04f7fabb 100644 --- a/service/src/test/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapperTest.java +++ b/service/src/test/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapperTest.java @@ -6,33 +6,23 @@ import greencity.entity.telegram.TelegramBot; import greencity.entity.user.User; import greencity.entity.viber.ViberBot; -import greencity.service.locations.LocationApiService; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; -import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.junit.jupiter.MockitoExtension; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.when; - @ExtendWith(MockitoExtension.class) class UserToUserProfileUpdateDtoMapperTest { @InjectMocks private UserToUserProfileUpdateDtoMapper mapper; - @Mock - private LocationApiService locationApiService; @Test void convert() { MockitoAnnotations.initMocks(this); AddressDto expected = ModelUtils.getAddressDto(1L); - when(locationApiService.getAllDistrictsInCityByNames(anyString(), anyString())) - .thenReturn(ModelUtils.getLocationApiDtoList()); UserProfileUpdateDto userProfileUpdateDto = ModelUtils.updateUserProfileDto(); User user = ModelUtils.getUserWithBotNotifyTrue(); UserProfileUpdateDto converted = mapper.convert(user); diff --git a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java index ffa0c9f08..cb4ff4688 100644 --- a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java @@ -8,6 +8,7 @@ import greencity.dto.OrderCourierPopUpDto; import greencity.dto.TariffsForLocationDto; import greencity.dto.address.AddressDto; +import greencity.dto.address.AddressWithDistrictsDto; import greencity.dto.bag.BagDto; import greencity.dto.bag.BagForUserDto; import greencity.dto.bag.BagOrderDto; @@ -93,32 +94,22 @@ import greencity.util.Bot; import greencity.util.EncryptionUtil; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.MockitoAnnotations; import org.mockito.junit.jupiter.MockitoExtension; import org.modelmapper.ModelMapper; -import org.springframework.core.ParameterizedTypeReference; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.UriComponentsBuilder; import javax.persistence.EntityNotFoundException; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; -import java.net.URI; import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; @@ -1636,7 +1627,7 @@ void getProfileData() { String uuid = UUID.randomUUID().toString(); when(userRepository.findUserByUuid(uuid)).thenReturn(Optional.of(user)); UserProfileDto userProfileDto = new UserProfileDto(); - List addressDto = addressDtoList(); + List addressDto = getAddressWithDistrictsDtoList(); userProfileDto.setAddressDto(addressDto); List
address = addressList(); List botList = botList(); @@ -1669,15 +1660,15 @@ void testFindAllAddressesForCurrentOrder() { user.setId(13L); when(userRepository.findByUuid(uuid)).thenReturn(user); - List testAddressesDto = getTestAddressesDto(); + List testAddressesDto = getAddressWithDistrictsDtoList(); OrderWithAddressesResponseDto expected = new OrderWithAddressesResponseDto(testAddressesDto); List
addresses = getTestAddresses(user); when(addressRepository.findAllNonDeletedAddressesByUserId(user.getId())).thenReturn(addresses); - when(modelMapper.map(addresses.get(0), AddressDto.class)).thenReturn(testAddressesDto.get(0)); - when(modelMapper.map(addresses.get(1), AddressDto.class)).thenReturn(testAddressesDto.get(1)); + when(modelMapper.map(addresses.get(0), AddressWithDistrictsDto.class)).thenReturn(testAddressesDto.get(0)); + when(modelMapper.map(addresses.get(1), AddressWithDistrictsDto.class)).thenReturn(testAddressesDto.get(1)); OrderWithAddressesResponseDto actual = ubsService.findAllAddressesForCurrentOrder(uuid); @@ -1702,6 +1693,44 @@ private List
getTestAddresses(User user) { return Arrays.asList(address1, address2); } + public static List getAddressWithDistrictsDtoList() { + List list = new ArrayList<>(); + list.add(AddressWithDistrictsDto.builder().addressDto(AddressDto.builder() + .id(1L) + .entranceNumber("7a") + .houseCorpus("2") + .houseNumber("7") + .street("Городоцька") + .streetEn("Gorodotska") + .coordinates(Coordinates.builder().latitude(2.3).longitude(5.6).build()) + .district("Залізничний") + .districtEn("Zaliznuchnuy") + .regionEn("Region") + .region("Регіон") + .cityEn("Lviv") + .city("Львів") + .actual(false).build()) + .addressRegionDistrictList(new ArrayList<>()) + .build()); + list.add(AddressWithDistrictsDto.builder().addressDto(AddressDto.builder() + .id(2L) + .entranceNumber("9a") + .houseCorpus("2") + .houseNumber("7") + .street("Шевченка") + .streetEn("Shevchenka") + .coordinates(Coordinates.builder().latitude(3.3).longitude(6.6).build()) + .district("Залізничний") + .districtEn("Zaliznuchnuy") + .regionEn("Region") + .region("Регіон") + .city("Львів") + .cityEn("Lviv").actual(false).build()) + .addressRegionDistrictList(new ArrayList<>()) + .build()); + return list; + } + private List getTestAddressesDto() { AddressDto addressDto1 = AddressDto.builder().actual(true).id(13L).city("Kyiv").district("Svyatoshyn") .entranceNumber("1").houseCorpus("1").houseNumber("55").street("Peremohy av.") @@ -1735,8 +1764,8 @@ void testSaveCurrentAddressForOrder() { when(modelMapper.map(any(), eq(Address.class))).thenReturn(addressToSave); when(modelMapper.map(addresses.get(0), - AddressDto.class)) - .thenReturn(addressDto()); + AddressWithDistrictsDto.class)) + .thenReturn(getAddressWithDistrictsDto(1L)); OrderWithAddressesResponseDto actualWithSearchAddress = ubsService.saveCurrentAddressForOrder(createAddressRequestDto, uuid); @@ -1815,8 +1844,8 @@ void testUpdateCurrentAddressForOrder() { when(addressRepository.save(addresses.get(0))).thenReturn(addresses.get(0)); when(modelMapper.map(addresses.get(0), - AddressDto.class)) - .thenReturn(addressDto()); + AddressWithDistrictsDto.class)) + .thenReturn(getAddressWithDistrictsDto(1L)); OrderWithAddressesResponseDto actualWithSearchAddress = ubsService.updateCurrentAddressForOrder(updateAddressRequestDto, uuid); From b1ad4302357becd6e85f000ad42743e9657b7c59 Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Thu, 13 Jul 2023 13:41:50 +0300 Subject: [PATCH 27/80] Revert "[UBS user] Fix controller (#1183)" (#1185) This reverts commit 32ae1ef264d7b4b7de2d3503b619852dc59380a4. --- core/src/test/java/greencity/ModelUtils.java | 75 +------------------ .../controller/UserProfileControllerTest.java | 3 +- .../greencity/dto/address/AddressDto.java | 3 + .../dto/address/AddressWithDistrictsDto.java | 18 ----- .../order/OrderWithAddressesResponseDto.java | 13 +--- .../greencity/dto/user/UserProfileDto.java | 4 +- ...er.java => AddressToAddressDtoMapper.java} | 15 ++-- .../UserToUserProfileUpdateDtoMapper.java | 21 ++++++ .../service/ubs/UBSClientServiceImpl.java | 9 +-- .../src/test/java/greencity/ModelUtils.java | 40 ++++------ ...ava => AddressToAddressDtoMapperTest.java} | 22 ++++-- .../LocationToDistrictMapperTest.java | 1 + .../UserToUserProfileUpdateDtoMapperTest.java | 10 +++ .../service/ubs/UBSClientServiceImplTest.java | 65 +++++----------- 14 files changed, 103 insertions(+), 196 deletions(-) delete mode 100644 service-api/src/main/java/greencity/dto/address/AddressWithDistrictsDto.java rename service/src/main/java/greencity/mapping/user/{AddressToAddressWithDistrictsDtoMapper.java => AddressToAddressDtoMapper.java} (81%) rename service/src/test/java/greencity/mapping/location/{AddressToAddressWithDistrictsDtoMapperTest.java => AddressToAddressDtoMapperTest.java} (62%) diff --git a/core/src/test/java/greencity/ModelUtils.java b/core/src/test/java/greencity/ModelUtils.java index 6a67c92a8..29a6f19d3 100644 --- a/core/src/test/java/greencity/ModelUtils.java +++ b/core/src/test/java/greencity/ModelUtils.java @@ -4,7 +4,6 @@ import greencity.dto.AddNewTariffDto; import greencity.dto.CreateAddressRequestDto; import greencity.dto.address.AddressDto; -import greencity.dto.address.AddressWithDistrictsDto; import greencity.dto.bag.BagDto; import greencity.dto.bag.BagLimitDto; import greencity.dto.courier.CourierDto; @@ -17,7 +16,6 @@ import greencity.dto.location.AddLocationTranslationDto; import greencity.dto.location.LocationCreateDto; import greencity.dto.location.RegionTranslationDto; -import greencity.dto.location.api.DistrictDto; import greencity.dto.notification.NotificationDto; import greencity.dto.notification.NotificationPlatformDto; import greencity.dto.notification.NotificationTemplateDto; @@ -76,7 +74,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.Arrays; import java.util.stream.Collectors; import static greencity.enums.ViolationLevel.MAJOR; @@ -147,6 +144,7 @@ public static List addressDto() { .region("Регіон") .cityEn("Lviv") .city("Львів") + .addressRegionDistrictList(new ArrayList<>()) .actual(false) .build()); list.add(AddressDto.builder().id(2L) @@ -162,78 +160,9 @@ public static List addressDto() { .region("Регіон") .city("Львів") .cityEn("Lviv") - .actual(false) - .build()); - return list; - } - - public static AddressWithDistrictsDto getAddressWithDistrictsDto(long id) { - return AddressWithDistrictsDto.builder().addressDto(AddressDto.builder() - .id(id) - .region("Вінницька") - .city("Вінниця") - .street("Street") - .district("Distinct") - .houseNumber("25") - .houseCorpus("2") - .entranceNumber("7a") - .addressComment("Address Comment") - .actual(false) - .coordinates(Coordinates.builder() - .latitude(50.4459068) - .longitude(30.4477005) - .build()) - .regionEn("RegionEng") - .cityEn("CityEng") - .streetEn("StreetEng") - .districtEn("DistinctEng").build()) - .addressRegionDistrictList(Arrays.asList(getDistrictDto())) - .build(); - } - - public static DistrictDto getDistrictDto() { - return DistrictDto.builder() - .nameUa("Вінниця") - .nameEn("Vinnytsa") - .build(); - } - - public static List addressWithDistrictsDtoList() { - List list = new ArrayList<>(); - list.add(AddressWithDistrictsDto.builder().addressDto(AddressDto.builder() - .id(1L) - .entranceNumber("7a") - .houseCorpus("2") - .houseNumber("7") - .street("Городоцька") - .streetEn("Gorodotska") - .coordinates(Coordinates.builder().latitude(2.3).longitude(5.6).build()) - .district("Залізничний") - .districtEn("Zaliznuchnuy") - .regionEn("Region") - .region("Регіон") - .cityEn("Lviv") - .city("Львів") - .actual(false).build()) .addressRegionDistrictList(new ArrayList<>()) - .build()); - list.add(AddressWithDistrictsDto.builder().addressDto(AddressDto.builder() - .id(2L) - - .entranceNumber("9a") - .houseCorpus("2") - .houseNumber("7") - .street("Шевченка") - .streetEn("Shevchenka") - .coordinates(Coordinates.builder().latitude(3.3).longitude(6.6).build()) - .district("Залізничний") - .districtEn("Zaliznuchnuy") - .regionEn("Region") - .region("Регіон") - .city("Львів") - .cityEn("Lviv").actual(false).build()) - .addressRegionDistrictList(new ArrayList<>()) + .actual(false) .build()); return list; } diff --git a/core/src/test/java/greencity/controller/UserProfileControllerTest.java b/core/src/test/java/greencity/controller/UserProfileControllerTest.java index 195183927..65c57f870 100644 --- a/core/src/test/java/greencity/controller/UserProfileControllerTest.java +++ b/core/src/test/java/greencity/controller/UserProfileControllerTest.java @@ -7,7 +7,6 @@ import greencity.constant.AppConstant; import greencity.converters.UserArgumentResolver; import greencity.dto.address.AddressDto; -import greencity.dto.address.AddressWithDistrictsDto; import greencity.dto.user.UserProfileDto; import greencity.exception.handler.CustomExceptionHandler; import greencity.service.ubs.UBSClientService; @@ -73,7 +72,7 @@ void setup() { @Test void saveUserDate() throws Exception { UserProfileDto userProfileDto = ModelUtils.userProfileDto(); - List addressDto = ModelUtils.userProfileDto().getAddressDto(); + List addressDto = ModelUtils.addressDto(); userProfileDto.setAddressDto(addressDto); ObjectMapper objectMapper = new ObjectMapper(); diff --git a/service-api/src/main/java/greencity/dto/address/AddressDto.java b/service-api/src/main/java/greencity/dto/address/AddressDto.java index ebe330935..72863ca1c 100644 --- a/service-api/src/main/java/greencity/dto/address/AddressDto.java +++ b/service-api/src/main/java/greencity/dto/address/AddressDto.java @@ -1,5 +1,6 @@ package greencity.dto.address; +import greencity.dto.location.api.DistrictDto; import greencity.entity.coords.Coordinates; import lombok.AllArgsConstructor; import lombok.Builder; @@ -12,6 +13,7 @@ import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import java.io.Serializable; +import java.util.List; import static greencity.constant.ValidationConstant.CH_EN; import static greencity.constant.ValidationConstant.CH_NUM; @@ -68,4 +70,5 @@ public class AddressDto implements Serializable { private String districtEn; private String placeId; + private List addressRegionDistrictList; } \ No newline at end of file diff --git a/service-api/src/main/java/greencity/dto/address/AddressWithDistrictsDto.java b/service-api/src/main/java/greencity/dto/address/AddressWithDistrictsDto.java deleted file mode 100644 index 0af98b3ab..000000000 --- a/service-api/src/main/java/greencity/dto/address/AddressWithDistrictsDto.java +++ /dev/null @@ -1,18 +0,0 @@ -package greencity.dto.address; - -import greencity.dto.location.api.DistrictDto; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import java.io.Serializable; -import java.util.List; - -@Builder -@Data -@NoArgsConstructor -@AllArgsConstructor -public class AddressWithDistrictsDto implements Serializable { - private AddressDto addressDto; - private List addressRegionDistrictList; -} \ No newline at end of file diff --git a/service-api/src/main/java/greencity/dto/order/OrderWithAddressesResponseDto.java b/service-api/src/main/java/greencity/dto/order/OrderWithAddressesResponseDto.java index c731ee863..6786d7008 100644 --- a/service-api/src/main/java/greencity/dto/order/OrderWithAddressesResponseDto.java +++ b/service-api/src/main/java/greencity/dto/order/OrderWithAddressesResponseDto.java @@ -1,13 +1,8 @@ package greencity.dto.order; -import greencity.dto.address.AddressWithDistrictsDto; -import lombok.Getter; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Setter; -import lombok.NoArgsConstructor; -import lombok.ToString; -import lombok.EqualsAndHashCode; +import greencity.dto.address.AddressDto; +import lombok.*; + import java.util.List; @Getter @@ -18,5 +13,5 @@ @EqualsAndHashCode @Builder public class OrderWithAddressesResponseDto { - private List addressList; + private List addressList; } diff --git a/service-api/src/main/java/greencity/dto/user/UserProfileDto.java b/service-api/src/main/java/greencity/dto/user/UserProfileDto.java index 77f0f0727..47deba2c0 100644 --- a/service-api/src/main/java/greencity/dto/user/UserProfileDto.java +++ b/service-api/src/main/java/greencity/dto/user/UserProfileDto.java @@ -1,7 +1,7 @@ package greencity.dto.user; import greencity.annotations.ValidPhoneNumber; -import greencity.dto.address.AddressWithDistrictsDto; +import greencity.dto.address.AddressDto; import greencity.util.Bot; import lombok.AllArgsConstructor; import lombok.Builder; @@ -40,7 +40,7 @@ public class UserProfileDto { @NotBlank @ValidPhoneNumber private String recipientPhone; - private List addressDto; + private List addressDto; private List botList; private Boolean hasPassword; @NonNull diff --git a/service/src/main/java/greencity/mapping/user/AddressToAddressWithDistrictsDtoMapper.java b/service/src/main/java/greencity/mapping/user/AddressToAddressDtoMapper.java similarity index 81% rename from service/src/main/java/greencity/mapping/user/AddressToAddressWithDistrictsDtoMapper.java rename to service/src/main/java/greencity/mapping/user/AddressToAddressDtoMapper.java index 385c8d89a..ae84ff2b3 100644 --- a/service/src/main/java/greencity/mapping/user/AddressToAddressWithDistrictsDtoMapper.java +++ b/service/src/main/java/greencity/mapping/user/AddressToAddressDtoMapper.java @@ -1,7 +1,6 @@ package greencity.mapping.user; import greencity.dto.address.AddressDto; -import greencity.dto.address.AddressWithDistrictsDto; import greencity.dto.location.api.DistrictDto; import greencity.dto.location.api.LocationDto; import greencity.entity.coords.Coordinates; @@ -17,10 +16,10 @@ /** * Class that used by {@link ModelMapper} to map {@link Address} into - * {@link AddressWithDistrictsDto}. + * {@link AddressDto}. */ @Component -public class AddressToAddressWithDistrictsDtoMapper extends AbstractConverter { +public class AddressToAddressDtoMapper extends AbstractConverter { /** * Service for getting districts in city. */ @@ -28,13 +27,13 @@ public class AddressToAddressWithDistrictsDtoMapper extends AbstractConverter { + /** + * Service for getting districts in city. + */ + @Autowired + private LocationApiService locationApiService; + /** * Method convert {@link User} to {@link UserProfileUpdateDto}. * @@ -55,6 +65,17 @@ private AddressDto createAddressDto(Address address) { .longitude(address.getCoordinates().getLongitude()) .build()) .actual(address.getActual()) + .addressRegionDistrictList(getAllDistricts((address.getRegion()), address.getCity())) .build(); } + + private List getAllDistricts(String region, String city) { + List locationDtos = locationApiService.getAllDistrictsInCityByNames(region, city); + return locationDtos.stream() + .map(locationDto -> DistrictDto.builder() + .nameUa(locationDto.getLocationNameMap().get("name")) + .nameEn(locationDto.getLocationNameMap().get("name_en")) + .build()) + .collect(Collectors.toList()); + } } diff --git a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java index 9a54a07ce..34d4a6cea 100644 --- a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java @@ -15,7 +15,6 @@ import greencity.dto.TariffsForLocationDto; import greencity.dto.address.AddressDto; import greencity.dto.address.AddressInfoDto; -import greencity.dto.address.AddressWithDistrictsDto; import greencity.dto.bag.BagDto; import greencity.dto.bag.BagForUserDto; import greencity.dto.bag.BagOrderDto; @@ -535,10 +534,10 @@ private void checkIfUserHaveEnoughPoints(Integer i1, Integer i2) { @Override public OrderWithAddressesResponseDto findAllAddressesForCurrentOrder(String uuid) { Long id = userRepository.findByUuid(uuid).getId(); - List addressDtoList = addressRepo.findAllNonDeletedAddressesByUserId(id) + List addressDtoList = addressRepo.findAllNonDeletedAddressesByUserId(id) .stream() .sorted(Comparator.comparing(Address::getId)) - .map(u -> modelMapper.map(u, AddressWithDistrictsDto.class)) + .map(u -> modelMapper.map(u, AddressDto.class)) .collect(toList()); return new OrderWithAddressesResponseDto(addressDtoList); } @@ -1311,9 +1310,9 @@ public UserProfileDto getProfileData(String uuid) { List
allAddress = addressRepo.findAllNonDeletedAddressesByUserId(user.getId()); UserProfileDto userProfileDto = modelMapper.map(user, UserProfileDto.class); List botList = getListOfBots(user.getUuid()); - List addressDto = + List addressDto = allAddress.stream() - .map(a -> modelMapper.map(a, AddressWithDistrictsDto.class)) + .map(a -> modelMapper.map(a, AddressDto.class)) .collect(toList()); userProfileDto.setAddressDto(addressDto); userProfileDto.setBotList(botList); diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index 2d7a19017..f30932f99 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -15,7 +15,6 @@ import greencity.dto.TariffsForLocationDto; import greencity.dto.address.AddressDto; import greencity.dto.address.AddressInfoDto; -import greencity.dto.address.AddressWithDistrictsDto; import greencity.dto.bag.AdditionalBagInfoDto; import greencity.dto.bag.BagDto; import greencity.dto.bag.BagForUserDto; @@ -1710,29 +1709,6 @@ public static AddressDto getAddressDto(long id) { .cityEn("CityEng") .streetEn("StreetEng") .districtEn("DistinctEng") - .build(); - } - - public static AddressWithDistrictsDto getAddressWithDistrictsDto(long id) { - return AddressWithDistrictsDto.builder().addressDto(AddressDto.builder() - .id(id) - .region("Вінницька") - .city("Вінниця") - .street("Street") - .district("Distinct") - .houseNumber("25") - .houseCorpus("2") - .entranceNumber("7a") - .addressComment("Address Comment") - .actual(false) - .coordinates(Coordinates.builder() - .latitude(50.4459068) - .longitude(30.4477005) - .build()) - .regionEn("RegionEng") - .cityEn("CityEng") - .streetEn("StreetEng") - .districtEn("DistinctEng").build()) .addressRegionDistrictList(Arrays.asList(getDistrictDto())) .build(); } @@ -4327,7 +4303,21 @@ public static User getUserForCreate(AddressStatus addressStatus) { public static OrderWithAddressesResponseDto getAddressDtoResponse() { return OrderWithAddressesResponseDto.builder() - .addressList(List.of(getAddressWithDistrictsDto(1L))) + .addressList(List.of( + AddressDto.builder() + .id(1L) + .city("City") + .district("Distinct") + .entranceNumber("7a") + .houseCorpus("2") + .houseNumber("25") + .street("Street") + .coordinates(Coordinates.builder() + .latitude(50.4459068) + .longitude(30.4477005) + .build()) + .actual(false) + .build())) .build(); } diff --git a/service/src/test/java/greencity/mapping/location/AddressToAddressWithDistrictsDtoMapperTest.java b/service/src/test/java/greencity/mapping/location/AddressToAddressDtoMapperTest.java similarity index 62% rename from service/src/test/java/greencity/mapping/location/AddressToAddressWithDistrictsDtoMapperTest.java rename to service/src/test/java/greencity/mapping/location/AddressToAddressDtoMapperTest.java index e07f139ab..7e2e49be7 100644 --- a/service/src/test/java/greencity/mapping/location/AddressToAddressWithDistrictsDtoMapperTest.java +++ b/service/src/test/java/greencity/mapping/location/AddressToAddressDtoMapperTest.java @@ -1,17 +1,27 @@ package greencity.mapping.location; import greencity.ModelUtils; -import greencity.dto.address.AddressWithDistrictsDto; -import greencity.mapping.user.AddressToAddressWithDistrictsDtoMapper; +import greencity.dto.address.AddressDto; +import greencity.dto.location.api.LocationDto; +import greencity.mapping.user.AddressToAddressDtoMapper; import greencity.service.locations.LocationApiService; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.web.client.RestTemplate; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) @@ -21,17 +31,15 @@ class AddressToAddressDtoMapperTest { private LocationApiService locationApiService; @InjectMocks - private AddressToAddressWithDistrictsDtoMapper addressToAddressWithDistrictsDtoMapper; + private AddressToAddressDtoMapper addressToAddressDtoMapper; @Test void convert() { MockitoAnnotations.initMocks(this); - AddressWithDistrictsDto expected = ModelUtils.getAddressWithDistrictsDto(1L); + AddressDto expected = ModelUtils.getAddressDto(1L); when(locationApiService.getAllDistrictsInCityByNames(anyString(), anyString())) .thenReturn(ModelUtils.getLocationApiDtoList()); - AddressWithDistrictsDto actual = addressToAddressWithDistrictsDtoMapper.convert(ModelUtils.getAddress(1L)); + AddressDto actual = addressToAddressDtoMapper.convert(ModelUtils.getAddress(1L)); assertEquals(expected.getAddressRegionDistrictList().size(), actual.getAddressRegionDistrictList().size()); - assertEquals(expected.getAddressRegionDistrictList().get(0), actual.getAddressRegionDistrictList().get(0)); - } } diff --git a/service/src/test/java/greencity/mapping/location/LocationToDistrictMapperTest.java b/service/src/test/java/greencity/mapping/location/LocationToDistrictMapperTest.java index de56cfc80..dfbc58d3a 100644 --- a/service/src/test/java/greencity/mapping/location/LocationToDistrictMapperTest.java +++ b/service/src/test/java/greencity/mapping/location/LocationToDistrictMapperTest.java @@ -4,6 +4,7 @@ import greencity.dto.address.AddressDto; import greencity.dto.location.api.DistrictDto; import greencity.mapping.location.api.LocationToDistrictDtoMapper; +import greencity.mapping.user.AddressToAddressDtoMapper; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; diff --git a/service/src/test/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapperTest.java b/service/src/test/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapperTest.java index d04f7fabb..a983d7d7e 100644 --- a/service/src/test/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapperTest.java +++ b/service/src/test/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapperTest.java @@ -6,23 +6,33 @@ import greencity.entity.telegram.TelegramBot; import greencity.entity.user.User; import greencity.entity.viber.ViberBot; +import greencity.service.locations.LocationApiService; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; +import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.junit.jupiter.MockitoExtension; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.when; + @ExtendWith(MockitoExtension.class) class UserToUserProfileUpdateDtoMapperTest { @InjectMocks private UserToUserProfileUpdateDtoMapper mapper; + @Mock + private LocationApiService locationApiService; @Test void convert() { MockitoAnnotations.initMocks(this); AddressDto expected = ModelUtils.getAddressDto(1L); + when(locationApiService.getAllDistrictsInCityByNames(anyString(), anyString())) + .thenReturn(ModelUtils.getLocationApiDtoList()); UserProfileUpdateDto userProfileUpdateDto = ModelUtils.updateUserProfileDto(); User user = ModelUtils.getUserWithBotNotifyTrue(); UserProfileUpdateDto converted = mapper.convert(user); diff --git a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java index cb4ff4688..ffa0c9f08 100644 --- a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java @@ -8,7 +8,6 @@ import greencity.dto.OrderCourierPopUpDto; import greencity.dto.TariffsForLocationDto; import greencity.dto.address.AddressDto; -import greencity.dto.address.AddressWithDistrictsDto; import greencity.dto.bag.BagDto; import greencity.dto.bag.BagForUserDto; import greencity.dto.bag.BagOrderDto; @@ -94,22 +93,32 @@ import greencity.util.Bot; import greencity.util.EncryptionUtil; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.mockito.junit.jupiter.MockitoExtension; import org.modelmapper.ModelMapper; +import org.springframework.core.ParameterizedTypeReference; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; import javax.persistence.EntityNotFoundException; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; +import java.net.URI; import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; @@ -1627,7 +1636,7 @@ void getProfileData() { String uuid = UUID.randomUUID().toString(); when(userRepository.findUserByUuid(uuid)).thenReturn(Optional.of(user)); UserProfileDto userProfileDto = new UserProfileDto(); - List addressDto = getAddressWithDistrictsDtoList(); + List addressDto = addressDtoList(); userProfileDto.setAddressDto(addressDto); List
address = addressList(); List botList = botList(); @@ -1660,15 +1669,15 @@ void testFindAllAddressesForCurrentOrder() { user.setId(13L); when(userRepository.findByUuid(uuid)).thenReturn(user); - List testAddressesDto = getAddressWithDistrictsDtoList(); + List testAddressesDto = getTestAddressesDto(); OrderWithAddressesResponseDto expected = new OrderWithAddressesResponseDto(testAddressesDto); List
addresses = getTestAddresses(user); when(addressRepository.findAllNonDeletedAddressesByUserId(user.getId())).thenReturn(addresses); - when(modelMapper.map(addresses.get(0), AddressWithDistrictsDto.class)).thenReturn(testAddressesDto.get(0)); - when(modelMapper.map(addresses.get(1), AddressWithDistrictsDto.class)).thenReturn(testAddressesDto.get(1)); + when(modelMapper.map(addresses.get(0), AddressDto.class)).thenReturn(testAddressesDto.get(0)); + when(modelMapper.map(addresses.get(1), AddressDto.class)).thenReturn(testAddressesDto.get(1)); OrderWithAddressesResponseDto actual = ubsService.findAllAddressesForCurrentOrder(uuid); @@ -1693,44 +1702,6 @@ private List
getTestAddresses(User user) { return Arrays.asList(address1, address2); } - public static List getAddressWithDistrictsDtoList() { - List list = new ArrayList<>(); - list.add(AddressWithDistrictsDto.builder().addressDto(AddressDto.builder() - .id(1L) - .entranceNumber("7a") - .houseCorpus("2") - .houseNumber("7") - .street("Городоцька") - .streetEn("Gorodotska") - .coordinates(Coordinates.builder().latitude(2.3).longitude(5.6).build()) - .district("Залізничний") - .districtEn("Zaliznuchnuy") - .regionEn("Region") - .region("Регіон") - .cityEn("Lviv") - .city("Львів") - .actual(false).build()) - .addressRegionDistrictList(new ArrayList<>()) - .build()); - list.add(AddressWithDistrictsDto.builder().addressDto(AddressDto.builder() - .id(2L) - .entranceNumber("9a") - .houseCorpus("2") - .houseNumber("7") - .street("Шевченка") - .streetEn("Shevchenka") - .coordinates(Coordinates.builder().latitude(3.3).longitude(6.6).build()) - .district("Залізничний") - .districtEn("Zaliznuchnuy") - .regionEn("Region") - .region("Регіон") - .city("Львів") - .cityEn("Lviv").actual(false).build()) - .addressRegionDistrictList(new ArrayList<>()) - .build()); - return list; - } - private List getTestAddressesDto() { AddressDto addressDto1 = AddressDto.builder().actual(true).id(13L).city("Kyiv").district("Svyatoshyn") .entranceNumber("1").houseCorpus("1").houseNumber("55").street("Peremohy av.") @@ -1764,8 +1735,8 @@ void testSaveCurrentAddressForOrder() { when(modelMapper.map(any(), eq(Address.class))).thenReturn(addressToSave); when(modelMapper.map(addresses.get(0), - AddressWithDistrictsDto.class)) - .thenReturn(getAddressWithDistrictsDto(1L)); + AddressDto.class)) + .thenReturn(addressDto()); OrderWithAddressesResponseDto actualWithSearchAddress = ubsService.saveCurrentAddressForOrder(createAddressRequestDto, uuid); @@ -1844,8 +1815,8 @@ void testUpdateCurrentAddressForOrder() { when(addressRepository.save(addresses.get(0))).thenReturn(addresses.get(0)); when(modelMapper.map(addresses.get(0), - AddressWithDistrictsDto.class)) - .thenReturn(getAddressWithDistrictsDto(1L)); + AddressDto.class)) + .thenReturn(addressDto()); OrderWithAddressesResponseDto actualWithSearchAddress = ubsService.updateCurrentAddressForOrder(updateAddressRequestDto, uuid); From 2622da091f5dbcb50adb6c4df35be5d0519dc01b Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Fri, 14 Jul 2023 12:56:31 +0300 Subject: [PATCH 28/80] [UBS User] Fix update user endpoint (#1186) * Fixed bug with update * Fixed bug in location * Fixed tests --- .../UserToUserProfileUpdateDtoMapper.java | 1 + .../service/locations/LocationApiService.java | 28 +++++++++++-- .../src/test/java/greencity/ModelUtils.java | 40 +++++++++++++++++++ .../UserToUserProfileUpdateDtoMapperTest.java | 3 +- .../locations/LocationApiServiceTest.java | 20 ++++++++++ 5 files changed, 87 insertions(+), 5 deletions(-) diff --git a/service/src/main/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapper.java b/service/src/main/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapper.java index 43853b933..6521fda28 100644 --- a/service/src/main/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapper.java +++ b/service/src/main/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapper.java @@ -31,6 +31,7 @@ public class UserToUserProfileUpdateDtoMapper extends AbstractConverter addressDtoList = user.getAddresses().stream() + .filter(obj -> obj.getActual()) .map(this::createAddressDto) .collect(Collectors.toList()); diff --git a/service/src/main/java/greencity/service/locations/LocationApiService.java b/service/src/main/java/greencity/service/locations/LocationApiService.java index e21bef7e2..d0beaa163 100644 --- a/service/src/main/java/greencity/service/locations/LocationApiService.java +++ b/service/src/main/java/greencity/service/locations/LocationApiService.java @@ -20,6 +20,9 @@ import java.util.Optional; import java.util.stream.Collectors; import java.util.Arrays; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + import org.apache.commons.collections4.CollectionUtils; @Service @@ -76,16 +79,28 @@ public List getAllDistrictsInCityByNames(String regionName, String || cityName.equals(KYIV.getLocationNameMap().get(NAME_EN))) { return getAllDistrictsInCityByCityID(KYIV.getId()); } + List cities = getCitiesByName(regionName, cityName); LocationDto city = getCityInRegion(regionName, cities); String cityId = city.getId(); List allDistricts = getAllDistrictsInCityByCityID(cityId); if (allDistricts.isEmpty()) { - allDistricts.add(city); + return Arrays.asList(city); } return allDistricts; } + static String replaceAllQuotes(String input) { + Pattern pattern = Pattern.compile("[`'‘’“”‛‟ʼ«»\"]"); + Matcher matcher = pattern.matcher(input); + StringBuffer sb = new StringBuffer(); + while (matcher.find()) { + matcher.appendReplacement(sb, "’"); + } + matcher.appendTail(sb); + return sb.toString(); + } + /** * Retrieves a list of cities by name. * @@ -178,6 +193,9 @@ private LocationDto getCityInRegion(String regionName, List cities) return cities.stream() .filter(city -> { + if (checkIfRegionIdEqualsUpperId(region.getId(), city.getParentId())) { + return true; + } LocationDto localCommunity = getLocationDataByCode(LocationDivision.LOCAL_COMMUNITY.getLevelId(), city.getParentId()); LocationDto districtRegion = getLocationDataByCode(LocationDivision.DISTRICT_IN_REGION.getLevelId(), @@ -259,16 +277,20 @@ private LocationDto getLocationDataByCode(int level, String code) { return resultFromUrl.get(0); } + private boolean checkIfRegionIdEqualsUpperId(String regionId, String cityUpperId) { + return regionId.equals(cityUpperId); + } + private static String removeWordRegion(String sentence) { String withoutSpaces = sentence.replace(" ", ""); String withoutRegion = withoutSpaces.replaceAll("(?iu)region", ""); - return withoutRegion.replaceAll("(?iu)область", ""); + return replaceAllQuotes(withoutRegion.replaceAll("(?iu)область", "")); } private static String removeWordCity(String sentence) { String withoutSpaces = sentence.replace(" ", ""); String withoutRegion = withoutSpaces.replaceAll("(?iu)city", ""); - return withoutRegion.replaceAll("(?iu)місто", ""); + return replaceAllQuotes(withoutRegion.replaceAll("(?iu)місто", "")); } /** diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index f30932f99..0c0e3fcde 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -1645,6 +1645,30 @@ public static Address getAddress() { .build(); } + public static Address getAddressTrue() { + return Address.builder() + .id(1L) + .region("Region") + .city("City") + .street("Street") + .district("Distinct") + .houseNumber("25") + .houseCorpus("2") + .entranceNumber("7a") + .addressComment("Address Comment") + .actual(true) + .addressStatus(AddressStatus.NEW) + .coordinates(Coordinates.builder() + .latitude(50.4459068) + .longitude(30.4477005) + .build()) + .regionEn("RegionEng") + .cityEn("CityEng") + .streetEn("StreetEng") + .districtEn("DistinctEng") + .build(); + } + public static Address getAddress(long id) { return Address.builder() .id(id) @@ -1865,6 +1889,22 @@ public static User getUser() { .build(); } + public static User getUserWithBotNotifyTrue_AddressTrue() { + return User.builder() + .id(1L) + .addresses(singletonList(getAddressTrue())) + .recipientEmail("someUser@gmail.com") + .recipientPhone("962473289") + .recipientSurname("Ivanov") + .uuid("87df9ad5-6393-441f-8423-8b2e770b01a8") + .recipientName("Taras") + .uuid("uuid") + .ubsUsers(getUbsUsers()) + .currentPoints(100) + .telegramBot(getTelegramBotNotifyTrue()) + .build(); + } + public static User getUserWithBotNotifyTrue() { return User.builder() .id(1L) diff --git a/service/src/test/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapperTest.java b/service/src/test/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapperTest.java index a983d7d7e..39f1d9216 100644 --- a/service/src/test/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapperTest.java +++ b/service/src/test/java/greencity/mapping/user/UserToUserProfileUpdateDtoMapperTest.java @@ -28,13 +28,12 @@ class UserToUserProfileUpdateDtoMapperTest { @Test void convert() { - MockitoAnnotations.initMocks(this); AddressDto expected = ModelUtils.getAddressDto(1L); when(locationApiService.getAllDistrictsInCityByNames(anyString(), anyString())) .thenReturn(ModelUtils.getLocationApiDtoList()); UserProfileUpdateDto userProfileUpdateDto = ModelUtils.updateUserProfileDto(); - User user = ModelUtils.getUserWithBotNotifyTrue(); + User user = ModelUtils.getUserWithBotNotifyTrue_AddressTrue(); UserProfileUpdateDto converted = mapper.convert(user); Assertions.assertEquals(userProfileUpdateDto.getRecipientName(), converted.getRecipientName()); Assertions.assertEquals(userProfileUpdateDto.getRecipientSurname(), converted.getRecipientSurname()); diff --git a/service/src/test/java/greencity/service/locations/LocationApiServiceTest.java b/service/src/test/java/greencity/service/locations/LocationApiServiceTest.java index 828d35331..dec417acd 100644 --- a/service/src/test/java/greencity/service/locations/LocationApiServiceTest.java +++ b/service/src/test/java/greencity/service/locations/LocationApiServiceTest.java @@ -127,6 +127,7 @@ private void initLviv() { getApiResult("UA46060250010121390", "UA46060250010015970", "Галицький", "Halytskyi"); Map zaliznychnyiResult = getApiResult("UA46060250010259421", "UA46060250010015970", "Залізничний", "Zaliznychnyi"); + UriComponentsBuilder level1Builder = build(LocationDivision.REGION.getLevelId()); UriComponentsBuilder level2BuilderLviv = buildCode("UA46060000000042587", LocationDivision.DISTRICT_IN_REGION.getLevelId()); @@ -175,6 +176,25 @@ private void initKyiv() { } + @Test + void testGetAllDistrictsInCityByNames_WhenParentIdEqualsRegionId() { + Map lvivskaResult = + getApiResult("UA46000000000026241", null, "Львівська", "Lvivska"); + Map prypiatResult = + getApiResult("UA32000000010085013", "UA46000000000026241", "Прип’ять", "Prypiat"); + UriComponentsBuilder level1Builder = build(LocationDivision.REGION.getLevelId()); + UriComponentsBuilder levelBuilderPrypiat = + buildName("Прип’ять", LocationDivision.CITY.getLevelId()); + UriComponentsBuilder levelBuilderPrypiat5 = + buildParent(LocationDivision.DISTRICT_IN_CITY.getLevelId(), "UA32000000010085013"); + respond(level1Builder, Arrays.asList(lvivskaResult)); + respond(levelBuilderPrypiat, Arrays.asList(prypiatResult)); + respond(levelBuilderPrypiat5, new ArrayList<>()); + List districts = + locationApiService.getAllDistrictsInCityByNames("Львівська область", "Прип'ять"); + assertEquals(1, districts.size()); + } + @Test void testGetDisctrictByName_whenNameEn() { initLviv(); From b14fb9c298dce0fe02b87e70b699a8db423bcfb3 Mon Sep 17 00:00:00 2001 From: 2or5 <125138706+2or5@users.noreply.github.com> Date: Fri, 14 Jul 2023 13:46:27 +0300 Subject: [PATCH 29/80] fix bug with receivingStation empty (#1184) Co-authored-by: Nazar --- .../src/main/java/greencity/dto/AddNewTariffDto.java | 1 + service-api/src/test/java/greencity/ModelUtils.java | 2 +- .../dto/courier/tariff/AddNewTariffDtoTest.java | 11 ++++++----- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/service-api/src/main/java/greencity/dto/AddNewTariffDto.java b/service-api/src/main/java/greencity/dto/AddNewTariffDto.java index aa4f5ae0d..00b8bb3a4 100644 --- a/service-api/src/main/java/greencity/dto/AddNewTariffDto.java +++ b/service-api/src/main/java/greencity/dto/AddNewTariffDto.java @@ -26,5 +26,6 @@ public class AddNewTariffDto { private Long courierId; @NotEmpty private List<@Min(1) Long> locationIdList; + @NotEmpty private List<@Min(1) Long> receivingStationsIdList; } diff --git a/service-api/src/test/java/greencity/ModelUtils.java b/service-api/src/test/java/greencity/ModelUtils.java index dd8fbafc1..8823106ba 100644 --- a/service-api/src/test/java/greencity/ModelUtils.java +++ b/service-api/src/test/java/greencity/ModelUtils.java @@ -121,7 +121,7 @@ public static AddNewTariffDto getAddNewTariffWithNullFieldsDto() { .regionId(null) .courierId(1L) .locationIdList(List.of(1L)) - .receivingStationsIdList(null) + .receivingStationsIdList(List.of(1L)) .build(); } diff --git a/service-api/src/test/java/greencity/dto/courier/tariff/AddNewTariffDtoTest.java b/service-api/src/test/java/greencity/dto/courier/tariff/AddNewTariffDtoTest.java index 00654a8cd..3a77092f7 100644 --- a/service-api/src/test/java/greencity/dto/courier/tariff/AddNewTariffDtoTest.java +++ b/service-api/src/test/java/greencity/dto/courier/tariff/AddNewTariffDtoTest.java @@ -50,12 +50,13 @@ void addNewTariffDtoWithValidNullFieldsTest() { @SneakyThrows @ParameterizedTest @MethodSource("provideFieldsAndInvalidValues") - void addNewTariffDtoWithInvalidValuesTest(Long courierId, List locationIdList) { + void addNewTariffDtoWithInvalidValuesTest(Long courierId, List locationIdList, + List receivingStationsIdList) { AddNewTariffDto dto = new AddNewTariffDto( 0L, courierId, locationIdList, - List.of(0L)); + receivingStationsIdList); ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); final Validator validator = factory.getValidator(); @@ -68,8 +69,8 @@ void addNewTariffDtoWithInvalidValuesTest(Long courierId, List locationIdL private static Stream provideFieldsAndInvalidValues() { return Stream.of( - Arguments.of(null, List.of()), - Arguments.of(-2L, List.of()), - Arguments.of(0L, List.of(0L))); + Arguments.of(null, List.of(), List.of()), + Arguments.of(-2L, List.of(), List.of()), + Arguments.of(0L, List.of(), List.of())); } } From 2121323caae23d04ab7cc8a3ce1fa26876fedb94 Mon Sep 17 00:00:00 2001 From: Anton Bondar <53192419+ABbondar@users.noreply.github.com> Date: Fri, 14 Jul 2023 14:52:48 +0300 Subject: [PATCH 30/80] sender info in order (#1189) --- .../service/ubs/UBSClientServiceImpl.java | 18 +-- .../service/ubs/UBSClientServiceImplTest.java | 138 ++++++++++++------ 2 files changed, 105 insertions(+), 51 deletions(-) diff --git a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java index 34d4a6cea..496c9b8c3 100644 --- a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java @@ -996,9 +996,9 @@ public UbsCustomersDto updateUbsUserInfoInOrder(UbsCustomersDtoUpdate dtoUpdate, ubsUserRepository.save(updateRecipientDataInOrder(user, dtoUpdate)); eventService.saveEvent(OrderHistory.CHANGED_SENDER, email, optionalUbsUser.get().getOrders().get(0)); return UbsCustomersDto.builder() - .name(user.getFirstName() + " " + user.getLastName()) - .email(user.getEmail()) - .phoneNumber(user.getPhoneNumber()) + .name(user.getSenderFirstName() + " " + user.getSenderLastName()) + .email(user.getSenderEmail()) + .phoneNumber(user.getSenderPhoneNumber()) .build(); } @@ -1020,21 +1020,21 @@ public Long createUserProfile(UserProfileCreateDto userProfileCreateDto) { return user.getId(); } - private UBSuser updateRecipientDataInOrder(UBSuser ubSuser, UbsCustomersDtoUpdate dto) { + private UBSuser updateRecipientDataInOrder(UBSuser ubsUser, UbsCustomersDtoUpdate dto) { if (nonNull(dto.getRecipientEmail())) { - ubSuser.setEmail(dto.getRecipientEmail()); + ubsUser.setSenderEmail(dto.getRecipientEmail()); } if (nonNull(dto.getRecipientName())) { - ubSuser.setFirstName(dto.getRecipientName()); + ubsUser.setSenderFirstName(dto.getRecipientName()); } if (nonNull(dto.getRecipientSurName())) { - ubSuser.setLastName(dto.getRecipientSurName()); + ubsUser.setSenderLastName(dto.getRecipientSurName()); } if (nonNull(dto.getRecipientPhoneNumber())) { - ubSuser.setPhoneNumber(dto.getRecipientPhoneNumber()); + ubsUser.setSenderPhoneNumber(dto.getRecipientPhoneNumber()); } - return ubSuser; + return ubsUser; } private Order formAndSaveOrder(Order order, Set orderCertificates, diff --git a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java index ffa0c9f08..c36b12eed 100644 --- a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java @@ -13,9 +13,9 @@ import greencity.dto.bag.BagOrderDto; import greencity.dto.bag.BagTranslationDto; import greencity.dto.certificate.CertificateDto; +import greencity.dto.courier.CourierDto; import greencity.dto.customer.UbsCustomersDto; import greencity.dto.customer.UbsCustomersDtoUpdate; -import greencity.dto.courier.CourierDto; import greencity.dto.employee.UserEmployeeAuthorityDto; import greencity.dto.location.api.DistrictDto; import greencity.dto.location.api.LocationDto; @@ -93,32 +93,22 @@ import greencity.util.Bot; import greencity.util.EncryptionUtil; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.MockitoAnnotations; import org.mockito.junit.jupiter.MockitoExtension; import org.modelmapper.ModelMapper; -import org.springframework.core.ParameterizedTypeReference; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.client.RestTemplate; -import org.springframework.web.util.UriComponentsBuilder; import javax.persistence.EntityNotFoundException; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; -import java.net.URI; import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; @@ -133,8 +123,80 @@ import java.util.UUID; import java.util.stream.Collectors; -import static greencity.ModelUtils.*; +import static greencity.ModelUtils.TEST_BAG_FOR_USER_DTO; +import static greencity.ModelUtils.TEST_BAG_LIST; +import static greencity.ModelUtils.TEST_EMAIL; +import static greencity.ModelUtils.TEST_ORDER_ADDRESS_DTO_REQUEST; +import static greencity.ModelUtils.TEST_PAYMENT_LIST; +import static greencity.ModelUtils.addressDto; +import static greencity.ModelUtils.addressDtoList; +import static greencity.ModelUtils.addressList; +import static greencity.ModelUtils.bagDto; +import static greencity.ModelUtils.botList; +import static greencity.ModelUtils.createCertificateDto; +import static greencity.ModelUtils.getAddress; +import static greencity.ModelUtils.getAddressDtoResponse; +import static greencity.ModelUtils.getAddressRequestDto; +import static greencity.ModelUtils.getBag; +import static greencity.ModelUtils.getBag1list; +import static greencity.ModelUtils.getBag4list; import static greencity.ModelUtils.getBagForOrder; +import static greencity.ModelUtils.getBagTranslationDto; +import static greencity.ModelUtils.getCancellationDto; +import static greencity.ModelUtils.getCertificate; +import static greencity.ModelUtils.getCourier; +import static greencity.ModelUtils.getCourierDto; +import static greencity.ModelUtils.getCourierDtoList; +import static greencity.ModelUtils.getEmployee; +import static greencity.ModelUtils.getGeocodingResult; +import static greencity.ModelUtils.getListOfEvents; +import static greencity.ModelUtils.getLocation; +import static greencity.ModelUtils.getMaximumAmountOfAddresses; +import static greencity.ModelUtils.getOrder; +import static greencity.ModelUtils.getOrderClientDto; +import static greencity.ModelUtils.getOrderCount; +import static greencity.ModelUtils.getOrderCountWithPaymentStatusPaid; +import static greencity.ModelUtils.getOrderDetails; +import static greencity.ModelUtils.getOrderDetailsWithoutSender; +import static greencity.ModelUtils.getOrderDoneByUser; +import static greencity.ModelUtils.getOrderFondyClientDto; +import static greencity.ModelUtils.getOrderPaymentDetailDto; +import static greencity.ModelUtils.getOrderPaymentStatusTranslation; +import static greencity.ModelUtils.getOrderResponseDto; +import static greencity.ModelUtils.getOrderStatusDto; +import static greencity.ModelUtils.getOrderStatusTranslation; +import static greencity.ModelUtils.getOrderTest; +import static greencity.ModelUtils.getOrderWithEvents; +import static greencity.ModelUtils.getOrderWithTariffAndLocation; +import static greencity.ModelUtils.getOrderWithoutPayment; +import static greencity.ModelUtils.getOrdersDto; +import static greencity.ModelUtils.getPayment; +import static greencity.ModelUtils.getPaymentResponseDto; +import static greencity.ModelUtils.getSuccessfulFondyResponse; +import static greencity.ModelUtils.getTariffInfo; +import static greencity.ModelUtils.getTariffInfoWithLimitOfBags; +import static greencity.ModelUtils.getTariffInfoWithLimitOfBagsAndMaxLessThanCountOfBigBag; +import static greencity.ModelUtils.getTariffLocation; +import static greencity.ModelUtils.getTariffsForLocationDto; +import static greencity.ModelUtils.getTariffsInfo; +import static greencity.ModelUtils.getTelegramBotNotifyTrue; +import static greencity.ModelUtils.getTestOrderAddressDtoRequest; +import static greencity.ModelUtils.getTestOrderAddressLocationDto; +import static greencity.ModelUtils.getTestUser; +import static greencity.ModelUtils.getUBSuser; +import static greencity.ModelUtils.getUBSuserWithoutSender; +import static greencity.ModelUtils.getUbsCustomersDtoUpdate; +import static greencity.ModelUtils.getUbsUsers; +import static greencity.ModelUtils.getUser; +import static greencity.ModelUtils.getUserForCreate; +import static greencity.ModelUtils.getUserInfoDto; +import static greencity.ModelUtils.getUserPointsAndAllBagsDto; +import static greencity.ModelUtils.getUserProfileCreateDto; +import static greencity.ModelUtils.getUserProfileUpdateDto; +import static greencity.ModelUtils.getUserProfileUpdateDtoWithBotsIsNotifyFalse; +import static greencity.ModelUtils.getUserWithBotNotifyTrue; +import static greencity.ModelUtils.getUserWithLastLocation; +import static greencity.ModelUtils.getViberBotNotifyTrue; import static greencity.constant.ErrorMessage.ACTUAL_ADDRESS_NOT_FOUND; import static greencity.constant.ErrorMessage.ADDRESS_ALREADY_EXISTS; import static greencity.constant.ErrorMessage.CANNOT_ACCESS_PERSONAL_INFO; @@ -151,10 +213,22 @@ import static greencity.constant.ErrorMessage.TARIFF_OR_LOCATION_IS_DEACTIVATED; import static greencity.constant.ErrorMessage.USER_WITH_CURRENT_UUID_DOES_NOT_EXIST; import static org.junit.Assert.assertTrue; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.anyList; +import static org.mockito.Mockito.anyString; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.lenient; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @ExtendWith({MockitoExtension.class}) class UBSClientServiceImplTest { @@ -1455,41 +1529,18 @@ void getUserAndUserUbsAndViolationsInfoByOrderIdAccessDeniedException() { } @Test - void updatesUbsUserInfoInOrder2() { - UbsCustomersDtoUpdate request = UbsCustomersDtoUpdate.builder() - .recipientId(1L) - .build(); - - Optional user = Optional.of(getUBSuser()); - when(ubsUserRepository.findById(1L)).thenReturn(user); - when(ubsUserRepository.save(user.get())).thenReturn(user.get()); - - UbsCustomersDto expected = UbsCustomersDto.builder() - .name("oleh ivanov") - .email("mail@mail.ua") - .phoneNumber("067894522") - .build(); + void updateUbsUserInfoInOrderThrowUBSuserNotFoundExceptionTest() { + UbsCustomersDtoUpdate request = getUbsCustomersDtoUpdate(); - UbsCustomersDto actual = ubsService.updateUbsUserInfoInOrder(request, "abc"); - assertEquals(expected, actual); - } + when(ubsUserRepository.findById(1L)).thenReturn(Optional.empty()); - @Test - void updatesUbsUserInfoInOrderShouldThrowUBSuserNotFoundException() { - UbsCustomersDtoUpdate request = UbsCustomersDtoUpdate.builder() - .recipientId(1L) - .recipientName("Anatolii Petyrov") - .recipientEmail("anatolii.andr@gmail.com") - .recipientPhoneNumber("095123456").build(); - - when(ubsUserRepository.findById(1L)) - .thenThrow(UBSuserNotFoundException.class); assertThrows(UBSuserNotFoundException.class, () -> ubsService.updateUbsUserInfoInOrder(request, "abc")); + verify(ubsUserRepository).findById(1L); } @Test - void updatesUbsUserInfoInOrder() { + void updateUbsUserInfoInOrderTest() { UbsCustomersDtoUpdate request = UbsCustomersDtoUpdate.builder() .recipientId(1L) .recipientName("Anatolii") @@ -1509,6 +1560,9 @@ void updatesUbsUserInfoInOrder() { UbsCustomersDto actual = ubsService.updateUbsUserInfoInOrder(request, "abc"); assertEquals(expected, actual); + + verify(ubsUserRepository).findById(1L); + verify(ubsUserRepository).save(user.get()); } @Test From 0dec7004ddc004e0f8902b87cb165038ad2959d2 Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Fri, 14 Jul 2023 15:29:45 +0300 Subject: [PATCH 31/80] [UBS_Prod. Tariff page] Changed to show only active locations (#1188) * Changed to show only active locations * fixed tests --- .../java/greencity/mapping/tariff/GetTariffsInfoDtoMapper.java | 3 ++- service/src/test/java/greencity/ModelUtils.java | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/service/src/main/java/greencity/mapping/tariff/GetTariffsInfoDtoMapper.java b/service/src/main/java/greencity/mapping/tariff/GetTariffsInfoDtoMapper.java index 7748e0489..2a376afe2 100644 --- a/service/src/main/java/greencity/mapping/tariff/GetTariffsInfoDtoMapper.java +++ b/service/src/main/java/greencity/mapping/tariff/GetTariffsInfoDtoMapper.java @@ -8,9 +8,9 @@ import greencity.dto.tariff.GetTariffsInfoDto; import greencity.entity.order.TariffsInfo; import greencity.entity.user.Region; +import greencity.enums.LocationStatus; import org.modelmapper.AbstractConverter; import org.springframework.stereotype.Component; - import java.util.stream.Collectors; @Component @@ -37,6 +37,7 @@ protected GetTariffsInfoDto convert(TariffsInfo source) { .email(source.getCreator().getEmail()).build()) .tariffStatus(source.getTariffStatus()) .locationInfoDtos(source.getTariffLocations().stream() + .filter(obj -> obj.getLocation().getLocationStatus().equals(LocationStatus.ACTIVE)) .map(location -> LocationsDtos.builder() .locationId(location.getLocation().getId()) .nameEn(location.getLocation().getNameEn()) diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index 0c0e3fcde..8e6d83ea7 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -4053,7 +4053,9 @@ public static TariffsInfo getTariffInfo() { .courierLimit(CourierLimit.LIMIT_BY_SUM_OF_ORDER) .tariffLocations(Set.of(TariffLocation.builder() .tariffsInfo(ModelUtils.getTariffInfoWithLimitOfBags()) + .locationStatus(LocationStatus.ACTIVE) .location(Location.builder().id(1L) + .locationStatus(LocationStatus.ACTIVE) .region(ModelUtils.getRegion()) .nameUk("Київ") .nameEn("Kyiv") From 62bffe9ff84b5490330cc70096b80f7d32dfb62a Mon Sep 17 00:00:00 2001 From: Anton Bondar <53192419+ABbondar@users.noreply.github.com> Date: Tue, 18 Jul 2023 13:34:15 +0300 Subject: [PATCH 32/80] used bonuses (#1190) --- .../java/greencity/service/ubs/OrdersAdminsPageServiceImpl.java | 1 - .../java/greencity/service/ubs/UBSManagementServiceImpl.java | 1 - .../greencity/service/ubs/UBSManagementServiceImplTest.java | 2 +- 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/service/src/main/java/greencity/service/ubs/OrdersAdminsPageServiceImpl.java b/service/src/main/java/greencity/service/ubs/OrdersAdminsPageServiceImpl.java index 28e2f5665..947a66e20 100644 --- a/service/src/main/java/greencity/service/ubs/OrdersAdminsPageServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/OrdersAdminsPageServiceImpl.java @@ -490,7 +490,6 @@ private void returnAllPointsFromOrder(Order order) { if (isNull(pointsToReturn) || pointsToReturn == 0) { return; } - order.setPointsToUse(0); User user = order.getUser(); if (isNull(user.getCurrentPoints())) { user.setCurrentPoints(0); diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java index 49ffcbea7..5864a7320 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java @@ -1094,7 +1094,6 @@ private void returnAllPointsFromOrder(Order order) { if (isNull(pointsToReturn) || pointsToReturn == 0) { return; } - order.setPointsToUse(0); User user = order.getUser(); if (isNull(user.getCurrentPoints())) { user.setCurrentPoints(0); diff --git a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java index 33cd2fa91..208fefea9 100644 --- a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java @@ -816,7 +816,7 @@ void updateOrderDetailStatusFirst() { assertEquals(expectedObject.getOrderStatus(), producedObjectCancelled.getOrderStatus()); assertEquals(expectedObject.getPaymentStatus(), producedObjectCancelled.getPaymentStatus()); assertEquals(expectedObject.getDate(), producedObjectCancelled.getDate()); - assertEquals(0, order.getPointsToUse()); + assertEquals(700, order.getPointsToUse()); order.setOrderStatus(OrderStatus.ON_THE_ROUTE); testOrderDetail.setOrderStatus(OrderStatus.DONE.toString()); From c046bbb4b9be6cfee6a655d68ea08a8580a55b83 Mon Sep 17 00:00:00 2001 From: Anton Bondar <53192419+ABbondar@users.noreply.github.com> Date: Tue, 18 Jul 2023 21:39:56 +0300 Subject: [PATCH 33/80] regions (#1191) --- .../main/java/greencity/service/ubs/UBSClientServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java index 496c9b8c3..730ab379f 100644 --- a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java @@ -629,7 +629,7 @@ private Map> initializeUkrainianGeoCoding AddressComponentType.ROUTE, dtoRequest::setStreet, AddressComponentType.STREET_NUMBER, dtoRequest::setHouseNumber, AddressComponentType.SUBLOCALITY, dtoRequest::setDistrict, - AddressComponentType.ADMINISTRATIVE_AREA_LEVEL_1, dtoRequest::setRegion); + AddressComponentType.ADMINISTRATIVE_AREA_LEVEL_3, dtoRequest::setRegion); } private Map> initializeEnglishGeoCodingResult( @@ -638,7 +638,7 @@ private Map> initializeEnglishGeoCodingRe AddressComponentType.LOCALITY, dtoRequest::setCityEn, AddressComponentType.ROUTE, dtoRequest::setStreetEn, AddressComponentType.SUBLOCALITY, dtoRequest::setDistrictEn, - AddressComponentType.ADMINISTRATIVE_AREA_LEVEL_1, dtoRequest::setRegionEn); + AddressComponentType.ADMINISTRATIVE_AREA_LEVEL_3, dtoRequest::setRegionEn); } private void initializeGeoCodingResults(Map> initializedMap, From 526cca77c0ea8b772c1b035b38df862e27d991f5 Mon Sep 17 00:00:00 2001 From: Anton Bondar <53192419+ABbondar@users.noreply.github.com> Date: Wed, 19 Jul 2023 12:09:07 +0300 Subject: [PATCH 34/80] Revert "regions (#1191)" (#1192) This reverts commit c046bbb4b9be6cfee6a655d68ea08a8580a55b83. --- .../main/java/greencity/service/ubs/UBSClientServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java index 730ab379f..496c9b8c3 100644 --- a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java @@ -629,7 +629,7 @@ private Map> initializeUkrainianGeoCoding AddressComponentType.ROUTE, dtoRequest::setStreet, AddressComponentType.STREET_NUMBER, dtoRequest::setHouseNumber, AddressComponentType.SUBLOCALITY, dtoRequest::setDistrict, - AddressComponentType.ADMINISTRATIVE_AREA_LEVEL_3, dtoRequest::setRegion); + AddressComponentType.ADMINISTRATIVE_AREA_LEVEL_1, dtoRequest::setRegion); } private Map> initializeEnglishGeoCodingResult( @@ -638,7 +638,7 @@ private Map> initializeEnglishGeoCodingRe AddressComponentType.LOCALITY, dtoRequest::setCityEn, AddressComponentType.ROUTE, dtoRequest::setStreetEn, AddressComponentType.SUBLOCALITY, dtoRequest::setDistrictEn, - AddressComponentType.ADMINISTRATIVE_AREA_LEVEL_3, dtoRequest::setRegionEn); + AddressComponentType.ADMINISTRATIVE_AREA_LEVEL_1, dtoRequest::setRegionEn); } private void initializeGeoCodingResults(Map> initializedMap, From c020a531619787e7fff284c8e116e53fdc731884 Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Tue, 25 Jul 2023 13:41:17 +0300 Subject: [PATCH 35/80] [Orders] After changing tariff the price of paid order is not changing (#1196) * OrderBagMapping created * changed bag functionality logic * added bag status active and deleted * #5927 [UBS] endpoint that returns deactivated locations (#1133) * add endpoint, update service and repo methods * upd tests * added formatting * - changed redirect.green-city-client url (#1132) * [UBS] - bug with manual payment #5940 (#1136) * added bag status active and deleted * changed tariff service crud methods and some order methods * removed bagstatus --- .../main/java/greencity/entity/order/Bag.java | 12 +- .../java/greencity/entity/order/Order.java | 42 +- .../java/greencity/entity/order/OrderBag.java | 69 ++++ .../greencity/repository/BagRepository.java | 12 - .../repository/OrderBagRepository.java | 61 +++ .../greencity/repository/OrderRepository.java | 18 + .../db/changelog/db.changelog-master.xml | 1 + ...pdate-order-bag-mapping-table-Spodaryk.xml | 60 +++ ...pdate-order-bag-mapping-table-Spodaryk.sql | 6 + .../mapping/bag/BagForUserDtoMapper.java | 8 +- .../notification/NotificationServiceImpl.java | 5 +- .../service/ubs/OrderBagService.java | 108 ++++++ .../service/ubs/SuperAdminServiceImpl.java | 94 ++++- .../service/ubs/UBSClientServiceImpl.java | 96 ++--- .../service/ubs/UBSManagementServiceImpl.java | 10 +- .../src/test/java/greencity/ModelUtils.java | 155 +++++++- .../mapping/bag/BagForUserDtoMapperTest.java | 6 +- .../NotificationServiceImplTest.java | 17 +- .../service/ubs/OrderBagServiceTest.java | 159 ++++++++ .../ubs/SuperAdminServiceImplTest.java | 311 ++++++++++++--- .../service/ubs/UBSClientServiceImplTest.java | 363 +++++++----------- .../ubs/UBSManagementServiceImplTest.java | 102 ++--- 22 files changed, 1256 insertions(+), 459 deletions(-) create mode 100644 dao/src/main/java/greencity/entity/order/OrderBag.java create mode 100644 dao/src/main/java/greencity/repository/OrderBagRepository.java create mode 100644 dao/src/main/resources/db/changelog/logs/ch-update-order-bag-mapping-table-Spodaryk.xml create mode 100644 dao/src/main/resources/db/changelog/logs/sql/ch-update-order-bag-mapping-table-Spodaryk.sql create mode 100644 service/src/main/java/greencity/service/ubs/OrderBagService.java create mode 100644 service/src/test/java/greencity/service/ubs/OrderBagServiceTest.java diff --git a/dao/src/main/java/greencity/entity/order/Bag.java b/dao/src/main/java/greencity/entity/order/Bag.java index dafb97462..321739e54 100644 --- a/dao/src/main/java/greencity/entity/order/Bag.java +++ b/dao/src/main/java/greencity/entity/order/Bag.java @@ -9,7 +9,15 @@ import lombok.ToString; import lombok.Builder; -import javax.persistence.*; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import java.time.LocalDate; @@ -76,7 +84,7 @@ public class Bag { @JoinColumn private Employee editedBy; - @ManyToOne + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(nullable = false) private TariffsInfo tariffsInfo; } diff --git a/dao/src/main/java/greencity/entity/order/Order.java b/dao/src/main/java/greencity/entity/order/Order.java index 8215634a9..af48dfe0b 100644 --- a/dao/src/main/java/greencity/entity/order/Order.java +++ b/dao/src/main/java/greencity/entity/order/Order.java @@ -1,21 +1,43 @@ package greencity.entity.order; -import greencity.enums.CancellationReason; -import greencity.enums.OrderPaymentStatus; -import greencity.enums.OrderStatus; import greencity.entity.notifications.UserNotification; import greencity.entity.user.User; import greencity.entity.user.employee.Employee; import greencity.entity.user.employee.EmployeeOrderPosition; import greencity.entity.user.employee.ReceivingStation; import greencity.entity.user.ubs.UBSuser; +import greencity.enums.CancellationReason; +import greencity.enums.OrderPaymentStatus; +import greencity.enums.OrderStatus; import greencity.filters.StringListConverter; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; import org.hibernate.annotations.Cascade; -import javax.persistence.*; +import javax.persistence.CascadeType; +import javax.persistence.CollectionTable; +import javax.persistence.Column; +import javax.persistence.Convert; +import javax.persistence.ElementCollection; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.MapKeyColumn; +import javax.persistence.OneToMany; +import javax.persistence.Table; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; @@ -28,10 +50,10 @@ @Builder @Table(name = "orders") @EqualsAndHashCode(exclude = {"employeeOrderPositions", "userNotifications", "ubsUser", - "changeOfPointsList", "blockedByEmployee", "certificates", "attachedEmployees", "payment", "employeeOrderPositions", + "changeOfPointsList", "blockedByEmployee", "certificates", "payment", "employeeOrderPositions", "events", "imageReasonNotTakingBags", "additionalOrders"}) @ToString(exclude = {"employeeOrderPositions", "userNotifications", "ubsUser", - "changeOfPointsList", "blockedByEmployee", "certificates", "attachedEmployees", "payment", "employeeOrderPositions", + "changeOfPointsList", "blockedByEmployee", "certificates", "payment", "employeeOrderPositions", "events", "imageReasonNotTakingBags", "additionalOrders"}) public class Order { @Id @@ -160,4 +182,10 @@ public class Order { @Column(name = "write_off_station_sum") private Long writeOffStationSum; + + @OneToMany( + mappedBy = "order", + cascade = CascadeType.ALL, + orphanRemoval = true) + private List orderBags = new ArrayList<>(); } diff --git a/dao/src/main/java/greencity/entity/order/OrderBag.java b/dao/src/main/java/greencity/entity/order/OrderBag.java new file mode 100644 index 000000000..4651fd944 --- /dev/null +++ b/dao/src/main/java/greencity/entity/order/OrderBag.java @@ -0,0 +1,69 @@ +package greencity.entity.order; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +@Entity +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(exclude = {"order", "bag"}) +@ToString(exclude = {"order", "bag"}) +@Getter +@Setter +@Builder +@Table(name = "order_bag_mapping") +public class OrderBag { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "order_id") + private Order order; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "bag_id") + private Bag bag; + + @Column(nullable = false) + private Integer amount; + + @Column(name = "confirmed_quantity") + private Integer confirmedQuantity; + + @Column(name = "exported_quantity") + private Integer exportedQuantity; + + @Column(nullable = false) + private Integer capacity; + + @Column(nullable = false) + private Long price; + + @NotBlank + @Size(min = 1, max = 30) + @Column(nullable = false) + private String name; + + @NotBlank + @Size(min = 1, max = 30) + @Column(nullable = false) + private String nameEng; +} diff --git a/dao/src/main/java/greencity/repository/BagRepository.java b/dao/src/main/java/greencity/repository/BagRepository.java index 18d35c029..0796e00d6 100644 --- a/dao/src/main/java/greencity/repository/BagRepository.java +++ b/dao/src/main/java/greencity/repository/BagRepository.java @@ -11,18 +11,6 @@ @Repository public interface BagRepository extends JpaRepository { - /** - * method, that returns {@link List}of{@link Bag} that have bags by order id. - * - * @param id order id - * @return {@link List}of{@link Bag} by it's language and orderId. - * @author Mahdziak Orest - */ - @Query(value = "SELECT * FROM ORDER_BAG_MAPPING as OBM " - + "JOIN BAG AS B ON OBM.ORDER_ID = :orderId and OBM.BAG_ID = B.ID " - + "ORDER BY B.ID", nativeQuery = true) - List findBagsByOrderId(@Param("orderId") Long id); - /** * This is method which find capacity by id. * diff --git a/dao/src/main/java/greencity/repository/OrderBagRepository.java b/dao/src/main/java/greencity/repository/OrderBagRepository.java new file mode 100644 index 000000000..578aba332 --- /dev/null +++ b/dao/src/main/java/greencity/repository/OrderBagRepository.java @@ -0,0 +1,61 @@ +package greencity.repository; + +import greencity.entity.order.OrderBag; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Repository +public interface OrderBagRepository extends JpaRepository { + /** + * Retrieves a list of order bags based on the given bag ID. + * + * @param id the ID of the order + * @return a list of order bags matching the bag ID + */ + @Query(value = "SELECT * FROM ORDER_BAG_MAPPING as OBM " + + "where OBM.BAG_ID = :bagId", nativeQuery = true) + List findOrderBagsByBagId(@Param("bagId") Integer id); + + /** + * Retrieves a list of order bags based on the given order ID. + * + * @param id the ID of the order + * @return a list of order bags matching the order ID + */ + @Query(value = "SELECT * FROM ORDER_BAG_MAPPING as OBM " + + "where OBM.ORDER_ID = :orderId", nativeQuery = true) + List findOrderBagsByOrderId(@Param("orderId") Long id); + + /** + * method updates the bag data of OrderBag for all unpaid orders. + * + * @param bagId {@link Integer} bag id + * @param capacity {@link Integer} bag capacity + * @param price {@link Long} bag full price in coins + * @param name {@link String} bag name + * @param nameEng {@link String} bag english name + * @author Julia Seti + */ + @Transactional + @Modifying + @Query(value = "update order_bag_mapping obm " + + "set capacity = :capacity, price = :price, name = :name, name_eng = :nameEng " + + "from orders o " + + "where o.id = obm.order_id and obm.bag_id = :bagId and o.order_payment_status = 'UNPAID'", nativeQuery = true) + void updateAllByBagIdForUnpaidOrders(Integer bagId, Integer capacity, Long price, String name, String nameEng); + + /** + * method returns all OrderBags by bag id. + * + * @param bagId {@link Integer} bag id + * @return {@link List} of {@link OrderBag} + * @author Julia Seti + */ + List findAllByBagId(Integer bagId); +} diff --git a/dao/src/main/java/greencity/repository/OrderRepository.java b/dao/src/main/java/greencity/repository/OrderRepository.java index 3011eb235..a4616a199 100644 --- a/dao/src/main/java/greencity/repository/OrderRepository.java +++ b/dao/src/main/java/greencity/repository/OrderRepository.java @@ -251,4 +251,22 @@ void changeReceivingStationForAllOrders(@Param("receiving_station") Long station void updateOrderStatusToExpected(@Param("actual_status") String actualStatus, @Param("expected_status") String expectedStatus, @Param("currentDate") LocalDate currentDate); + + /** + * method returns all unpaid orders that contain a bag with id. + */ + @Query(nativeQuery = true, + value = "select * from orders o " + + "left join order_bag_mapping obm on o.id = obm.order_id " + + "where obm.bag_id = :bagId and o.order_payment_status = 'UNPAID'") + List findAllUnpaidOrdersByBagId(Integer bagId); + + /** + * method returns all orders that contain a bag with id. + */ + @Query(nativeQuery = true, + value = "select * from orders o " + + "left join order_bag_mapping obm on o.id = obm.order_id " + + "where obm.bag_id = :bagId") + List findAllByBagId(Integer bagId); } diff --git a/dao/src/main/resources/db/changelog/db.changelog-master.xml b/dao/src/main/resources/db/changelog/db.changelog-master.xml index db07e44e8..1632d90bd 100644 --- a/dao/src/main/resources/db/changelog/db.changelog-master.xml +++ b/dao/src/main/resources/db/changelog/db.changelog-master.xml @@ -207,6 +207,7 @@ + diff --git a/dao/src/main/resources/db/changelog/logs/ch-update-order-bag-mapping-table-Spodaryk.xml b/dao/src/main/resources/db/changelog/logs/ch-update-order-bag-mapping-table-Spodaryk.xml new file mode 100644 index 000000000..18f8b49d5 --- /dev/null +++ b/dao/src/main/resources/db/changelog/logs/ch-update-order-bag-mapping-table-Spodaryk.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dao/src/main/resources/db/changelog/logs/sql/ch-update-order-bag-mapping-table-Spodaryk.sql b/dao/src/main/resources/db/changelog/logs/sql/ch-update-order-bag-mapping-table-Spodaryk.sql new file mode 100644 index 000000000..b71d14c9a --- /dev/null +++ b/dao/src/main/resources/db/changelog/logs/sql/ch-update-order-bag-mapping-table-Spodaryk.sql @@ -0,0 +1,6 @@ +update order_bag_mapping +set capacity=bag.capacity, + price=bag.full_price, + name=bag.name, + name_eng=bag.name_eng from bag +where bag_id=bag.id \ No newline at end of file diff --git a/service/src/main/java/greencity/mapping/bag/BagForUserDtoMapper.java b/service/src/main/java/greencity/mapping/bag/BagForUserDtoMapper.java index fe66bbe7b..68f4bb7b4 100644 --- a/service/src/main/java/greencity/mapping/bag/BagForUserDtoMapper.java +++ b/service/src/main/java/greencity/mapping/bag/BagForUserDtoMapper.java @@ -2,21 +2,21 @@ import greencity.constant.AppConstant; import greencity.dto.bag.BagForUserDto; -import greencity.entity.order.Bag; +import greencity.entity.order.OrderBag; import org.modelmapper.AbstractConverter; import org.springframework.stereotype.Component; import java.math.BigDecimal; @Component -public class BagForUserDtoMapper extends AbstractConverter { +public class BagForUserDtoMapper extends AbstractConverter { @Override - protected BagForUserDto convert(Bag source) { + protected BagForUserDto convert(OrderBag source) { return BagForUserDto.builder() .service(source.getName()) .serviceEng(source.getNameEng()) .capacity(source.getCapacity()) - .fullPrice(BigDecimal.valueOf(source.getFullPrice()) + .fullPrice(BigDecimal.valueOf(source.getPrice()) .movePointLeft(AppConstant.TWO_DECIMALS_AFTER_POINT_IN_CURRENCY) .doubleValue()) .build(); diff --git a/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java b/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java index 56d7aec6a..e123ce2d3 100644 --- a/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java +++ b/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java @@ -20,6 +20,7 @@ import greencity.exceptions.http.AccessDeniedException; import greencity.repository.*; import greencity.service.ubs.NotificationService; +import greencity.service.ubs.OrderBagService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.MapUtils; @@ -75,6 +76,8 @@ public class NotificationServiceImpl implements NotificationService { private static final String ORDER_NUMBER_KEY = "orderNumber"; private static final String AMOUNT_TO_PAY_KEY = "amountToPay"; private static final String PAY_BUTTON = "payButton"; + @Autowired + private final OrderBagService orderBagService; /** * {@inheritDoc} @@ -239,7 +242,7 @@ private Double getAmountToPay(Order order) { long ubsCourierSumInCoins = order.getUbsCourierSum() == null ? 0L : order.getUbsCourierSum(); long writeStationSumInCoins = order.getWriteOffStationSum() == null ? 0L : order.getWriteOffStationSum(); - List bagsType = bagRepository.findBagsByOrderId(order.getId()); + List bagsType = orderBagService.findBagsByOrderId(order.getId()); Map bagsAmount; if (MapUtils.isNotEmpty(order.getExportedQuantity())) { bagsAmount = order.getExportedQuantity(); diff --git a/service/src/main/java/greencity/service/ubs/OrderBagService.java b/service/src/main/java/greencity/service/ubs/OrderBagService.java new file mode 100644 index 000000000..6e10f71b3 --- /dev/null +++ b/service/src/main/java/greencity/service/ubs/OrderBagService.java @@ -0,0 +1,108 @@ +package greencity.service.ubs; + +import greencity.entity.order.Bag; +import greencity.entity.order.Order; +import greencity.entity.order.OrderBag; +import greencity.exceptions.NotFoundException; +import greencity.repository.OrderBagRepository; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static greencity.constant.ErrorMessage.BAG_NOT_FOUND; + +@Service +@AllArgsConstructor +@Slf4j +@Data +public class OrderBagService { + private OrderBagRepository orderBagRepository; + + private Long getActualPrice(List orderBags, Integer id) { + return orderBags.stream() + .filter(ob -> ob.getBag().getId().equals(id)) + .map(OrderBag::getPrice) + .findFirst() + .orElseThrow(() -> new NotFoundException(BAG_NOT_FOUND + id)); + } + + /** + * Finds all bags belonging to a specific list of OrderBag instances. + * + * @param orderBags A list of OrderBag instances to search within. + * @return A list of Bag instances associated with the provided OrderBag + * instances. + */ + public List findAllBagsInOrderBagsList(List orderBags) { + return orderBags.stream() + .map(OrderBag::getBag) + .peek(b -> b.setFullPrice(getActualPrice(orderBags, b.getId()))) + .collect(Collectors.toList()); + } + + /** + * Finds all bags belonging to a specific OrderBag based on the provided ID. + * + * @param id The ID of the OrderBag to search for. + * @return A list of Bag instances associated with the provided OrderBag ID. + */ + public List findBagsByOrderId(Long id) { + List orderBags = orderBagRepository.findOrderBagsByOrderId(id); + return findAllBagsInOrderBagsList(orderBags); + } + + /** + * Calculates the actual bags' amounts for the given list of OrderBags and + * returns the result as a Map. This method checks the OrderBags in the input + * list and calculates the actual amount for each bag based on the availability + * of different quantity attributes in the OrderBag objects. It prioritizes the + * following quantities in descending order: 1. Exported Quantity: If all + * OrderBags have the 'exportedQuantity' attribute set, the method will use it. + * 2. Confirmed Quantity: If 'exportedQuantity' is not available for all + * OrderBags but 'confirmedQuantity' is, the method will use it. 3. Regular + * Amount: If neither 'exportedQuantity' nor 'confirmedQuantity' are available + * for all OrderBags, the method will use the 'amount' attribute. + * + * @param bagsForOrder The list of OrderBag objects for which the actual amounts + * need to be calculated. + * @return A Map containing the bag ID as the key and the corresponding actual + * amount as the value. If any OrderBag in the input list lacks all + * three attributes (exportedQuantity, confirmedQuantity, and amount), + * the corresponding entry will not be included in the result map. + * @throws NullPointerException if 'bagsForOrder' is null. + */ + public Map getActualBagsAmountForOrder(List bagsForOrder) { + if (bagsForOrder.stream().allMatch(it -> it.getExportedQuantity() != null)) { + return bagsForOrder.stream() + .collect(Collectors.toMap(it -> it.getBag().getId(), OrderBag::getExportedQuantity)); + } + if (bagsForOrder.stream().allMatch(it -> it.getConfirmedQuantity() != null)) { + return bagsForOrder.stream() + .collect(Collectors.toMap(it -> it.getBag().getId(), OrderBag::getConfirmedQuantity)); + } + if (bagsForOrder.stream().allMatch(it -> it.getAmount() != null)) { + return bagsForOrder.stream() + .collect(Collectors.toMap(it -> it.getBag().getId(), OrderBag::getAmount)); + } + return new HashMap<>(); + } + + /** + * method helps to delete bag from order. + * + * @param orderBag {@link OrderBag} + * @author Oksana Spodaryk + */ + public void removeBagFromOrder(Order order, OrderBag orderBag) { + List modifiableList = new ArrayList<>(order.getOrderBags()); + modifiableList.remove(orderBag); + order.setOrderBags(modifiableList); + } +} diff --git a/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java b/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java index 9d623c99d..acf611a25 100644 --- a/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java @@ -24,6 +24,8 @@ import greencity.dto.tariff.GetTariffsInfoDto; import greencity.dto.tariff.SetTariffLimitsDto; import greencity.entity.coords.Coordinates; +import greencity.entity.order.Order; +import greencity.entity.order.OrderBag; import greencity.entity.order.Bag; import greencity.entity.order.Courier; import greencity.entity.order.Service; @@ -34,6 +36,7 @@ import greencity.entity.user.employee.Employee; import greencity.entity.user.employee.ReceivingStation; import greencity.enums.CourierLimit; +import greencity.enums.OrderPaymentStatus; import greencity.enums.CourierStatus; import greencity.enums.LocationStatus; import greencity.enums.StationStatus; @@ -48,6 +51,8 @@ import greencity.filters.TariffsInfoSpecification; import greencity.repository.BagRepository; import greencity.repository.CourierRepository; +import greencity.repository.OrderBagRepository; +import greencity.repository.OrderRepository; import greencity.repository.DeactivateChosenEntityRepository; import greencity.repository.EmployeeRepository; import greencity.repository.LocationRepository; @@ -71,6 +76,7 @@ import java.util.Comparator; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; @@ -113,6 +119,9 @@ public class SuperAdminServiceImpl implements SuperAdminService { "Current region: %s or cities: %s or receiving stations: %s don't exist."; private static final String REGION_OR_CITIES_OR_RECEIVING_STATIONS_OR_COURIER_NOT_EXIST_MESSAGE = "Current region: %s or cities: %s or receiving stations: %s or courier: %s don't exist."; + private final OrderBagRepository orderBagRepository; + private final OrderRepository orderRepository; + private final OrderBagService orderBagService; @Override public GetTariffServiceDto addTariffService(long tariffId, TariffServiceDto dto, String employeeUuid) { @@ -142,13 +151,34 @@ public List getTariffService(long tariffId) { } @Override + @Transactional public void deleteTariffService(Integer bagId) { Bag bag = tryToFindBagById(bagId); + checkDeletedBagLimitAndDeleteTariffsInfo(bag); + orderRepository.findAllByBagId(bagId).forEach(it -> deleteBagFromOrder(it, bagId)); + } + + private void deleteBagFromOrder(Order order, Integer bagId) { + Map amount = orderBagService.getActualBagsAmountForOrder(order.getOrderBags()); + Integer totalBagsAmount = amount.values().stream().reduce(0, Integer::sum); + if (amount.get(bagId).equals(0) || order.getOrderPaymentStatus() == OrderPaymentStatus.UNPAID) { + if (totalBagsAmount.equals(amount.get(bagId))) { + order.setOrderBags(new ArrayList<>()); + orderRepository.delete(order); + return; + } + order.getOrderBags().stream().filter(orderBag -> orderBag.getBag().getId().equals(bagId)) + .findFirst() + .ifPresent(orderBag -> orderBagService.removeBagFromOrder(order, orderBag)); + orderRepository.save(order); + } + } + + private void checkDeletedBagLimitAndDeleteTariffsInfo(Bag bag) { TariffsInfo tariffsInfo = bag.getTariffsInfo(); - bagRepository.delete(bag); List bags = bagRepository.findBagsByTariffsInfoId(tariffsInfo.getId()); if (bags.isEmpty() || bags.stream().noneMatch(Bag::getLimitIncluded)) { - tariffsInfo.setTariffStatus(TariffStatus.NEW); + tariffsInfo.setTariffStatus(TariffStatus.DEACTIVATED); tariffsInfo.setBags(bags); tariffsInfo.setMax(null); tariffsInfo.setMin(null); @@ -159,9 +189,39 @@ public void deleteTariffService(Integer bagId) { } @Override - public GetTariffServiceDto editTariffService(TariffServiceDto dto, Integer id, String employeeUuid) { - Bag bag = tryToFindBagById(id); + @Transactional + public GetTariffServiceDto editTariffService(TariffServiceDto dto, Integer bagId, String employeeUuid) { + Bag bag = tryToFindBagById(bagId); Employee employee = tryToFindEmployeeByUuid(employeeUuid); + updateTariffService(dto, bag); + bag.setEditedBy(employee); + + orderBagRepository.updateAllByBagIdForUnpaidOrders( + bagId, bag.getCapacity(), bag.getFullPrice(), bag.getName(), bag.getNameEng()); + + List orders = orderRepository.findAllUnpaidOrdersByBagId(bagId); + if (CollectionUtils.isNotEmpty(orders)) { + orders.forEach(it -> updateOrderSumToPay(it, bag)); + orderRepository.saveAll(orders); + } + return modelMapper.map(bagRepository.save(bag), GetTariffServiceDto.class); + } + + private void updateOrderSumToPay(Order order, Bag bag) { + Map amount = orderBagService.getActualBagsAmountForOrder(order.getOrderBags()); + Long sumToPayInCoins = order.getOrderBags().stream() + .map(orderBag -> amount.get(orderBag.getBag().getId()) * getBagPrice(orderBag, bag)) + .reduce(0L, Long::sum); + order.setSumTotalAmountWithoutDiscounts(sumToPayInCoins); + } + + private Long getBagPrice(OrderBag orderBag, Bag bag) { + return bag.getId().equals(orderBag.getBag().getId()) + ? bag.getFullPrice() + : orderBag.getPrice(); + } + + private void updateTariffService(TariffServiceDto dto, Bag bag) { bag.setCapacity(dto.getCapacity()); bag.setPrice(convertBillsIntoCoins(dto.getPrice())); bag.setCommission(convertBillsIntoCoins(dto.getCommission())); @@ -171,8 +231,6 @@ public GetTariffServiceDto editTariffService(TariffServiceDto dto, Integer id, S bag.setDescription(dto.getDescription()); bag.setDescriptionEng(dto.getDescriptionEng()); bag.setEditedAt(LocalDate.now()); - bag.setEditedBy(employee); - return modelMapper.map(bagRepository.save(bag), GetTariffServiceDto.class); } private Long convertBillsIntoCoins(Double bills) { @@ -185,8 +243,8 @@ private Long convertBillsIntoCoins(Double bills) { } private Bag tryToFindBagById(Integer id) { - return bagRepository.findById(id) - .orElseThrow(() -> new NotFoundException(ErrorMessage.BAG_NOT_FOUND + id)); + return bagRepository.findById(id).orElseThrow( + () -> new NotFoundException(ErrorMessage.BAG_NOT_FOUND + id)); } private Long getFullPrice(Double price, Double commission) { @@ -200,9 +258,9 @@ public GetServiceDto addService(Long tariffId, ServiceDto dto, String employeeUu } private Service createService(Long tariffId, ServiceDto dto, String employeeUuid) { - if (tryToFindServiceByTariffsInfoId(tariffId).isEmpty()) { + TariffsInfo tariffsInfo = tryToFindTariffById(tariffId); + if (serviceRepository.findServiceByTariffsInfoId(tariffId).isEmpty()) { Employee employee = tryToFindEmployeeByUuid(employeeUuid); - TariffsInfo tariffsInfo = tryToFindTariffById(tariffId); Service service = modelMapper.map(dto, Service.class); service.setCreatedBy(employee); service.setCreatedAt(LocalDate.now()); @@ -215,14 +273,16 @@ private Service createService(Long tariffId, ServiceDto dto, String employeeUuid @Override public GetServiceDto getService(long tariffId) { - return tryToFindServiceByTariffsInfoId(tariffId) + tryToFindTariffById(tariffId); + return serviceRepository.findServiceByTariffsInfoId(tariffId) .map(it -> modelMapper.map(it, GetServiceDto.class)) - .orElse(null); + .orElseGet(() -> null); } @Override public void deleteService(long id) { - serviceRepository.delete(tryToFindServiceById(id)); + Service service = tryToFindServiceById(id); + serviceRepository.delete(service); } @Override @@ -244,14 +304,6 @@ private Employee tryToFindEmployeeByUuid(String employeeUuid) { .orElseThrow(() -> new NotFoundException(ErrorMessage.EMPLOYEE_WITH_UUID_NOT_FOUND + employeeUuid)); } - private Optional tryToFindServiceByTariffsInfoId(long tariffId) { - if (tariffsInfoRepository.existsById(tariffId)) { - return serviceRepository.findServiceByTariffsInfoId(tariffId); - } else { - throw new NotFoundException(ErrorMessage.TARIFF_NOT_FOUND + tariffId); - } - } - private Service tryToFindServiceById(long id) { return serviceRepository.findById(id) .orElseThrow(() -> new NotFoundException(ErrorMessage.SERVICE_IS_NOT_FOUND_BY_ID + id)); diff --git a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java index 496c9b8c3..5c64e460f 100644 --- a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java @@ -59,6 +59,7 @@ import greencity.entity.order.ChangeOfPoints; import greencity.entity.order.Event; import greencity.entity.order.Order; +import greencity.entity.order.OrderBag; import greencity.entity.order.OrderPaymentStatusTranslation; import greencity.entity.order.OrderStatusTranslation; import greencity.entity.order.Payment; @@ -94,6 +95,7 @@ import greencity.repository.EventRepository; import greencity.repository.LocationRepository; import greencity.repository.OrderAddressRepository; +import greencity.repository.OrderBagRepository; import greencity.repository.OrderPaymentStatusTranslationRepository; import greencity.repository.OrderRepository; import greencity.repository.OrderStatusTranslationRepository; @@ -114,7 +116,6 @@ import greencity.util.OrderUtils; import lombok.Data; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.collections4.MapUtils; import org.json.JSONObject; import org.modelmapper.ModelMapper; import org.springframework.beans.factory.annotation.Autowired; @@ -136,7 +137,6 @@ import java.util.Collections; import java.util.Comparator; import java.util.EnumSet; -import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Locale; @@ -148,7 +148,6 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.LongStream; - import static greencity.constant.ErrorMessage.ACTUAL_ADDRESS_NOT_FOUND; import static greencity.constant.ErrorMessage.ADDRESS_ALREADY_EXISTS; import static greencity.constant.ErrorMessage.BAD_ORDER_STATUS_REQUEST; @@ -192,7 +191,6 @@ import static greencity.constant.ErrorMessage.USER_DONT_HAVE_ENOUGH_POINTS; import static greencity.constant.ErrorMessage.USER_WITH_CURRENT_ID_DOES_NOT_EXIST; import static greencity.constant.ErrorMessage.USER_WITH_CURRENT_UUID_DOES_NOT_EXIST; - import static java.util.Objects.nonNull; import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toList; @@ -231,6 +229,9 @@ public class UBSClientServiceImpl implements UBSClientService { private final TelegramBotRepository telegramBotRepository; private final ViberBotRepository viberBotRepository; private final LocationApiService locationApiService; + private final OrderBagRepository orderBagRepository; + private final OrderBagService orderBagService; + @Lazy @Autowired private UBSManagementService ubsManagementService; @@ -419,14 +420,14 @@ private void checkSumIfCourierLimitBySumOfOrder(TariffsInfo tariffsInfo, Long su public FondyOrderResponse saveFullOrderToDB(OrderResponseDto dto, String uuid, Long orderId) { final User currentUser = userRepository.findByUuid(uuid); TariffsInfo tariffsInfo = tryToFindTariffsInfoByBagIds(getBagIds(dto.getBags()), dto.getLocationId()); - Map amountOfBagsOrderedMap = new HashMap<>(); + List bagsOrdered = new ArrayList<>(); if (!dto.isShouldBePaid()) { dto.setCertificates(Collections.emptySet()); dto.setPointsToUse(0); } - long sumToPayWithoutDiscountInCoins = formBagsToBeSavedAndCalculateOrderSum(amountOfBagsOrderedMap, + long sumToPayWithoutDiscountInCoins = formBagsToBeSavedAndCalculateOrderSum(bagsOrdered, dto.getBags(), tariffsInfo); checkIfUserHaveEnoughPoints(currentUser.getCurrentPoints(), dto.getPointsToUse()); long sumToPayInCoins = reduceOrderSumDueToUsedPoints(sumToPayWithoutDiscountInCoins, dto.getPointsToUse()); @@ -439,7 +440,7 @@ public FondyOrderResponse saveFullOrderToDB(OrderResponseDto dto, String uuid, L UBSuser userData = formUserDataToBeSaved(dto.getPersonalData(), dto.getAddressId(), dto.getLocationId(), currentUser); - getOrder(dto, currentUser, amountOfBagsOrderedMap, sumToPayInCoins, order, orderCertificates, userData); + getOrder(dto, currentUser, bagsOrdered, sumToPayInCoins, order, orderCertificates, userData); eventService.save(OrderHistory.ORDER_FORMED, OrderHistory.CLIENT, order); if (sumToPayInCoins <= 0 || !dto.isShouldBePaid()) { @@ -457,7 +458,7 @@ private List getBagIds(List dto) { .collect(Collectors.toList()); } - private Bag tryToGetBagById(Integer id) { + private Bag findBagById(Integer id) { return bagRepository.findById(id) .orElseThrow(() -> new NotFoundException(BAG_NOT_FOUND + id)); } @@ -885,31 +886,17 @@ private AddressInfoDto addressInfoDtoBuilder(Order order) { } private List bagForUserDtosBuilder(Order order) { - Map actualBagAmounts = getActualBagAmountsForOrder(order); - List bagsForOrder = bagRepository.findBagsByOrderId(order.getId()); + List bagsForOrder = order.getOrderBags(); + Map actualBagsAmount = orderBagService.getActualBagsAmountForOrder(bagsForOrder); return bagsForOrder.stream() - .filter(bag -> actualBagAmounts.containsKey(bag.getId())) - .map(bag -> buildBagForUserDto(bag, actualBagAmounts.get(bag.getId()))) + .map(orderBag -> buildBagForUserDto(orderBag, actualBagsAmount.get(orderBag.getBag().getId()))) .collect(toList()); } - private Map getActualBagAmountsForOrder(Order order) { - if (MapUtils.isNotEmpty(order.getExportedQuantity())) { - return order.getExportedQuantity(); - } - if (MapUtils.isNotEmpty(order.getConfirmedQuantity())) { - return order.getConfirmedQuantity(); - } - if (MapUtils.isNotEmpty(order.getAmountOfBagsOrdered())) { - return order.getAmountOfBagsOrdered(); - } - return new HashMap<>(); - } - - private BagForUserDto buildBagForUserDto(Bag bag, int count) { - BagForUserDto bagDto = modelMapper.map(bag, BagForUserDto.class); + private BagForUserDto buildBagForUserDto(OrderBag orderBag, int count) { + BagForUserDto bagDto = modelMapper.map(orderBag, BagForUserDto.class); bagDto.setCount(count); - bagDto.setTotalPrice(convertCoinsIntoBills(count * bag.getFullPrice())); + bagDto.setTotalPrice(convertCoinsIntoBills(count * orderBag.getPrice())); return bagDto; } @@ -1038,15 +1025,16 @@ private UBSuser updateRecipientDataInOrder(UBSuser ubsUser, UbsCustomersDtoUpdat } private Order formAndSaveOrder(Order order, Set orderCertificates, - Map amountOfBagsOrderedMap, UBSuser userData, + List bagsOrdered, UBSuser userData, User currentUser, long sumToPayInCoins) { order.setOrderStatus(OrderStatus.FORMED); order.setCertificates(orderCertificates); - order.setAmountOfBagsOrdered(amountOfBagsOrderedMap); + bagsOrdered.forEach(orderBag -> orderBag.setOrder(order)); + order.setOrderBags(bagsOrdered); order.setUbsUser(userData); order.setUser(currentUser); order.setSumTotalAmountWithoutDiscounts( - formBagsToBeSavedAndCalculateOrderSumClient(amountOfBagsOrderedMap)); + calculateOrderSumWithoutDiscounts(bagsOrdered)); setOrderPaymentStatus(order, sumToPayInCoins); Payment payment = Payment.builder() @@ -1202,35 +1190,46 @@ private void checkAmountOfBagsIfCourierLimitByAmountOfBag(TariffsInfo courierLoc } } - private long formBagsToBeSavedAndCalculateOrderSumClient( - Map getOrderBagsAndQuantity) { - long sumToPayInCoins = 0L; - - for (Map.Entry temp : getOrderBagsAndQuantity.entrySet()) { - Integer amount = getOrderBagsAndQuantity.get(temp.getKey()); - Bag bag = bagRepository.findById(temp.getKey()) - .orElseThrow(() -> new NotFoundException(BAG_NOT_FOUND + temp.getKey())); - sumToPayInCoins += bag.getFullPrice() * amount; - } - return sumToPayInCoins; + private long calculateOrderSumWithoutDiscounts(List getOrderBagsAndQuantity) { + return getOrderBagsAndQuantity.stream() + .map(orderBag -> orderBag.getPrice() * orderBag.getAmount()) + .reduce(0L, Long::sum); } private long formBagsToBeSavedAndCalculateOrderSum( - Map map, List bags, TariffsInfo tariffsInfo) { + List orderBagList, List bags, TariffsInfo tariffsInfo) { long sumToPayInCoins = 0L; for (BagDto temp : bags) { - Bag bag = tryToGetBagById(temp.getId()); + Bag bag = findBagById(temp.getId()); if (bag.getLimitIncluded().booleanValue()) { checkAmountOfBagsIfCourierLimitByAmountOfBag(tariffsInfo, temp.getAmount()); checkSumIfCourierLimitBySumOfOrder(tariffsInfo, bag.getFullPrice() * temp.getAmount()); } sumToPayInCoins += bag.getFullPrice() * temp.getAmount(); - map.put(temp.getId(), temp.getAmount()); - } + OrderBag orderBag = createOrderBag(bag); + orderBag.setAmount(temp.getAmount()); + orderBagList.add(orderBag); + } + List orderedBagsIds = bags.stream().map(BagDto::getId).collect(toList()); + List notOrderedBags = tariffsInfo.getBags().stream() + .filter(orderBag -> !orderedBagsIds.contains(orderBag.getId())) + .map(this::createOrderBag).collect(toList()); + notOrderedBags.forEach(orderBag -> orderBag.setAmount(0)); + orderBagList.addAll(notOrderedBags); return sumToPayInCoins; } + private OrderBag createOrderBag(Bag bag) { + return OrderBag.builder() + .bag(bag) + .capacity(bag.getCapacity()) + .price(bag.getFullPrice()) + .name(bag.getName()) + .nameEng(bag.getNameEng()) + .build(); + } + private void validateCertificate(Certificate certificate) { if (certificate.getCertificateStatus() == CertificateStatus.NEW) { throw new CertificateIsNotActivated(CERTIFICATE_IS_NOT_ACTIVATED + certificate.getCode()); @@ -1384,9 +1383,9 @@ private long reduceOrderSumDueToUsedPoints(long sumToPayInCoins, int pointsToUse return sumToPayInCoins; } - private void getOrder(OrderResponseDto dto, User currentUser, Map amountOfBagsOrderedMap, + private void getOrder(OrderResponseDto dto, User currentUser, List amountOfBagsOrdered, long sumToPayInCoins, Order order, Set orderCertificates, UBSuser userData) { - formAndSaveOrder(order, orderCertificates, amountOfBagsOrderedMap, userData, currentUser, sumToPayInCoins); + formAndSaveOrder(order, orderCertificates, amountOfBagsOrdered, userData, currentUser, sumToPayInCoins); formAndSaveUser(currentUser, dto.getPointsToUse(), order); } @@ -1431,6 +1430,7 @@ public void deleteOrder(String uuid, Long id) { if (order == null) { throw new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST); } + order.setOrderBags(new ArrayList<>()); orderRepository.delete(order); } diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java index 5864a7320..a57272131 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java @@ -73,6 +73,7 @@ import greencity.enums.SortingOrder; import greencity.exceptions.BadRequestException; import greencity.exceptions.NotFoundException; +import greencity.repository.OrderBagRepository; import greencity.repository.BagRepository; import greencity.repository.CertificateRepository; import greencity.repository.EmployeeOrderPositionRepository; @@ -109,7 +110,6 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.server.ResponseStatusException; - import javax.persistence.EntityNotFoundException; import java.math.BigDecimal; import java.math.RoundingMode; @@ -179,6 +179,10 @@ public class UBSManagementServiceImpl implements UBSManagementService { @Lazy @Autowired private UBSClientService ubsClientService; + @Autowired + private final OrderBagService orderBagService; + @Autowired + private OrderBagRepository orderBagRepository; /** * Method gets all order payments, count paid amount, amount which user should @@ -821,7 +825,7 @@ private CounterOrderDetailsDto getPriceDetails(Long id) { CounterOrderDetailsDto dto = new CounterOrderDetailsDto(); Order order = orderRepository.getOrderDetails(id) .orElseThrow(() -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST + id)); - List bag = bagRepository.findBagsByOrderId(id); + List bag = orderBagService.findAllBagsInOrderBagsList(orderBagRepository.findOrderBagsByOrderId(id)); final List currentCertificate = certificateRepository.findCertificate(id); long sumAmountInCoins = 0; @@ -1060,7 +1064,7 @@ private void setOrderDetailDto(OrderDetailDto dto, Order order) { dto.setAmount(modelMapper.map(order, new TypeToken>() { }.getType())); - dto.setCapacityAndPrice(bagRepository.findBagsByOrderId(order.getId()) + dto.setCapacityAndPrice(orderBagService.findBagsByOrderId(order.getId()) .stream() .map(b -> modelMapper.map(b, BagInfoDto.class)) .collect(Collectors.toList())); diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index 8e6d83ea7..fe886952d 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -101,6 +101,7 @@ import greencity.entity.order.Courier; import greencity.entity.order.Event; import greencity.entity.order.Order; +import greencity.entity.order.OrderBag; import greencity.entity.order.OrderPaymentStatusTranslation; import greencity.entity.order.OrderStatusTranslation; import greencity.entity.order.Payment; @@ -139,7 +140,6 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; - import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; @@ -155,7 +155,6 @@ import java.util.Map; import java.util.Optional; import java.util.Set; - import static greencity.enums.NotificationReceiverType.EMAIL; import static greencity.enums.NotificationReceiverType.MOBILE; import static greencity.enums.NotificationReceiverType.SITE; @@ -178,6 +177,7 @@ public class ModelUtils { public static final OrderDetailStatusDto ORDER_DETAIL_STATUS_DTO = createOrderDetailStatusDto(); public static final List TEST_BAG_MAPPING_DTO_LIST = createBagMappingDtoList(); public static final Bag TEST_BAG = createBag(); + public static final OrderBag TEST_ORDER_BAG = createOrderBag(); public static final BagForUserDto TEST_BAG_FOR_USER_DTO = createBagForUserDto(); public static final BagInfoDto TEST_BAG_INFO_DTO = createBagInfoDto(); public static final List TEST_BAG_LIST = singletonList(TEST_BAG); @@ -227,6 +227,10 @@ public class ModelUtils { public static final NotificationDto TEST_NOTIFICATION_DTO = createNotificationDto(); public static final UpdateOrderPageAdminDto UPDATE_ORDER_PAGE_ADMIN_DTO = updateOrderPageAdminDto(); public static final CourierUpdateDto UPDATE_COURIER_DTO = getUpdateCourierDto(); + public static final Bag TEST_BAG2 = createBag().setFullPrice(100000L); + public static final Bag TEST_BAG2_2 = createBag().setFullPrice(100000L).setId(2); + public static final Bag TEST_BAG2_3 = createBag().setFullPrice(100000L).setId(3); + public static final List TEST_BAG_LIST2 = Arrays.asList(TEST_BAG2, TEST_BAG2, TEST_BAG2_2, TEST_BAG2_3); public static EmployeeFilterView getEmployeeFilterView() { return getEmployeeFilterViewWithPassedIds(1L, 5L, 10L); @@ -2276,6 +2280,18 @@ private static Bag createBag() { .build(); } + private static OrderBag createOrderBag() { + return OrderBag.builder() + .id(1L) + .name("Name") + .nameEng("NameEng") + .capacity(20) + .price(100_00L) + .order(createOrder()) + .bag(createBag()) + .build(); + } + private static BagForUserDto createBagForUserDto() { return BagForUserDto.builder() .service("Name") @@ -2668,7 +2684,94 @@ public static Optional getOptionalBag() { .build()); } + public static OrderBag getOrderBag2() { + return OrderBag.builder() + .id(2L) + .capacity(2200) + .price(22000_00L) + .name("name") + .nameEng("name eng") + .amount(20) + .bag(getBag2()) + .order(getOrder()) + .build(); + } + public static Bag getBag() { + return Bag.builder() + .id(1) + .capacity(120) + .commission(50_00L) + .price(120_00L) + .fullPrice(170_00L) + .createdAt(LocalDate.now()) + .createdBy(getEmployee()) + .editedBy(getEmployee()) + .limitIncluded(true) + + .tariffsInfo(getTariffInfo()) + .build(); + } + + public static Bag getBag2() { + return Bag.builder() + .id(2) + .capacity(120) + .commission(50_00L) + .price(120_00L) + .fullPrice(170_00L) + .createdAt(LocalDate.now()) + .createdBy(getEmployee()) + .editedBy(getEmployee()) + .limitIncluded(true) + + .tariffsInfo(getTariffInfo()) + .build(); + } + + public static OrderBag getOrderBag() { + return OrderBag.builder() + .id(1L) + .capacity(120) + .price(120_00L) + .name("name") + .nameEng("name eng") + .amount(1) + .bag(getBag()) + .order(getOrder()) + .build(); + } + + public static OrderBag getOrderBagWithConfirmedAmount() { + return OrderBag.builder() + .id(1L) + .capacity(120) + .price(120_00L) + .name("name") + .nameEng("name eng") + .amount(1) + .confirmedQuantity(2) + .bag(getBag()) + .order(getOrder()) + .build(); + } + + public static OrderBag getOrderBagWithExportedAmount() { + return OrderBag.builder() + .id(1L) + .capacity(120) + .price(120_00L) + .name("name") + .nameEng("name eng") + .amount(1) + .confirmedQuantity(2) + .exportedQuantity(2) + .bag(getBag()) + .order(getOrder()) + .build(); + } + + public static Bag getBagDeleted() { return Bag.builder() .id(1) .capacity(120) @@ -2681,6 +2784,7 @@ public static Bag getBag() { .description("Description") .descriptionEng("DescriptionEng") .limitIncluded(true) + .tariffsInfo(getTariffInfo()) .build(); } @@ -2704,14 +2808,46 @@ public static Bag getBagForOrder() { public static TariffServiceDto getTariffServiceDto() { return TariffServiceDto.builder() .name("Бавовняна сумка") - .capacity(120) - .price(120.0) + .capacity(20) + .price(100.0) .commission(50.0) .description("Description") .build(); } + public static Bag getEditedBag() { + return Bag.builder() + .id(1) + .capacity(20) + .price(100_00L) + .fullPrice(150_00L) + .commission(50_00L) + .name("Бавовняна сумка") + .description("Description") + .createdAt(LocalDate.now()) + .createdBy(getEmployee()) + .editedBy(getEmployee()) + .editedAt(LocalDate.now()) + .limitIncluded(true) + + .tariffsInfo(getTariffInfo()) + .build(); + + } + + public static OrderBag getEditedOrderBag() { + return OrderBag.builder() + .id(1L) + .amount(1) + .price(150_00L) + .capacity(20) + .name("Бавовняна сумка") + .bag(getBag()) + .order(getOrder()) + .build(); + } + public static Location getLocation() { return Location.builder() .id(1L) @@ -2809,6 +2945,7 @@ public static Bag getNewBag() { .descriptionEng("DescriptionEng") .name("name") .nameEng("nameEng") + .build(); } @@ -3549,12 +3686,20 @@ public static BigOrderTableViews getBigOrderTableViewsByDateNullTest() { .setResponsibleNavigator(null); } + public static Map getAmount() { + Map hashMap = new HashMap<>(); + hashMap.put(1, 1); + hashMap.put(2, 1); + return hashMap; + } + public static Order getOrderForGetOrderStatusData2Test() { Map hashMap = new HashMap<>(); hashMap.put(1, 1); hashMap.put(2, 1); return Order.builder() + .orderBags(Arrays.asList(getOrderBag(), getOrderBag2())) .id(1L) .amountOfBagsOrdered(hashMap) .confirmedQuantity(hashMap) @@ -4761,4 +4906,4 @@ public static PositionWithTranslateDto getPositionWithTranslateDto(Long id) { public static Refund getRefund(Long id) { return Refund.builder().orderId(id).build(); } -} +} \ No newline at end of file diff --git a/service/src/test/java/greencity/mapping/bag/BagForUserDtoMapperTest.java b/service/src/test/java/greencity/mapping/bag/BagForUserDtoMapperTest.java index 1f9fcbcdd..033425d77 100644 --- a/service/src/test/java/greencity/mapping/bag/BagForUserDtoMapperTest.java +++ b/service/src/test/java/greencity/mapping/bag/BagForUserDtoMapperTest.java @@ -2,7 +2,7 @@ import greencity.ModelUtils; import greencity.dto.bag.BagForUserDto; -import greencity.entity.order.Bag; +import greencity.entity.order.OrderBag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -18,8 +18,8 @@ class BagForUserDtoMapperTest { @Test void convert() { BagForUserDto expected = ModelUtils.TEST_BAG_FOR_USER_DTO; - Bag bag = ModelUtils.TEST_BAG; - BagForUserDto actual = bagForUserDtoMapper.convert(bag); + OrderBag orderBag = ModelUtils.TEST_ORDER_BAG; + BagForUserDto actual = bagForUserDtoMapper.convert(orderBag); assertEquals(expected.getService(), actual.getService()); assertEquals(expected.getServiceEng(), actual.getServiceEng()); diff --git a/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java b/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java index bebf741f7..440f8e824 100644 --- a/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java +++ b/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java @@ -23,6 +23,7 @@ import greencity.exceptions.NotFoundException; import greencity.exceptions.http.AccessDeniedException; import greencity.repository.*; +import greencity.service.ubs.OrderBagService; import lombok.SneakyThrows; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; @@ -84,6 +85,8 @@ class NotificationServiceImplTest { private Clock fixedClock; ExecutorService mockExecutor = MoreExecutors.newDirectExecutorService(); + @Mock + private OrderBagService orderBagService; @Nested class ClockNotification { @@ -301,7 +304,7 @@ void testNotifyInactiveAccounts() { List.of(abstractNotificationProvider), templateRepository, mockExecutor, - internalUrlConfigProp); + internalUrlConfigProp, orderBagService); User user = User.builder().id(42L).build(); User user1 = User.builder().id(43L).build(); UserNotification notification = new UserNotification(); @@ -409,7 +412,7 @@ void testNotifyAllHalfPaidPackages() { parameters.add(NotificationParameter.builder().key("orderNumber") .value(orders.get(0).getId().toString()).build()); - when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag1list()); + when(orderBagService.findBagsByOrderId(any())).thenReturn(getBag1list()); when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); @@ -510,7 +513,7 @@ void testNotifyUnpaidOrderForBroughtByHimself() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); + when(orderBagService.findBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyUnpaidOrder(order); @@ -541,7 +544,7 @@ void testNotifyUnpaidOrderForDone() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); + when(orderBagService.findBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyUnpaidOrder(order); verify(userNotificationRepository).save(any()); @@ -572,7 +575,7 @@ void testNotifyUnpaidOrderForCancel() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); + when(orderBagService.findBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyUnpaidOrder(order); @@ -603,7 +606,7 @@ void testNotifyHalfPaidOrderForDone() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); + when(orderBagService.findBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyHalfPaidPackage(order); @@ -630,7 +633,7 @@ void testNotifyHalfPaidOrderForBroughtByHimself() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); + when(orderBagService.findBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyHalfPaidPackage(order); diff --git a/service/src/test/java/greencity/service/ubs/OrderBagServiceTest.java b/service/src/test/java/greencity/service/ubs/OrderBagServiceTest.java new file mode 100644 index 000000000..e6b56145d --- /dev/null +++ b/service/src/test/java/greencity/service/ubs/OrderBagServiceTest.java @@ -0,0 +1,159 @@ +package greencity.service.ubs; + +import greencity.entity.order.Bag; +import greencity.entity.order.Order; +import greencity.entity.order.OrderBag; +import greencity.repository.OrderBagRepository; + +import java.util.*; + +import static greencity.ModelUtils.getOrderBag; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import static greencity.ModelUtils.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +@ExtendWith({MockitoExtension.class}) +class OrderBagServiceTest { + + @InjectMocks + private OrderBagService orderBagService; + @Mock + private OrderBagRepository orderBagRepository; + + @Test + void testFindBagsByOrderId() { + when(orderBagRepository.findOrderBagsByOrderId(any())).thenReturn(Arrays.asList(getOrderBag(), getOrderBag2())); + List bags = orderBagService.findBagsByOrderId(1L); + assertNotNull(bags); + Bag bag1 = getBag().setFullPrice(getOrderBag().getPrice()); + Bag bag2 = getBag2().setFullPrice(getOrderBag2().getPrice()); + + assertEquals(bag1, bags.get(0)); + assertEquals(bag2, bags.get(1)); + + } + + @Test + void testFindBagsByOrdersList() { + List bags = orderBagService.findAllBagsInOrderBagsList(Arrays.asList(getOrderBag(), getOrderBag2())); + + Bag bag1 = getBag().setFullPrice(getOrderBag().getPrice()); + Bag bag2 = getBag2().setFullPrice(getOrderBag2().getPrice()); + assertNotNull(bags); + assertEquals(bag1, bags.get(0)); + assertEquals(bag2, bags.get(1)); + } + + @Test + void testRemoveBagFromOrder() { + Order order = getOrder(); + order.setOrderBags(Arrays.asList(getOrderBag(), getOrderBag2())); + int size = order.getOrderBags().size(); + orderBagService.removeBagFromOrder(order, getOrderBag()); + assertNotEquals(order.getOrderBags().size(), size); + } + + @Test + void testGetActualBagsAmountForOrder_WithExportedQuantity() { + List bagsForOrder = new ArrayList<>(); + OrderBag bag1 = createOrderBagWithExportedQuantity(1, 10); + OrderBag bag2 = createOrderBagWithExportedQuantity(2, 20); + bagsForOrder.add(bag1); + bagsForOrder.add(bag2); + + Map result = orderBagService.getActualBagsAmountForOrder(bagsForOrder); + + Map expected = new HashMap<>(); + expected.put(1, 10); + expected.put(2, 20); + assertEquals(expected, result); + } + + @Test + void testGetActualBagsAmountForOrder_WithConfirmedQuantity() { + List bagsForOrder = new ArrayList<>(); + OrderBag bag1 = createOrderBagWithConfirmedQuantity(1, 5); + OrderBag bag2 = createOrderBagWithConfirmedQuantity(2, 15); + bagsForOrder.add(bag1); + bagsForOrder.add(bag2); + + Map result = orderBagService.getActualBagsAmountForOrder(bagsForOrder); + + Map expected = new HashMap<>(); + expected.put(1, 5); + expected.put(2, 15); + assertEquals(expected, result); + } + + @Test + void testGetActualBagsAmountForOrder_WithAmount() { + List bagsForOrder = new ArrayList<>(); + OrderBag bag1 = createOrderBagWithAmount(1, 3); + OrderBag bag2 = createOrderBagWithAmount(2, 7); + bagsForOrder.add(bag1); + bagsForOrder.add(bag2); + + Map result = orderBagService.getActualBagsAmountForOrder(bagsForOrder); + + Map expected = new HashMap<>(); + expected.put(1, 3); + expected.put(2, 7); + assertEquals(expected, result); + } + + @Test + void testGetActualBagsAmountForOrder_WithNoMatch() { + List bagsForOrder = new ArrayList<>(); + OrderBag bag1 = createOrderBagWithAmount(1, 3); + bag1.setExportedQuantity(null); + bag1.setConfirmedQuantity(null); + bag1.setAmount(null); + + OrderBag bag2 = createOrderBagWithAmount(2, 7); + bag2.setExportedQuantity(null); + bag2.setConfirmedQuantity(null); + bag2.setAmount(null); + bagsForOrder.add(bag1); + bagsForOrder.add(bag2); + + Map result = orderBagService.getActualBagsAmountForOrder(bagsForOrder); + + Map expected = new HashMap<>(); + assertEquals(expected, result); + } + + private OrderBag createOrderBagWithExportedQuantity(int bagId, int exportedQuantity) { + OrderBag orderBag = new OrderBag(); + Bag bag = new Bag(); + bag.setId(bagId); + orderBag.setBag(bag); + orderBag.setExportedQuantity(exportedQuantity); + return orderBag; + } + + private OrderBag createOrderBagWithConfirmedQuantity(int bagId, int confirmedQuantity) { + OrderBag orderBag = new OrderBag(); + Bag bag = new Bag(); + bag.setId(bagId); + orderBag.setBag(bag); + orderBag.setConfirmedQuantity(confirmedQuantity); + return orderBag; + } + + private OrderBag createOrderBagWithAmount(int bagId, int amount) { + OrderBag orderBag = new OrderBag(); + Bag bag = new Bag(); + bag.setId(bagId); + orderBag.setBag(bag); + orderBag.setAmount(amount); + return orderBag; + } +} \ No newline at end of file diff --git a/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java b/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java index 49327a86e..f3a3c2716 100644 --- a/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java @@ -23,6 +23,7 @@ import greencity.dto.tariff.SetTariffLimitsDto; import greencity.entity.order.Bag; import greencity.entity.order.Courier; +import greencity.entity.order.Order; import greencity.entity.order.Service; import greencity.entity.order.TariffLocation; import greencity.entity.order.TariffsInfo; @@ -30,10 +31,7 @@ import greencity.entity.user.Region; import greencity.entity.user.employee.Employee; import greencity.entity.user.employee.ReceivingStation; -import greencity.enums.CourierStatus; -import greencity.enums.LocationStatus; -import greencity.enums.StationStatus; -import greencity.enums.TariffStatus; +import greencity.enums.*; import greencity.exceptions.BadRequestException; import greencity.exceptions.NotFoundException; import greencity.exceptions.UnprocessableEntityException; @@ -47,6 +45,8 @@ import greencity.repository.DeactivateChosenEntityRepository; import greencity.repository.EmployeeRepository; import greencity.repository.LocationRepository; +import greencity.repository.OrderBagRepository; +import greencity.repository.OrderRepository; import greencity.repository.ReceivingStationRepository; import greencity.repository.RegionRepository; import greencity.repository.ServiceRepository; @@ -68,7 +68,10 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Arrays; import java.util.Optional; +import java.util.Map; +import java.util.HashMap; import java.util.Set; import java.util.UUID; import java.util.stream.Stream; @@ -131,6 +134,12 @@ class SuperAdminServiceImplTest { private TariffLocationRepository tariffsLocationRepository; @Mock private DeactivateChosenEntityRepository deactivateTariffsForChosenParamRepository; + @Mock + private OrderBagRepository orderBagRepository; + @Mock + private OrderRepository orderRepository; + @Mock + private OrderBagService orderBagService; @AfterEach void afterEach() { @@ -146,7 +155,8 @@ void afterEach() { receivingStationRepository, tariffsInfoRepository, tariffsLocationRepository, - deactivateTariffsForChosenParamRepository); + deactivateTariffsForChosenParamRepository, + orderBagRepository); } @Test @@ -205,7 +215,7 @@ void addTariffServiceIfTariffNotFoundExceptionTest() { @Test void getTariffServiceTest() { - List bags = List.of(ModelUtils.getOptionalBag().get()); + List bags = List.of(ModelUtils.getNewBag()); GetTariffServiceDto dto = ModelUtils.getGetTariffServiceDto(); when(tariffsInfoRepository.existsById(1L)).thenReturn(true); @@ -219,6 +229,20 @@ void getTariffServiceTest() { verify(modelMapper).map(bags.get(0), GetTariffServiceDto.class); } + @Test + void getTariffServiceIfThereAreNoBags() { + List bags = Collections.emptyList(); + + when(tariffsInfoRepository.existsById(1L)).thenReturn(true); + when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(bags); + + List dtos = superAdminService.getTariffService(1); + + assertEquals(Collections.emptyList(), dtos); + verify(tariffsInfoRepository).existsById(1L); + verify(bagRepository).findBagsByTariffsInfoId(1L); + } + @Test void getTariffServiceIfTariffNotFoundException() { when(tariffsInfoRepository.existsById(1L)).thenReturn(false); @@ -233,36 +257,112 @@ void getTariffServiceIfTariffNotFoundException() { @Test void deleteTariffServiceWhenTariffBagsWithLimits() { Bag bag = ModelUtils.getBag(); + Bag bagDeleted = ModelUtils.getBagDeleted(); TariffsInfo tariffsInfo = ModelUtils.getTariffInfo(); - bag.setTariffsInfo(tariffsInfo); when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); - doNothing().when(bagRepository).delete(bag); when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(List.of(bag)); + superAdminService.deleteTariffService(1); - assertEquals(TariffStatus.ACTIVE, tariffsInfo.getTariffStatus()); + verify(bagRepository).findById(1); - verify(bagRepository).delete(bag); verify(bagRepository).findBagsByTariffsInfoId(1L); verify(tariffsInfoRepository, never()).save(tariffsInfo); } @Test - void deleteTariffServiceWhenTariffBagsListIsEmpty() { + void deleteTariffService2() { Bag bag = ModelUtils.getBag(); - TariffsInfo tariffsInfo = ModelUtils.getTariffInfo(); + TariffsInfo tariffsInfo = ModelUtils.getTariffsInfoWithStatusNew(); + tariffsInfo.setBags(Arrays.asList(bag)); bag.setTariffsInfo(tariffsInfo); - TariffsInfo tariffsInfoNew = ModelUtils.getTariffsInfoWithStatusNew(); - tariffsInfoNew.setBags(Collections.emptyList()); + tariffsInfo.setTariffStatus(TariffStatus.DEACTIVATED); + Map amount = new HashMap<>(); + amount.put(1, 3); + amount.put(2, 7); + + Order order = ModelUtils.getOrder(); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(Collections.emptyList()); + when(tariffsInfoRepository.save(tariffsInfo)).thenReturn(tariffsInfo); + when(orderRepository.findAllByBagId(bag.getId())).thenReturn(Arrays.asList(order)); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))).thenReturn(amount); + superAdminService.deleteTariffService(1); + + verify(bagRepository).findById(1); + verify(bagRepository).findBagsByTariffsInfoId(1L); + verify(tariffsInfoRepository).save(tariffsInfo); + } + + @Test + void deleteTariffService3() { + Bag bag = ModelUtils.getBag(); + TariffsInfo tariffsInfo = ModelUtils.getTariffsInfoWithStatusNew(); + tariffsInfo.setBags(Arrays.asList(bag)); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setTariffStatus(TariffStatus.DEACTIVATED); + Map amount = new HashMap<>(); + amount.put(1, 3); + amount.put(2, 7); + Order order = ModelUtils.getOrder(); + order.setOrderPaymentStatus(OrderPaymentStatus.UNPAID); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(Collections.emptyList()); + when(tariffsInfoRepository.save(tariffsInfo)).thenReturn(tariffsInfo); + when(orderRepository.findAllByBagId(bag.getId())).thenReturn(Arrays.asList(order)); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))).thenReturn(amount); + superAdminService.deleteTariffService(1); + + verify(bagRepository).findById(1); + verify(bagRepository).findBagsByTariffsInfoId(1L); + verify(tariffsInfoRepository).save(tariffsInfo); + } + @Test + void deleteTariffService4() { + Bag bag = ModelUtils.getBag(); + TariffsInfo tariffsInfo = ModelUtils.getTariffsInfoWithStatusNew(); + tariffsInfo.setBags(Arrays.asList(bag)); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setTariffStatus(TariffStatus.DEACTIVATED); + Map amount = new HashMap<>(); + amount.put(1, 0); + Order order = ModelUtils.getOrder(); + order.setOrderPaymentStatus(OrderPaymentStatus.UNPAID); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); - doNothing().when(bagRepository).delete(bag); when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(Collections.emptyList()); when(tariffsInfoRepository.save(tariffsInfo)).thenReturn(tariffsInfo); + when(orderRepository.findAllByBagId(bag.getId())).thenReturn(Arrays.asList(order)); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))).thenReturn(amount); superAdminService.deleteTariffService(1); - assertEquals(TariffStatus.NEW, tariffsInfoNew.getTariffStatus()); + + verify(bagRepository).findById(1); + verify(bagRepository).findBagsByTariffsInfoId(1L); + verify(tariffsInfoRepository).save(tariffsInfo); + } + + @Test + void deleteTariffServiceWhenTariffBagsListIsEmpty() { + Bag bag = ModelUtils.getBag(); + TariffsInfo tariffsInfo = ModelUtils.getTariffsInfoWithStatusNew(); + tariffsInfo.setBags(Arrays.asList(bag)); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setTariffStatus(TariffStatus.DEACTIVATED); + Map amount = new HashMap<>(); + amount.put(1, 0); + Order order = ModelUtils.getOrder(); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(Collections.emptyList()); + when(tariffsInfoRepository.save(tariffsInfo)).thenReturn(tariffsInfo); + when(orderRepository.findAllByBagId(bag.getId())).thenReturn(Arrays.asList(order)); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))).thenReturn(amount); + superAdminService.deleteTariffService(1); + verify(bagRepository).findById(1); - verify(bagRepository).delete(bag); verify(bagRepository).findBagsByTariffsInfoId(1L); verify(tariffsInfoRepository).save(tariffsInfo); } @@ -270,74 +370,175 @@ void deleteTariffServiceWhenTariffBagsListIsEmpty() { @Test void deleteTariffServiceWhenTariffBagsWithoutLimits() { Bag bag = ModelUtils.getBag(); - TariffsInfo tariffsInfo = ModelUtils.getTariffInfo(); bag.setLimitIncluded(false); - bag.setTariffsInfo(tariffsInfo); + Bag bagDeleted = ModelUtils.getBagDeleted(); + bagDeleted.setLimitIncluded(false); TariffsInfo tariffsInfoNew = ModelUtils.getTariffsInfoWithStatusNew(); - tariffsInfoNew.setBags(Collections.emptyList()); + tariffsInfoNew.setBags(Arrays.asList(bag)); + bag.setTariffsInfo(tariffsInfoNew); + tariffsInfoNew.setTariffStatus(TariffStatus.DEACTIVATED); + tariffsInfoNew.setBags(Arrays.asList(bag)); + bag.setTariffsInfo(tariffsInfoNew); + tariffsInfoNew.setTariffStatus(TariffStatus.DEACTIVATED); when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); - doNothing().when(bagRepository).delete(bag); when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(List.of(bag)); - when(tariffsInfoRepository.save(tariffsInfo)).thenReturn(tariffsInfoNew); + when(tariffsInfoRepository.save(tariffsInfoNew)).thenReturn(tariffsInfoNew); + superAdminService.deleteTariffService(1); - assertEquals(TariffStatus.NEW, tariffsInfoNew.getTariffStatus()); + verify(bagRepository).findById(1); - verify(bagRepository).delete(bag); verify(bagRepository).findBagsByTariffsInfoId(1L); verify(tariffsInfoRepository).save(tariffsInfoNew); } @Test - void deleteTariffServiceThrowNotFoundException() { + void deleteTariffServiceThrowBagNotFoundException() { when(bagRepository.findById(1)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.deleteTariffService(1)); verify(bagRepository).findById(1); - verify(bagRepository, never()).delete(any(Bag.class)); + verify(bagRepository, never()).save(any(Bag.class)); } @Test - void editTariffService() { + void editTariffServiceWithUnpaidOrder() { Bag bag = ModelUtils.getBag(); + Bag editedBag = ModelUtils.getEditedBag(); Employee employee = ModelUtils.getEmployee(); TariffServiceDto dto = ModelUtils.getTariffServiceDto(); GetTariffServiceDto editedDto = ModelUtils.getGetTariffServiceDto(); + Order order = ModelUtils.getOrder(); String uuid = UUID.randomUUID().toString(); + order.setOrderBags(List.of(ModelUtils.getOrderBag())); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); - when(bagRepository.save(bag)).thenReturn(bag); - when(modelMapper.map(bag, GetTariffServiceDto.class)).thenReturn(editedDto); - superAdminService.editTariffService(dto, 1, uuid); + when(bagRepository.save(editedBag)).thenReturn(editedBag); + when(modelMapper.map(editedBag, GetTariffServiceDto.class)).thenReturn(editedDto); + doNothing().when(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + when(orderRepository.findAllUnpaidOrdersByBagId(1)).thenReturn(List.of(order)); + when(orderRepository.saveAll(List.of(order))).thenReturn(List.of(order)); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); + GetTariffServiceDto actual = superAdminService.editTariffService(dto, 1, uuid); + + assertEquals(editedDto, actual); verify(employeeRepository).findByUuid(uuid); verify(bagRepository).findById(1); - verify(bagRepository).save(bag); - verify(modelMapper).map(bag, GetTariffServiceDto.class); + verify(bagRepository).save(editedBag); + verify(modelMapper).map(editedBag, GetTariffServiceDto.class); + verify(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + verify(orderRepository).findAllUnpaidOrdersByBagId(1); + verify(orderRepository).saveAll(anyList()); } @Test - void editTariffServiceIfCommissionIsNull() { + void editTariffServiceWithUnpaidOrderAndBagConfirmedAmount() { Bag bag = ModelUtils.getBag(); + Bag editedBag = ModelUtils.getEditedBag(); Employee employee = ModelUtils.getEmployee(); TariffServiceDto dto = ModelUtils.getTariffServiceDto(); - dto.setCommission(null); GetTariffServiceDto editedDto = ModelUtils.getGetTariffServiceDto(); + Order order = ModelUtils.getOrder(); String uuid = UUID.randomUUID().toString(); + order.setOrderBags(List.of(ModelUtils.getOrderBagWithConfirmedAmount())); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); - when(bagRepository.save(bag)).thenReturn(bag); - when(modelMapper.map(bag, GetTariffServiceDto.class)).thenReturn(editedDto); + when(bagRepository.save(editedBag)).thenReturn(editedBag); + when(modelMapper.map(editedBag, GetTariffServiceDto.class)).thenReturn(editedDto); + doNothing().when(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + when(orderRepository.findAllUnpaidOrdersByBagId(1)).thenReturn(List.of(order)); + when(orderRepository.saveAll(List.of(order))).thenReturn(List.of(order)); + when(orderBagService + .getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag().setConfirmedQuantity(2)))) + .thenReturn(ModelUtils.getAmount()); + + GetTariffServiceDto actual = superAdminService.editTariffService(dto, 1, uuid); + + assertEquals(editedDto, actual); + verify(employeeRepository).findByUuid(uuid); + verify(bagRepository).findById(1); + verify(bagRepository).save(editedBag); + verify(modelMapper).map(editedBag, GetTariffServiceDto.class); + verify(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + verify(orderRepository).findAllUnpaidOrdersByBagId(1); + verify(orderRepository).saveAll(anyList()); + } - superAdminService.editTariffService(dto, 1, uuid); + @Test + void editTariffServiceWithUnpaidOrderAndBagExportedAmount() { + Bag bag = ModelUtils.getBag(); + Bag editedBag = ModelUtils.getEditedBag(); + Employee employee = ModelUtils.getEmployee(); + TariffServiceDto dto = ModelUtils.getTariffServiceDto(); + GetTariffServiceDto editedDto = ModelUtils.getGetTariffServiceDto(); + Order order = ModelUtils.getOrder(); + String uuid = UUID.randomUUID().toString(); + order.setOrderBags(List.of(ModelUtils.getOrderBagWithExportedAmount())); + when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); + when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.save(editedBag)).thenReturn(editedBag); + when(modelMapper.map(editedBag, GetTariffServiceDto.class)).thenReturn(editedDto); + doNothing().when(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + when(orderRepository.findAllUnpaidOrdersByBagId(1)).thenReturn(List.of(order)); + when(orderRepository.saveAll(List.of(order))).thenReturn(List.of(order)); + when(orderBagService.getActualBagsAmountForOrder( + Arrays.asList(ModelUtils.getOrderBag().setExportedQuantity(2).setConfirmedQuantity(2)))) + .thenReturn(ModelUtils.getAmount()); + + GetTariffServiceDto actual = superAdminService.editTariffService(dto, 1, uuid); + + assertEquals(editedDto, actual); verify(employeeRepository).findByUuid(uuid); verify(bagRepository).findById(1); - verify(bagRepository).save(bag); - verify(modelMapper).map(bag, GetTariffServiceDto.class); + verify(bagRepository).findById(1); + + verify(bagRepository).save(editedBag); + verify(modelMapper).map(editedBag, GetTariffServiceDto.class); + verify(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + verify(orderRepository).findAllUnpaidOrdersByBagId(1); + verify(orderRepository).saveAll(anyList()); + } + + @Test + void editTariffServiceWithoutUnpaidOrder() { + Bag bag = ModelUtils.getBag(); + Bag editedBag = ModelUtils.getEditedBag(); + Employee employee = ModelUtils.getEmployee(); + TariffServiceDto dto = ModelUtils.getTariffServiceDto(); + GetTariffServiceDto editedDto = ModelUtils.getGetTariffServiceDto(); + String uuid = UUID.randomUUID().toString(); + + when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); + when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.save(editedBag)).thenReturn(editedBag); + when(modelMapper.map(editedBag, GetTariffServiceDto.class)).thenReturn(editedDto); + doNothing().when(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + when(orderRepository.findAllUnpaidOrdersByBagId(1)).thenReturn(Collections.emptyList()); + + GetTariffServiceDto actual = superAdminService.editTariffService(dto, 1, uuid); + + assertEquals(editedDto, actual); + verify(employeeRepository).findByUuid(uuid); + verify(bagRepository).findById(1); + verify(bagRepository).save(editedBag); + verify(modelMapper).map(editedBag, GetTariffServiceDto.class); + verify(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + verify(orderRepository).findAllUnpaidOrdersByBagId(1); + verify(orderRepository, never()).saveAll(anyList()); } @Test @@ -409,38 +610,40 @@ void deleteServiceThrowNotFoundException() { void getService() { Service service = ModelUtils.getService(); GetServiceDto getServiceDto = ModelUtils.getGetServiceDto(); + TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); - when(tariffsInfoRepository.existsById(1L)).thenReturn(true); + when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(service)); when(modelMapper.map(service, GetServiceDto.class)).thenReturn(getServiceDto); assertEquals(getServiceDto, superAdminService.getService(1L)); - verify(tariffsInfoRepository).existsById(1L); + verify(tariffsInfoRepository).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); verify(modelMapper).map(service, GetServiceDto.class); } @Test void getServiceIfServiceNotExists() { - when(tariffsInfoRepository.existsById(1L)).thenReturn(true); + TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); + + when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.empty()); assertNull(superAdminService.getService(1L)); - verify(tariffsInfoRepository).existsById(1L); + verify(tariffsInfoRepository).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); - verify(modelMapper, never()).map(any(Service.class), any(GetServiceDto.class)); } @Test void getServiceThrowTariffNotFoundException() { - when(tariffsInfoRepository.existsById(1L)).thenReturn(false); + when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.getService(1L)); - verify(tariffsInfoRepository).existsById(1L); + verify(tariffsInfoRepository).findById(1L); } @Test @@ -507,7 +710,6 @@ void addService() { TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); String uuid = UUID.randomUUID().toString(); - when(tariffsInfoRepository.existsById(1L)).thenReturn(true); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.empty()); when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); @@ -518,7 +720,6 @@ void addService() { assertEquals(getServiceDto, superAdminService.addService(1L, serviceDto, uuid)); verify(employeeRepository).findByUuid(uuid); - verify(tariffsInfoRepository).existsById(1L); verify(tariffsInfoRepository).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); verify(serviceRepository).save(service); @@ -530,31 +731,33 @@ void addService() { void addServiceThrowServiceAlreadyExistsException() { Service createdService = ModelUtils.getService(); ServiceDto serviceDto = ModelUtils.getServiceDto(); + TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); String uuid = UUID.randomUUID().toString(); - when(tariffsInfoRepository.existsById(1L)).thenReturn(true); + when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(createdService)); assertThrows(ServiceAlreadyExistsException.class, () -> superAdminService.addService(1L, serviceDto, uuid)); - verify(tariffsInfoRepository).existsById(1L); + verify(tariffsInfoRepository).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); } @Test void addServiceThrowEmployeeNotFoundException() { ServiceDto serviceDto = ModelUtils.getServiceDto(); + TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); String uuid = UUID.randomUUID().toString(); - when(tariffsInfoRepository.existsById(1L)).thenReturn(true); + when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.empty()); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.addService(1L, serviceDto, uuid)); - verify(tariffsInfoRepository).existsById(1L); + verify(tariffsInfoRepository).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); verify(employeeRepository).findByUuid(uuid); } @@ -564,12 +767,12 @@ void addServiceThrowTariffNotFoundException() { ServiceDto serviceDto = ModelUtils.getServiceDto(); String uuid = UUID.randomUUID().toString(); - when(tariffsInfoRepository.existsById(1L)).thenReturn(false); + when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.addService(1L, serviceDto, uuid)); - verify(tariffsInfoRepository).existsById(1L); + verify(tariffsInfoRepository).findById(1L); } @Test diff --git a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java index c36b12eed..da6826fee 100644 --- a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java @@ -42,14 +42,7 @@ import greencity.dto.user.UserProfileDto; import greencity.dto.user.UserProfileUpdateDto; import greencity.entity.coords.Coordinates; -import greencity.entity.order.Bag; -import greencity.entity.order.Certificate; -import greencity.entity.order.Event; -import greencity.entity.order.Order; -import greencity.entity.order.OrderPaymentStatusTranslation; -import greencity.entity.order.OrderStatusTranslation; -import greencity.entity.order.Payment; -import greencity.entity.order.TariffsInfo; +import greencity.entity.order.*; import greencity.entity.telegram.TelegramBot; import greencity.entity.user.User; import greencity.entity.user.employee.Employee; @@ -69,25 +62,7 @@ import greencity.exceptions.http.AccessDeniedException; import greencity.exceptions.user.UBSuserNotFoundException; import greencity.exceptions.user.UserNotFoundException; -import greencity.repository.AddressRepository; -import greencity.repository.BagRepository; -import greencity.repository.CertificateRepository; -import greencity.repository.CourierRepository; -import greencity.repository.EmployeeRepository; -import greencity.repository.EventRepository; -import greencity.repository.LocationRepository; -import greencity.repository.OrderAddressRepository; -import greencity.repository.OrderPaymentStatusTranslationRepository; -import greencity.repository.OrderRepository; -import greencity.repository.OrderStatusTranslationRepository; -import greencity.repository.OrdersForUserRepository; -import greencity.repository.PaymentRepository; -import greencity.repository.TariffLocationRepository; -import greencity.repository.TariffsInfoRepository; -import greencity.repository.TelegramBotRepository; -import greencity.repository.UBSuserRepository; -import greencity.repository.UserRepository; -import greencity.repository.ViberBotRepository; +import greencity.repository.*; import greencity.service.google.GoogleApiService; import greencity.service.locations.LocationApiService; import greencity.util.Bot; @@ -123,80 +98,7 @@ import java.util.UUID; import java.util.stream.Collectors; -import static greencity.ModelUtils.TEST_BAG_FOR_USER_DTO; -import static greencity.ModelUtils.TEST_BAG_LIST; -import static greencity.ModelUtils.TEST_EMAIL; -import static greencity.ModelUtils.TEST_ORDER_ADDRESS_DTO_REQUEST; -import static greencity.ModelUtils.TEST_PAYMENT_LIST; -import static greencity.ModelUtils.addressDto; -import static greencity.ModelUtils.addressDtoList; -import static greencity.ModelUtils.addressList; -import static greencity.ModelUtils.bagDto; -import static greencity.ModelUtils.botList; -import static greencity.ModelUtils.createCertificateDto; -import static greencity.ModelUtils.getAddress; -import static greencity.ModelUtils.getAddressDtoResponse; -import static greencity.ModelUtils.getAddressRequestDto; -import static greencity.ModelUtils.getBag; -import static greencity.ModelUtils.getBag1list; -import static greencity.ModelUtils.getBag4list; -import static greencity.ModelUtils.getBagForOrder; -import static greencity.ModelUtils.getBagTranslationDto; -import static greencity.ModelUtils.getCancellationDto; -import static greencity.ModelUtils.getCertificate; -import static greencity.ModelUtils.getCourier; -import static greencity.ModelUtils.getCourierDto; -import static greencity.ModelUtils.getCourierDtoList; -import static greencity.ModelUtils.getEmployee; -import static greencity.ModelUtils.getGeocodingResult; -import static greencity.ModelUtils.getListOfEvents; -import static greencity.ModelUtils.getLocation; -import static greencity.ModelUtils.getMaximumAmountOfAddresses; -import static greencity.ModelUtils.getOrder; -import static greencity.ModelUtils.getOrderClientDto; -import static greencity.ModelUtils.getOrderCount; -import static greencity.ModelUtils.getOrderCountWithPaymentStatusPaid; -import static greencity.ModelUtils.getOrderDetails; -import static greencity.ModelUtils.getOrderDetailsWithoutSender; -import static greencity.ModelUtils.getOrderDoneByUser; -import static greencity.ModelUtils.getOrderFondyClientDto; -import static greencity.ModelUtils.getOrderPaymentDetailDto; -import static greencity.ModelUtils.getOrderPaymentStatusTranslation; -import static greencity.ModelUtils.getOrderResponseDto; -import static greencity.ModelUtils.getOrderStatusDto; -import static greencity.ModelUtils.getOrderStatusTranslation; -import static greencity.ModelUtils.getOrderTest; -import static greencity.ModelUtils.getOrderWithEvents; -import static greencity.ModelUtils.getOrderWithTariffAndLocation; -import static greencity.ModelUtils.getOrderWithoutPayment; -import static greencity.ModelUtils.getOrdersDto; -import static greencity.ModelUtils.getPayment; -import static greencity.ModelUtils.getPaymentResponseDto; -import static greencity.ModelUtils.getSuccessfulFondyResponse; -import static greencity.ModelUtils.getTariffInfo; -import static greencity.ModelUtils.getTariffInfoWithLimitOfBags; -import static greencity.ModelUtils.getTariffInfoWithLimitOfBagsAndMaxLessThanCountOfBigBag; -import static greencity.ModelUtils.getTariffLocation; -import static greencity.ModelUtils.getTariffsForLocationDto; -import static greencity.ModelUtils.getTariffsInfo; -import static greencity.ModelUtils.getTelegramBotNotifyTrue; -import static greencity.ModelUtils.getTestOrderAddressDtoRequest; -import static greencity.ModelUtils.getTestOrderAddressLocationDto; -import static greencity.ModelUtils.getTestUser; -import static greencity.ModelUtils.getUBSuser; -import static greencity.ModelUtils.getUBSuserWithoutSender; -import static greencity.ModelUtils.getUbsCustomersDtoUpdate; -import static greencity.ModelUtils.getUbsUsers; -import static greencity.ModelUtils.getUser; -import static greencity.ModelUtils.getUserForCreate; -import static greencity.ModelUtils.getUserInfoDto; -import static greencity.ModelUtils.getUserPointsAndAllBagsDto; -import static greencity.ModelUtils.getUserProfileCreateDto; -import static greencity.ModelUtils.getUserProfileUpdateDto; -import static greencity.ModelUtils.getUserProfileUpdateDtoWithBotsIsNotifyFalse; -import static greencity.ModelUtils.getUserWithBotNotifyTrue; -import static greencity.ModelUtils.getUserWithLastLocation; -import static greencity.ModelUtils.getViberBotNotifyTrue; +import static greencity.ModelUtils.*; import static greencity.constant.ErrorMessage.ACTUAL_ADDRESS_NOT_FOUND; import static greencity.constant.ErrorMessage.ADDRESS_ALREADY_EXISTS; import static greencity.constant.ErrorMessage.CANNOT_ACCESS_PERSONAL_INFO; @@ -316,6 +218,10 @@ class UBSClientServiceImplTest { @Mock private LocationApiService locationApiService; + @Mock + private OrderBagService orderBagService; + @Mock + private OrderBagRepository orderBagRepository; @Test void testGetAllDistricts() { @@ -769,7 +675,8 @@ void testSaveToDB() throws IllegalAccessException { f.set(ubsService, "1"); } } - + tariffsInfo.setBags(Arrays.asList(bag)); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); @@ -780,7 +687,6 @@ void testSaveToDB() throws IllegalAccessException { when(orderRepository.findById(any())).thenReturn(Optional.of(order1)); when(encryptionUtil.formRequestSignature(any(), eq(null), eq("1"))).thenReturn("TestValue"); when(fondyClient.getCheckoutResponse(any())).thenReturn(getSuccessfulFondyResponse()); - FondyOrderResponse result = ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null); Assertions.assertNotNull(result); @@ -803,10 +709,12 @@ void testSaveToDBWithTwoBags() throws IllegalAccessException { Bag bag1 = getBagForOrder(); bag1.setId(1); + bag1.setCapacity(100); bag1.setLimitIncluded(false); Bag bag3 = getBagForOrder(); + bag3.setCapacity(1000); TariffsInfo tariffsInfo = getTariffInfo(); - + tariffsInfo.setBags(Arrays.asList(bag1, bag3)); UBSuser ubSuser = getUBSuser(); OrderAddress orderAddress = ubSuser.getOrderAddress(); @@ -817,7 +725,9 @@ void testSaveToDBWithTwoBags() throws IllegalAccessException { Payment payment1 = getPayment(); payment1.setId(1L); order1.getPayment().add(payment1); - + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag(), ModelUtils.getOrderBag())); + order1 + .setOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag(), ModelUtils.getOrderBag())); Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { if (f.getName().equals("merchantId")) { @@ -859,6 +769,7 @@ void testSaveToDBWithCertificates() throws IllegalAccessException { Bag bag = getBagForOrder(); TariffsInfo tariffsInfo = getTariffInfo(); + tariffsInfo.setBags(Arrays.asList(bag)); UBSuser ubSuser = getUBSuser(); @@ -882,7 +793,7 @@ void testSaveToDBWithCertificates() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findById(any())).thenReturn(Optional.of(bag)); when(certificateRepository.findById(anyString())).thenReturn(Optional.of(getCertificate())); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); @@ -912,6 +823,7 @@ void testSaveToDBWithDontSendLinkToFondy() throws IllegalAccessException { Bag bag = getBagForOrder(); TariffsInfo tariffsInfo = getTariffInfo(); + tariffsInfo.setBags(Arrays.asList(bag)); Certificate certificate = getCertificate(); certificate.setPoints(1000_00); @@ -938,7 +850,7 @@ void testSaveToDBWithDontSendLinkToFondy() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findById(any())).thenReturn(Optional.of(bag)); when(certificateRepository.findById(anyString())).thenReturn(Optional.of(certificate)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); @@ -965,6 +877,7 @@ void testSaveToDBWhenSumToPayLessThanPoints() throws IllegalAccessException { Bag bag = getBagForOrder(); TariffsInfo tariffsInfo = getTariffInfo(); + tariffsInfo.setBags(Arrays.asList(bag)); UBSuser ubSuser = getUBSuser(); @@ -988,7 +901,7 @@ void testSaveToDBWhenSumToPayLessThanPoints() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findById(any())).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); @@ -1212,11 +1125,14 @@ void testSaveToDBWithoutOrderUnpaid() throws IllegalAccessException { Payment payment1 = getPayment(); payment1.setId(1L); order1.getPayment().add(payment1); - - when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + TariffsInfo tariffsInfo = getTariffsInfo(); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(tariffsInfo)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + when(bagRepository.findById(any())).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); when(orderRepository.findById(any())).thenReturn(Optional.of(order1)); @@ -1227,7 +1143,7 @@ void testSaveToDBWithoutOrderUnpaid() throws IllegalAccessException { verify(userRepository, times(1)).findByUuid("35467585763t4sfgchjfuyetf"); verify(tariffsInfoRepository, times(1)) .findTariffsInfoByBagIdAndLocationId(anyList(), anyLong()); - verify(bagRepository, times(2)).findById(any()); + verify(bagRepository, times(1)).findById(any()); verify(ubsUserRepository, times(1)).findById(anyLong()); verify(modelMapper, times(1)).map(dto.getPersonalData(), UBSuser.class); verify(orderRepository, times(1)).findById(anyLong()); @@ -1241,14 +1157,19 @@ void saveToDBFailPaidOrder() { dto.getBags().get(0).setAmount(5); Order order = getOrder(); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); Bag bag = getBagForOrder(); TariffsInfo tariffsInfo = getTariffInfo(); - + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); + when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) + .thenReturn(Optional.of(tariffsInfo)); when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findById(any())).thenReturn(Optional.of(bag)); when(orderRepository.findById(any())).thenReturn(Optional.of(order)); assertThrows(BadRequestException.class, @@ -2491,54 +2412,11 @@ void deleteOrderFail() { }); } - @Test - void processOrderFondyClient() throws Exception { - Order order = getOrderCount(); - HashMap value = new HashMap<>(); - value.put(1, 22); - order.setAmountOfBagsOrdered(value); - order.setPointsToUse(100); - order.setSumTotalAmountWithoutDiscounts(1000_00L); - order.setCertificates(Set.of(getCertificate())); - order.setPayment(TEST_PAYMENT_LIST); - User user = getUser(); - user.setCurrentPoints(100); - user.setChangeOfPointsList(new ArrayList<>()); - order.setUser(user); - - OrderFondyClientDto dto = getOrderFondyClientDto(); - Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); - for (Field f : fields) { - if (f.getName().equals("merchantId")) { - f.setAccessible(true); - f.set(ubsService, "1"); - } - } - - Certificate certificate = getCertificate(); - CertificateDto certificateDto = createCertificateDto(); - - when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); - when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); - - when(encryptionUtil.formRequestSignature(any(), eq(null), eq("1"))).thenReturn("TestValue"); - when(fondyClient.getCheckoutResponse(any())).thenReturn(getSuccessfulFondyResponse()); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); - when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); - when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); - - ubsService.processOrderFondyClient(dto, "uuid"); - - verify(encryptionUtil).formRequestSignature(any(), eq(null), eq("1")); - verify(fondyClient).getCheckoutResponse(any()); - - } - @Test void processOrderFondyClient2() throws Exception { Order order = getOrderCount(); Certificate certificate = getCertificate(); - certificate.setPoints(1500); + HashMap value = new HashMap<>(); value.put(1, 22); order.setAmountOfBagsOrdered(value); @@ -2554,6 +2432,9 @@ void processOrderFondyClient2() throws Exception { OrderFondyClientDto dto = getOrderFondyClientDto(); dto.setCertificates(Set.of("1111-1234")); + order.setCertificates(Set.of(getCertificate())); + order.setPayment(TEST_PAYMENT_LIST); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { if (f.getName().equals("merchantId")) { @@ -2562,26 +2443,26 @@ void processOrderFondyClient2() throws Exception { } } + order.setPointsToUse(-10000); CertificateDto certificateDto = createCertificateDto(); - certificateDto.setPoints(1500); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); + when(fondyClient.getCheckoutResponse(any())).thenReturn(getSuccessfulFondyResponse()); + when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); when(certificateRepository.findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE)).thenReturn(Set.of(certificate)); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); - when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); - when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); ubsService.processOrderFondyClient(dto, "uuid"); - verify(orderRepository).findById(1L); verify(userRepository).findUserByUuid("uuid"); verify(certificateRepository).findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE); - verify(bagRepository).findBagsByOrderId(order.getId()); - verify(modelMapper).map(certificate, CertificateDto.class); - verify(modelMapper).map(any(Bag.class), eq(BagForUserDto.class)); + verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); } @Test @@ -2600,7 +2481,6 @@ void processOrderFondyClientCertificeteNotFoundExeption() throws Exception { user.setCurrentPoints(100); user.setChangeOfPointsList(new ArrayList<>()); order.setUser(user); - OrderFondyClientDto dto = getOrderFondyClientDto(); dto.setCertificates(Set.of("1111-1234")); @@ -2614,24 +2494,22 @@ void processOrderFondyClientCertificeteNotFoundExeption() throws Exception { CertificateDto certificateDto = createCertificateDto(); certificateDto.setPoints(1500); - + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); when(certificateRepository.findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE)).thenReturn(Collections.emptySet()); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); - when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); - + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); assertThrows(NotFoundException.class, () -> ubsService.processOrderFondyClient(dto, "uuid")); - verify(orderRepository).findById(1L); verify(userRepository).findUserByUuid("uuid"); verify(certificateRepository).findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE); - verify(bagRepository).findBagsByOrderId(order.getId()); verify(modelMapper).map(certificate, CertificateDto.class); - verify(modelMapper).map(any(Bag.class), eq(BagForUserDto.class)); + verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); } @Test @@ -2664,14 +2542,16 @@ void processOrderFondyClientCertificeteNotFoundExeption2() throws Exception { CertificateDto certificateDto = createCertificateDto(); certificateDto.setPoints(1500); - + order.setPointsToUse(-1000); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); when(certificateRepository.findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE)).thenReturn(Set.of(certificate)); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); - when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); assertThrows(NotFoundException.class, () -> ubsService.processOrderFondyClient(dto, "uuid")); @@ -2679,9 +2559,8 @@ void processOrderFondyClientCertificeteNotFoundExeption2() throws Exception { verify(userRepository).findUserByUuid("uuid"); verify(certificateRepository).findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE); - verify(bagRepository).findBagsByOrderId(order.getId()); verify(modelMapper).map(certificate, CertificateDto.class); - verify(modelMapper).map(any(Bag.class), eq(BagForUserDto.class)); + verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); } @Test @@ -2699,7 +2578,8 @@ void processOrderFondyClientIfSumToPayLessThanPoints() throws Exception { user.setCurrentPoints(100); user.setChangeOfPointsList(new ArrayList<>()); order.setUser(user); - + order.setPointsToUse(-10000); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); OrderFondyClientDto dto = getOrderFondyClientDto(); Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { @@ -2714,12 +2594,11 @@ void processOrderFondyClientIfSumToPayLessThanPoints() throws Exception { when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); - - when(encryptionUtil.formRequestSignature(any(), eq(null), eq("1"))).thenReturn("TestValue"); when(fondyClient.getCheckoutResponse(any())).thenReturn(getSuccessfulFondyResponse()); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); - when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); ubsService.processOrderFondyClient(dto, "uuid"); @@ -2754,7 +2633,6 @@ void saveFullOrderToDBForIF() throws IllegalAccessException { bag.setFullPrice(400_00L); TariffsInfo tariffsInfo = getTariffsInfo(); bag.setTariffsInfo(tariffsInfo); - UBSuser ubSuser = getUBSuser(); OrderAddress address = ubSuser.getOrderAddress(); @@ -2765,6 +2643,8 @@ void saveFullOrderToDBForIF() throws IllegalAccessException { Payment payment1 = getPayment(); payment1.setId(1L); order1.getPayment().add(payment1); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + order1.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { @@ -2774,10 +2654,13 @@ void saveFullOrderToDBForIF() throws IllegalAccessException { } } - when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(tariffsInfo)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + when(bagRepository.findById(any())).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(certificateRepository.findById("1111-1234")).thenReturn(Optional.of(getCertificate())); @@ -2805,7 +2688,7 @@ void saveFullOrderToDBWhenSumToPayeqNull() throws IllegalAccessException { user.setOrders(new ArrayList<>()); user.getOrders().add(order); user.setChangeOfPointsList(new ArrayList<>()); - + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag())); Bag bag = getBagForOrder(); UBSuser ubSuser = getUBSuser().setId(null); @@ -2828,11 +2711,15 @@ void saveFullOrderToDBWhenSumToPayeqNull() throws IllegalAccessException { f.set(ubsService, "1"); } } - - when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + TariffsInfo tariffsInfo = getTariffsInfo(); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(tariffsInfo)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + when(bagRepository.findById(any())).thenReturn(Optional.of(bag)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(addressRepository.findById(any())).thenReturn(Optional.of(address)); when(locationRepository.findById(anyLong())).thenReturn(Optional.of(location)); @@ -3090,13 +2977,14 @@ void getOrderForUserTest() { order.setAmountOfBagsOrdered(Map.of(1, 10)); bags.add(bag); order.setUser(user); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); orderList.add(order); - + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); when(ordersForUserRepository.getAllByUserUuidAndId(user.getUuid(), order.getId())) .thenReturn(order); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(bags); - when(modelMapper.map(bag, BagForUserDto.class)).thenReturn(bagForUserDto); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); when(orderStatusTranslationRepository .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue())) .thenReturn(Optional.of(orderStatusTranslation)); @@ -3106,8 +2994,7 @@ void getOrderForUserTest() { ubsService.getOrderForUser(user.getUuid(), 1L); - verify(modelMapper, times(bags.size())).map(bag, BagForUserDto.class); - verify(bagRepository).findBagsByOrderId(order.getId()); + verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); verify(orderStatusTranslationRepository, times(orderList.size())) .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue()); verify(orderPaymentStatusTranslationRepository, times(orderList.size())) @@ -3150,30 +3037,30 @@ void getOrdersForUserTest() { orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); Page page = new PageImpl<>(orderList, pageable, 1); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(bags); - when(modelMapper.map(bag, BagForUserDto.class)).thenReturn(bagForUserDto); + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); when(orderStatusTranslationRepository .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue())) .thenReturn(Optional.of(orderStatusTranslation)); when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); assertEquals(dto.getTotalElements(), orderList.size()); assertEquals(dto.getPage().get(0).getId(), order.getId()); - verify(modelMapper, times(bags.size())).map(bag, BagForUserDto.class); - verify(bagRepository).findBagsByOrderId(order.getId()); + verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); verify(orderStatusTranslationRepository, times(orderList.size())) .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue()); verify(orderPaymentStatusTranslationRepository, times(orderList.size())) - .getById( - (long) order.getOrderPaymentStatus().getStatusValue()); + .getById((long) order.getOrderPaymentStatus().getStatusValue()); verify(ordersForUserRepository).getAllByUserUuid(pageable, user.getUuid()); } @@ -3183,6 +3070,7 @@ void testOrdersForUserWithExportedQuantity() { OrderPaymentStatusTranslation orderPaymentStatusTranslation = getOrderPaymentStatusTranslation(); OrdersDataForUserDto ordersDataForUserDto = getOrderStatusDto(); Order order = getOrderTest(); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); User user = getTestUser(); Bag bag = bagDto(); @@ -3202,22 +3090,21 @@ void testOrdersForUserWithExportedQuantity() { when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(bags); - when(modelMapper.map(bag, BagForUserDto.class)).thenReturn(bagForUserDto); when(orderStatusTranslationRepository .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue())) .thenReturn(Optional.of(orderStatusTranslation)); when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); - + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); assertEquals(dto.getTotalElements(), orderList.size()); assertEquals(dto.getPage().get(0).getId(), order.getId()); - verify(modelMapper, times(bags.size())).map(bag, BagForUserDto.class); - verify(bagRepository).findBagsByOrderId(order.getId()); + verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); verify(orderStatusTranslationRepository, times(orderList.size())) .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue()); verify(orderPaymentStatusTranslationRepository, times(orderList.size())) @@ -3244,6 +3131,7 @@ void testOrdersForUserWithConfirmedQuantity() { order.setConfirmedQuantity(Map.of(1, 10)); bags.add(bag); order.setUser(user); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); @@ -3251,22 +3139,21 @@ void testOrdersForUserWithConfirmedQuantity() { when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(bags); - when(modelMapper.map(bag, BagForUserDto.class)).thenReturn(bagForUserDto); + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); when(orderStatusTranslationRepository .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue())) .thenReturn(Optional.of(orderStatusTranslation)); when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); - + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); assertEquals(dto.getTotalElements(), orderList.size()); assertEquals(dto.getPage().get(0).getId(), order.getId()); - verify(modelMapper, times(bags.size())).map(bag, BagForUserDto.class); - verify(bagRepository).findBagsByOrderId(order.getId()); + verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); verify(orderStatusTranslationRepository, times(orderList.size())) .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue()); verify(orderPaymentStatusTranslationRepository, times(orderList.size())) @@ -3286,10 +3173,14 @@ void senderInfoDtoBuilderTest() { order.setAmountOfBagsOrdered(Map.of(1, 10)); order.setUser(user); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); Page page = new PageImpl<>(orderList, pageable, 1); + TariffsInfo tariffsInfo = getTariffsInfo(); + tariffsInfo.setBags(Arrays.asList(getBag())); + order.setTariffsInfo(tariffsInfo); when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); when(orderStatusTranslationRepository @@ -3298,7 +3189,9 @@ void senderInfoDtoBuilderTest() { when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); - + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); assertEquals(dto.getTotalElements(), orderList.size()); assertEquals(dto.getPage().get(0).getId(), order.getId()); @@ -3426,10 +3319,15 @@ void checkIfAddressHasBeenDeletedTest() throws IllegalAccessException { f.set(ubsService, "1"); } } - - when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + TariffsInfo tariffsInfo = getTariffsInfo(); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); +// when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(getTariffInfo())); + .thenReturn(Optional.of(tariffsInfo)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + when(bagRepository.findById(any())).thenReturn(Optional.of(bag)); when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); @@ -3470,11 +3368,15 @@ void checkAddressUserTest() throws IllegalAccessException { f.set(ubsService, "1"); } } - + TariffsInfo tariffsInfo = getTariffsInfo(); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(tariffsInfo)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + when(bagRepository.findById(any())).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); @@ -3506,10 +3408,16 @@ void checkIfUserHaveEnoughPointsTest() throws IllegalAccessException { f.set(ubsService, "1"); } } + TariffsInfo tariffsInfo = getTariffsInfo(); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(getTariffInfo())); + .thenReturn(Optional.of(tariffsInfo)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + when(bagRepository.findById(any())).thenReturn(Optional.of(bag)); when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, @@ -3577,11 +3485,15 @@ void testOrdersForUserWithQuantity() { bag.setFullPrice(1200_00L); bags.add(bag); order.setUser(user); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); Page page = new PageImpl<>(orderList, pageable, 1); - + TariffsInfo tariffsInfo = getTariffsInfo(); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); when(orderStatusTranslationRepository @@ -3590,6 +3502,9 @@ void testOrdersForUserWithQuantity() { when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); diff --git a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java index 208fefea9..5f16cde7b 100644 --- a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java @@ -52,22 +52,7 @@ import greencity.enums.SortingOrder; import greencity.exceptions.BadRequestException; import greencity.exceptions.NotFoundException; -import greencity.repository.BagRepository; -import greencity.repository.CertificateRepository; -import greencity.repository.EmployeeOrderPositionRepository; -import greencity.repository.EmployeeRepository; -import greencity.repository.OrderAddressRepository; -import greencity.repository.OrderDetailRepository; -import greencity.repository.OrderPaymentStatusTranslationRepository; -import greencity.repository.OrderRepository; -import greencity.repository.OrderStatusTranslationRepository; -import greencity.repository.PaymentRepository; -import greencity.repository.PositionRepository; -import greencity.repository.ReceivingStationRepository; -import greencity.repository.RefundRepository; -import greencity.repository.ServiceRepository; -import greencity.repository.TariffsInfoRepository; -import greencity.repository.UserRepository; +import greencity.repository.*; import greencity.service.locations.LocationApiService; import greencity.service.notification.NotificationServiceImpl; import org.junit.jupiter.api.Assertions; @@ -172,6 +157,7 @@ import static java.util.Collections.singletonList; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.anyLong; @@ -267,6 +253,10 @@ class UBSManagementServiceImplTest { @Mock RefundRepository refundRepository; + @Mock + private OrderBagService orderBagService; + @Mock + private OrderBagRepository orderBagRepository; @Test void getAllCertificates() { @@ -418,7 +408,7 @@ void checkUpdateManualPayment() { when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(paymentRepository.findById(1L)).thenReturn(Optional.of(getManualPayment())); when(paymentRepository.save(any())).thenReturn(getManualPayment()); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(getBaglist()); +// when(orderBagService.findBagsByOrderId(order.getId())).thenReturn(getBaglist()); doNothing().when(eventService).save(OrderHistory.UPDATE_PAYMENT_MANUALLY + 1, employee.getFirstName() + " " + employee.getLastName(), getOrder()); @@ -427,7 +417,7 @@ void checkUpdateManualPayment() { verify(paymentRepository, times(1)).save(any()); verify(eventService, times(2)).save(any(), any(), any()); verify(fileService, times(0)).delete(null); - verify(bagRepository).findBagsByOrderId(order.getId()); +// verify(orderBagService).findBagsByOrderId(order.getId()); } @Test @@ -483,12 +473,14 @@ void saveNewManualPaymentWithHalfPaidAmount() { when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(paymentRepository.save(any())) .thenReturn(payment); doNothing().when(eventService).save(any(), any(), any()); + when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); + ubsManagementService.saveNewManualPayment(1L, paymentDetails, null, "test@gmail.com"); + verify(employeeRepository, times(2)).findByEmail(anyString()); verify(eventService, times(1)).save(OrderHistory.ADD_PAYMENT_MANUALLY + 1, "Петро Петренко", order); @@ -518,7 +510,6 @@ void saveNewManualPaymentWithPaidAmount() { when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(paymentRepository.save(any())) .thenReturn(payment); @@ -1023,7 +1014,7 @@ void testGetOrderDetails() { when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(TEST_ORDER)); when(modelMapper.map(TEST_ORDER, new TypeToken>() { }.getType())).thenReturn(TEST_BAG_MAPPING_DTO_LIST); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(TEST_BAG_LIST); + when(orderBagService.findBagsByOrderId(1L)).thenReturn(TEST_BAG_LIST); when(modelMapper.map(TEST_BAG, BagInfoDto.class)).thenReturn(TEST_BAG_INFO_DTO); when(bagRepository.findAllByOrder(1L)).thenReturn(TEST_BAG_LIST); when(modelMapper.map(any(), eq(new TypeToken>() { @@ -1036,7 +1027,7 @@ void testGetOrderDetails() { verify(orderRepository).getOrderDetails(1L); verify(modelMapper).map(TEST_ORDER, new TypeToken>() { }.getType()); - verify(bagRepository).findBagsByOrderId(1L); + verify(orderBagService).findBagsByOrderId(1L); verify(bagRepository, times(1)).findAllByOrder(anyLong()); verify(modelMapper).map(TEST_BAG, BagInfoDto.class); verify(modelMapper).map(any(), eq(new TypeToken>() { @@ -1150,7 +1141,6 @@ void testSetOrderDetail() { when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); when(paymentRepository.selectSumPaid(1L)).thenReturn(5000L); ubsManagementService.setOrderDetail(1L, @@ -1169,9 +1159,9 @@ void testSetOrderDetailNeedToChangeStatusToHALF_PAID() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); - when(paymentRepository.selectSumPaid(1L)).thenReturn(5000L); + when(orderRepository.findSumOfCertificatesByOrderId(1L)).thenReturn(10L); + when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); + doNothing().when(orderRepository).updateOrderPaymentStatus(1L, OrderPaymentStatus.HALF_PAID.name()); ubsManagementService.setOrderDetail(1L, @@ -1193,10 +1183,9 @@ void testSetOrderDetailNeedToChangeStatusToUNPAID() { when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); when(paymentRepository.selectSumPaid(1L)).thenReturn(null); doNothing().when(orderRepository).updateOrderPaymentStatus(1L, OrderPaymentStatus.UNPAID.name()); - + when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "abc"); @@ -1253,12 +1242,10 @@ void testSetOrderDetailIfHalfPaid() { Bag tariffBagDto = ModelUtils.getTariffBag(); List bagList = getBaglist(); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(orderDto)); - when(bagRepository.findCapacityById(1)).thenReturn(1); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(orderDetailDto)); - when(bagRepository.findById(1)).thenReturn(Optional.ofNullable(tariffBagDto)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(bagList); when(paymentRepository.selectSumPaid(1L)).thenReturn(0L); when(orderRepository.findSumOfCertificatesByOrderId(1L)).thenReturn(0L); + when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1276,14 +1263,11 @@ void testSetOrderDetailIfPaidAndPriceLessThanDiscount() { when(orderRepository.findSumOfCertificatesByOrderId(order.getId())).thenReturn(600L); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto2())); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(order.getId(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "abc"); - - verify(certificateRepository).save(ModelUtils.getCertificate2().setPoints(20)); + verify(certificateRepository).save(ModelUtils.getCertificate2().setPoints(0)); verify(userRepository).updateUserCurrentPoints(1L, 100); verify(orderRepository).updateOrderPointsToUse(1L, 0); } @@ -1297,7 +1281,7 @@ void testSetOrderDetailIfPaidAndPriceLessThanPaidSum() { when(orderRepository.findSumOfCertificatesByOrderId(order.getId())).thenReturn(600L); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto2())); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); +// when(orderBagService.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(order.getId(), @@ -1930,7 +1914,6 @@ void getOrderSumDetailsForCanceledPaidOrderWithBags() { Order order = ModelUtils.getCanceledPaidOrder(); order.setOrderDate(LocalDateTime.now()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag3list()); doNothing().when(notificationService).notifyPaidOrder(order); doNothing().when(notificationService).notifyHalfPaidPackage(order); @@ -1959,7 +1942,7 @@ void getOrderSumDetailsForFormedHalfPaidOrder() { Order order = ModelUtils.getFormedHalfPaidOrder(); order.setOrderDate(LocalDateTime.now()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); +// when(orderBagService.findBagsByOrderId(1L)).thenReturn(getBaglist()); doNothing().when(notificationService).notifyPaidOrder(order); doNothing().when(notificationService).notifyHalfPaidPackage(order); @@ -1974,7 +1957,7 @@ void getOrderSumDetailsForFormedHalfPaidOrderWithDiffBags() { Order order = ModelUtils.getFormedHalfPaidOrder(); order.setOrderDate(LocalDateTime.now()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag3list()); +// when(orderBagService.findBagsByOrderId(1L)).thenReturn(getBag3list()); doNothing().when(notificationService).notifyPaidOrder(order); doNothing().when(notificationService).notifyHalfPaidPackage(order); @@ -1989,7 +1972,6 @@ void getOrderSumDetailsForCanceledHalfPaidOrder() { Order order = ModelUtils.getCanceledHalfPaidOrder(); order.setOrderDate(LocalDateTime.now()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); doNothing().when(notificationService).notifyPaidOrder(order); doNothing().when(notificationService).notifyHalfPaidPackage(order); @@ -2015,7 +1997,6 @@ void getOrderStatusDataTest() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(1L)).thenReturn(getCertificateList()); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); @@ -2033,8 +2014,6 @@ void getOrderStatusDataTest() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); - verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findBagsByOrderId(1L); verify(bagRepository).findBagsByTariffsInfoId(1L); verify(certificateRepository).findCertificate(1L); verify(orderRepository, times(5)).findById(1L); @@ -2093,7 +2072,7 @@ void getOrderStatusDataTestEmptyPriceDetails() { when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag2list()); +// when(orderBagService.findBagsByOrderId(1L)).thenReturn(getBag2list()); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.empty()); when(modelMapper.map(getBaglist().get(0), BagInfoDto.class)).thenReturn(bagInfoDto); when(orderStatusTranslationRepository.getOrderStatusTranslationById(6L)) @@ -2109,7 +2088,7 @@ void getOrderStatusDataTestEmptyPriceDetails() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findBagsByOrderId(1L); +// verify(orderBagService).findBagsByOrderId(1L); verify(bagRepository).findBagsByTariffsInfoId(1L); verify(certificateRepository).findCertificate(1L); verify(orderRepository, times(5)).findById(1L); @@ -2134,7 +2113,7 @@ void getOrderStatusDataWithEmptyCertificateTest() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); +// when(orderBagService.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(getService())); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); @@ -2150,7 +2129,7 @@ void getOrderStatusDataWithEmptyCertificateTest() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findBagsByOrderId(1L); +// verify(orderBagService).findBagsByOrderId(1L); verify(bagRepository).findBagsByTariffsInfoId(1L); verify(orderRepository, times(5)).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); @@ -2173,7 +2152,7 @@ void getOrderStatusDataWhenOrderTranslationIsNull() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); +// when(orderBagService.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(getService())); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); @@ -2187,7 +2166,7 @@ void getOrderStatusDataWhenOrderTranslationIsNull() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findBagsByOrderId(1L); +// verify(orderBagService).findBagsByOrderId(1L); verify(bagRepository).findBagsByTariffsInfoId(1L); verify(orderRepository, times(5)).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); @@ -2210,7 +2189,7 @@ void getOrderStatusDataExceptionTest() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); +// when(orderBagService.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(1L)).thenReturn(getCertificateList()); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(getService())); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); @@ -2487,7 +2466,7 @@ void getOrderStatusDataWithNotEmptyLists() { .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); +// when(orderBagService.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(1L)).thenReturn(getCertificateList()); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); when(modelMapper.map(getBaglist().get(0), BagInfoDto.class)).thenReturn(bagInfoDto); @@ -2506,7 +2485,6 @@ void getOrderStatusDataWithNotEmptyLists() { verify(orderRepository).getOrderDetails(1L); verify(bagRepository).findBagsByTariffsInfoId(1L); - verify(bagRepository).findBagsByOrderId(1L); verify(certificateRepository).findCertificate(1L); verify(orderRepository, times(5)).findById(1L); verify(modelMapper).map(getBaglist().get(0), BagInfoDto.class); @@ -2532,7 +2510,6 @@ void getOrderStatusesTranslationTest() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(1L)).thenReturn(getCertificateList()); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); @@ -2556,7 +2533,6 @@ void getOrderStatusesTranslationTest() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findBagsByOrderId(1L); verify(bagRepository).findBagsByTariffsInfoId(1L); verify(certificateRepository).findCertificate(1L); verify(orderRepository, times(5)).findById(1L); @@ -2634,7 +2610,6 @@ void addBonusesToUserTest() { Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); ubsManagementService.addBonusesToUser(getAddBonusesToUserDto(), 1L, employee.getEmail()); @@ -2642,7 +2617,7 @@ void addBonusesToUserTest() { verify(orderRepository).findById(1L); verify(orderRepository).save(order); verify(userRepository).save(user); - verify(notificationService).notifyBonuses(order, 809L); + verify(notificationService).notifyBonuses(order, 900L); verify(eventService).saveEvent(OrderHistory.ADDED_BONUSES, employee.getEmail(), order); } @@ -2654,7 +2629,7 @@ void addBonusesToUserIfOrderStatusIsCanceled() { Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); +// when(orderBagService.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); ubsManagementService.addBonusesToUser(getAddBonusesToUserDto(), 1L, employee.getEmail()); @@ -2673,7 +2648,6 @@ void addBonusesToUserWithoutExportedBagsTest() { Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); ubsManagementService.addBonusesToUser(getAddBonusesToUserDto(), 1L, employee.getEmail()); @@ -2681,26 +2655,18 @@ void addBonusesToUserWithoutExportedBagsTest() { verify(orderRepository).findById(1L); verify(orderRepository).save(order); verify(userRepository).save(user); - verify(notificationService).notifyBonuses(order, 209L); + verify(notificationService).notifyBonuses(order, 300L); verify(eventService).saveEvent(OrderHistory.ADDED_BONUSES, employee.getEmail(), order); } - @Test - void addBonusesToUserWithoutOrderTest() { - when(orderRepository.findById(1L)).thenReturn(Optional.empty()); - AddBonusesToUserDto dto = getAddBonusesToUserDto(); - String email = getEmployee().getEmail(); - assertThrows(NotFoundException.class, () -> ubsManagementService.addBonusesToUser(dto, 1L, email)); - } - @Test void addBonusesToUserWithNoOverpaymentTest() { Order order = getOrderForGetOrderStatusData2Test(); String email = getEmployee().getEmail(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag3list()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); + when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); AddBonusesToUserDto addBonusesToUserDto = getAddBonusesToUserDto(); assertThrows(BadRequestException.class, From d1dc1a490783afa4193557a93f41c0a20f72ceaf Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Wed, 26 Jul 2023 16:54:21 +0300 Subject: [PATCH 36/80] Revert "[Orders] After changing tariff the price of paid order is not changing (#1196)" (#1199) This reverts commit c020a531619787e7fff284c8e116e53fdc731884. --- .../main/java/greencity/entity/order/Bag.java | 12 +- .../java/greencity/entity/order/Order.java | 42 +- .../java/greencity/entity/order/OrderBag.java | 69 ---- .../greencity/repository/BagRepository.java | 12 + .../repository/OrderBagRepository.java | 61 --- .../greencity/repository/OrderRepository.java | 18 - .../db/changelog/db.changelog-master.xml | 1 - ...pdate-order-bag-mapping-table-Spodaryk.xml | 60 --- ...pdate-order-bag-mapping-table-Spodaryk.sql | 6 - .../mapping/bag/BagForUserDtoMapper.java | 8 +- .../notification/NotificationServiceImpl.java | 5 +- .../service/ubs/OrderBagService.java | 108 ------ .../service/ubs/SuperAdminServiceImpl.java | 94 +---- .../service/ubs/UBSClientServiceImpl.java | 96 ++--- .../service/ubs/UBSManagementServiceImpl.java | 10 +- .../src/test/java/greencity/ModelUtils.java | 155 +------- .../mapping/bag/BagForUserDtoMapperTest.java | 6 +- .../NotificationServiceImplTest.java | 17 +- .../service/ubs/OrderBagServiceTest.java | 159 -------- .../ubs/SuperAdminServiceImplTest.java | 311 +++------------ .../service/ubs/UBSClientServiceImplTest.java | 363 +++++++++++------- .../ubs/UBSManagementServiceImplTest.java | 102 +++-- 22 files changed, 459 insertions(+), 1256 deletions(-) delete mode 100644 dao/src/main/java/greencity/entity/order/OrderBag.java delete mode 100644 dao/src/main/java/greencity/repository/OrderBagRepository.java delete mode 100644 dao/src/main/resources/db/changelog/logs/ch-update-order-bag-mapping-table-Spodaryk.xml delete mode 100644 dao/src/main/resources/db/changelog/logs/sql/ch-update-order-bag-mapping-table-Spodaryk.sql delete mode 100644 service/src/main/java/greencity/service/ubs/OrderBagService.java delete mode 100644 service/src/test/java/greencity/service/ubs/OrderBagServiceTest.java diff --git a/dao/src/main/java/greencity/entity/order/Bag.java b/dao/src/main/java/greencity/entity/order/Bag.java index 321739e54..dafb97462 100644 --- a/dao/src/main/java/greencity/entity/order/Bag.java +++ b/dao/src/main/java/greencity/entity/order/Bag.java @@ -9,15 +9,7 @@ import lombok.ToString; import lombok.Builder; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; +import javax.persistence.*; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import java.time.LocalDate; @@ -84,7 +76,7 @@ public class Bag { @JoinColumn private Employee editedBy; - @ManyToOne(fetch = FetchType.LAZY) + @ManyToOne @JoinColumn(nullable = false) private TariffsInfo tariffsInfo; } diff --git a/dao/src/main/java/greencity/entity/order/Order.java b/dao/src/main/java/greencity/entity/order/Order.java index af48dfe0b..8215634a9 100644 --- a/dao/src/main/java/greencity/entity/order/Order.java +++ b/dao/src/main/java/greencity/entity/order/Order.java @@ -1,43 +1,21 @@ package greencity.entity.order; +import greencity.enums.CancellationReason; +import greencity.enums.OrderPaymentStatus; +import greencity.enums.OrderStatus; import greencity.entity.notifications.UserNotification; import greencity.entity.user.User; import greencity.entity.user.employee.Employee; import greencity.entity.user.employee.EmployeeOrderPosition; import greencity.entity.user.employee.ReceivingStation; import greencity.entity.user.ubs.UBSuser; -import greencity.enums.CancellationReason; -import greencity.enums.OrderPaymentStatus; -import greencity.enums.OrderStatus; import greencity.filters.StringListConverter; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.ToString; +import lombok.*; import org.hibernate.annotations.Cascade; -import javax.persistence.CascadeType; -import javax.persistence.CollectionTable; -import javax.persistence.Column; -import javax.persistence.Convert; -import javax.persistence.ElementCollection; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.MapKeyColumn; -import javax.persistence.OneToMany; -import javax.persistence.Table; +import javax.persistence.*; import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; @@ -50,10 +28,10 @@ @Builder @Table(name = "orders") @EqualsAndHashCode(exclude = {"employeeOrderPositions", "userNotifications", "ubsUser", - "changeOfPointsList", "blockedByEmployee", "certificates", "payment", "employeeOrderPositions", + "changeOfPointsList", "blockedByEmployee", "certificates", "attachedEmployees", "payment", "employeeOrderPositions", "events", "imageReasonNotTakingBags", "additionalOrders"}) @ToString(exclude = {"employeeOrderPositions", "userNotifications", "ubsUser", - "changeOfPointsList", "blockedByEmployee", "certificates", "payment", "employeeOrderPositions", + "changeOfPointsList", "blockedByEmployee", "certificates", "attachedEmployees", "payment", "employeeOrderPositions", "events", "imageReasonNotTakingBags", "additionalOrders"}) public class Order { @Id @@ -182,10 +160,4 @@ public class Order { @Column(name = "write_off_station_sum") private Long writeOffStationSum; - - @OneToMany( - mappedBy = "order", - cascade = CascadeType.ALL, - orphanRemoval = true) - private List orderBags = new ArrayList<>(); } diff --git a/dao/src/main/java/greencity/entity/order/OrderBag.java b/dao/src/main/java/greencity/entity/order/OrderBag.java deleted file mode 100644 index 4651fd944..000000000 --- a/dao/src/main/java/greencity/entity/order/OrderBag.java +++ /dev/null @@ -1,69 +0,0 @@ -package greencity.entity.order; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.ToString; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.Size; - -@Entity -@NoArgsConstructor -@AllArgsConstructor -@EqualsAndHashCode(exclude = {"order", "bag"}) -@ToString(exclude = {"order", "bag"}) -@Getter -@Setter -@Builder -@Table(name = "order_bag_mapping") -public class OrderBag { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "order_id") - private Order order; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "bag_id") - private Bag bag; - - @Column(nullable = false) - private Integer amount; - - @Column(name = "confirmed_quantity") - private Integer confirmedQuantity; - - @Column(name = "exported_quantity") - private Integer exportedQuantity; - - @Column(nullable = false) - private Integer capacity; - - @Column(nullable = false) - private Long price; - - @NotBlank - @Size(min = 1, max = 30) - @Column(nullable = false) - private String name; - - @NotBlank - @Size(min = 1, max = 30) - @Column(nullable = false) - private String nameEng; -} diff --git a/dao/src/main/java/greencity/repository/BagRepository.java b/dao/src/main/java/greencity/repository/BagRepository.java index 0796e00d6..18d35c029 100644 --- a/dao/src/main/java/greencity/repository/BagRepository.java +++ b/dao/src/main/java/greencity/repository/BagRepository.java @@ -11,6 +11,18 @@ @Repository public interface BagRepository extends JpaRepository { + /** + * method, that returns {@link List}of{@link Bag} that have bags by order id. + * + * @param id order id + * @return {@link List}of{@link Bag} by it's language and orderId. + * @author Mahdziak Orest + */ + @Query(value = "SELECT * FROM ORDER_BAG_MAPPING as OBM " + + "JOIN BAG AS B ON OBM.ORDER_ID = :orderId and OBM.BAG_ID = B.ID " + + "ORDER BY B.ID", nativeQuery = true) + List findBagsByOrderId(@Param("orderId") Long id); + /** * This is method which find capacity by id. * diff --git a/dao/src/main/java/greencity/repository/OrderBagRepository.java b/dao/src/main/java/greencity/repository/OrderBagRepository.java deleted file mode 100644 index 578aba332..000000000 --- a/dao/src/main/java/greencity/repository/OrderBagRepository.java +++ /dev/null @@ -1,61 +0,0 @@ -package greencity.repository; - -import greencity.entity.order.OrderBag; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Modifying; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; -import org.springframework.stereotype.Repository; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Repository -public interface OrderBagRepository extends JpaRepository { - /** - * Retrieves a list of order bags based on the given bag ID. - * - * @param id the ID of the order - * @return a list of order bags matching the bag ID - */ - @Query(value = "SELECT * FROM ORDER_BAG_MAPPING as OBM " - + "where OBM.BAG_ID = :bagId", nativeQuery = true) - List findOrderBagsByBagId(@Param("bagId") Integer id); - - /** - * Retrieves a list of order bags based on the given order ID. - * - * @param id the ID of the order - * @return a list of order bags matching the order ID - */ - @Query(value = "SELECT * FROM ORDER_BAG_MAPPING as OBM " - + "where OBM.ORDER_ID = :orderId", nativeQuery = true) - List findOrderBagsByOrderId(@Param("orderId") Long id); - - /** - * method updates the bag data of OrderBag for all unpaid orders. - * - * @param bagId {@link Integer} bag id - * @param capacity {@link Integer} bag capacity - * @param price {@link Long} bag full price in coins - * @param name {@link String} bag name - * @param nameEng {@link String} bag english name - * @author Julia Seti - */ - @Transactional - @Modifying - @Query(value = "update order_bag_mapping obm " - + "set capacity = :capacity, price = :price, name = :name, name_eng = :nameEng " - + "from orders o " - + "where o.id = obm.order_id and obm.bag_id = :bagId and o.order_payment_status = 'UNPAID'", nativeQuery = true) - void updateAllByBagIdForUnpaidOrders(Integer bagId, Integer capacity, Long price, String name, String nameEng); - - /** - * method returns all OrderBags by bag id. - * - * @param bagId {@link Integer} bag id - * @return {@link List} of {@link OrderBag} - * @author Julia Seti - */ - List findAllByBagId(Integer bagId); -} diff --git a/dao/src/main/java/greencity/repository/OrderRepository.java b/dao/src/main/java/greencity/repository/OrderRepository.java index a4616a199..3011eb235 100644 --- a/dao/src/main/java/greencity/repository/OrderRepository.java +++ b/dao/src/main/java/greencity/repository/OrderRepository.java @@ -251,22 +251,4 @@ void changeReceivingStationForAllOrders(@Param("receiving_station") Long station void updateOrderStatusToExpected(@Param("actual_status") String actualStatus, @Param("expected_status") String expectedStatus, @Param("currentDate") LocalDate currentDate); - - /** - * method returns all unpaid orders that contain a bag with id. - */ - @Query(nativeQuery = true, - value = "select * from orders o " - + "left join order_bag_mapping obm on o.id = obm.order_id " - + "where obm.bag_id = :bagId and o.order_payment_status = 'UNPAID'") - List findAllUnpaidOrdersByBagId(Integer bagId); - - /** - * method returns all orders that contain a bag with id. - */ - @Query(nativeQuery = true, - value = "select * from orders o " - + "left join order_bag_mapping obm on o.id = obm.order_id " - + "where obm.bag_id = :bagId") - List findAllByBagId(Integer bagId); } diff --git a/dao/src/main/resources/db/changelog/db.changelog-master.xml b/dao/src/main/resources/db/changelog/db.changelog-master.xml index 1632d90bd..db07e44e8 100644 --- a/dao/src/main/resources/db/changelog/db.changelog-master.xml +++ b/dao/src/main/resources/db/changelog/db.changelog-master.xml @@ -207,7 +207,6 @@ - diff --git a/dao/src/main/resources/db/changelog/logs/ch-update-order-bag-mapping-table-Spodaryk.xml b/dao/src/main/resources/db/changelog/logs/ch-update-order-bag-mapping-table-Spodaryk.xml deleted file mode 100644 index 18f8b49d5..000000000 --- a/dao/src/main/resources/db/changelog/logs/ch-update-order-bag-mapping-table-Spodaryk.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dao/src/main/resources/db/changelog/logs/sql/ch-update-order-bag-mapping-table-Spodaryk.sql b/dao/src/main/resources/db/changelog/logs/sql/ch-update-order-bag-mapping-table-Spodaryk.sql deleted file mode 100644 index b71d14c9a..000000000 --- a/dao/src/main/resources/db/changelog/logs/sql/ch-update-order-bag-mapping-table-Spodaryk.sql +++ /dev/null @@ -1,6 +0,0 @@ -update order_bag_mapping -set capacity=bag.capacity, - price=bag.full_price, - name=bag.name, - name_eng=bag.name_eng from bag -where bag_id=bag.id \ No newline at end of file diff --git a/service/src/main/java/greencity/mapping/bag/BagForUserDtoMapper.java b/service/src/main/java/greencity/mapping/bag/BagForUserDtoMapper.java index 68f4bb7b4..fe66bbe7b 100644 --- a/service/src/main/java/greencity/mapping/bag/BagForUserDtoMapper.java +++ b/service/src/main/java/greencity/mapping/bag/BagForUserDtoMapper.java @@ -2,21 +2,21 @@ import greencity.constant.AppConstant; import greencity.dto.bag.BagForUserDto; -import greencity.entity.order.OrderBag; +import greencity.entity.order.Bag; import org.modelmapper.AbstractConverter; import org.springframework.stereotype.Component; import java.math.BigDecimal; @Component -public class BagForUserDtoMapper extends AbstractConverter { +public class BagForUserDtoMapper extends AbstractConverter { @Override - protected BagForUserDto convert(OrderBag source) { + protected BagForUserDto convert(Bag source) { return BagForUserDto.builder() .service(source.getName()) .serviceEng(source.getNameEng()) .capacity(source.getCapacity()) - .fullPrice(BigDecimal.valueOf(source.getPrice()) + .fullPrice(BigDecimal.valueOf(source.getFullPrice()) .movePointLeft(AppConstant.TWO_DECIMALS_AFTER_POINT_IN_CURRENCY) .doubleValue()) .build(); diff --git a/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java b/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java index e123ce2d3..56d7aec6a 100644 --- a/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java +++ b/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java @@ -20,7 +20,6 @@ import greencity.exceptions.http.AccessDeniedException; import greencity.repository.*; import greencity.service.ubs.NotificationService; -import greencity.service.ubs.OrderBagService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.MapUtils; @@ -76,8 +75,6 @@ public class NotificationServiceImpl implements NotificationService { private static final String ORDER_NUMBER_KEY = "orderNumber"; private static final String AMOUNT_TO_PAY_KEY = "amountToPay"; private static final String PAY_BUTTON = "payButton"; - @Autowired - private final OrderBagService orderBagService; /** * {@inheritDoc} @@ -242,7 +239,7 @@ private Double getAmountToPay(Order order) { long ubsCourierSumInCoins = order.getUbsCourierSum() == null ? 0L : order.getUbsCourierSum(); long writeStationSumInCoins = order.getWriteOffStationSum() == null ? 0L : order.getWriteOffStationSum(); - List bagsType = orderBagService.findBagsByOrderId(order.getId()); + List bagsType = bagRepository.findBagsByOrderId(order.getId()); Map bagsAmount; if (MapUtils.isNotEmpty(order.getExportedQuantity())) { bagsAmount = order.getExportedQuantity(); diff --git a/service/src/main/java/greencity/service/ubs/OrderBagService.java b/service/src/main/java/greencity/service/ubs/OrderBagService.java deleted file mode 100644 index 6e10f71b3..000000000 --- a/service/src/main/java/greencity/service/ubs/OrderBagService.java +++ /dev/null @@ -1,108 +0,0 @@ -package greencity.service.ubs; - -import greencity.entity.order.Bag; -import greencity.entity.order.Order; -import greencity.entity.order.OrderBag; -import greencity.exceptions.NotFoundException; -import greencity.repository.OrderBagRepository; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import static greencity.constant.ErrorMessage.BAG_NOT_FOUND; - -@Service -@AllArgsConstructor -@Slf4j -@Data -public class OrderBagService { - private OrderBagRepository orderBagRepository; - - private Long getActualPrice(List orderBags, Integer id) { - return orderBags.stream() - .filter(ob -> ob.getBag().getId().equals(id)) - .map(OrderBag::getPrice) - .findFirst() - .orElseThrow(() -> new NotFoundException(BAG_NOT_FOUND + id)); - } - - /** - * Finds all bags belonging to a specific list of OrderBag instances. - * - * @param orderBags A list of OrderBag instances to search within. - * @return A list of Bag instances associated with the provided OrderBag - * instances. - */ - public List findAllBagsInOrderBagsList(List orderBags) { - return orderBags.stream() - .map(OrderBag::getBag) - .peek(b -> b.setFullPrice(getActualPrice(orderBags, b.getId()))) - .collect(Collectors.toList()); - } - - /** - * Finds all bags belonging to a specific OrderBag based on the provided ID. - * - * @param id The ID of the OrderBag to search for. - * @return A list of Bag instances associated with the provided OrderBag ID. - */ - public List findBagsByOrderId(Long id) { - List orderBags = orderBagRepository.findOrderBagsByOrderId(id); - return findAllBagsInOrderBagsList(orderBags); - } - - /** - * Calculates the actual bags' amounts for the given list of OrderBags and - * returns the result as a Map. This method checks the OrderBags in the input - * list and calculates the actual amount for each bag based on the availability - * of different quantity attributes in the OrderBag objects. It prioritizes the - * following quantities in descending order: 1. Exported Quantity: If all - * OrderBags have the 'exportedQuantity' attribute set, the method will use it. - * 2. Confirmed Quantity: If 'exportedQuantity' is not available for all - * OrderBags but 'confirmedQuantity' is, the method will use it. 3. Regular - * Amount: If neither 'exportedQuantity' nor 'confirmedQuantity' are available - * for all OrderBags, the method will use the 'amount' attribute. - * - * @param bagsForOrder The list of OrderBag objects for which the actual amounts - * need to be calculated. - * @return A Map containing the bag ID as the key and the corresponding actual - * amount as the value. If any OrderBag in the input list lacks all - * three attributes (exportedQuantity, confirmedQuantity, and amount), - * the corresponding entry will not be included in the result map. - * @throws NullPointerException if 'bagsForOrder' is null. - */ - public Map getActualBagsAmountForOrder(List bagsForOrder) { - if (bagsForOrder.stream().allMatch(it -> it.getExportedQuantity() != null)) { - return bagsForOrder.stream() - .collect(Collectors.toMap(it -> it.getBag().getId(), OrderBag::getExportedQuantity)); - } - if (bagsForOrder.stream().allMatch(it -> it.getConfirmedQuantity() != null)) { - return bagsForOrder.stream() - .collect(Collectors.toMap(it -> it.getBag().getId(), OrderBag::getConfirmedQuantity)); - } - if (bagsForOrder.stream().allMatch(it -> it.getAmount() != null)) { - return bagsForOrder.stream() - .collect(Collectors.toMap(it -> it.getBag().getId(), OrderBag::getAmount)); - } - return new HashMap<>(); - } - - /** - * method helps to delete bag from order. - * - * @param orderBag {@link OrderBag} - * @author Oksana Spodaryk - */ - public void removeBagFromOrder(Order order, OrderBag orderBag) { - List modifiableList = new ArrayList<>(order.getOrderBags()); - modifiableList.remove(orderBag); - order.setOrderBags(modifiableList); - } -} diff --git a/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java b/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java index acf611a25..9d623c99d 100644 --- a/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java @@ -24,8 +24,6 @@ import greencity.dto.tariff.GetTariffsInfoDto; import greencity.dto.tariff.SetTariffLimitsDto; import greencity.entity.coords.Coordinates; -import greencity.entity.order.Order; -import greencity.entity.order.OrderBag; import greencity.entity.order.Bag; import greencity.entity.order.Courier; import greencity.entity.order.Service; @@ -36,7 +34,6 @@ import greencity.entity.user.employee.Employee; import greencity.entity.user.employee.ReceivingStation; import greencity.enums.CourierLimit; -import greencity.enums.OrderPaymentStatus; import greencity.enums.CourierStatus; import greencity.enums.LocationStatus; import greencity.enums.StationStatus; @@ -51,8 +48,6 @@ import greencity.filters.TariffsInfoSpecification; import greencity.repository.BagRepository; import greencity.repository.CourierRepository; -import greencity.repository.OrderBagRepository; -import greencity.repository.OrderRepository; import greencity.repository.DeactivateChosenEntityRepository; import greencity.repository.EmployeeRepository; import greencity.repository.LocationRepository; @@ -76,7 +71,6 @@ import java.util.Comparator; import java.util.HashSet; import java.util.List; -import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; @@ -119,9 +113,6 @@ public class SuperAdminServiceImpl implements SuperAdminService { "Current region: %s or cities: %s or receiving stations: %s don't exist."; private static final String REGION_OR_CITIES_OR_RECEIVING_STATIONS_OR_COURIER_NOT_EXIST_MESSAGE = "Current region: %s or cities: %s or receiving stations: %s or courier: %s don't exist."; - private final OrderBagRepository orderBagRepository; - private final OrderRepository orderRepository; - private final OrderBagService orderBagService; @Override public GetTariffServiceDto addTariffService(long tariffId, TariffServiceDto dto, String employeeUuid) { @@ -151,34 +142,13 @@ public List getTariffService(long tariffId) { } @Override - @Transactional public void deleteTariffService(Integer bagId) { Bag bag = tryToFindBagById(bagId); - checkDeletedBagLimitAndDeleteTariffsInfo(bag); - orderRepository.findAllByBagId(bagId).forEach(it -> deleteBagFromOrder(it, bagId)); - } - - private void deleteBagFromOrder(Order order, Integer bagId) { - Map amount = orderBagService.getActualBagsAmountForOrder(order.getOrderBags()); - Integer totalBagsAmount = amount.values().stream().reduce(0, Integer::sum); - if (amount.get(bagId).equals(0) || order.getOrderPaymentStatus() == OrderPaymentStatus.UNPAID) { - if (totalBagsAmount.equals(amount.get(bagId))) { - order.setOrderBags(new ArrayList<>()); - orderRepository.delete(order); - return; - } - order.getOrderBags().stream().filter(orderBag -> orderBag.getBag().getId().equals(bagId)) - .findFirst() - .ifPresent(orderBag -> orderBagService.removeBagFromOrder(order, orderBag)); - orderRepository.save(order); - } - } - - private void checkDeletedBagLimitAndDeleteTariffsInfo(Bag bag) { TariffsInfo tariffsInfo = bag.getTariffsInfo(); + bagRepository.delete(bag); List bags = bagRepository.findBagsByTariffsInfoId(tariffsInfo.getId()); if (bags.isEmpty() || bags.stream().noneMatch(Bag::getLimitIncluded)) { - tariffsInfo.setTariffStatus(TariffStatus.DEACTIVATED); + tariffsInfo.setTariffStatus(TariffStatus.NEW); tariffsInfo.setBags(bags); tariffsInfo.setMax(null); tariffsInfo.setMin(null); @@ -189,39 +159,9 @@ private void checkDeletedBagLimitAndDeleteTariffsInfo(Bag bag) { } @Override - @Transactional - public GetTariffServiceDto editTariffService(TariffServiceDto dto, Integer bagId, String employeeUuid) { - Bag bag = tryToFindBagById(bagId); + public GetTariffServiceDto editTariffService(TariffServiceDto dto, Integer id, String employeeUuid) { + Bag bag = tryToFindBagById(id); Employee employee = tryToFindEmployeeByUuid(employeeUuid); - updateTariffService(dto, bag); - bag.setEditedBy(employee); - - orderBagRepository.updateAllByBagIdForUnpaidOrders( - bagId, bag.getCapacity(), bag.getFullPrice(), bag.getName(), bag.getNameEng()); - - List orders = orderRepository.findAllUnpaidOrdersByBagId(bagId); - if (CollectionUtils.isNotEmpty(orders)) { - orders.forEach(it -> updateOrderSumToPay(it, bag)); - orderRepository.saveAll(orders); - } - return modelMapper.map(bagRepository.save(bag), GetTariffServiceDto.class); - } - - private void updateOrderSumToPay(Order order, Bag bag) { - Map amount = orderBagService.getActualBagsAmountForOrder(order.getOrderBags()); - Long sumToPayInCoins = order.getOrderBags().stream() - .map(orderBag -> amount.get(orderBag.getBag().getId()) * getBagPrice(orderBag, bag)) - .reduce(0L, Long::sum); - order.setSumTotalAmountWithoutDiscounts(sumToPayInCoins); - } - - private Long getBagPrice(OrderBag orderBag, Bag bag) { - return bag.getId().equals(orderBag.getBag().getId()) - ? bag.getFullPrice() - : orderBag.getPrice(); - } - - private void updateTariffService(TariffServiceDto dto, Bag bag) { bag.setCapacity(dto.getCapacity()); bag.setPrice(convertBillsIntoCoins(dto.getPrice())); bag.setCommission(convertBillsIntoCoins(dto.getCommission())); @@ -231,6 +171,8 @@ private void updateTariffService(TariffServiceDto dto, Bag bag) { bag.setDescription(dto.getDescription()); bag.setDescriptionEng(dto.getDescriptionEng()); bag.setEditedAt(LocalDate.now()); + bag.setEditedBy(employee); + return modelMapper.map(bagRepository.save(bag), GetTariffServiceDto.class); } private Long convertBillsIntoCoins(Double bills) { @@ -243,8 +185,8 @@ private Long convertBillsIntoCoins(Double bills) { } private Bag tryToFindBagById(Integer id) { - return bagRepository.findById(id).orElseThrow( - () -> new NotFoundException(ErrorMessage.BAG_NOT_FOUND + id)); + return bagRepository.findById(id) + .orElseThrow(() -> new NotFoundException(ErrorMessage.BAG_NOT_FOUND + id)); } private Long getFullPrice(Double price, Double commission) { @@ -258,9 +200,9 @@ public GetServiceDto addService(Long tariffId, ServiceDto dto, String employeeUu } private Service createService(Long tariffId, ServiceDto dto, String employeeUuid) { - TariffsInfo tariffsInfo = tryToFindTariffById(tariffId); - if (serviceRepository.findServiceByTariffsInfoId(tariffId).isEmpty()) { + if (tryToFindServiceByTariffsInfoId(tariffId).isEmpty()) { Employee employee = tryToFindEmployeeByUuid(employeeUuid); + TariffsInfo tariffsInfo = tryToFindTariffById(tariffId); Service service = modelMapper.map(dto, Service.class); service.setCreatedBy(employee); service.setCreatedAt(LocalDate.now()); @@ -273,16 +215,14 @@ private Service createService(Long tariffId, ServiceDto dto, String employeeUuid @Override public GetServiceDto getService(long tariffId) { - tryToFindTariffById(tariffId); - return serviceRepository.findServiceByTariffsInfoId(tariffId) + return tryToFindServiceByTariffsInfoId(tariffId) .map(it -> modelMapper.map(it, GetServiceDto.class)) - .orElseGet(() -> null); + .orElse(null); } @Override public void deleteService(long id) { - Service service = tryToFindServiceById(id); - serviceRepository.delete(service); + serviceRepository.delete(tryToFindServiceById(id)); } @Override @@ -304,6 +244,14 @@ private Employee tryToFindEmployeeByUuid(String employeeUuid) { .orElseThrow(() -> new NotFoundException(ErrorMessage.EMPLOYEE_WITH_UUID_NOT_FOUND + employeeUuid)); } + private Optional tryToFindServiceByTariffsInfoId(long tariffId) { + if (tariffsInfoRepository.existsById(tariffId)) { + return serviceRepository.findServiceByTariffsInfoId(tariffId); + } else { + throw new NotFoundException(ErrorMessage.TARIFF_NOT_FOUND + tariffId); + } + } + private Service tryToFindServiceById(long id) { return serviceRepository.findById(id) .orElseThrow(() -> new NotFoundException(ErrorMessage.SERVICE_IS_NOT_FOUND_BY_ID + id)); diff --git a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java index 5c64e460f..496c9b8c3 100644 --- a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java @@ -59,7 +59,6 @@ import greencity.entity.order.ChangeOfPoints; import greencity.entity.order.Event; import greencity.entity.order.Order; -import greencity.entity.order.OrderBag; import greencity.entity.order.OrderPaymentStatusTranslation; import greencity.entity.order.OrderStatusTranslation; import greencity.entity.order.Payment; @@ -95,7 +94,6 @@ import greencity.repository.EventRepository; import greencity.repository.LocationRepository; import greencity.repository.OrderAddressRepository; -import greencity.repository.OrderBagRepository; import greencity.repository.OrderPaymentStatusTranslationRepository; import greencity.repository.OrderRepository; import greencity.repository.OrderStatusTranslationRepository; @@ -116,6 +114,7 @@ import greencity.util.OrderUtils; import lombok.Data; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; import org.json.JSONObject; import org.modelmapper.ModelMapper; import org.springframework.beans.factory.annotation.Autowired; @@ -137,6 +136,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.EnumSet; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Locale; @@ -148,6 +148,7 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.LongStream; + import static greencity.constant.ErrorMessage.ACTUAL_ADDRESS_NOT_FOUND; import static greencity.constant.ErrorMessage.ADDRESS_ALREADY_EXISTS; import static greencity.constant.ErrorMessage.BAD_ORDER_STATUS_REQUEST; @@ -191,6 +192,7 @@ import static greencity.constant.ErrorMessage.USER_DONT_HAVE_ENOUGH_POINTS; import static greencity.constant.ErrorMessage.USER_WITH_CURRENT_ID_DOES_NOT_EXIST; import static greencity.constant.ErrorMessage.USER_WITH_CURRENT_UUID_DOES_NOT_EXIST; + import static java.util.Objects.nonNull; import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toList; @@ -229,9 +231,6 @@ public class UBSClientServiceImpl implements UBSClientService { private final TelegramBotRepository telegramBotRepository; private final ViberBotRepository viberBotRepository; private final LocationApiService locationApiService; - private final OrderBagRepository orderBagRepository; - private final OrderBagService orderBagService; - @Lazy @Autowired private UBSManagementService ubsManagementService; @@ -420,14 +419,14 @@ private void checkSumIfCourierLimitBySumOfOrder(TariffsInfo tariffsInfo, Long su public FondyOrderResponse saveFullOrderToDB(OrderResponseDto dto, String uuid, Long orderId) { final User currentUser = userRepository.findByUuid(uuid); TariffsInfo tariffsInfo = tryToFindTariffsInfoByBagIds(getBagIds(dto.getBags()), dto.getLocationId()); - List bagsOrdered = new ArrayList<>(); + Map amountOfBagsOrderedMap = new HashMap<>(); if (!dto.isShouldBePaid()) { dto.setCertificates(Collections.emptySet()); dto.setPointsToUse(0); } - long sumToPayWithoutDiscountInCoins = formBagsToBeSavedAndCalculateOrderSum(bagsOrdered, + long sumToPayWithoutDiscountInCoins = formBagsToBeSavedAndCalculateOrderSum(amountOfBagsOrderedMap, dto.getBags(), tariffsInfo); checkIfUserHaveEnoughPoints(currentUser.getCurrentPoints(), dto.getPointsToUse()); long sumToPayInCoins = reduceOrderSumDueToUsedPoints(sumToPayWithoutDiscountInCoins, dto.getPointsToUse()); @@ -440,7 +439,7 @@ public FondyOrderResponse saveFullOrderToDB(OrderResponseDto dto, String uuid, L UBSuser userData = formUserDataToBeSaved(dto.getPersonalData(), dto.getAddressId(), dto.getLocationId(), currentUser); - getOrder(dto, currentUser, bagsOrdered, sumToPayInCoins, order, orderCertificates, userData); + getOrder(dto, currentUser, amountOfBagsOrderedMap, sumToPayInCoins, order, orderCertificates, userData); eventService.save(OrderHistory.ORDER_FORMED, OrderHistory.CLIENT, order); if (sumToPayInCoins <= 0 || !dto.isShouldBePaid()) { @@ -458,7 +457,7 @@ private List getBagIds(List dto) { .collect(Collectors.toList()); } - private Bag findBagById(Integer id) { + private Bag tryToGetBagById(Integer id) { return bagRepository.findById(id) .orElseThrow(() -> new NotFoundException(BAG_NOT_FOUND + id)); } @@ -886,17 +885,31 @@ private AddressInfoDto addressInfoDtoBuilder(Order order) { } private List bagForUserDtosBuilder(Order order) { - List bagsForOrder = order.getOrderBags(); - Map actualBagsAmount = orderBagService.getActualBagsAmountForOrder(bagsForOrder); + Map actualBagAmounts = getActualBagAmountsForOrder(order); + List bagsForOrder = bagRepository.findBagsByOrderId(order.getId()); return bagsForOrder.stream() - .map(orderBag -> buildBagForUserDto(orderBag, actualBagsAmount.get(orderBag.getBag().getId()))) + .filter(bag -> actualBagAmounts.containsKey(bag.getId())) + .map(bag -> buildBagForUserDto(bag, actualBagAmounts.get(bag.getId()))) .collect(toList()); } - private BagForUserDto buildBagForUserDto(OrderBag orderBag, int count) { - BagForUserDto bagDto = modelMapper.map(orderBag, BagForUserDto.class); + private Map getActualBagAmountsForOrder(Order order) { + if (MapUtils.isNotEmpty(order.getExportedQuantity())) { + return order.getExportedQuantity(); + } + if (MapUtils.isNotEmpty(order.getConfirmedQuantity())) { + return order.getConfirmedQuantity(); + } + if (MapUtils.isNotEmpty(order.getAmountOfBagsOrdered())) { + return order.getAmountOfBagsOrdered(); + } + return new HashMap<>(); + } + + private BagForUserDto buildBagForUserDto(Bag bag, int count) { + BagForUserDto bagDto = modelMapper.map(bag, BagForUserDto.class); bagDto.setCount(count); - bagDto.setTotalPrice(convertCoinsIntoBills(count * orderBag.getPrice())); + bagDto.setTotalPrice(convertCoinsIntoBills(count * bag.getFullPrice())); return bagDto; } @@ -1025,16 +1038,15 @@ private UBSuser updateRecipientDataInOrder(UBSuser ubsUser, UbsCustomersDtoUpdat } private Order formAndSaveOrder(Order order, Set orderCertificates, - List bagsOrdered, UBSuser userData, + Map amountOfBagsOrderedMap, UBSuser userData, User currentUser, long sumToPayInCoins) { order.setOrderStatus(OrderStatus.FORMED); order.setCertificates(orderCertificates); - bagsOrdered.forEach(orderBag -> orderBag.setOrder(order)); - order.setOrderBags(bagsOrdered); + order.setAmountOfBagsOrdered(amountOfBagsOrderedMap); order.setUbsUser(userData); order.setUser(currentUser); order.setSumTotalAmountWithoutDiscounts( - calculateOrderSumWithoutDiscounts(bagsOrdered)); + formBagsToBeSavedAndCalculateOrderSumClient(amountOfBagsOrderedMap)); setOrderPaymentStatus(order, sumToPayInCoins); Payment payment = Payment.builder() @@ -1190,46 +1202,35 @@ private void checkAmountOfBagsIfCourierLimitByAmountOfBag(TariffsInfo courierLoc } } - private long calculateOrderSumWithoutDiscounts(List getOrderBagsAndQuantity) { - return getOrderBagsAndQuantity.stream() - .map(orderBag -> orderBag.getPrice() * orderBag.getAmount()) - .reduce(0L, Long::sum); + private long formBagsToBeSavedAndCalculateOrderSumClient( + Map getOrderBagsAndQuantity) { + long sumToPayInCoins = 0L; + + for (Map.Entry temp : getOrderBagsAndQuantity.entrySet()) { + Integer amount = getOrderBagsAndQuantity.get(temp.getKey()); + Bag bag = bagRepository.findById(temp.getKey()) + .orElseThrow(() -> new NotFoundException(BAG_NOT_FOUND + temp.getKey())); + sumToPayInCoins += bag.getFullPrice() * amount; + } + return sumToPayInCoins; } private long formBagsToBeSavedAndCalculateOrderSum( - List orderBagList, List bags, TariffsInfo tariffsInfo) { + Map map, List bags, TariffsInfo tariffsInfo) { long sumToPayInCoins = 0L; for (BagDto temp : bags) { - Bag bag = findBagById(temp.getId()); + Bag bag = tryToGetBagById(temp.getId()); if (bag.getLimitIncluded().booleanValue()) { checkAmountOfBagsIfCourierLimitByAmountOfBag(tariffsInfo, temp.getAmount()); checkSumIfCourierLimitBySumOfOrder(tariffsInfo, bag.getFullPrice() * temp.getAmount()); } sumToPayInCoins += bag.getFullPrice() * temp.getAmount(); - OrderBag orderBag = createOrderBag(bag); - orderBag.setAmount(temp.getAmount()); - orderBagList.add(orderBag); - } - List orderedBagsIds = bags.stream().map(BagDto::getId).collect(toList()); - List notOrderedBags = tariffsInfo.getBags().stream() - .filter(orderBag -> !orderedBagsIds.contains(orderBag.getId())) - .map(this::createOrderBag).collect(toList()); - notOrderedBags.forEach(orderBag -> orderBag.setAmount(0)); - orderBagList.addAll(notOrderedBags); + map.put(temp.getId(), temp.getAmount()); + } return sumToPayInCoins; } - private OrderBag createOrderBag(Bag bag) { - return OrderBag.builder() - .bag(bag) - .capacity(bag.getCapacity()) - .price(bag.getFullPrice()) - .name(bag.getName()) - .nameEng(bag.getNameEng()) - .build(); - } - private void validateCertificate(Certificate certificate) { if (certificate.getCertificateStatus() == CertificateStatus.NEW) { throw new CertificateIsNotActivated(CERTIFICATE_IS_NOT_ACTIVATED + certificate.getCode()); @@ -1383,9 +1384,9 @@ private long reduceOrderSumDueToUsedPoints(long sumToPayInCoins, int pointsToUse return sumToPayInCoins; } - private void getOrder(OrderResponseDto dto, User currentUser, List amountOfBagsOrdered, + private void getOrder(OrderResponseDto dto, User currentUser, Map amountOfBagsOrderedMap, long sumToPayInCoins, Order order, Set orderCertificates, UBSuser userData) { - formAndSaveOrder(order, orderCertificates, amountOfBagsOrdered, userData, currentUser, sumToPayInCoins); + formAndSaveOrder(order, orderCertificates, amountOfBagsOrderedMap, userData, currentUser, sumToPayInCoins); formAndSaveUser(currentUser, dto.getPointsToUse(), order); } @@ -1430,7 +1431,6 @@ public void deleteOrder(String uuid, Long id) { if (order == null) { throw new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST); } - order.setOrderBags(new ArrayList<>()); orderRepository.delete(order); } diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java index a57272131..5864a7320 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java @@ -73,7 +73,6 @@ import greencity.enums.SortingOrder; import greencity.exceptions.BadRequestException; import greencity.exceptions.NotFoundException; -import greencity.repository.OrderBagRepository; import greencity.repository.BagRepository; import greencity.repository.CertificateRepository; import greencity.repository.EmployeeOrderPositionRepository; @@ -110,6 +109,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.server.ResponseStatusException; + import javax.persistence.EntityNotFoundException; import java.math.BigDecimal; import java.math.RoundingMode; @@ -179,10 +179,6 @@ public class UBSManagementServiceImpl implements UBSManagementService { @Lazy @Autowired private UBSClientService ubsClientService; - @Autowired - private final OrderBagService orderBagService; - @Autowired - private OrderBagRepository orderBagRepository; /** * Method gets all order payments, count paid amount, amount which user should @@ -825,7 +821,7 @@ private CounterOrderDetailsDto getPriceDetails(Long id) { CounterOrderDetailsDto dto = new CounterOrderDetailsDto(); Order order = orderRepository.getOrderDetails(id) .orElseThrow(() -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST + id)); - List bag = orderBagService.findAllBagsInOrderBagsList(orderBagRepository.findOrderBagsByOrderId(id)); + List bag = bagRepository.findBagsByOrderId(id); final List currentCertificate = certificateRepository.findCertificate(id); long sumAmountInCoins = 0; @@ -1064,7 +1060,7 @@ private void setOrderDetailDto(OrderDetailDto dto, Order order) { dto.setAmount(modelMapper.map(order, new TypeToken>() { }.getType())); - dto.setCapacityAndPrice(orderBagService.findBagsByOrderId(order.getId()) + dto.setCapacityAndPrice(bagRepository.findBagsByOrderId(order.getId()) .stream() .map(b -> modelMapper.map(b, BagInfoDto.class)) .collect(Collectors.toList())); diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index fe886952d..8e6d83ea7 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -101,7 +101,6 @@ import greencity.entity.order.Courier; import greencity.entity.order.Event; import greencity.entity.order.Order; -import greencity.entity.order.OrderBag; import greencity.entity.order.OrderPaymentStatusTranslation; import greencity.entity.order.OrderStatusTranslation; import greencity.entity.order.Payment; @@ -140,6 +139,7 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; + import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; @@ -155,6 +155,7 @@ import java.util.Map; import java.util.Optional; import java.util.Set; + import static greencity.enums.NotificationReceiverType.EMAIL; import static greencity.enums.NotificationReceiverType.MOBILE; import static greencity.enums.NotificationReceiverType.SITE; @@ -177,7 +178,6 @@ public class ModelUtils { public static final OrderDetailStatusDto ORDER_DETAIL_STATUS_DTO = createOrderDetailStatusDto(); public static final List TEST_BAG_MAPPING_DTO_LIST = createBagMappingDtoList(); public static final Bag TEST_BAG = createBag(); - public static final OrderBag TEST_ORDER_BAG = createOrderBag(); public static final BagForUserDto TEST_BAG_FOR_USER_DTO = createBagForUserDto(); public static final BagInfoDto TEST_BAG_INFO_DTO = createBagInfoDto(); public static final List TEST_BAG_LIST = singletonList(TEST_BAG); @@ -227,10 +227,6 @@ public class ModelUtils { public static final NotificationDto TEST_NOTIFICATION_DTO = createNotificationDto(); public static final UpdateOrderPageAdminDto UPDATE_ORDER_PAGE_ADMIN_DTO = updateOrderPageAdminDto(); public static final CourierUpdateDto UPDATE_COURIER_DTO = getUpdateCourierDto(); - public static final Bag TEST_BAG2 = createBag().setFullPrice(100000L); - public static final Bag TEST_BAG2_2 = createBag().setFullPrice(100000L).setId(2); - public static final Bag TEST_BAG2_3 = createBag().setFullPrice(100000L).setId(3); - public static final List TEST_BAG_LIST2 = Arrays.asList(TEST_BAG2, TEST_BAG2, TEST_BAG2_2, TEST_BAG2_3); public static EmployeeFilterView getEmployeeFilterView() { return getEmployeeFilterViewWithPassedIds(1L, 5L, 10L); @@ -2280,18 +2276,6 @@ private static Bag createBag() { .build(); } - private static OrderBag createOrderBag() { - return OrderBag.builder() - .id(1L) - .name("Name") - .nameEng("NameEng") - .capacity(20) - .price(100_00L) - .order(createOrder()) - .bag(createBag()) - .build(); - } - private static BagForUserDto createBagForUserDto() { return BagForUserDto.builder() .service("Name") @@ -2684,94 +2668,7 @@ public static Optional getOptionalBag() { .build()); } - public static OrderBag getOrderBag2() { - return OrderBag.builder() - .id(2L) - .capacity(2200) - .price(22000_00L) - .name("name") - .nameEng("name eng") - .amount(20) - .bag(getBag2()) - .order(getOrder()) - .build(); - } - public static Bag getBag() { - return Bag.builder() - .id(1) - .capacity(120) - .commission(50_00L) - .price(120_00L) - .fullPrice(170_00L) - .createdAt(LocalDate.now()) - .createdBy(getEmployee()) - .editedBy(getEmployee()) - .limitIncluded(true) - - .tariffsInfo(getTariffInfo()) - .build(); - } - - public static Bag getBag2() { - return Bag.builder() - .id(2) - .capacity(120) - .commission(50_00L) - .price(120_00L) - .fullPrice(170_00L) - .createdAt(LocalDate.now()) - .createdBy(getEmployee()) - .editedBy(getEmployee()) - .limitIncluded(true) - - .tariffsInfo(getTariffInfo()) - .build(); - } - - public static OrderBag getOrderBag() { - return OrderBag.builder() - .id(1L) - .capacity(120) - .price(120_00L) - .name("name") - .nameEng("name eng") - .amount(1) - .bag(getBag()) - .order(getOrder()) - .build(); - } - - public static OrderBag getOrderBagWithConfirmedAmount() { - return OrderBag.builder() - .id(1L) - .capacity(120) - .price(120_00L) - .name("name") - .nameEng("name eng") - .amount(1) - .confirmedQuantity(2) - .bag(getBag()) - .order(getOrder()) - .build(); - } - - public static OrderBag getOrderBagWithExportedAmount() { - return OrderBag.builder() - .id(1L) - .capacity(120) - .price(120_00L) - .name("name") - .nameEng("name eng") - .amount(1) - .confirmedQuantity(2) - .exportedQuantity(2) - .bag(getBag()) - .order(getOrder()) - .build(); - } - - public static Bag getBagDeleted() { return Bag.builder() .id(1) .capacity(120) @@ -2784,7 +2681,6 @@ public static Bag getBagDeleted() { .description("Description") .descriptionEng("DescriptionEng") .limitIncluded(true) - .tariffsInfo(getTariffInfo()) .build(); } @@ -2808,46 +2704,14 @@ public static Bag getBagForOrder() { public static TariffServiceDto getTariffServiceDto() { return TariffServiceDto.builder() .name("Бавовняна сумка") - .capacity(20) - .price(100.0) + .capacity(120) + .price(120.0) .commission(50.0) .description("Description") .build(); } - public static Bag getEditedBag() { - return Bag.builder() - .id(1) - .capacity(20) - .price(100_00L) - .fullPrice(150_00L) - .commission(50_00L) - .name("Бавовняна сумка") - .description("Description") - .createdAt(LocalDate.now()) - .createdBy(getEmployee()) - .editedBy(getEmployee()) - .editedAt(LocalDate.now()) - .limitIncluded(true) - - .tariffsInfo(getTariffInfo()) - .build(); - - } - - public static OrderBag getEditedOrderBag() { - return OrderBag.builder() - .id(1L) - .amount(1) - .price(150_00L) - .capacity(20) - .name("Бавовняна сумка") - .bag(getBag()) - .order(getOrder()) - .build(); - } - public static Location getLocation() { return Location.builder() .id(1L) @@ -2945,7 +2809,6 @@ public static Bag getNewBag() { .descriptionEng("DescriptionEng") .name("name") .nameEng("nameEng") - .build(); } @@ -3686,20 +3549,12 @@ public static BigOrderTableViews getBigOrderTableViewsByDateNullTest() { .setResponsibleNavigator(null); } - public static Map getAmount() { - Map hashMap = new HashMap<>(); - hashMap.put(1, 1); - hashMap.put(2, 1); - return hashMap; - } - public static Order getOrderForGetOrderStatusData2Test() { Map hashMap = new HashMap<>(); hashMap.put(1, 1); hashMap.put(2, 1); return Order.builder() - .orderBags(Arrays.asList(getOrderBag(), getOrderBag2())) .id(1L) .amountOfBagsOrdered(hashMap) .confirmedQuantity(hashMap) @@ -4906,4 +4761,4 @@ public static PositionWithTranslateDto getPositionWithTranslateDto(Long id) { public static Refund getRefund(Long id) { return Refund.builder().orderId(id).build(); } -} \ No newline at end of file +} diff --git a/service/src/test/java/greencity/mapping/bag/BagForUserDtoMapperTest.java b/service/src/test/java/greencity/mapping/bag/BagForUserDtoMapperTest.java index 033425d77..1f9fcbcdd 100644 --- a/service/src/test/java/greencity/mapping/bag/BagForUserDtoMapperTest.java +++ b/service/src/test/java/greencity/mapping/bag/BagForUserDtoMapperTest.java @@ -2,7 +2,7 @@ import greencity.ModelUtils; import greencity.dto.bag.BagForUserDto; -import greencity.entity.order.OrderBag; +import greencity.entity.order.Bag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -18,8 +18,8 @@ class BagForUserDtoMapperTest { @Test void convert() { BagForUserDto expected = ModelUtils.TEST_BAG_FOR_USER_DTO; - OrderBag orderBag = ModelUtils.TEST_ORDER_BAG; - BagForUserDto actual = bagForUserDtoMapper.convert(orderBag); + Bag bag = ModelUtils.TEST_BAG; + BagForUserDto actual = bagForUserDtoMapper.convert(bag); assertEquals(expected.getService(), actual.getService()); assertEquals(expected.getServiceEng(), actual.getServiceEng()); diff --git a/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java b/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java index 440f8e824..bebf741f7 100644 --- a/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java +++ b/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java @@ -23,7 +23,6 @@ import greencity.exceptions.NotFoundException; import greencity.exceptions.http.AccessDeniedException; import greencity.repository.*; -import greencity.service.ubs.OrderBagService; import lombok.SneakyThrows; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; @@ -85,8 +84,6 @@ class NotificationServiceImplTest { private Clock fixedClock; ExecutorService mockExecutor = MoreExecutors.newDirectExecutorService(); - @Mock - private OrderBagService orderBagService; @Nested class ClockNotification { @@ -304,7 +301,7 @@ void testNotifyInactiveAccounts() { List.of(abstractNotificationProvider), templateRepository, mockExecutor, - internalUrlConfigProp, orderBagService); + internalUrlConfigProp); User user = User.builder().id(42L).build(); User user1 = User.builder().id(43L).build(); UserNotification notification = new UserNotification(); @@ -412,7 +409,7 @@ void testNotifyAllHalfPaidPackages() { parameters.add(NotificationParameter.builder().key("orderNumber") .value(orders.get(0).getId().toString()).build()); - when(orderBagService.findBagsByOrderId(any())).thenReturn(getBag1list()); + when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag1list()); when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); @@ -513,7 +510,7 @@ void testNotifyUnpaidOrderForBroughtByHimself() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(orderBagService.findBagsByOrderId(any())).thenReturn(getBag4list()); + when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyUnpaidOrder(order); @@ -544,7 +541,7 @@ void testNotifyUnpaidOrderForDone() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(orderBagService.findBagsByOrderId(any())).thenReturn(getBag4list()); + when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyUnpaidOrder(order); verify(userNotificationRepository).save(any()); @@ -575,7 +572,7 @@ void testNotifyUnpaidOrderForCancel() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(orderBagService.findBagsByOrderId(any())).thenReturn(getBag4list()); + when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyUnpaidOrder(order); @@ -606,7 +603,7 @@ void testNotifyHalfPaidOrderForDone() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(orderBagService.findBagsByOrderId(any())).thenReturn(getBag4list()); + when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyHalfPaidPackage(order); @@ -633,7 +630,7 @@ void testNotifyHalfPaidOrderForBroughtByHimself() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(orderBagService.findBagsByOrderId(any())).thenReturn(getBag4list()); + when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyHalfPaidPackage(order); diff --git a/service/src/test/java/greencity/service/ubs/OrderBagServiceTest.java b/service/src/test/java/greencity/service/ubs/OrderBagServiceTest.java deleted file mode 100644 index e6b56145d..000000000 --- a/service/src/test/java/greencity/service/ubs/OrderBagServiceTest.java +++ /dev/null @@ -1,159 +0,0 @@ -package greencity.service.ubs; - -import greencity.entity.order.Bag; -import greencity.entity.order.Order; -import greencity.entity.order.OrderBag; -import greencity.repository.OrderBagRepository; - -import java.util.*; - -import static greencity.ModelUtils.getOrderBag; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; - -import static greencity.ModelUtils.*; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.when; - -@ExtendWith({MockitoExtension.class}) -class OrderBagServiceTest { - - @InjectMocks - private OrderBagService orderBagService; - @Mock - private OrderBagRepository orderBagRepository; - - @Test - void testFindBagsByOrderId() { - when(orderBagRepository.findOrderBagsByOrderId(any())).thenReturn(Arrays.asList(getOrderBag(), getOrderBag2())); - List bags = orderBagService.findBagsByOrderId(1L); - assertNotNull(bags); - Bag bag1 = getBag().setFullPrice(getOrderBag().getPrice()); - Bag bag2 = getBag2().setFullPrice(getOrderBag2().getPrice()); - - assertEquals(bag1, bags.get(0)); - assertEquals(bag2, bags.get(1)); - - } - - @Test - void testFindBagsByOrdersList() { - List bags = orderBagService.findAllBagsInOrderBagsList(Arrays.asList(getOrderBag(), getOrderBag2())); - - Bag bag1 = getBag().setFullPrice(getOrderBag().getPrice()); - Bag bag2 = getBag2().setFullPrice(getOrderBag2().getPrice()); - assertNotNull(bags); - assertEquals(bag1, bags.get(0)); - assertEquals(bag2, bags.get(1)); - } - - @Test - void testRemoveBagFromOrder() { - Order order = getOrder(); - order.setOrderBags(Arrays.asList(getOrderBag(), getOrderBag2())); - int size = order.getOrderBags().size(); - orderBagService.removeBagFromOrder(order, getOrderBag()); - assertNotEquals(order.getOrderBags().size(), size); - } - - @Test - void testGetActualBagsAmountForOrder_WithExportedQuantity() { - List bagsForOrder = new ArrayList<>(); - OrderBag bag1 = createOrderBagWithExportedQuantity(1, 10); - OrderBag bag2 = createOrderBagWithExportedQuantity(2, 20); - bagsForOrder.add(bag1); - bagsForOrder.add(bag2); - - Map result = orderBagService.getActualBagsAmountForOrder(bagsForOrder); - - Map expected = new HashMap<>(); - expected.put(1, 10); - expected.put(2, 20); - assertEquals(expected, result); - } - - @Test - void testGetActualBagsAmountForOrder_WithConfirmedQuantity() { - List bagsForOrder = new ArrayList<>(); - OrderBag bag1 = createOrderBagWithConfirmedQuantity(1, 5); - OrderBag bag2 = createOrderBagWithConfirmedQuantity(2, 15); - bagsForOrder.add(bag1); - bagsForOrder.add(bag2); - - Map result = orderBagService.getActualBagsAmountForOrder(bagsForOrder); - - Map expected = new HashMap<>(); - expected.put(1, 5); - expected.put(2, 15); - assertEquals(expected, result); - } - - @Test - void testGetActualBagsAmountForOrder_WithAmount() { - List bagsForOrder = new ArrayList<>(); - OrderBag bag1 = createOrderBagWithAmount(1, 3); - OrderBag bag2 = createOrderBagWithAmount(2, 7); - bagsForOrder.add(bag1); - bagsForOrder.add(bag2); - - Map result = orderBagService.getActualBagsAmountForOrder(bagsForOrder); - - Map expected = new HashMap<>(); - expected.put(1, 3); - expected.put(2, 7); - assertEquals(expected, result); - } - - @Test - void testGetActualBagsAmountForOrder_WithNoMatch() { - List bagsForOrder = new ArrayList<>(); - OrderBag bag1 = createOrderBagWithAmount(1, 3); - bag1.setExportedQuantity(null); - bag1.setConfirmedQuantity(null); - bag1.setAmount(null); - - OrderBag bag2 = createOrderBagWithAmount(2, 7); - bag2.setExportedQuantity(null); - bag2.setConfirmedQuantity(null); - bag2.setAmount(null); - bagsForOrder.add(bag1); - bagsForOrder.add(bag2); - - Map result = orderBagService.getActualBagsAmountForOrder(bagsForOrder); - - Map expected = new HashMap<>(); - assertEquals(expected, result); - } - - private OrderBag createOrderBagWithExportedQuantity(int bagId, int exportedQuantity) { - OrderBag orderBag = new OrderBag(); - Bag bag = new Bag(); - bag.setId(bagId); - orderBag.setBag(bag); - orderBag.setExportedQuantity(exportedQuantity); - return orderBag; - } - - private OrderBag createOrderBagWithConfirmedQuantity(int bagId, int confirmedQuantity) { - OrderBag orderBag = new OrderBag(); - Bag bag = new Bag(); - bag.setId(bagId); - orderBag.setBag(bag); - orderBag.setConfirmedQuantity(confirmedQuantity); - return orderBag; - } - - private OrderBag createOrderBagWithAmount(int bagId, int amount) { - OrderBag orderBag = new OrderBag(); - Bag bag = new Bag(); - bag.setId(bagId); - orderBag.setBag(bag); - orderBag.setAmount(amount); - return orderBag; - } -} \ No newline at end of file diff --git a/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java b/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java index f3a3c2716..49327a86e 100644 --- a/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java @@ -23,7 +23,6 @@ import greencity.dto.tariff.SetTariffLimitsDto; import greencity.entity.order.Bag; import greencity.entity.order.Courier; -import greencity.entity.order.Order; import greencity.entity.order.Service; import greencity.entity.order.TariffLocation; import greencity.entity.order.TariffsInfo; @@ -31,7 +30,10 @@ import greencity.entity.user.Region; import greencity.entity.user.employee.Employee; import greencity.entity.user.employee.ReceivingStation; -import greencity.enums.*; +import greencity.enums.CourierStatus; +import greencity.enums.LocationStatus; +import greencity.enums.StationStatus; +import greencity.enums.TariffStatus; import greencity.exceptions.BadRequestException; import greencity.exceptions.NotFoundException; import greencity.exceptions.UnprocessableEntityException; @@ -45,8 +47,6 @@ import greencity.repository.DeactivateChosenEntityRepository; import greencity.repository.EmployeeRepository; import greencity.repository.LocationRepository; -import greencity.repository.OrderBagRepository; -import greencity.repository.OrderRepository; import greencity.repository.ReceivingStationRepository; import greencity.repository.RegionRepository; import greencity.repository.ServiceRepository; @@ -68,10 +68,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.Arrays; import java.util.Optional; -import java.util.Map; -import java.util.HashMap; import java.util.Set; import java.util.UUID; import java.util.stream.Stream; @@ -134,12 +131,6 @@ class SuperAdminServiceImplTest { private TariffLocationRepository tariffsLocationRepository; @Mock private DeactivateChosenEntityRepository deactivateTariffsForChosenParamRepository; - @Mock - private OrderBagRepository orderBagRepository; - @Mock - private OrderRepository orderRepository; - @Mock - private OrderBagService orderBagService; @AfterEach void afterEach() { @@ -155,8 +146,7 @@ void afterEach() { receivingStationRepository, tariffsInfoRepository, tariffsLocationRepository, - deactivateTariffsForChosenParamRepository, - orderBagRepository); + deactivateTariffsForChosenParamRepository); } @Test @@ -215,7 +205,7 @@ void addTariffServiceIfTariffNotFoundExceptionTest() { @Test void getTariffServiceTest() { - List bags = List.of(ModelUtils.getNewBag()); + List bags = List.of(ModelUtils.getOptionalBag().get()); GetTariffServiceDto dto = ModelUtils.getGetTariffServiceDto(); when(tariffsInfoRepository.existsById(1L)).thenReturn(true); @@ -229,20 +219,6 @@ void getTariffServiceTest() { verify(modelMapper).map(bags.get(0), GetTariffServiceDto.class); } - @Test - void getTariffServiceIfThereAreNoBags() { - List bags = Collections.emptyList(); - - when(tariffsInfoRepository.existsById(1L)).thenReturn(true); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(bags); - - List dtos = superAdminService.getTariffService(1); - - assertEquals(Collections.emptyList(), dtos); - verify(tariffsInfoRepository).existsById(1L); - verify(bagRepository).findBagsByTariffsInfoId(1L); - } - @Test void getTariffServiceIfTariffNotFoundException() { when(tariffsInfoRepository.existsById(1L)).thenReturn(false); @@ -257,112 +233,36 @@ void getTariffServiceIfTariffNotFoundException() { @Test void deleteTariffServiceWhenTariffBagsWithLimits() { Bag bag = ModelUtils.getBag(); - Bag bagDeleted = ModelUtils.getBagDeleted(); TariffsInfo tariffsInfo = ModelUtils.getTariffInfo(); + bag.setTariffsInfo(tariffsInfo); when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + doNothing().when(bagRepository).delete(bag); when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(List.of(bag)); - superAdminService.deleteTariffService(1); - + assertEquals(TariffStatus.ACTIVE, tariffsInfo.getTariffStatus()); verify(bagRepository).findById(1); + verify(bagRepository).delete(bag); verify(bagRepository).findBagsByTariffsInfoId(1L); verify(tariffsInfoRepository, never()).save(tariffsInfo); } - @Test - void deleteTariffService2() { - Bag bag = ModelUtils.getBag(); - TariffsInfo tariffsInfo = ModelUtils.getTariffsInfoWithStatusNew(); - tariffsInfo.setBags(Arrays.asList(bag)); - bag.setTariffsInfo(tariffsInfo); - tariffsInfo.setTariffStatus(TariffStatus.DEACTIVATED); - Map amount = new HashMap<>(); - amount.put(1, 3); - amount.put(2, 7); - - Order order = ModelUtils.getOrder(); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(Collections.emptyList()); - when(tariffsInfoRepository.save(tariffsInfo)).thenReturn(tariffsInfo); - when(orderRepository.findAllByBagId(bag.getId())).thenReturn(Arrays.asList(order)); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))).thenReturn(amount); - superAdminService.deleteTariffService(1); - - verify(bagRepository).findById(1); - verify(bagRepository).findBagsByTariffsInfoId(1L); - verify(tariffsInfoRepository).save(tariffsInfo); - } - - @Test - void deleteTariffService3() { - Bag bag = ModelUtils.getBag(); - TariffsInfo tariffsInfo = ModelUtils.getTariffsInfoWithStatusNew(); - tariffsInfo.setBags(Arrays.asList(bag)); - bag.setTariffsInfo(tariffsInfo); - tariffsInfo.setTariffStatus(TariffStatus.DEACTIVATED); - Map amount = new HashMap<>(); - amount.put(1, 3); - amount.put(2, 7); - Order order = ModelUtils.getOrder(); - order.setOrderPaymentStatus(OrderPaymentStatus.UNPAID); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(Collections.emptyList()); - when(tariffsInfoRepository.save(tariffsInfo)).thenReturn(tariffsInfo); - when(orderRepository.findAllByBagId(bag.getId())).thenReturn(Arrays.asList(order)); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))).thenReturn(amount); - superAdminService.deleteTariffService(1); - - verify(bagRepository).findById(1); - verify(bagRepository).findBagsByTariffsInfoId(1L); - verify(tariffsInfoRepository).save(tariffsInfo); - } - - @Test - void deleteTariffService4() { - Bag bag = ModelUtils.getBag(); - TariffsInfo tariffsInfo = ModelUtils.getTariffsInfoWithStatusNew(); - tariffsInfo.setBags(Arrays.asList(bag)); - bag.setTariffsInfo(tariffsInfo); - tariffsInfo.setTariffStatus(TariffStatus.DEACTIVATED); - Map amount = new HashMap<>(); - amount.put(1, 0); - Order order = ModelUtils.getOrder(); - order.setOrderPaymentStatus(OrderPaymentStatus.UNPAID); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(Collections.emptyList()); - when(tariffsInfoRepository.save(tariffsInfo)).thenReturn(tariffsInfo); - when(orderRepository.findAllByBagId(bag.getId())).thenReturn(Arrays.asList(order)); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))).thenReturn(amount); - superAdminService.deleteTariffService(1); - - verify(bagRepository).findById(1); - verify(bagRepository).findBagsByTariffsInfoId(1L); - verify(tariffsInfoRepository).save(tariffsInfo); - } - @Test void deleteTariffServiceWhenTariffBagsListIsEmpty() { Bag bag = ModelUtils.getBag(); - TariffsInfo tariffsInfo = ModelUtils.getTariffsInfoWithStatusNew(); - tariffsInfo.setBags(Arrays.asList(bag)); + TariffsInfo tariffsInfo = ModelUtils.getTariffInfo(); bag.setTariffsInfo(tariffsInfo); - tariffsInfo.setTariffStatus(TariffStatus.DEACTIVATED); - Map amount = new HashMap<>(); - amount.put(1, 0); - Order order = ModelUtils.getOrder(); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + TariffsInfo tariffsInfoNew = ModelUtils.getTariffsInfoWithStatusNew(); + tariffsInfoNew.setBags(Collections.emptyList()); + when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + doNothing().when(bagRepository).delete(bag); when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(Collections.emptyList()); when(tariffsInfoRepository.save(tariffsInfo)).thenReturn(tariffsInfo); - when(orderRepository.findAllByBagId(bag.getId())).thenReturn(Arrays.asList(order)); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))).thenReturn(amount); superAdminService.deleteTariffService(1); - + assertEquals(TariffStatus.NEW, tariffsInfoNew.getTariffStatus()); verify(bagRepository).findById(1); + verify(bagRepository).delete(bag); verify(bagRepository).findBagsByTariffsInfoId(1L); verify(tariffsInfoRepository).save(tariffsInfo); } @@ -370,175 +270,74 @@ void deleteTariffServiceWhenTariffBagsListIsEmpty() { @Test void deleteTariffServiceWhenTariffBagsWithoutLimits() { Bag bag = ModelUtils.getBag(); + TariffsInfo tariffsInfo = ModelUtils.getTariffInfo(); bag.setLimitIncluded(false); - Bag bagDeleted = ModelUtils.getBagDeleted(); - bagDeleted.setLimitIncluded(false); + bag.setTariffsInfo(tariffsInfo); TariffsInfo tariffsInfoNew = ModelUtils.getTariffsInfoWithStatusNew(); - tariffsInfoNew.setBags(Arrays.asList(bag)); - bag.setTariffsInfo(tariffsInfoNew); - tariffsInfoNew.setTariffStatus(TariffStatus.DEACTIVATED); - tariffsInfoNew.setBags(Arrays.asList(bag)); - bag.setTariffsInfo(tariffsInfoNew); - tariffsInfoNew.setTariffStatus(TariffStatus.DEACTIVATED); + tariffsInfoNew.setBags(Collections.emptyList()); when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + doNothing().when(bagRepository).delete(bag); when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(List.of(bag)); - when(tariffsInfoRepository.save(tariffsInfoNew)).thenReturn(tariffsInfoNew); - + when(tariffsInfoRepository.save(tariffsInfo)).thenReturn(tariffsInfoNew); superAdminService.deleteTariffService(1); - + assertEquals(TariffStatus.NEW, tariffsInfoNew.getTariffStatus()); verify(bagRepository).findById(1); + verify(bagRepository).delete(bag); verify(bagRepository).findBagsByTariffsInfoId(1L); verify(tariffsInfoRepository).save(tariffsInfoNew); } @Test - void deleteTariffServiceThrowBagNotFoundException() { + void deleteTariffServiceThrowNotFoundException() { when(bagRepository.findById(1)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.deleteTariffService(1)); verify(bagRepository).findById(1); - verify(bagRepository, never()).save(any(Bag.class)); - } - - @Test - void editTariffServiceWithUnpaidOrder() { - Bag bag = ModelUtils.getBag(); - Bag editedBag = ModelUtils.getEditedBag(); - Employee employee = ModelUtils.getEmployee(); - TariffServiceDto dto = ModelUtils.getTariffServiceDto(); - GetTariffServiceDto editedDto = ModelUtils.getGetTariffServiceDto(); - Order order = ModelUtils.getOrder(); - String uuid = UUID.randomUUID().toString(); - order.setOrderBags(List.of(ModelUtils.getOrderBag())); - - when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); - - when(bagRepository.save(editedBag)).thenReturn(editedBag); - when(modelMapper.map(editedBag, GetTariffServiceDto.class)).thenReturn(editedDto); - doNothing().when(orderBagRepository) - .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); - when(orderRepository.findAllUnpaidOrdersByBagId(1)).thenReturn(List.of(order)); - when(orderRepository.saveAll(List.of(order))).thenReturn(List.of(order)); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) - .thenReturn(ModelUtils.getAmount()); - - GetTariffServiceDto actual = superAdminService.editTariffService(dto, 1, uuid); - - assertEquals(editedDto, actual); - verify(employeeRepository).findByUuid(uuid); - verify(bagRepository).findById(1); - verify(bagRepository).save(editedBag); - verify(modelMapper).map(editedBag, GetTariffServiceDto.class); - verify(orderBagRepository) - .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); - verify(orderRepository).findAllUnpaidOrdersByBagId(1); - verify(orderRepository).saveAll(anyList()); + verify(bagRepository, never()).delete(any(Bag.class)); } @Test - void editTariffServiceWithUnpaidOrderAndBagConfirmedAmount() { + void editTariffService() { Bag bag = ModelUtils.getBag(); - Bag editedBag = ModelUtils.getEditedBag(); Employee employee = ModelUtils.getEmployee(); TariffServiceDto dto = ModelUtils.getTariffServiceDto(); GetTariffServiceDto editedDto = ModelUtils.getGetTariffServiceDto(); - Order order = ModelUtils.getOrder(); String uuid = UUID.randomUUID().toString(); - order.setOrderBags(List.of(ModelUtils.getOrderBagWithConfirmedAmount())); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); - when(bagRepository.save(editedBag)).thenReturn(editedBag); - when(modelMapper.map(editedBag, GetTariffServiceDto.class)).thenReturn(editedDto); - doNothing().when(orderBagRepository) - .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); - when(orderRepository.findAllUnpaidOrdersByBagId(1)).thenReturn(List.of(order)); - when(orderRepository.saveAll(List.of(order))).thenReturn(List.of(order)); - when(orderBagService - .getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag().setConfirmedQuantity(2)))) - .thenReturn(ModelUtils.getAmount()); - - GetTariffServiceDto actual = superAdminService.editTariffService(dto, 1, uuid); - - assertEquals(editedDto, actual); - verify(employeeRepository).findByUuid(uuid); - verify(bagRepository).findById(1); - verify(bagRepository).save(editedBag); - verify(modelMapper).map(editedBag, GetTariffServiceDto.class); - verify(orderBagRepository) - .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); - verify(orderRepository).findAllUnpaidOrdersByBagId(1); - verify(orderRepository).saveAll(anyList()); - } + when(bagRepository.save(bag)).thenReturn(bag); + when(modelMapper.map(bag, GetTariffServiceDto.class)).thenReturn(editedDto); - @Test - void editTariffServiceWithUnpaidOrderAndBagExportedAmount() { - Bag bag = ModelUtils.getBag(); - Bag editedBag = ModelUtils.getEditedBag(); - Employee employee = ModelUtils.getEmployee(); - TariffServiceDto dto = ModelUtils.getTariffServiceDto(); - GetTariffServiceDto editedDto = ModelUtils.getGetTariffServiceDto(); - Order order = ModelUtils.getOrder(); - String uuid = UUID.randomUUID().toString(); - order.setOrderBags(List.of(ModelUtils.getOrderBagWithExportedAmount())); + superAdminService.editTariffService(dto, 1, uuid); - when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); - when(bagRepository.save(editedBag)).thenReturn(editedBag); - when(modelMapper.map(editedBag, GetTariffServiceDto.class)).thenReturn(editedDto); - doNothing().when(orderBagRepository) - .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); - when(orderRepository.findAllUnpaidOrdersByBagId(1)).thenReturn(List.of(order)); - when(orderRepository.saveAll(List.of(order))).thenReturn(List.of(order)); - when(orderBagService.getActualBagsAmountForOrder( - Arrays.asList(ModelUtils.getOrderBag().setExportedQuantity(2).setConfirmedQuantity(2)))) - .thenReturn(ModelUtils.getAmount()); - - GetTariffServiceDto actual = superAdminService.editTariffService(dto, 1, uuid); - - assertEquals(editedDto, actual); verify(employeeRepository).findByUuid(uuid); verify(bagRepository).findById(1); - verify(bagRepository).findById(1); - - verify(bagRepository).save(editedBag); - verify(modelMapper).map(editedBag, GetTariffServiceDto.class); - verify(orderBagRepository) - .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); - verify(orderRepository).findAllUnpaidOrdersByBagId(1); - verify(orderRepository).saveAll(anyList()); + verify(bagRepository).save(bag); + verify(modelMapper).map(bag, GetTariffServiceDto.class); } @Test - void editTariffServiceWithoutUnpaidOrder() { + void editTariffServiceIfCommissionIsNull() { Bag bag = ModelUtils.getBag(); - Bag editedBag = ModelUtils.getEditedBag(); Employee employee = ModelUtils.getEmployee(); TariffServiceDto dto = ModelUtils.getTariffServiceDto(); + dto.setCommission(null); GetTariffServiceDto editedDto = ModelUtils.getGetTariffServiceDto(); String uuid = UUID.randomUUID().toString(); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); - when(bagRepository.save(editedBag)).thenReturn(editedBag); - when(modelMapper.map(editedBag, GetTariffServiceDto.class)).thenReturn(editedDto); - doNothing().when(orderBagRepository) - .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); - when(orderRepository.findAllUnpaidOrdersByBagId(1)).thenReturn(Collections.emptyList()); + when(bagRepository.save(bag)).thenReturn(bag); + when(modelMapper.map(bag, GetTariffServiceDto.class)).thenReturn(editedDto); - GetTariffServiceDto actual = superAdminService.editTariffService(dto, 1, uuid); + superAdminService.editTariffService(dto, 1, uuid); - assertEquals(editedDto, actual); verify(employeeRepository).findByUuid(uuid); verify(bagRepository).findById(1); - verify(bagRepository).save(editedBag); - verify(modelMapper).map(editedBag, GetTariffServiceDto.class); - verify(orderBagRepository) - .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); - verify(orderRepository).findAllUnpaidOrdersByBagId(1); - verify(orderRepository, never()).saveAll(anyList()); + verify(bagRepository).save(bag); + verify(modelMapper).map(bag, GetTariffServiceDto.class); } @Test @@ -610,40 +409,38 @@ void deleteServiceThrowNotFoundException() { void getService() { Service service = ModelUtils.getService(); GetServiceDto getServiceDto = ModelUtils.getGetServiceDto(); - TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); - when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); + when(tariffsInfoRepository.existsById(1L)).thenReturn(true); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(service)); when(modelMapper.map(service, GetServiceDto.class)).thenReturn(getServiceDto); assertEquals(getServiceDto, superAdminService.getService(1L)); - verify(tariffsInfoRepository).findById(1L); + verify(tariffsInfoRepository).existsById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); verify(modelMapper).map(service, GetServiceDto.class); } @Test void getServiceIfServiceNotExists() { - TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); - - when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); + when(tariffsInfoRepository.existsById(1L)).thenReturn(true); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.empty()); assertNull(superAdminService.getService(1L)); - verify(tariffsInfoRepository).findById(1L); + verify(tariffsInfoRepository).existsById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); + verify(modelMapper, never()).map(any(Service.class), any(GetServiceDto.class)); } @Test void getServiceThrowTariffNotFoundException() { - when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.empty()); + when(tariffsInfoRepository.existsById(1L)).thenReturn(false); assertThrows(NotFoundException.class, () -> superAdminService.getService(1L)); - verify(tariffsInfoRepository).findById(1L); + verify(tariffsInfoRepository).existsById(1L); } @Test @@ -710,6 +507,7 @@ void addService() { TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); String uuid = UUID.randomUUID().toString(); + when(tariffsInfoRepository.existsById(1L)).thenReturn(true); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.empty()); when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); @@ -720,6 +518,7 @@ void addService() { assertEquals(getServiceDto, superAdminService.addService(1L, serviceDto, uuid)); verify(employeeRepository).findByUuid(uuid); + verify(tariffsInfoRepository).existsById(1L); verify(tariffsInfoRepository).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); verify(serviceRepository).save(service); @@ -731,33 +530,31 @@ void addService() { void addServiceThrowServiceAlreadyExistsException() { Service createdService = ModelUtils.getService(); ServiceDto serviceDto = ModelUtils.getServiceDto(); - TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); String uuid = UUID.randomUUID().toString(); - when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); + when(tariffsInfoRepository.existsById(1L)).thenReturn(true); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(createdService)); assertThrows(ServiceAlreadyExistsException.class, () -> superAdminService.addService(1L, serviceDto, uuid)); - verify(tariffsInfoRepository).findById(1L); + verify(tariffsInfoRepository).existsById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); } @Test void addServiceThrowEmployeeNotFoundException() { ServiceDto serviceDto = ModelUtils.getServiceDto(); - TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); String uuid = UUID.randomUUID().toString(); - when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); + when(tariffsInfoRepository.existsById(1L)).thenReturn(true); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.empty()); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.addService(1L, serviceDto, uuid)); - verify(tariffsInfoRepository).findById(1L); + verify(tariffsInfoRepository).existsById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); verify(employeeRepository).findByUuid(uuid); } @@ -767,12 +564,12 @@ void addServiceThrowTariffNotFoundException() { ServiceDto serviceDto = ModelUtils.getServiceDto(); String uuid = UUID.randomUUID().toString(); - when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.empty()); + when(tariffsInfoRepository.existsById(1L)).thenReturn(false); assertThrows(NotFoundException.class, () -> superAdminService.addService(1L, serviceDto, uuid)); - verify(tariffsInfoRepository).findById(1L); + verify(tariffsInfoRepository).existsById(1L); } @Test diff --git a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java index da6826fee..c36b12eed 100644 --- a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java @@ -42,7 +42,14 @@ import greencity.dto.user.UserProfileDto; import greencity.dto.user.UserProfileUpdateDto; import greencity.entity.coords.Coordinates; -import greencity.entity.order.*; +import greencity.entity.order.Bag; +import greencity.entity.order.Certificate; +import greencity.entity.order.Event; +import greencity.entity.order.Order; +import greencity.entity.order.OrderPaymentStatusTranslation; +import greencity.entity.order.OrderStatusTranslation; +import greencity.entity.order.Payment; +import greencity.entity.order.TariffsInfo; import greencity.entity.telegram.TelegramBot; import greencity.entity.user.User; import greencity.entity.user.employee.Employee; @@ -62,7 +69,25 @@ import greencity.exceptions.http.AccessDeniedException; import greencity.exceptions.user.UBSuserNotFoundException; import greencity.exceptions.user.UserNotFoundException; -import greencity.repository.*; +import greencity.repository.AddressRepository; +import greencity.repository.BagRepository; +import greencity.repository.CertificateRepository; +import greencity.repository.CourierRepository; +import greencity.repository.EmployeeRepository; +import greencity.repository.EventRepository; +import greencity.repository.LocationRepository; +import greencity.repository.OrderAddressRepository; +import greencity.repository.OrderPaymentStatusTranslationRepository; +import greencity.repository.OrderRepository; +import greencity.repository.OrderStatusTranslationRepository; +import greencity.repository.OrdersForUserRepository; +import greencity.repository.PaymentRepository; +import greencity.repository.TariffLocationRepository; +import greencity.repository.TariffsInfoRepository; +import greencity.repository.TelegramBotRepository; +import greencity.repository.UBSuserRepository; +import greencity.repository.UserRepository; +import greencity.repository.ViberBotRepository; import greencity.service.google.GoogleApiService; import greencity.service.locations.LocationApiService; import greencity.util.Bot; @@ -98,7 +123,80 @@ import java.util.UUID; import java.util.stream.Collectors; -import static greencity.ModelUtils.*; +import static greencity.ModelUtils.TEST_BAG_FOR_USER_DTO; +import static greencity.ModelUtils.TEST_BAG_LIST; +import static greencity.ModelUtils.TEST_EMAIL; +import static greencity.ModelUtils.TEST_ORDER_ADDRESS_DTO_REQUEST; +import static greencity.ModelUtils.TEST_PAYMENT_LIST; +import static greencity.ModelUtils.addressDto; +import static greencity.ModelUtils.addressDtoList; +import static greencity.ModelUtils.addressList; +import static greencity.ModelUtils.bagDto; +import static greencity.ModelUtils.botList; +import static greencity.ModelUtils.createCertificateDto; +import static greencity.ModelUtils.getAddress; +import static greencity.ModelUtils.getAddressDtoResponse; +import static greencity.ModelUtils.getAddressRequestDto; +import static greencity.ModelUtils.getBag; +import static greencity.ModelUtils.getBag1list; +import static greencity.ModelUtils.getBag4list; +import static greencity.ModelUtils.getBagForOrder; +import static greencity.ModelUtils.getBagTranslationDto; +import static greencity.ModelUtils.getCancellationDto; +import static greencity.ModelUtils.getCertificate; +import static greencity.ModelUtils.getCourier; +import static greencity.ModelUtils.getCourierDto; +import static greencity.ModelUtils.getCourierDtoList; +import static greencity.ModelUtils.getEmployee; +import static greencity.ModelUtils.getGeocodingResult; +import static greencity.ModelUtils.getListOfEvents; +import static greencity.ModelUtils.getLocation; +import static greencity.ModelUtils.getMaximumAmountOfAddresses; +import static greencity.ModelUtils.getOrder; +import static greencity.ModelUtils.getOrderClientDto; +import static greencity.ModelUtils.getOrderCount; +import static greencity.ModelUtils.getOrderCountWithPaymentStatusPaid; +import static greencity.ModelUtils.getOrderDetails; +import static greencity.ModelUtils.getOrderDetailsWithoutSender; +import static greencity.ModelUtils.getOrderDoneByUser; +import static greencity.ModelUtils.getOrderFondyClientDto; +import static greencity.ModelUtils.getOrderPaymentDetailDto; +import static greencity.ModelUtils.getOrderPaymentStatusTranslation; +import static greencity.ModelUtils.getOrderResponseDto; +import static greencity.ModelUtils.getOrderStatusDto; +import static greencity.ModelUtils.getOrderStatusTranslation; +import static greencity.ModelUtils.getOrderTest; +import static greencity.ModelUtils.getOrderWithEvents; +import static greencity.ModelUtils.getOrderWithTariffAndLocation; +import static greencity.ModelUtils.getOrderWithoutPayment; +import static greencity.ModelUtils.getOrdersDto; +import static greencity.ModelUtils.getPayment; +import static greencity.ModelUtils.getPaymentResponseDto; +import static greencity.ModelUtils.getSuccessfulFondyResponse; +import static greencity.ModelUtils.getTariffInfo; +import static greencity.ModelUtils.getTariffInfoWithLimitOfBags; +import static greencity.ModelUtils.getTariffInfoWithLimitOfBagsAndMaxLessThanCountOfBigBag; +import static greencity.ModelUtils.getTariffLocation; +import static greencity.ModelUtils.getTariffsForLocationDto; +import static greencity.ModelUtils.getTariffsInfo; +import static greencity.ModelUtils.getTelegramBotNotifyTrue; +import static greencity.ModelUtils.getTestOrderAddressDtoRequest; +import static greencity.ModelUtils.getTestOrderAddressLocationDto; +import static greencity.ModelUtils.getTestUser; +import static greencity.ModelUtils.getUBSuser; +import static greencity.ModelUtils.getUBSuserWithoutSender; +import static greencity.ModelUtils.getUbsCustomersDtoUpdate; +import static greencity.ModelUtils.getUbsUsers; +import static greencity.ModelUtils.getUser; +import static greencity.ModelUtils.getUserForCreate; +import static greencity.ModelUtils.getUserInfoDto; +import static greencity.ModelUtils.getUserPointsAndAllBagsDto; +import static greencity.ModelUtils.getUserProfileCreateDto; +import static greencity.ModelUtils.getUserProfileUpdateDto; +import static greencity.ModelUtils.getUserProfileUpdateDtoWithBotsIsNotifyFalse; +import static greencity.ModelUtils.getUserWithBotNotifyTrue; +import static greencity.ModelUtils.getUserWithLastLocation; +import static greencity.ModelUtils.getViberBotNotifyTrue; import static greencity.constant.ErrorMessage.ACTUAL_ADDRESS_NOT_FOUND; import static greencity.constant.ErrorMessage.ADDRESS_ALREADY_EXISTS; import static greencity.constant.ErrorMessage.CANNOT_ACCESS_PERSONAL_INFO; @@ -218,10 +316,6 @@ class UBSClientServiceImplTest { @Mock private LocationApiService locationApiService; - @Mock - private OrderBagService orderBagService; - @Mock - private OrderBagRepository orderBagRepository; @Test void testGetAllDistricts() { @@ -675,8 +769,7 @@ void testSaveToDB() throws IllegalAccessException { f.set(ubsService, "1"); } } - tariffsInfo.setBags(Arrays.asList(bag)); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); @@ -687,6 +780,7 @@ void testSaveToDB() throws IllegalAccessException { when(orderRepository.findById(any())).thenReturn(Optional.of(order1)); when(encryptionUtil.formRequestSignature(any(), eq(null), eq("1"))).thenReturn("TestValue"); when(fondyClient.getCheckoutResponse(any())).thenReturn(getSuccessfulFondyResponse()); + FondyOrderResponse result = ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null); Assertions.assertNotNull(result); @@ -709,12 +803,10 @@ void testSaveToDBWithTwoBags() throws IllegalAccessException { Bag bag1 = getBagForOrder(); bag1.setId(1); - bag1.setCapacity(100); bag1.setLimitIncluded(false); Bag bag3 = getBagForOrder(); - bag3.setCapacity(1000); TariffsInfo tariffsInfo = getTariffInfo(); - tariffsInfo.setBags(Arrays.asList(bag1, bag3)); + UBSuser ubSuser = getUBSuser(); OrderAddress orderAddress = ubSuser.getOrderAddress(); @@ -725,9 +817,7 @@ void testSaveToDBWithTwoBags() throws IllegalAccessException { Payment payment1 = getPayment(); payment1.setId(1L); order1.getPayment().add(payment1); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag(), ModelUtils.getOrderBag())); - order1 - .setOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag(), ModelUtils.getOrderBag())); + Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { if (f.getName().equals("merchantId")) { @@ -769,7 +859,6 @@ void testSaveToDBWithCertificates() throws IllegalAccessException { Bag bag = getBagForOrder(); TariffsInfo tariffsInfo = getTariffInfo(); - tariffsInfo.setBags(Arrays.asList(bag)); UBSuser ubSuser = getUBSuser(); @@ -793,7 +882,7 @@ void testSaveToDBWithCertificates() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(any())).thenReturn(Optional.of(bag)); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); when(certificateRepository.findById(anyString())).thenReturn(Optional.of(getCertificate())); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); @@ -823,7 +912,6 @@ void testSaveToDBWithDontSendLinkToFondy() throws IllegalAccessException { Bag bag = getBagForOrder(); TariffsInfo tariffsInfo = getTariffInfo(); - tariffsInfo.setBags(Arrays.asList(bag)); Certificate certificate = getCertificate(); certificate.setPoints(1000_00); @@ -850,7 +938,7 @@ void testSaveToDBWithDontSendLinkToFondy() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(any())).thenReturn(Optional.of(bag)); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); when(certificateRepository.findById(anyString())).thenReturn(Optional.of(certificate)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); @@ -877,7 +965,6 @@ void testSaveToDBWhenSumToPayLessThanPoints() throws IllegalAccessException { Bag bag = getBagForOrder(); TariffsInfo tariffsInfo = getTariffInfo(); - tariffsInfo.setBags(Arrays.asList(bag)); UBSuser ubSuser = getUBSuser(); @@ -901,7 +988,7 @@ void testSaveToDBWhenSumToPayLessThanPoints() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(any())).thenReturn(Optional.of(bag)); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); @@ -1125,14 +1212,11 @@ void testSaveToDBWithoutOrderUnpaid() throws IllegalAccessException { Payment payment1 = getPayment(); payment1.setId(1L); order1.getPayment().add(payment1); - TariffsInfo tariffsInfo = getTariffsInfo(); - bag.setTariffsInfo(tariffsInfo); - tariffsInfo.setBags(Arrays.asList(bag)); - order.setTariffsInfo(tariffsInfo); - when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); - when(bagRepository.findById(any())).thenReturn(Optional.of(bag)); + when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) + .thenReturn(Optional.of(getTariffInfo())); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); when(orderRepository.findById(any())).thenReturn(Optional.of(order1)); @@ -1143,7 +1227,7 @@ void testSaveToDBWithoutOrderUnpaid() throws IllegalAccessException { verify(userRepository, times(1)).findByUuid("35467585763t4sfgchjfuyetf"); verify(tariffsInfoRepository, times(1)) .findTariffsInfoByBagIdAndLocationId(anyList(), anyLong()); - verify(bagRepository, times(1)).findById(any()); + verify(bagRepository, times(2)).findById(any()); verify(ubsUserRepository, times(1)).findById(anyLong()); verify(modelMapper, times(1)).map(dto.getPersonalData(), UBSuser.class); verify(orderRepository, times(1)).findById(anyLong()); @@ -1157,19 +1241,14 @@ void saveToDBFailPaidOrder() { dto.getBags().get(0).setAmount(5); Order order = getOrder(); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); Bag bag = getBagForOrder(); TariffsInfo tariffsInfo = getTariffInfo(); - bag.setTariffsInfo(tariffsInfo); - tariffsInfo.setBags(Arrays.asList(bag)); - order.setTariffsInfo(tariffsInfo); - when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(any())).thenReturn(Optional.of(bag)); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); when(orderRepository.findById(any())).thenReturn(Optional.of(order)); assertThrows(BadRequestException.class, @@ -2413,10 +2492,53 @@ void deleteOrderFail() { } @Test - void processOrderFondyClient2() throws Exception { + void processOrderFondyClient() throws Exception { Order order = getOrderCount(); + HashMap value = new HashMap<>(); + value.put(1, 22); + order.setAmountOfBagsOrdered(value); + order.setPointsToUse(100); + order.setSumTotalAmountWithoutDiscounts(1000_00L); + order.setCertificates(Set.of(getCertificate())); + order.setPayment(TEST_PAYMENT_LIST); + User user = getUser(); + user.setCurrentPoints(100); + user.setChangeOfPointsList(new ArrayList<>()); + order.setUser(user); + + OrderFondyClientDto dto = getOrderFondyClientDto(); + Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); + for (Field f : fields) { + if (f.getName().equals("merchantId")) { + f.setAccessible(true); + f.set(ubsService, "1"); + } + } + Certificate certificate = getCertificate(); + CertificateDto certificateDto = createCertificateDto(); + + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); + when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); + + when(encryptionUtil.formRequestSignature(any(), eq(null), eq("1"))).thenReturn("TestValue"); + when(fondyClient.getCheckoutResponse(any())).thenReturn(getSuccessfulFondyResponse()); + when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); + when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); + when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + + ubsService.processOrderFondyClient(dto, "uuid"); + + verify(encryptionUtil).formRequestSignature(any(), eq(null), eq("1")); + verify(fondyClient).getCheckoutResponse(any()); + + } + @Test + void processOrderFondyClient2() throws Exception { + Order order = getOrderCount(); + Certificate certificate = getCertificate(); + certificate.setPoints(1500); HashMap value = new HashMap<>(); value.put(1, 22); order.setAmountOfBagsOrdered(value); @@ -2432,9 +2554,6 @@ void processOrderFondyClient2() throws Exception { OrderFondyClientDto dto = getOrderFondyClientDto(); dto.setCertificates(Set.of("1111-1234")); - order.setCertificates(Set.of(getCertificate())); - order.setPayment(TEST_PAYMENT_LIST); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { if (f.getName().equals("merchantId")) { @@ -2443,26 +2562,26 @@ void processOrderFondyClient2() throws Exception { } } - order.setPointsToUse(-10000); CertificateDto certificateDto = createCertificateDto(); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + certificateDto.setPoints(1500); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); - when(fondyClient.getCheckoutResponse(any())).thenReturn(getSuccessfulFondyResponse()); - when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); - when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); when(certificateRepository.findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE)).thenReturn(Set.of(certificate)); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) - .thenReturn(ModelUtils.getAmount()); + when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); + when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); + when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); ubsService.processOrderFondyClient(dto, "uuid"); + verify(orderRepository).findById(1L); verify(userRepository).findUserByUuid("uuid"); verify(certificateRepository).findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE); - verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); + verify(bagRepository).findBagsByOrderId(order.getId()); + verify(modelMapper).map(certificate, CertificateDto.class); + verify(modelMapper).map(any(Bag.class), eq(BagForUserDto.class)); } @Test @@ -2481,6 +2600,7 @@ void processOrderFondyClientCertificeteNotFoundExeption() throws Exception { user.setCurrentPoints(100); user.setChangeOfPointsList(new ArrayList<>()); order.setUser(user); + OrderFondyClientDto dto = getOrderFondyClientDto(); dto.setCertificates(Set.of("1111-1234")); @@ -2494,22 +2614,24 @@ void processOrderFondyClientCertificeteNotFoundExeption() throws Exception { CertificateDto certificateDto = createCertificateDto(); certificateDto.setPoints(1500); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) - .thenReturn(ModelUtils.getAmount()); + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); when(certificateRepository.findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE)).thenReturn(Collections.emptySet()); + when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); - when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + assertThrows(NotFoundException.class, () -> ubsService.processOrderFondyClient(dto, "uuid")); + verify(orderRepository).findById(1L); verify(userRepository).findUserByUuid("uuid"); verify(certificateRepository).findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE); + verify(bagRepository).findBagsByOrderId(order.getId()); verify(modelMapper).map(certificate, CertificateDto.class); - verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); + verify(modelMapper).map(any(Bag.class), eq(BagForUserDto.class)); } @Test @@ -2542,16 +2664,14 @@ void processOrderFondyClientCertificeteNotFoundExeption2() throws Exception { CertificateDto certificateDto = createCertificateDto(); certificateDto.setPoints(1500); - order.setPointsToUse(-1000); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); when(certificateRepository.findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE)).thenReturn(Set.of(certificate)); + when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); - when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) - .thenReturn(ModelUtils.getAmount()); + when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); assertThrows(NotFoundException.class, () -> ubsService.processOrderFondyClient(dto, "uuid")); @@ -2559,8 +2679,9 @@ void processOrderFondyClientCertificeteNotFoundExeption2() throws Exception { verify(userRepository).findUserByUuid("uuid"); verify(certificateRepository).findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE); + verify(bagRepository).findBagsByOrderId(order.getId()); verify(modelMapper).map(certificate, CertificateDto.class); - verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); + verify(modelMapper).map(any(Bag.class), eq(BagForUserDto.class)); } @Test @@ -2578,8 +2699,7 @@ void processOrderFondyClientIfSumToPayLessThanPoints() throws Exception { user.setCurrentPoints(100); user.setChangeOfPointsList(new ArrayList<>()); order.setUser(user); - order.setPointsToUse(-10000); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + OrderFondyClientDto dto = getOrderFondyClientDto(); Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { @@ -2594,11 +2714,12 @@ void processOrderFondyClientIfSumToPayLessThanPoints() throws Exception { when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); + + when(encryptionUtil.formRequestSignature(any(), eq(null), eq("1"))).thenReturn("TestValue"); when(fondyClient.getCheckoutResponse(any())).thenReturn(getSuccessfulFondyResponse()); + when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); - when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) - .thenReturn(ModelUtils.getAmount()); + when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); ubsService.processOrderFondyClient(dto, "uuid"); @@ -2633,6 +2754,7 @@ void saveFullOrderToDBForIF() throws IllegalAccessException { bag.setFullPrice(400_00L); TariffsInfo tariffsInfo = getTariffsInfo(); bag.setTariffsInfo(tariffsInfo); + UBSuser ubSuser = getUBSuser(); OrderAddress address = ubSuser.getOrderAddress(); @@ -2643,8 +2765,6 @@ void saveFullOrderToDBForIF() throws IllegalAccessException { Payment payment1 = getPayment(); payment1.setId(1L); order1.getPayment().add(payment1); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); - order1.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { @@ -2654,13 +2774,10 @@ void saveFullOrderToDBForIF() throws IllegalAccessException { } } - bag.setTariffsInfo(tariffsInfo); - tariffsInfo.setBags(Arrays.asList(bag)); - order.setTariffsInfo(tariffsInfo); - when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); - when(bagRepository.findById(any())).thenReturn(Optional.of(bag)); + when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) + .thenReturn(Optional.of(getTariffInfo())); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(certificateRepository.findById("1111-1234")).thenReturn(Optional.of(getCertificate())); @@ -2688,7 +2805,7 @@ void saveFullOrderToDBWhenSumToPayeqNull() throws IllegalAccessException { user.setOrders(new ArrayList<>()); user.getOrders().add(order); user.setChangeOfPointsList(new ArrayList<>()); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag())); + Bag bag = getBagForOrder(); UBSuser ubSuser = getUBSuser().setId(null); @@ -2711,15 +2828,11 @@ void saveFullOrderToDBWhenSumToPayeqNull() throws IllegalAccessException { f.set(ubsService, "1"); } } - TariffsInfo tariffsInfo = getTariffsInfo(); - bag.setTariffsInfo(tariffsInfo); - tariffsInfo.setBags(Arrays.asList(bag)); - order.setTariffsInfo(tariffsInfo); - when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); - when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); - when(bagRepository.findById(any())).thenReturn(Optional.of(bag)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) + .thenReturn(Optional.of(getTariffInfo())); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(addressRepository.findById(any())).thenReturn(Optional.of(address)); when(locationRepository.findById(anyLong())).thenReturn(Optional.of(location)); @@ -2977,14 +3090,13 @@ void getOrderForUserTest() { order.setAmountOfBagsOrdered(Map.of(1, 10)); bags.add(bag); order.setUser(user); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); orderList.add(order); - when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(ordersForUserRepository.getAllByUserUuidAndId(user.getUuid(), order.getId())) .thenReturn(order); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) - .thenReturn(ModelUtils.getAmount()); + when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(bags); + when(modelMapper.map(bag, BagForUserDto.class)).thenReturn(bagForUserDto); when(orderStatusTranslationRepository .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue())) .thenReturn(Optional.of(orderStatusTranslation)); @@ -2994,7 +3106,8 @@ void getOrderForUserTest() { ubsService.getOrderForUser(user.getUuid(), 1L); - verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); + verify(modelMapper, times(bags.size())).map(bag, BagForUserDto.class); + verify(bagRepository).findBagsByOrderId(order.getId()); verify(orderStatusTranslationRepository, times(orderList.size())) .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue()); verify(orderPaymentStatusTranslationRepository, times(orderList.size())) @@ -3037,30 +3150,30 @@ void getOrdersForUserTest() { orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); Page page = new PageImpl<>(orderList, pageable, 1); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); - when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(bags); + when(modelMapper.map(bag, BagForUserDto.class)).thenReturn(bagForUserDto); when(orderStatusTranslationRepository .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue())) .thenReturn(Optional.of(orderStatusTranslation)); when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) - .thenReturn(ModelUtils.getAmount()); PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); assertEquals(dto.getTotalElements(), orderList.size()); assertEquals(dto.getPage().get(0).getId(), order.getId()); - verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); + verify(modelMapper, times(bags.size())).map(bag, BagForUserDto.class); + verify(bagRepository).findBagsByOrderId(order.getId()); verify(orderStatusTranslationRepository, times(orderList.size())) .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue()); verify(orderPaymentStatusTranslationRepository, times(orderList.size())) - .getById((long) order.getOrderPaymentStatus().getStatusValue()); + .getById( + (long) order.getOrderPaymentStatus().getStatusValue()); verify(ordersForUserRepository).getAllByUserUuid(pageable, user.getUuid()); } @@ -3070,7 +3183,6 @@ void testOrdersForUserWithExportedQuantity() { OrderPaymentStatusTranslation orderPaymentStatusTranslation = getOrderPaymentStatusTranslation(); OrdersDataForUserDto ordersDataForUserDto = getOrderStatusDto(); Order order = getOrderTest(); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); User user = getTestUser(); Bag bag = bagDto(); @@ -3090,21 +3202,22 @@ void testOrdersForUserWithExportedQuantity() { when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); + when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(bags); + when(modelMapper.map(bag, BagForUserDto.class)).thenReturn(bagForUserDto); when(orderStatusTranslationRepository .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue())) .thenReturn(Optional.of(orderStatusTranslation)); when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) - .thenReturn(ModelUtils.getAmount()); - when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); assertEquals(dto.getTotalElements(), orderList.size()); assertEquals(dto.getPage().get(0).getId(), order.getId()); - verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); + verify(modelMapper, times(bags.size())).map(bag, BagForUserDto.class); + verify(bagRepository).findBagsByOrderId(order.getId()); verify(orderStatusTranslationRepository, times(orderList.size())) .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue()); verify(orderPaymentStatusTranslationRepository, times(orderList.size())) @@ -3131,7 +3244,6 @@ void testOrdersForUserWithConfirmedQuantity() { order.setConfirmedQuantity(Map.of(1, 10)); bags.add(bag); order.setUser(user); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); @@ -3139,21 +3251,22 @@ void testOrdersForUserWithConfirmedQuantity() { when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); - when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(bags); + when(modelMapper.map(bag, BagForUserDto.class)).thenReturn(bagForUserDto); when(orderStatusTranslationRepository .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue())) .thenReturn(Optional.of(orderStatusTranslation)); when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) - .thenReturn(ModelUtils.getAmount()); + PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); assertEquals(dto.getTotalElements(), orderList.size()); assertEquals(dto.getPage().get(0).getId(), order.getId()); - verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); + verify(modelMapper, times(bags.size())).map(bag, BagForUserDto.class); + verify(bagRepository).findBagsByOrderId(order.getId()); verify(orderStatusTranslationRepository, times(orderList.size())) .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue()); verify(orderPaymentStatusTranslationRepository, times(orderList.size())) @@ -3173,14 +3286,10 @@ void senderInfoDtoBuilderTest() { order.setAmountOfBagsOrdered(Map.of(1, 10)); order.setUser(user); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); Page page = new PageImpl<>(orderList, pageable, 1); - TariffsInfo tariffsInfo = getTariffsInfo(); - tariffsInfo.setBags(Arrays.asList(getBag())); - order.setTariffsInfo(tariffsInfo); when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); when(orderStatusTranslationRepository @@ -3189,9 +3298,7 @@ void senderInfoDtoBuilderTest() { when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); - when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) - .thenReturn(ModelUtils.getAmount()); + PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); assertEquals(dto.getTotalElements(), orderList.size()); assertEquals(dto.getPage().get(0).getId(), order.getId()); @@ -3319,15 +3426,10 @@ void checkIfAddressHasBeenDeletedTest() throws IllegalAccessException { f.set(ubsService, "1"); } } - TariffsInfo tariffsInfo = getTariffsInfo(); - bag.setTariffsInfo(tariffsInfo); - tariffsInfo.setBags(Arrays.asList(bag)); - order.setTariffsInfo(tariffsInfo); -// when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); - when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); - when(bagRepository.findById(any())).thenReturn(Optional.of(bag)); + when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) + .thenReturn(Optional.of(getTariffInfo())); when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); @@ -3368,15 +3470,11 @@ void checkAddressUserTest() throws IllegalAccessException { f.set(ubsService, "1"); } } - TariffsInfo tariffsInfo = getTariffsInfo(); - bag.setTariffsInfo(tariffsInfo); - tariffsInfo.setBags(Arrays.asList(bag)); - order.setTariffsInfo(tariffsInfo); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); - when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); - when(bagRepository.findById(any())).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(getTariffInfo())); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); @@ -3408,16 +3506,10 @@ void checkIfUserHaveEnoughPointsTest() throws IllegalAccessException { f.set(ubsService, "1"); } } - TariffsInfo tariffsInfo = getTariffsInfo(); - bag.setTariffsInfo(tariffsInfo); - tariffsInfo.setBags(Arrays.asList(bag)); - order.setTariffsInfo(tariffsInfo); when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); - when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); - when(bagRepository.findById(any())).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(getTariffInfo())); when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, @@ -3485,15 +3577,11 @@ void testOrdersForUserWithQuantity() { bag.setFullPrice(1200_00L); bags.add(bag); order.setUser(user); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); Page page = new PageImpl<>(orderList, pageable, 1); - TariffsInfo tariffsInfo = getTariffsInfo(); - bag.setTariffsInfo(tariffsInfo); - tariffsInfo.setBags(Arrays.asList(bag)); - order.setTariffsInfo(tariffsInfo); + when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); when(orderStatusTranslationRepository @@ -3502,9 +3590,6 @@ void testOrdersForUserWithQuantity() { when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); - when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) - .thenReturn(ModelUtils.getAmount()); PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); diff --git a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java index 5f16cde7b..208fefea9 100644 --- a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java @@ -52,7 +52,22 @@ import greencity.enums.SortingOrder; import greencity.exceptions.BadRequestException; import greencity.exceptions.NotFoundException; -import greencity.repository.*; +import greencity.repository.BagRepository; +import greencity.repository.CertificateRepository; +import greencity.repository.EmployeeOrderPositionRepository; +import greencity.repository.EmployeeRepository; +import greencity.repository.OrderAddressRepository; +import greencity.repository.OrderDetailRepository; +import greencity.repository.OrderPaymentStatusTranslationRepository; +import greencity.repository.OrderRepository; +import greencity.repository.OrderStatusTranslationRepository; +import greencity.repository.PaymentRepository; +import greencity.repository.PositionRepository; +import greencity.repository.ReceivingStationRepository; +import greencity.repository.RefundRepository; +import greencity.repository.ServiceRepository; +import greencity.repository.TariffsInfoRepository; +import greencity.repository.UserRepository; import greencity.service.locations.LocationApiService; import greencity.service.notification.NotificationServiceImpl; import org.junit.jupiter.api.Assertions; @@ -157,7 +172,6 @@ import static java.util.Collections.singletonList; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.anyLong; @@ -253,10 +267,6 @@ class UBSManagementServiceImplTest { @Mock RefundRepository refundRepository; - @Mock - private OrderBagService orderBagService; - @Mock - private OrderBagRepository orderBagRepository; @Test void getAllCertificates() { @@ -408,7 +418,7 @@ void checkUpdateManualPayment() { when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(paymentRepository.findById(1L)).thenReturn(Optional.of(getManualPayment())); when(paymentRepository.save(any())).thenReturn(getManualPayment()); -// when(orderBagService.findBagsByOrderId(order.getId())).thenReturn(getBaglist()); + when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(getBaglist()); doNothing().when(eventService).save(OrderHistory.UPDATE_PAYMENT_MANUALLY + 1, employee.getFirstName() + " " + employee.getLastName(), getOrder()); @@ -417,7 +427,7 @@ void checkUpdateManualPayment() { verify(paymentRepository, times(1)).save(any()); verify(eventService, times(2)).save(any(), any(), any()); verify(fileService, times(0)).delete(null); -// verify(orderBagService).findBagsByOrderId(order.getId()); + verify(bagRepository).findBagsByOrderId(order.getId()); } @Test @@ -473,14 +483,12 @@ void saveNewManualPaymentWithHalfPaidAmount() { when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(paymentRepository.save(any())) .thenReturn(payment); doNothing().when(eventService).save(any(), any(), any()); - when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); - ubsManagementService.saveNewManualPayment(1L, paymentDetails, null, "test@gmail.com"); - verify(employeeRepository, times(2)).findByEmail(anyString()); verify(eventService, times(1)).save(OrderHistory.ADD_PAYMENT_MANUALLY + 1, "Петро Петренко", order); @@ -510,6 +518,7 @@ void saveNewManualPaymentWithPaidAmount() { when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(paymentRepository.save(any())) .thenReturn(payment); @@ -1014,7 +1023,7 @@ void testGetOrderDetails() { when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(TEST_ORDER)); when(modelMapper.map(TEST_ORDER, new TypeToken>() { }.getType())).thenReturn(TEST_BAG_MAPPING_DTO_LIST); - when(orderBagService.findBagsByOrderId(1L)).thenReturn(TEST_BAG_LIST); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(TEST_BAG_LIST); when(modelMapper.map(TEST_BAG, BagInfoDto.class)).thenReturn(TEST_BAG_INFO_DTO); when(bagRepository.findAllByOrder(1L)).thenReturn(TEST_BAG_LIST); when(modelMapper.map(any(), eq(new TypeToken>() { @@ -1027,7 +1036,7 @@ void testGetOrderDetails() { verify(orderRepository).getOrderDetails(1L); verify(modelMapper).map(TEST_ORDER, new TypeToken>() { }.getType()); - verify(orderBagService).findBagsByOrderId(1L); + verify(bagRepository).findBagsByOrderId(1L); verify(bagRepository, times(1)).findAllByOrder(anyLong()); verify(modelMapper).map(TEST_BAG, BagInfoDto.class); verify(modelMapper).map(any(), eq(new TypeToken>() { @@ -1141,6 +1150,7 @@ void testSetOrderDetail() { when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); when(paymentRepository.selectSumPaid(1L)).thenReturn(5000L); ubsManagementService.setOrderDetail(1L, @@ -1159,9 +1169,9 @@ void testSetOrderDetailNeedToChangeStatusToHALF_PAID() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(orderRepository.findSumOfCertificatesByOrderId(1L)).thenReturn(10L); - when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); - + when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); + when(paymentRepository.selectSumPaid(1L)).thenReturn(5000L); doNothing().when(orderRepository).updateOrderPaymentStatus(1L, OrderPaymentStatus.HALF_PAID.name()); ubsManagementService.setOrderDetail(1L, @@ -1183,9 +1193,10 @@ void testSetOrderDetailNeedToChangeStatusToUNPAID() { when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); when(paymentRepository.selectSumPaid(1L)).thenReturn(null); doNothing().when(orderRepository).updateOrderPaymentStatus(1L, OrderPaymentStatus.UNPAID.name()); - when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); + ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "abc"); @@ -1242,10 +1253,12 @@ void testSetOrderDetailIfHalfPaid() { Bag tariffBagDto = ModelUtils.getTariffBag(); List bagList = getBaglist(); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(orderDto)); + when(bagRepository.findCapacityById(1)).thenReturn(1); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(orderDetailDto)); + when(bagRepository.findById(1)).thenReturn(Optional.ofNullable(tariffBagDto)); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(bagList); when(paymentRepository.selectSumPaid(1L)).thenReturn(0L); when(orderRepository.findSumOfCertificatesByOrderId(1L)).thenReturn(0L); - when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1263,11 +1276,14 @@ void testSetOrderDetailIfPaidAndPriceLessThanDiscount() { when(orderRepository.findSumOfCertificatesByOrderId(order.getId())).thenReturn(600L); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto2())); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); + when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(order.getId(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "abc"); - verify(certificateRepository).save(ModelUtils.getCertificate2().setPoints(0)); + + verify(certificateRepository).save(ModelUtils.getCertificate2().setPoints(20)); verify(userRepository).updateUserCurrentPoints(1L, 100); verify(orderRepository).updateOrderPointsToUse(1L, 0); } @@ -1281,7 +1297,7 @@ void testSetOrderDetailIfPaidAndPriceLessThanPaidSum() { when(orderRepository.findSumOfCertificatesByOrderId(order.getId())).thenReturn(600L); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto2())); -// when(orderBagService.findBagsByOrderId(1L)).thenReturn(getBaglist()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(order.getId(), @@ -1914,6 +1930,7 @@ void getOrderSumDetailsForCanceledPaidOrderWithBags() { Order order = ModelUtils.getCanceledPaidOrder(); order.setOrderDate(LocalDateTime.now()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag3list()); doNothing().when(notificationService).notifyPaidOrder(order); doNothing().when(notificationService).notifyHalfPaidPackage(order); @@ -1942,7 +1959,7 @@ void getOrderSumDetailsForFormedHalfPaidOrder() { Order order = ModelUtils.getFormedHalfPaidOrder(); order.setOrderDate(LocalDateTime.now()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); -// when(orderBagService.findBagsByOrderId(1L)).thenReturn(getBaglist()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); doNothing().when(notificationService).notifyPaidOrder(order); doNothing().when(notificationService).notifyHalfPaidPackage(order); @@ -1957,7 +1974,7 @@ void getOrderSumDetailsForFormedHalfPaidOrderWithDiffBags() { Order order = ModelUtils.getFormedHalfPaidOrder(); order.setOrderDate(LocalDateTime.now()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); -// when(orderBagService.findBagsByOrderId(1L)).thenReturn(getBag3list()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag3list()); doNothing().when(notificationService).notifyPaidOrder(order); doNothing().when(notificationService).notifyHalfPaidPackage(order); @@ -1972,6 +1989,7 @@ void getOrderSumDetailsForCanceledHalfPaidOrder() { Order order = ModelUtils.getCanceledHalfPaidOrder(); order.setOrderDate(LocalDateTime.now()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); doNothing().when(notificationService).notifyPaidOrder(order); doNothing().when(notificationService).notifyHalfPaidPackage(order); @@ -1997,6 +2015,7 @@ void getOrderStatusDataTest() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(1L)).thenReturn(getCertificateList()); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); @@ -2014,6 +2033,8 @@ void getOrderStatusDataTest() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); + verify(orderRepository).getOrderDetails(1L); + verify(bagRepository).findBagsByOrderId(1L); verify(bagRepository).findBagsByTariffsInfoId(1L); verify(certificateRepository).findCertificate(1L); verify(orderRepository, times(5)).findById(1L); @@ -2072,7 +2093,7 @@ void getOrderStatusDataTestEmptyPriceDetails() { when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); -// when(orderBagService.findBagsByOrderId(1L)).thenReturn(getBag2list()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag2list()); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.empty()); when(modelMapper.map(getBaglist().get(0), BagInfoDto.class)).thenReturn(bagInfoDto); when(orderStatusTranslationRepository.getOrderStatusTranslationById(6L)) @@ -2088,7 +2109,7 @@ void getOrderStatusDataTestEmptyPriceDetails() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); verify(orderRepository).getOrderDetails(1L); -// verify(orderBagService).findBagsByOrderId(1L); + verify(bagRepository).findBagsByOrderId(1L); verify(bagRepository).findBagsByTariffsInfoId(1L); verify(certificateRepository).findCertificate(1L); verify(orderRepository, times(5)).findById(1L); @@ -2113,7 +2134,7 @@ void getOrderStatusDataWithEmptyCertificateTest() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); -// when(orderBagService.findBagsByOrderId(1L)).thenReturn(getBaglist()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(getService())); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); @@ -2129,7 +2150,7 @@ void getOrderStatusDataWithEmptyCertificateTest() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); verify(orderRepository).getOrderDetails(1L); -// verify(orderBagService).findBagsByOrderId(1L); + verify(bagRepository).findBagsByOrderId(1L); verify(bagRepository).findBagsByTariffsInfoId(1L); verify(orderRepository, times(5)).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); @@ -2152,7 +2173,7 @@ void getOrderStatusDataWhenOrderTranslationIsNull() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); -// when(orderBagService.findBagsByOrderId(1L)).thenReturn(getBaglist()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(getService())); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); @@ -2166,7 +2187,7 @@ void getOrderStatusDataWhenOrderTranslationIsNull() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); verify(orderRepository).getOrderDetails(1L); -// verify(orderBagService).findBagsByOrderId(1L); + verify(bagRepository).findBagsByOrderId(1L); verify(bagRepository).findBagsByTariffsInfoId(1L); verify(orderRepository, times(5)).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); @@ -2189,7 +2210,7 @@ void getOrderStatusDataExceptionTest() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); -// when(orderBagService.findBagsByOrderId(1L)).thenReturn(getBaglist()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(1L)).thenReturn(getCertificateList()); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(getService())); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); @@ -2466,7 +2487,7 @@ void getOrderStatusDataWithNotEmptyLists() { .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); -// when(orderBagService.findBagsByOrderId(1L)).thenReturn(getBaglist()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(1L)).thenReturn(getCertificateList()); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); when(modelMapper.map(getBaglist().get(0), BagInfoDto.class)).thenReturn(bagInfoDto); @@ -2485,6 +2506,7 @@ void getOrderStatusDataWithNotEmptyLists() { verify(orderRepository).getOrderDetails(1L); verify(bagRepository).findBagsByTariffsInfoId(1L); + verify(bagRepository).findBagsByOrderId(1L); verify(certificateRepository).findCertificate(1L); verify(orderRepository, times(5)).findById(1L); verify(modelMapper).map(getBaglist().get(0), BagInfoDto.class); @@ -2510,6 +2532,7 @@ void getOrderStatusesTranslationTest() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(1L)).thenReturn(getCertificateList()); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); @@ -2533,6 +2556,7 @@ void getOrderStatusesTranslationTest() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); verify(orderRepository).getOrderDetails(1L); + verify(bagRepository).findBagsByOrderId(1L); verify(bagRepository).findBagsByTariffsInfoId(1L); verify(certificateRepository).findCertificate(1L); verify(orderRepository, times(5)).findById(1L); @@ -2610,6 +2634,7 @@ void addBonusesToUserTest() { Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); ubsManagementService.addBonusesToUser(getAddBonusesToUserDto(), 1L, employee.getEmail()); @@ -2617,7 +2642,7 @@ void addBonusesToUserTest() { verify(orderRepository).findById(1L); verify(orderRepository).save(order); verify(userRepository).save(user); - verify(notificationService).notifyBonuses(order, 900L); + verify(notificationService).notifyBonuses(order, 809L); verify(eventService).saveEvent(OrderHistory.ADDED_BONUSES, employee.getEmail(), order); } @@ -2629,7 +2654,7 @@ void addBonusesToUserIfOrderStatusIsCanceled() { Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); -// when(orderBagService.findBagsByOrderId(1L)).thenReturn(getBaglist()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); ubsManagementService.addBonusesToUser(getAddBonusesToUserDto(), 1L, employee.getEmail()); @@ -2648,6 +2673,7 @@ void addBonusesToUserWithoutExportedBagsTest() { Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); ubsManagementService.addBonusesToUser(getAddBonusesToUserDto(), 1L, employee.getEmail()); @@ -2655,18 +2681,26 @@ void addBonusesToUserWithoutExportedBagsTest() { verify(orderRepository).findById(1L); verify(orderRepository).save(order); verify(userRepository).save(user); - verify(notificationService).notifyBonuses(order, 300L); + verify(notificationService).notifyBonuses(order, 209L); verify(eventService).saveEvent(OrderHistory.ADDED_BONUSES, employee.getEmail(), order); } + @Test + void addBonusesToUserWithoutOrderTest() { + when(orderRepository.findById(1L)).thenReturn(Optional.empty()); + AddBonusesToUserDto dto = getAddBonusesToUserDto(); + String email = getEmployee().getEmail(); + assertThrows(NotFoundException.class, () -> ubsManagementService.addBonusesToUser(dto, 1L, email)); + } + @Test void addBonusesToUserWithNoOverpaymentTest() { Order order = getOrderForGetOrderStatusData2Test(); String email = getEmployee().getEmail(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag3list()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); - when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); AddBonusesToUserDto addBonusesToUserDto = getAddBonusesToUserDto(); assertThrows(BadRequestException.class, From 2097a338476010b782cf01575e20041f8baffea2 Mon Sep 17 00:00:00 2001 From: Anton Bondar <53192419+ABbondar@users.noreply.github.com> Date: Thu, 27 Jul 2023 12:53:04 +0300 Subject: [PATCH 37/80] [UBS] Change region name when we save order address on user profile page #6079 (#1198) * order-address * model-utils * formatter * code smells * fix test * formatter * formatter * imports * vars names --- .../service/ubs/UBSClientServiceImpl.java | 24 +++ .../src/test/java/greencity/ModelUtils.java | 150 +++++++++++++++++- .../service/ubs/UBSClientServiceImplTest.java | 81 +++++++++- 3 files changed, 251 insertions(+), 4 deletions(-) diff --git a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java index 496c9b8c3..a879098f5 100644 --- a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java @@ -253,6 +253,10 @@ public class UBSClientServiceImpl implements UBSClientService { private static final String VIBER_PART_3_OF_LINK = "&context="; private static final String TELEGRAM_PART_3_OF_LINK = "?start="; private static final Integer MAXIMUM_NUMBER_OF_ADDRESSES = 4; + private static final String KYIV_REGION_EN = "Kyiv Oblast"; + private static final String KYIV_REGION_UA = "Київська область"; + private static final String KYIV_EN = "Kyiv"; + private static final String KYIV_UA = "місто Київ"; @Override @Transactional @@ -662,9 +666,29 @@ private OrderAddressDtoRequest getLocationDto(String placeId) { double longitude = resultsEn.geometry.location.lng; orderAddressDtoRequest.setCoordinates(new Coordinates(latitude, longitude)); + checkIfAddressBelongToKyiv(orderAddressDtoRequest); + return orderAddressDtoRequest; } + /** + * When Google API sets region name, there's a special case for Kyiv, the + * capital of Ukraine. Google API sets the 'Kyiv' as the name of region for + * addresses from Kyiv instead of Kyiv Region. Therefore, a separate logic is + * implemented to set 'Kyiv Region' name for such addresses instead of 'Kyiv'. + * + * @param request OrderAddressDtoRequest. + */ + private void checkIfAddressBelongToKyiv(OrderAddressDtoRequest request) { + if (request.getRegion().equalsIgnoreCase(KYIV_UA)) { + request.setRegion(KYIV_REGION_UA); + } + + if (request.getRegionEn().equalsIgnoreCase(KYIV_EN)) { + request.setRegionEn(KYIV_REGION_EN); + } + } + private void checkNullFieldsOnGoogleResponse(OrderAddressDtoRequest dtoRequest, OrderAddressDtoRequest addressRequestDto) { dtoRequest.setRegion( diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index 8e6d83ea7..8af4d2756 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -60,7 +60,35 @@ import greencity.dto.notification.NotificationTemplateWithPlatformsDto; import greencity.dto.notification.NotificationTemplateWithPlatformsUpdateDto; import greencity.dto.notification.SenderInfoDto; -import greencity.dto.order.*; +import greencity.dto.order.AdminCommentDto; +import greencity.dto.order.BigOrderTableDTO; +import greencity.dto.order.CounterOrderDetailsDto; +import greencity.dto.order.DetailsOrderInfoDto; +import greencity.dto.order.EcoNumberDto; +import greencity.dto.order.ExportDetailsDto; +import greencity.dto.order.ExportDetailsDtoUpdate; +import greencity.dto.order.GroupedOrderDto; +import greencity.dto.order.NotTakenOrderReasonDto; +import greencity.dto.order.OrderAddressDtoRequest; +import greencity.dto.order.OrderAddressDtoResponse; +import greencity.dto.order.OrderAddressExportDetailsDtoUpdate; +import greencity.dto.order.OrderCancellationReasonDto; +import greencity.dto.order.OrderClientDto; +import greencity.dto.order.OrderDetailInfoDto; +import greencity.dto.order.OrderDetailStatusDto; +import greencity.dto.order.OrderDetailStatusRequestDto; +import greencity.dto.order.OrderDto; +import greencity.dto.order.OrderFondyClientDto; +import greencity.dto.order.OrderPaymentDetailDto; +import greencity.dto.order.OrderResponseDto; +import greencity.dto.order.OrderWithAddressesResponseDto; +import greencity.dto.order.OrdersDataForUserDto; +import greencity.dto.order.ReadAddressByOrderDto; +import greencity.dto.order.RequestToChangeOrdersDataDto; +import greencity.dto.order.SenderLocation; +import greencity.dto.order.UpdateAllOrderPageDto; +import greencity.dto.order.UpdateOrderDetailDto; +import greencity.dto.order.UpdateOrderPageAdminDto; import greencity.dto.pageble.PageableDto; import greencity.dto.payment.ManualPaymentRequestDto; import greencity.dto.payment.PaymentInfoDto; @@ -115,7 +143,11 @@ import greencity.entity.user.Region; import greencity.entity.user.User; import greencity.entity.user.Violation; -import greencity.entity.user.employee.*; +import greencity.entity.user.employee.Employee; +import greencity.entity.user.employee.EmployeeFilterView; +import greencity.entity.user.employee.EmployeeOrderPosition; +import greencity.entity.user.employee.Position; +import greencity.entity.user.employee.ReceivingStation; import greencity.entity.user.ubs.Address; import greencity.entity.user.ubs.OrderAddress; import greencity.entity.user.ubs.UBSuser; @@ -228,6 +260,9 @@ public class ModelUtils { public static final UpdateOrderPageAdminDto UPDATE_ORDER_PAGE_ADMIN_DTO = updateOrderPageAdminDto(); public static final CourierUpdateDto UPDATE_COURIER_DTO = getUpdateCourierDto(); + public static final String KYIV_REGION_EN = "Kyiv Oblast"; + public static final String KYIV_REGION_UA = "Київська область"; + public static EmployeeFilterView getEmployeeFilterView() { return getEmployeeFilterViewWithPassedIds(1L, 5L, 10L); } @@ -1621,6 +1656,25 @@ public static AddressDto addressDto() { .build(); } + public static AddressDto addressWithKyivRegionDto() { + return AddressDto.builder() + .id(1L) + .entranceNumber("7a") + .houseCorpus("2") + .houseNumber("25") + .street("Street") + .coordinates(Coordinates.builder() + .latitude(50.4459068) + .longitude(30.4477005) + .build()) + .district("Distinct") + .regionEn(KYIV_REGION_EN) + .region(KYIV_REGION_UA) + .city("City") + .actual(false) + .build(); + } + public static Address getAddress() { return Address.builder() .id(1L) @@ -4185,6 +4239,83 @@ public static String getSuccessfulFondyResponse() { "}"; } + public static List getGeocodingResultWithKyivRegion() { + List geocodingResults = new ArrayList<>(); + + GeocodingResult geocodingResult1 = new GeocodingResult(); + + Geometry geometry = new Geometry(); + geometry.location = new LatLng(50.5555555d, 50.5555555d); + + AddressComponent locality = new AddressComponent(); + locality.longName = "fake street"; + locality.types = new AddressComponentType[] {AddressComponentType.LOCALITY}; + + AddressComponent streetNumber = new AddressComponent(); + streetNumber.longName = "13"; + streetNumber.types = new AddressComponentType[] {AddressComponentType.STREET_NUMBER}; + + AddressComponent region = new AddressComponent(); + region.longName = "Kyiv"; + region.types = new AddressComponentType[] {AddressComponentType.ADMINISTRATIVE_AREA_LEVEL_1}; + + AddressComponent sublocality = new AddressComponent(); + sublocality.longName = "fake district"; + sublocality.types = new AddressComponentType[] {AddressComponentType.SUBLOCALITY}; + + AddressComponent route = new AddressComponent(); + route.longName = "fake street name"; + route.types = new AddressComponentType[] {AddressComponentType.ROUTE}; + + geocodingResult1.addressComponents = new AddressComponent[] { + locality, + streetNumber, + region, + sublocality, + route + }; + + geocodingResult1.formattedAddress = "fake address"; + geocodingResult1.geometry = geometry; + + GeocodingResult geocodingResult2 = new GeocodingResult(); + + AddressComponent locality2 = new AddressComponent(); + locality2.longName = "fake street"; + locality2.types = new AddressComponentType[] {AddressComponentType.LOCALITY}; + + AddressComponent streetNumber2 = new AddressComponent(); + streetNumber2.longName = "13"; + streetNumber2.types = new AddressComponentType[] {AddressComponentType.STREET_NUMBER}; + + AddressComponent region2 = new AddressComponent(); + region2.longName = "місто Київ"; + region2.types = new AddressComponentType[] {AddressComponentType.ADMINISTRATIVE_AREA_LEVEL_1}; + + AddressComponent sublocality2 = new AddressComponent(); + sublocality2.longName = "fake district"; + sublocality2.types = new AddressComponentType[] {AddressComponentType.SUBLOCALITY}; + + AddressComponent route2 = new AddressComponent(); + route2.longName = "fake street name"; + route2.types = new AddressComponentType[] {AddressComponentType.ROUTE}; + + geocodingResult2.addressComponents = new AddressComponent[] { + locality2, + streetNumber2, + region2, + sublocality2, + route2 + }; + + geocodingResult2.formattedAddress = "fake address 2"; + geocodingResult2.geometry = geometry; + + geocodingResults.add(geocodingResult1); + geocodingResults.add(geocodingResult2); + return geocodingResults; + } + public static List getGeocodingResult() { List geocodingResults = new ArrayList<>(); @@ -4278,6 +4409,21 @@ public static CreateAddressRequestDto getAddressRequestDto() { .build(); } + public static CreateAddressRequestDto getAddressWithKyivRegionRequestDto() { + return CreateAddressRequestDto.builder() + .addressComment("fdsfs") + .searchAddress("fake street name, 13, fake street, 02000") + .district("fdsfds") + .districtEn("dsadsad") + .regionEn(KYIV_REGION_EN) + .region(KYIV_REGION_UA) + .houseNumber("1") + .houseCorpus("2") + .entranceNumber("3") + .placeId("place_id") + .build(); + } + public static OrderAddressDtoRequest getTestOrderAddressDtoRequest() { return OrderAddressDtoRequest.builder() .id(0L) diff --git a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java index c36b12eed..964b13b3a 100644 --- a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java @@ -123,6 +123,8 @@ import java.util.UUID; import java.util.stream.Collectors; +import static greencity.ModelUtils.KYIV_REGION_EN; +import static greencity.ModelUtils.KYIV_REGION_UA; import static greencity.ModelUtils.TEST_BAG_FOR_USER_DTO; import static greencity.ModelUtils.TEST_BAG_LIST; import static greencity.ModelUtils.TEST_EMAIL; @@ -131,12 +133,14 @@ import static greencity.ModelUtils.addressDto; import static greencity.ModelUtils.addressDtoList; import static greencity.ModelUtils.addressList; +import static greencity.ModelUtils.addressWithKyivRegionDto; import static greencity.ModelUtils.bagDto; import static greencity.ModelUtils.botList; import static greencity.ModelUtils.createCertificateDto; import static greencity.ModelUtils.getAddress; import static greencity.ModelUtils.getAddressDtoResponse; import static greencity.ModelUtils.getAddressRequestDto; +import static greencity.ModelUtils.getAddressWithKyivRegionRequestDto; import static greencity.ModelUtils.getBag; import static greencity.ModelUtils.getBag1list; import static greencity.ModelUtils.getBag4list; @@ -149,6 +153,7 @@ import static greencity.ModelUtils.getCourierDtoList; import static greencity.ModelUtils.getEmployee; import static greencity.ModelUtils.getGeocodingResult; +import static greencity.ModelUtils.getGeocodingResultWithKyivRegion; import static greencity.ModelUtils.getListOfEvents; import static greencity.ModelUtils.getLocation; import static greencity.ModelUtils.getMaximumAmountOfAddresses; @@ -355,7 +360,6 @@ void testValidatePayment() { verify(eventService, times(1)) .save("Замовлення Оплачено", "Система", order); verify(paymentRepository, times(1)).save(payment); - } @Test @@ -893,7 +897,6 @@ void testSaveToDBWithCertificates() throws IllegalAccessException { FondyOrderResponse result = ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null); Assertions.assertNotNull(result); - } @Test @@ -1799,6 +1802,80 @@ void testSaveCurrentAddressForOrder() { verify(addressRepository).save(addressToSave); } + @Test + void saveCurrentAddressForOrderForAddressesBelongToKyivEnTest() { + User user = getUserForCreate(); + List
addresses = user.getAddresses(); + addresses.get(0).setActual(false); + addresses.get(0).setAddressStatus(AddressStatus.NEW); + + String uuid = user.getUuid(); + OrderAddressDtoRequest dtoRequest = getTestOrderAddressLocationDto(); + CreateAddressRequestDto createAddressRequestDto = getAddressWithKyivRegionRequestDto(); + Address addressToSave = new Address(); + + when(userRepository.findByUuid(user.getUuid())).thenReturn(user); + when(addressRepository.findAllNonDeletedAddressesByUserId(user.getId())).thenReturn(addresses); + when(googleApiService.getResultFromGeoCode(eq(dtoRequest.getPlaceId()), anyInt())) + .thenReturn(getGeocodingResultWithKyivRegion().get(0)); + + when(modelMapper.map(any(), eq(OrderAddressDtoRequest.class))).thenReturn(TEST_ORDER_ADDRESS_DTO_REQUEST); + when(modelMapper.map(any(), eq(Address.class))).thenReturn(addressToSave); + when(modelMapper.map(addresses.get(0), AddressDto.class)).thenReturn(addressWithKyivRegionDto()); + + OrderWithAddressesResponseDto actualWithSearchAddress = + ubsService.saveCurrentAddressForOrder(createAddressRequestDto, uuid); + + assertEquals(KYIV_REGION_EN, actualWithSearchAddress.getAddressList().get(0).getRegionEn()); + + verify(userRepository, times(2)).findByUuid(user.getUuid()); + verify(addressRepository, times(2)).findAllNonDeletedAddressesByUserId(user.getId()); + verify(googleApiService, times(2)).getResultFromGeoCode(eq(dtoRequest.getPlaceId()), anyInt()); + + verify(modelMapper, times(2)).map(any(), eq(OrderAddressDtoRequest.class)); + verify(modelMapper).map(any(), eq(Address.class)); + verify(modelMapper).map(addresses.get(0), AddressDto.class); + + verify(addressRepository).save(addressToSave); + } + + @Test + void saveCurrentAddressForOrderForAddressesBelongToKyivUaTest() { + User user = getUserForCreate(); + List
addresses = user.getAddresses(); + addresses.get(0).setActual(false); + addresses.get(0).setAddressStatus(AddressStatus.NEW); + + String uuid = user.getUuid(); + OrderAddressDtoRequest dtoRequest = getTestOrderAddressLocationDto(); + CreateAddressRequestDto createAddressRequestDto = getAddressWithKyivRegionRequestDto(); + Address addressToSave = new Address(); + + when(userRepository.findByUuid(user.getUuid())).thenReturn(user); + when(addressRepository.findAllNonDeletedAddressesByUserId(user.getId())).thenReturn(addresses); + when(googleApiService.getResultFromGeoCode(eq(dtoRequest.getPlaceId()), anyInt())) + .thenReturn(getGeocodingResultWithKyivRegion().get(1)); + + when(modelMapper.map(any(), eq(OrderAddressDtoRequest.class))).thenReturn(TEST_ORDER_ADDRESS_DTO_REQUEST); + when(modelMapper.map(any(), eq(Address.class))).thenReturn(addressToSave); + when(modelMapper.map(addresses.get(0), AddressDto.class)).thenReturn(addressWithKyivRegionDto()); + + OrderWithAddressesResponseDto actualWithSearchAddress = + ubsService.saveCurrentAddressForOrder(createAddressRequestDto, uuid); + + assertEquals(KYIV_REGION_UA, actualWithSearchAddress.getAddressList().get(0).getRegion()); + + verify(userRepository, times(2)).findByUuid(user.getUuid()); + verify(addressRepository, times(2)).findAllNonDeletedAddressesByUserId(user.getId()); + verify(googleApiService, times(2)).getResultFromGeoCode(eq(dtoRequest.getPlaceId()), anyInt()); + + verify(modelMapper, times(2)).map(any(), eq(OrderAddressDtoRequest.class)); + verify(modelMapper).map(any(), eq(Address.class)); + verify(modelMapper).map(addresses.get(0), AddressDto.class); + + verify(addressRepository).save(addressToSave); + } + @Test void testSaveCurrentAddressForOrderAlreadyExistException() { User user = getUserForCreate(); From 2da249313d17960603acf2c8a1f03ad58e14a808 Mon Sep 17 00:00:00 2001 From: Maksym Date: Mon, 31 Jul 2023 10:29:55 +0300 Subject: [PATCH 38/80] #6125 Numeric data entered in the Name and Surname text fields is not saved (#1202) * added support for numeric characters and rejection of empty strings, added tests * fixed code smell * fixes --- .../dto/user/UserProfileUpdateDto.java | 4 +- .../dto/user/UserProfileUpdateDtoTest.java | 47 +++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 service-api/src/test/java/greencity/dto/user/UserProfileUpdateDtoTest.java diff --git a/service-api/src/main/java/greencity/dto/user/UserProfileUpdateDto.java b/service-api/src/main/java/greencity/dto/user/UserProfileUpdateDto.java index 5dda48384..a38e6f624 100644 --- a/service-api/src/main/java/greencity/dto/user/UserProfileUpdateDto.java +++ b/service-api/src/main/java/greencity/dto/user/UserProfileUpdateDto.java @@ -27,10 +27,10 @@ @EqualsAndHashCode public class UserProfileUpdateDto implements Serializable { @NotBlank - @Pattern(regexp = "[ЁёІіЇїҐґЄєА-Яа-яA-Za-z-ʼ'`ʹ\\s.]{1,30}") + @Pattern(regexp = "^(?!\\s*$)[ЁёІіЇїҐґЄєА-Яа-яA-Za-z0-9ʼ'`ʹ\\s-]{1,30}$") private String recipientName; @NotBlank - @Pattern(regexp = "[ЁёІіЇїҐґЄєА-Яа-яA-Za-z\\s-ʼ'`ʹ.]{1,30}") + @Pattern(regexp = "^(?!\\s*$)[ЁёІіЇїҐґЄєА-Яа-яA-Za-z0-9ʼ'`ʹ\\s-]{1,30}$") private String recipientSurname; @Email @Pattern(regexp = "[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,4}$") diff --git a/service-api/src/test/java/greencity/dto/user/UserProfileUpdateDtoTest.java b/service-api/src/test/java/greencity/dto/user/UserProfileUpdateDtoTest.java new file mode 100644 index 000000000..66aa4fb4d --- /dev/null +++ b/service-api/src/test/java/greencity/dto/user/UserProfileUpdateDtoTest.java @@ -0,0 +1,47 @@ +package greencity.dto.user; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import java.lang.reflect.Field; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class UserProfileUpdateDtoTest { + void checkRegexPattern(String fieldName, String testValue, boolean validates) throws NoSuchFieldException { + Field field = UserProfileUpdateDto.class.getDeclaredField(fieldName); + javax.validation.constraints.Pattern[] annotations = + field.getAnnotationsByType(javax.validation.constraints.Pattern.class); + assertEquals(testValue.matches(annotations[0].regexp()), validates); + } + + @ParameterizedTest + @ValueSource( + strings = {"John Doe", "абвгґіїьяюєёАБВГҐІЇЬЯЮЄЁ-ʼ'`ʹ", "John-Doe", "John Doe12", "John Doe 12", "Johnʼ'`ʹDoe", + "ValidNameWithMaxLengthEquals30"}) + void testValidRecipientName(String name) throws NoSuchFieldException { + checkRegexPattern("recipientName", name, true); + } + + @ParameterizedTest + @ValueSource( + strings = {"InvalidLengthOfName31Characters", "", " ", "!?+=@#$%^&*", "тест!", "тест@123", "Hello World!"}) + void testInvalidRecipientName(String name) throws NoSuchFieldException { + checkRegexPattern("recipientName", name, false); + } + + @ParameterizedTest + @ValueSource( + strings = {"John Doe", "абвгґіїьяюєёАБВГҐІЇЬЯЮЄЁ-ʼ'`ʹ", "John-Doe", "John Doe12", "John Doe 12", "Johnʼ'`ʹDoe", + "ValidNameWithMaxLengthEquals30"}) + void testValidRecipientSurname(String name) throws NoSuchFieldException { + checkRegexPattern("recipientSurname", name, true); + } + + @ParameterizedTest + @ValueSource( + strings = {"InvalidLengthOfName31Characters", "", " ", "!?+=@#$%^&*", "тест!", "тест@123", "Hello World!"}) + void testInvalidRecipientSurname(String name) throws NoSuchFieldException { + checkRegexPattern("recipientSurname", name, false); + } +} From 4decde541e0c432cc032f66ceac7a70302a12045 Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Mon, 31 Jul 2023 17:52:25 +0300 Subject: [PATCH 39/80] [Orders] After changing tariff the price of paid order is not changing (#1201) * OrderBagMapping created * changed bag functionality logic * added bag status active and deleted * #5927 [UBS] endpoint that returns deactivated locations (#1133) * add endpoint, update service and repo methods * - changed redirect.green-city-client url (#1132) * [UBS] - bug with manual payment #5940 (#1136) * added bag status active and deleted * changed tariff service crud methods and some order methods * Removed unnesesary methods from entity * Added to tariff when delete status DEACTIVATED * Separated sql from xml; changed to peek * Bug delete tariff (#1200) --- .../main/java/greencity/entity/order/Bag.java | 22 +- .../java/greencity/entity/order/Order.java | 42 +- .../java/greencity/entity/order/OrderBag.java | 70 +++ .../main/java/greencity/enums/BagStatus.java | 6 + .../greencity/repository/BagRepository.java | 38 +- .../repository/OrderBagRepository.java | 73 +++ .../greencity/repository/OrderRepository.java | 18 + .../db/changelog/db.changelog-master.xml | 3 + ...olumn-order-bag-mapping-table-Spodaryk.xml | 59 ++ ...dd-column-status-to-bag-table-Spodaryk.xml | 17 + ...pdate-order-bag-mapping-table-Spodaryk.xml | 8 + ...pdate-order-bag-mapping-table-Spodaryk.sql | 6 + .../java/greencity/enums/BagStatusTest.java | 45 ++ .../mapping/bag/BagForUserDtoMapper.java | 8 +- .../notification/NotificationServiceImpl.java | 5 +- .../service/ubs/OrderBagService.java | 90 ++++ .../service/ubs/SuperAdminServiceImpl.java | 105 +++- .../service/ubs/UBSClientServiceImpl.java | 110 ++-- .../service/ubs/UBSManagementServiceImpl.java | 16 +- .../src/test/java/greencity/ModelUtils.java | 179 ++++++- .../mapping/bag/BagForUserDtoMapperTest.java | 6 +- .../NotificationServiceImplTest.java | 17 +- .../service/ubs/OrderBagServiceTest.java | 151 ++++++ .../ubs/SuperAdminServiceImplTest.java | 358 +++++++++---- .../service/ubs/UBSClientServiceImplTest.java | 503 ++++++++++++------ .../ubs/UBSManagementServiceImplTest.java | 138 ++--- 26 files changed, 1599 insertions(+), 494 deletions(-) create mode 100644 dao/src/main/java/greencity/entity/order/OrderBag.java create mode 100644 dao/src/main/java/greencity/enums/BagStatus.java create mode 100644 dao/src/main/java/greencity/repository/OrderBagRepository.java create mode 100644 dao/src/main/resources/db/changelog/logs/ch-add-column-order-bag-mapping-table-Spodaryk.xml create mode 100644 dao/src/main/resources/db/changelog/logs/ch-add-column-status-to-bag-table-Spodaryk.xml create mode 100644 dao/src/main/resources/db/changelog/logs/ch-update-order-bag-mapping-table-Spodaryk.xml create mode 100644 dao/src/main/resources/db/changelog/logs/sql/ch-update-order-bag-mapping-table-Spodaryk.sql create mode 100644 dao/src/test/java/greencity/enums/BagStatusTest.java create mode 100644 service/src/main/java/greencity/service/ubs/OrderBagService.java create mode 100644 service/src/test/java/greencity/service/ubs/OrderBagServiceTest.java diff --git a/dao/src/main/java/greencity/entity/order/Bag.java b/dao/src/main/java/greencity/entity/order/Bag.java index dafb97462..82a4cfa4b 100644 --- a/dao/src/main/java/greencity/entity/order/Bag.java +++ b/dao/src/main/java/greencity/entity/order/Bag.java @@ -1,6 +1,7 @@ package greencity.entity.order; import greencity.entity.user.employee.Employee; +import greencity.enums.BagStatus; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -8,8 +9,18 @@ import lombok.EqualsAndHashCode; import lombok.ToString; import lombok.Builder; - -import javax.persistence.*; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.CascadeType; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import java.time.LocalDate; @@ -76,7 +87,12 @@ public class Bag { @JoinColumn private Employee editedBy; - @ManyToOne + @ManyToOne(cascade = CascadeType.REMOVE, + fetch = FetchType.EAGER) @JoinColumn(nullable = false) private TariffsInfo tariffsInfo; + + @Column(nullable = false) + @Enumerated(EnumType.STRING) + private BagStatus status; } diff --git a/dao/src/main/java/greencity/entity/order/Order.java b/dao/src/main/java/greencity/entity/order/Order.java index 8215634a9..af48dfe0b 100644 --- a/dao/src/main/java/greencity/entity/order/Order.java +++ b/dao/src/main/java/greencity/entity/order/Order.java @@ -1,21 +1,43 @@ package greencity.entity.order; -import greencity.enums.CancellationReason; -import greencity.enums.OrderPaymentStatus; -import greencity.enums.OrderStatus; import greencity.entity.notifications.UserNotification; import greencity.entity.user.User; import greencity.entity.user.employee.Employee; import greencity.entity.user.employee.EmployeeOrderPosition; import greencity.entity.user.employee.ReceivingStation; import greencity.entity.user.ubs.UBSuser; +import greencity.enums.CancellationReason; +import greencity.enums.OrderPaymentStatus; +import greencity.enums.OrderStatus; import greencity.filters.StringListConverter; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; import org.hibernate.annotations.Cascade; -import javax.persistence.*; +import javax.persistence.CascadeType; +import javax.persistence.CollectionTable; +import javax.persistence.Column; +import javax.persistence.Convert; +import javax.persistence.ElementCollection; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.MapKeyColumn; +import javax.persistence.OneToMany; +import javax.persistence.Table; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; @@ -28,10 +50,10 @@ @Builder @Table(name = "orders") @EqualsAndHashCode(exclude = {"employeeOrderPositions", "userNotifications", "ubsUser", - "changeOfPointsList", "blockedByEmployee", "certificates", "attachedEmployees", "payment", "employeeOrderPositions", + "changeOfPointsList", "blockedByEmployee", "certificates", "payment", "employeeOrderPositions", "events", "imageReasonNotTakingBags", "additionalOrders"}) @ToString(exclude = {"employeeOrderPositions", "userNotifications", "ubsUser", - "changeOfPointsList", "blockedByEmployee", "certificates", "attachedEmployees", "payment", "employeeOrderPositions", + "changeOfPointsList", "blockedByEmployee", "certificates", "payment", "employeeOrderPositions", "events", "imageReasonNotTakingBags", "additionalOrders"}) public class Order { @Id @@ -160,4 +182,10 @@ public class Order { @Column(name = "write_off_station_sum") private Long writeOffStationSum; + + @OneToMany( + mappedBy = "order", + cascade = CascadeType.ALL, + orphanRemoval = true) + private List orderBags = new ArrayList<>(); } diff --git a/dao/src/main/java/greencity/entity/order/OrderBag.java b/dao/src/main/java/greencity/entity/order/OrderBag.java new file mode 100644 index 000000000..320212b23 --- /dev/null +++ b/dao/src/main/java/greencity/entity/order/OrderBag.java @@ -0,0 +1,70 @@ +package greencity.entity.order; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +@Entity +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(exclude = {"order", "bag"}) +@ToString(exclude = {"order", "bag"}) +@Getter +@Setter +@Builder +@Table(name = "order_bag_mapping") +public class OrderBag { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "order_id") + private Order order; + + @ManyToOne(fetch = FetchType.EAGER) + + @JoinColumn(name = "bag_id") + private Bag bag; + + @Column(nullable = false) + private Integer amount; + + @Column(name = "confirmed_quantity") + private Integer confirmedQuantity; + + @Column(name = "exported_quantity") + private Integer exportedQuantity; + + @Column(nullable = false) + private Integer capacity; + + @Column(nullable = false) + private Long price; + + @NotBlank + @Size(min = 1, max = 30) + @Column(nullable = false) + private String name; + + @NotBlank + @Size(min = 1, max = 30) + @Column(nullable = false) + private String nameEng; +} diff --git a/dao/src/main/java/greencity/enums/BagStatus.java b/dao/src/main/java/greencity/enums/BagStatus.java new file mode 100644 index 000000000..f0f3fe1c2 --- /dev/null +++ b/dao/src/main/java/greencity/enums/BagStatus.java @@ -0,0 +1,6 @@ +package greencity.enums; + +public enum BagStatus { + ACTIVE, + DELETED +} diff --git a/dao/src/main/java/greencity/repository/BagRepository.java b/dao/src/main/java/greencity/repository/BagRepository.java index 18d35c029..8746565b7 100644 --- a/dao/src/main/java/greencity/repository/BagRepository.java +++ b/dao/src/main/java/greencity/repository/BagRepository.java @@ -8,21 +8,10 @@ import java.util.List; import java.util.Map; +import java.util.Optional; @Repository public interface BagRepository extends JpaRepository { - /** - * method, that returns {@link List}of{@link Bag} that have bags by order id. - * - * @param id order id - * @return {@link List}of{@link Bag} by it's language and orderId. - * @author Mahdziak Orest - */ - @Query(value = "SELECT * FROM ORDER_BAG_MAPPING as OBM " - + "JOIN BAG AS B ON OBM.ORDER_ID = :orderId and OBM.BAG_ID = B.ID " - + "ORDER BY B.ID", nativeQuery = true) - List findBagsByOrderId(@Param("orderId") Long id); - /** * This is method which find capacity by id. * @@ -79,11 +68,26 @@ public interface BagRepository extends JpaRepository { List findAllByOrder(@Param("orderId") Long orderId); /** - * method, that returns {@link List} of {@link Bag} by tariff id. + * method, that returns {@link List} of {@link Bag} by id. + * + * @param bagId {@link Integer} tariff service id + * @return {@link Optional} of {@link Bag} + * @author Oksana Spodaryk + */ + @Query(nativeQuery = true, + value = "SELECT * FROM bag " + + "WHERE id = :bagId AND status = 'ACTIVE'") + Optional findActiveBagById(Integer bagId); + + /** + * method, that returns {@link List} of active {@link Bag} by tariff id. * - * @param tariffInfoId tariff id {@link Long} - * @return {@link List} of {@link Bag} by tariffInfoId. - * @author Safarov Renat + * @param tariffInfoId {@link Long} tariff id + * @return {@link List} of {@link Bag} + * @author Oksana Spodaryk */ - List findBagsByTariffsInfoId(Long tariffInfoId); + @Query(nativeQuery = true, + value = "SELECT * FROM bag " + + "WHERE tariffs_info_id = :tariffInfoId AND status = 'ACTIVE'") + List findAllActiveBagsByTariffsInfoId(Long tariffInfoId); } \ No newline at end of file diff --git a/dao/src/main/java/greencity/repository/OrderBagRepository.java b/dao/src/main/java/greencity/repository/OrderBagRepository.java new file mode 100644 index 000000000..5d17132ce --- /dev/null +++ b/dao/src/main/java/greencity/repository/OrderBagRepository.java @@ -0,0 +1,73 @@ +package greencity.repository; + +import greencity.entity.order.OrderBag; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Repository +public interface OrderBagRepository extends JpaRepository { + /** + * Deletes the OrderBag from the ORDER_BAG_MAPPING table where the bagId and + * orderId match the provided values. + * + * @param bagId The ID of the bag to be deleted. + * @param orderId The ID of the order to which the bag is associated. + */ + @Transactional + @Modifying + @Query(value = "DELETE FROM ORDER_BAG_MAPPING WHERE BAG_ID = :bagId AND ORDER_ID = :orderId", nativeQuery = true) + void deleteOrderBagByBagIdAndOrderId(@Param("bagId") Integer bagId, @Param("orderId") Long orderId); + + /** + * Retrieves a list of order bags based on the given bag ID. + * + * @param id the ID of the order + * @return a list of order bags matching the bag ID + */ + @Query(value = "SELECT * FROM ORDER_BAG_MAPPING as OBM " + + "where OBM.BAG_ID = :bagId", nativeQuery = true) + List findOrderBagsByBagId(@Param("bagId") Integer id); + + /** + * Retrieves a list of order bags based on the given order ID. + * + * @param id the ID of the order + * @return a list of order bags matching the order ID + */ + @Query(value = "SELECT * FROM ORDER_BAG_MAPPING as OBM " + + "where OBM.ORDER_ID = :orderId", nativeQuery = true) + List findOrderBagsByOrderId(@Param("orderId") Long id); + + /** + * method updates the bag data of OrderBag for all unpaid orders. + * + * @param bagId {@link Integer} bag id + * @param capacity {@link Integer} bag capacity + * @param price {@link Long} bag full price in coins + * @param name {@link String} bag name + * @param nameEng {@link String} bag english name + * @author Oksana Spodaryk + */ + @Transactional + @Modifying + @Query(value = "update order_bag_mapping obm " + + "set capacity = :capacity, price = :price, name = :name, name_eng = :nameEng " + + "from orders o " + + "where o.id = obm.order_id and obm.bag_id = :bagId and o.order_payment_status = 'UNPAID'", nativeQuery = true) + void updateAllByBagIdForUnpaidOrders(Integer bagId, Integer capacity, Long price, String name, String nameEng); + + /** + * method returns all OrderBags by bag id. + * + * @param bagId {@link Integer} bag id + * @return {@link List} of {@link OrderBag} + * @author Julia Seti + */ + List findAllByBagId(Integer bagId); +} diff --git a/dao/src/main/java/greencity/repository/OrderRepository.java b/dao/src/main/java/greencity/repository/OrderRepository.java index 3011eb235..a4616a199 100644 --- a/dao/src/main/java/greencity/repository/OrderRepository.java +++ b/dao/src/main/java/greencity/repository/OrderRepository.java @@ -251,4 +251,22 @@ void changeReceivingStationForAllOrders(@Param("receiving_station") Long station void updateOrderStatusToExpected(@Param("actual_status") String actualStatus, @Param("expected_status") String expectedStatus, @Param("currentDate") LocalDate currentDate); + + /** + * method returns all unpaid orders that contain a bag with id. + */ + @Query(nativeQuery = true, + value = "select * from orders o " + + "left join order_bag_mapping obm on o.id = obm.order_id " + + "where obm.bag_id = :bagId and o.order_payment_status = 'UNPAID'") + List findAllUnpaidOrdersByBagId(Integer bagId); + + /** + * method returns all orders that contain a bag with id. + */ + @Query(nativeQuery = true, + value = "select * from orders o " + + "left join order_bag_mapping obm on o.id = obm.order_id " + + "where obm.bag_id = :bagId") + List findAllByBagId(Integer bagId); } diff --git a/dao/src/main/resources/db/changelog/db.changelog-master.xml b/dao/src/main/resources/db/changelog/db.changelog-master.xml index db07e44e8..28ba8a72f 100644 --- a/dao/src/main/resources/db/changelog/db.changelog-master.xml +++ b/dao/src/main/resources/db/changelog/db.changelog-master.xml @@ -207,6 +207,7 @@ + @@ -214,4 +215,6 @@ + + \ No newline at end of file diff --git a/dao/src/main/resources/db/changelog/logs/ch-add-column-order-bag-mapping-table-Spodaryk.xml b/dao/src/main/resources/db/changelog/logs/ch-add-column-order-bag-mapping-table-Spodaryk.xml new file mode 100644 index 000000000..6cb5ee653 --- /dev/null +++ b/dao/src/main/resources/db/changelog/logs/ch-add-column-order-bag-mapping-table-Spodaryk.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dao/src/main/resources/db/changelog/logs/ch-add-column-status-to-bag-table-Spodaryk.xml b/dao/src/main/resources/db/changelog/logs/ch-add-column-status-to-bag-table-Spodaryk.xml new file mode 100644 index 000000000..4bc7dbfbe --- /dev/null +++ b/dao/src/main/resources/db/changelog/logs/ch-add-column-status-to-bag-table-Spodaryk.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + diff --git a/dao/src/main/resources/db/changelog/logs/ch-update-order-bag-mapping-table-Spodaryk.xml b/dao/src/main/resources/db/changelog/logs/ch-update-order-bag-mapping-table-Spodaryk.xml new file mode 100644 index 000000000..dbe8a62e2 --- /dev/null +++ b/dao/src/main/resources/db/changelog/logs/ch-update-order-bag-mapping-table-Spodaryk.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/dao/src/main/resources/db/changelog/logs/sql/ch-update-order-bag-mapping-table-Spodaryk.sql b/dao/src/main/resources/db/changelog/logs/sql/ch-update-order-bag-mapping-table-Spodaryk.sql new file mode 100644 index 000000000..b71d14c9a --- /dev/null +++ b/dao/src/main/resources/db/changelog/logs/sql/ch-update-order-bag-mapping-table-Spodaryk.sql @@ -0,0 +1,6 @@ +update order_bag_mapping +set capacity=bag.capacity, + price=bag.full_price, + name=bag.name, + name_eng=bag.name_eng from bag +where bag_id=bag.id \ No newline at end of file diff --git a/dao/src/test/java/greencity/enums/BagStatusTest.java b/dao/src/test/java/greencity/enums/BagStatusTest.java new file mode 100644 index 000000000..2a79b535e --- /dev/null +++ b/dao/src/test/java/greencity/enums/BagStatusTest.java @@ -0,0 +1,45 @@ +package greencity.enums; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; + +class BagStatusTest { + + @Test + void enumValuesExistenceTest() { + assertNotNull(BagStatus.ACTIVE); + assertNotNull(BagStatus.DELETED); + } + + @Test + void enumValuesUniquenessTest() { + assertNotEquals(BagStatus.ACTIVE, BagStatus.DELETED); + } + + @Test + void enumValuesToStringTest() { + assertEquals("ACTIVE", BagStatus.ACTIVE.toString()); + assertEquals("DELETED", BagStatus.DELETED.toString()); + } + + @Test + void valueOfTest() { + assertEquals(BagStatus.ACTIVE, BagStatus.valueOf("ACTIVE")); + assertEquals(BagStatus.DELETED, BagStatus.valueOf("DELETED")); + } + + @Test + void enumOrdinalTest() { + assertEquals(0, BagStatus.ACTIVE.ordinal()); + assertEquals(1, BagStatus.DELETED.ordinal()); + } + + @Test + void enumValuesArrayTest() { + BagStatus[] expectedArray = {BagStatus.ACTIVE, BagStatus.DELETED}; + assertArrayEquals(expectedArray, BagStatus.values()); + } +} diff --git a/service/src/main/java/greencity/mapping/bag/BagForUserDtoMapper.java b/service/src/main/java/greencity/mapping/bag/BagForUserDtoMapper.java index fe66bbe7b..68f4bb7b4 100644 --- a/service/src/main/java/greencity/mapping/bag/BagForUserDtoMapper.java +++ b/service/src/main/java/greencity/mapping/bag/BagForUserDtoMapper.java @@ -2,21 +2,21 @@ import greencity.constant.AppConstant; import greencity.dto.bag.BagForUserDto; -import greencity.entity.order.Bag; +import greencity.entity.order.OrderBag; import org.modelmapper.AbstractConverter; import org.springframework.stereotype.Component; import java.math.BigDecimal; @Component -public class BagForUserDtoMapper extends AbstractConverter { +public class BagForUserDtoMapper extends AbstractConverter { @Override - protected BagForUserDto convert(Bag source) { + protected BagForUserDto convert(OrderBag source) { return BagForUserDto.builder() .service(source.getName()) .serviceEng(source.getNameEng()) .capacity(source.getCapacity()) - .fullPrice(BigDecimal.valueOf(source.getFullPrice()) + .fullPrice(BigDecimal.valueOf(source.getPrice()) .movePointLeft(AppConstant.TWO_DECIMALS_AFTER_POINT_IN_CURRENCY) .doubleValue()) .build(); diff --git a/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java b/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java index 56d7aec6a..8f0cb757f 100644 --- a/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java +++ b/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java @@ -20,6 +20,7 @@ import greencity.exceptions.http.AccessDeniedException; import greencity.repository.*; import greencity.service.ubs.NotificationService; +import greencity.service.ubs.OrderBagService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.MapUtils; @@ -75,6 +76,8 @@ public class NotificationServiceImpl implements NotificationService { private static final String ORDER_NUMBER_KEY = "orderNumber"; private static final String AMOUNT_TO_PAY_KEY = "amountToPay"; private static final String PAY_BUTTON = "payButton"; + @Autowired + private final OrderBagService orderBagService; /** * {@inheritDoc} @@ -239,7 +242,7 @@ private Double getAmountToPay(Order order) { long ubsCourierSumInCoins = order.getUbsCourierSum() == null ? 0L : order.getUbsCourierSum(); long writeStationSumInCoins = order.getWriteOffStationSum() == null ? 0L : order.getWriteOffStationSum(); - List bagsType = bagRepository.findBagsByOrderId(order.getId()); + List bagsType = orderBagService.findAllBagsByOrderId(order.getId()); Map bagsAmount; if (MapUtils.isNotEmpty(order.getExportedQuantity())) { bagsAmount = order.getExportedQuantity(); diff --git a/service/src/main/java/greencity/service/ubs/OrderBagService.java b/service/src/main/java/greencity/service/ubs/OrderBagService.java new file mode 100644 index 000000000..8922d6710 --- /dev/null +++ b/service/src/main/java/greencity/service/ubs/OrderBagService.java @@ -0,0 +1,90 @@ +package greencity.service.ubs; + +import greencity.entity.order.Bag; +import greencity.entity.order.OrderBag; +import greencity.exceptions.NotFoundException; +import greencity.repository.OrderBagRepository; +import lombok.Data; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static greencity.constant.ErrorMessage.BAG_NOT_FOUND; + +@Service +@Data +public class OrderBagService { + private final OrderBagRepository orderBagRepository; + + private Long getBagPrice(List orderBags, Integer id) { + return orderBags.stream() + .filter(ob -> ob.getBag().getId().equals(id)) + .map(OrderBag::getPrice) + .findFirst() + .orElseThrow(() -> new NotFoundException(BAG_NOT_FOUND + id)); + } + + /** + * Finds all bags belonging to a specific list of OrderBag instances. + * + * @param orderBags A list of OrderBag instances to search within. + * @return A list of Bag instances associated with the provided OrderBag + * instances. + */ + public List findAllBagsInOrderBagsList(List orderBags) { + return orderBags.stream() + .map(OrderBag::getBag) + .peek(b -> b.setFullPrice(getBagPrice(orderBags, b.getId()))) + .collect(Collectors.toList()); + } + + /** + * Finds all bags belonging to a specific OrderBag based on the provided ID. + * + * @param id The ID of the OrderBag to search for. + * @return A list of Bag instances associated with the provided OrderBag ID. + */ + public List findAllBagsByOrderId(Long id) { + List orderBags = orderBagRepository.findOrderBagsByOrderId(id); + return findAllBagsInOrderBagsList(orderBags); + } + + /** + * Calculates the actual bags' amounts for the given list of OrderBags and + * returns the result as a Map. This method checks the OrderBags in the input + * list and calculates the actual amount for each bag based on the availability + * of different quantity attributes in the OrderBag objects. It prioritizes the + * following quantities in descending order: 1. Exported Quantity: If all + * OrderBags have the 'exportedQuantity' attribute set, the method will use it. + * 2. Confirmed Quantity: If 'exportedQuantity' is not available for all + * OrderBags but 'confirmedQuantity' is, the method will use it. 3. Regular + * Amount: If neither 'exportedQuantity' nor 'confirmedQuantity' are available + * for all OrderBags, the method will use the 'amount' attribute. + * + * @param bagsForOrder The list of OrderBag objects for which the actual amounts + * need to be calculated. + * @return A Map containing the bag ID as the key and the corresponding actual + * amount as the value. If any OrderBag in the input list lacks all + * three attributes (exportedQuantity, confirmedQuantity, and amount), + * the corresponding entry will not be included in the result map. + * @throws NullPointerException if 'bagsForOrder' is null. + */ + public Map getActualBagsAmountForOrder(List bagsForOrder) { + if (bagsForOrder.stream().allMatch(orderBag -> orderBag.getExportedQuantity() != null)) { + return bagsForOrder.stream() + .collect(Collectors.toMap(orderBag -> orderBag.getBag().getId(), OrderBag::getExportedQuantity)); + } + if (bagsForOrder.stream().allMatch(orderBag -> orderBag.getConfirmedQuantity() != null)) { + return bagsForOrder.stream() + .collect(Collectors.toMap(orderBag -> orderBag.getBag().getId(), OrderBag::getConfirmedQuantity)); + } + if (bagsForOrder.stream().allMatch(orderBag -> orderBag.getAmount() != null)) { + return bagsForOrder.stream() + .collect(Collectors.toMap(orderBag -> orderBag.getBag().getId(), OrderBag::getAmount)); + } + return new HashMap<>(); + } +} diff --git a/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java b/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java index 9d623c99d..78f3d053f 100644 --- a/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java @@ -24,6 +24,8 @@ import greencity.dto.tariff.GetTariffsInfoDto; import greencity.dto.tariff.SetTariffLimitsDto; import greencity.entity.coords.Coordinates; +import greencity.entity.order.Order; +import greencity.entity.order.OrderBag; import greencity.entity.order.Bag; import greencity.entity.order.Courier; import greencity.entity.order.Service; @@ -33,7 +35,9 @@ import greencity.entity.user.Region; import greencity.entity.user.employee.Employee; import greencity.entity.user.employee.ReceivingStation; +import greencity.enums.BagStatus; import greencity.enums.CourierLimit; +import greencity.enums.OrderPaymentStatus; import greencity.enums.CourierStatus; import greencity.enums.LocationStatus; import greencity.enums.StationStatus; @@ -48,6 +52,8 @@ import greencity.filters.TariffsInfoSpecification; import greencity.repository.BagRepository; import greencity.repository.CourierRepository; +import greencity.repository.OrderBagRepository; +import greencity.repository.OrderRepository; import greencity.repository.DeactivateChosenEntityRepository; import greencity.repository.EmployeeRepository; import greencity.repository.LocationRepository; @@ -71,6 +77,7 @@ import java.util.Comparator; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; @@ -113,6 +120,9 @@ public class SuperAdminServiceImpl implements SuperAdminService { "Current region: %s or cities: %s or receiving stations: %s don't exist."; private static final String REGION_OR_CITIES_OR_RECEIVING_STATIONS_OR_COURIER_NOT_EXIST_MESSAGE = "Current region: %s or cities: %s or receiving stations: %s or courier: %s don't exist."; + private final OrderBagRepository orderBagRepository; + private final OrderRepository orderRepository; + private final OrderBagService orderBagService; @Override public GetTariffServiceDto addTariffService(long tariffId, TariffServiceDto dto, String employeeUuid) { @@ -124,6 +134,7 @@ private Bag createBag(long tariffId, TariffServiceDto dto, String employeeUuid) TariffsInfo tariffsInfo = tryToFindTariffById(tariffId); Employee employee = tryToFindEmployeeByUuid(employeeUuid); Bag bag = modelMapper.map(dto, Bag.class); + bag.setStatus(BagStatus.ACTIVE); bag.setTariffsInfo(tariffsInfo); bag.setCreatedBy(employee); return bag; @@ -132,7 +143,7 @@ private Bag createBag(long tariffId, TariffServiceDto dto, String employeeUuid) @Override public List getTariffService(long tariffId) { if (tariffsInfoRepository.existsById(tariffId)) { - return bagRepository.findBagsByTariffsInfoId(tariffId) + return bagRepository.findAllActiveBagsByTariffsInfoId(tariffId) .stream() .map(it -> modelMapper.map(it, GetTariffServiceDto.class)) .collect(Collectors.toList()); @@ -142,13 +153,41 @@ public List getTariffService(long tariffId) { } @Override + @Transactional public void deleteTariffService(Integer bagId) { Bag bag = tryToFindBagById(bagId); + if (CollectionUtils.isEmpty(orderBagRepository.findOrderBagsByBagId(bagId))) { + bagRepository.delete(bag); + return; + } + bag.setStatus(BagStatus.DELETED); + bagRepository.save(bag); + deleteTariffsInfo(bag); + orderRepository.findAllByBagId(bagId).forEach(order -> deleteBagFromOrder(order, bag)); + } + + private void deleteBagFromOrder(Order order, Bag bag) { + Integer bagId = bag.getId(); + Map amount = orderBagService.getActualBagsAmountForOrder(order.getOrderBags()); + Integer totalBagsAmount = amount.values().stream().reduce(0, Integer::sum); + if (amount.get(bagId).equals(0) || order.getOrderPaymentStatus().equals(OrderPaymentStatus.UNPAID)) { + if (totalBagsAmount.equals(amount.get(bagId))) { + order.setOrderBags(new ArrayList<>()); + orderRepository.delete(order); + return; + } + order.getOrderBags().stream().filter(orderBag -> orderBag.getBag().getId().equals(bagId)) + .findFirst() + .ifPresent(orderBag -> orderBagRepository.deleteOrderBagByBagIdAndOrderId(bagId, order.getId())); + orderRepository.save(order); + } + } + + private void deleteTariffsInfo(Bag bag) { TariffsInfo tariffsInfo = bag.getTariffsInfo(); - bagRepository.delete(bag); - List bags = bagRepository.findBagsByTariffsInfoId(tariffsInfo.getId()); + List bags = bagRepository.findAllActiveBagsByTariffsInfoId(tariffsInfo.getId()); if (bags.isEmpty() || bags.stream().noneMatch(Bag::getLimitIncluded)) { - tariffsInfo.setTariffStatus(TariffStatus.NEW); + tariffsInfo.setTariffStatus(TariffStatus.DEACTIVATED); tariffsInfo.setBags(bags); tariffsInfo.setMax(null); tariffsInfo.setMin(null); @@ -159,9 +198,39 @@ public void deleteTariffService(Integer bagId) { } @Override - public GetTariffServiceDto editTariffService(TariffServiceDto dto, Integer id, String employeeUuid) { - Bag bag = tryToFindBagById(id); + @Transactional + public GetTariffServiceDto editTariffService(TariffServiceDto dto, Integer bagId, String employeeUuid) { + Bag bag = tryToFindBagById(bagId); Employee employee = tryToFindEmployeeByUuid(employeeUuid); + updateTariffService(dto, bag); + bag.setEditedBy(employee); + + orderBagRepository.updateAllByBagIdForUnpaidOrders( + bagId, bag.getCapacity(), bag.getFullPrice(), bag.getName(), bag.getNameEng()); + + List orders = orderRepository.findAllUnpaidOrdersByBagId(bagId); + if (CollectionUtils.isNotEmpty(orders)) { + orders.forEach(it -> updateOrderSumToPay(it, bag)); + orderRepository.saveAll(orders); + } + return modelMapper.map(bagRepository.save(bag), GetTariffServiceDto.class); + } + + private void updateOrderSumToPay(Order order, Bag bag) { + Map amount = orderBagService.getActualBagsAmountForOrder(order.getOrderBags()); + Long sumToPayInCoins = order.getOrderBags().stream() + .map(orderBag -> amount.get(orderBag.getBag().getId()) * getBagPrice(orderBag, bag)) + .reduce(0L, Long::sum); + order.setSumTotalAmountWithoutDiscounts(sumToPayInCoins); + } + + private Long getBagPrice(OrderBag orderBag, Bag bag) { + return bag.getId().equals(orderBag.getBag().getId()) + ? bag.getFullPrice() + : orderBag.getPrice(); + } + + private void updateTariffService(TariffServiceDto dto, Bag bag) { bag.setCapacity(dto.getCapacity()); bag.setPrice(convertBillsIntoCoins(dto.getPrice())); bag.setCommission(convertBillsIntoCoins(dto.getCommission())); @@ -171,8 +240,6 @@ public GetTariffServiceDto editTariffService(TariffServiceDto dto, Integer id, S bag.setDescription(dto.getDescription()); bag.setDescriptionEng(dto.getDescriptionEng()); bag.setEditedAt(LocalDate.now()); - bag.setEditedBy(employee); - return modelMapper.map(bagRepository.save(bag), GetTariffServiceDto.class); } private Long convertBillsIntoCoins(Double bills) { @@ -185,8 +252,8 @@ private Long convertBillsIntoCoins(Double bills) { } private Bag tryToFindBagById(Integer id) { - return bagRepository.findById(id) - .orElseThrow(() -> new NotFoundException(ErrorMessage.BAG_NOT_FOUND + id)); + return bagRepository.findActiveBagById(id).orElseThrow( + () -> new NotFoundException(ErrorMessage.BAG_NOT_FOUND + id)); } private Long getFullPrice(Double price, Double commission) { @@ -200,9 +267,9 @@ public GetServiceDto addService(Long tariffId, ServiceDto dto, String employeeUu } private Service createService(Long tariffId, ServiceDto dto, String employeeUuid) { - if (tryToFindServiceByTariffsInfoId(tariffId).isEmpty()) { + TariffsInfo tariffsInfo = tryToFindTariffById(tariffId); + if (serviceRepository.findServiceByTariffsInfoId(tariffId).isEmpty()) { Employee employee = tryToFindEmployeeByUuid(employeeUuid); - TariffsInfo tariffsInfo = tryToFindTariffById(tariffId); Service service = modelMapper.map(dto, Service.class); service.setCreatedBy(employee); service.setCreatedAt(LocalDate.now()); @@ -215,14 +282,16 @@ private Service createService(Long tariffId, ServiceDto dto, String employeeUuid @Override public GetServiceDto getService(long tariffId) { - return tryToFindServiceByTariffsInfoId(tariffId) + tryToFindTariffById(tariffId); + return serviceRepository.findServiceByTariffsInfoId(tariffId) .map(it -> modelMapper.map(it, GetServiceDto.class)) .orElse(null); } @Override public void deleteService(long id) { - serviceRepository.delete(tryToFindServiceById(id)); + Service service = tryToFindServiceById(id); + serviceRepository.delete(service); } @Override @@ -244,14 +313,6 @@ private Employee tryToFindEmployeeByUuid(String employeeUuid) { .orElseThrow(() -> new NotFoundException(ErrorMessage.EMPLOYEE_WITH_UUID_NOT_FOUND + employeeUuid)); } - private Optional tryToFindServiceByTariffsInfoId(long tariffId) { - if (tariffsInfoRepository.existsById(tariffId)) { - return serviceRepository.findServiceByTariffsInfoId(tariffId); - } else { - throw new NotFoundException(ErrorMessage.TARIFF_NOT_FOUND + tariffId); - } - } - private Service tryToFindServiceById(long id) { return serviceRepository.findById(id) .orElseThrow(() -> new NotFoundException(ErrorMessage.SERVICE_IS_NOT_FOUND_BY_ID + id)); diff --git a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java index a879098f5..a5adf0f1d 100644 --- a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java @@ -59,6 +59,7 @@ import greencity.entity.order.ChangeOfPoints; import greencity.entity.order.Event; import greencity.entity.order.Order; +import greencity.entity.order.OrderBag; import greencity.entity.order.OrderPaymentStatusTranslation; import greencity.entity.order.OrderStatusTranslation; import greencity.entity.order.Payment; @@ -72,6 +73,7 @@ import greencity.entity.user.ubs.UBSuser; import greencity.entity.viber.ViberBot; import greencity.enums.AddressStatus; +import greencity.enums.BagStatus; import greencity.enums.BotType; import greencity.enums.CertificateStatus; import greencity.enums.CourierLimit; @@ -94,6 +96,7 @@ import greencity.repository.EventRepository; import greencity.repository.LocationRepository; import greencity.repository.OrderAddressRepository; +import greencity.repository.OrderBagRepository; import greencity.repository.OrderPaymentStatusTranslationRepository; import greencity.repository.OrderRepository; import greencity.repository.OrderStatusTranslationRepository; @@ -114,7 +117,6 @@ import greencity.util.OrderUtils; import lombok.Data; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.collections4.MapUtils; import org.json.JSONObject; import org.modelmapper.ModelMapper; import org.springframework.beans.factory.annotation.Autowired; @@ -123,7 +125,6 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; - import javax.persistence.EntityNotFoundException; import javax.transaction.Transactional; import java.math.BigDecimal; @@ -136,7 +137,6 @@ import java.util.Collections; import java.util.Comparator; import java.util.EnumSet; -import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Locale; @@ -148,7 +148,6 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.LongStream; - import static greencity.constant.ErrorMessage.ACTUAL_ADDRESS_NOT_FOUND; import static greencity.constant.ErrorMessage.ADDRESS_ALREADY_EXISTS; import static greencity.constant.ErrorMessage.BAD_ORDER_STATUS_REQUEST; @@ -192,7 +191,6 @@ import static greencity.constant.ErrorMessage.USER_DONT_HAVE_ENOUGH_POINTS; import static greencity.constant.ErrorMessage.USER_WITH_CURRENT_ID_DOES_NOT_EXIST; import static greencity.constant.ErrorMessage.USER_WITH_CURRENT_UUID_DOES_NOT_EXIST; - import static java.util.Objects.nonNull; import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toList; @@ -231,6 +229,9 @@ public class UBSClientServiceImpl implements UBSClientService { private final TelegramBotRepository telegramBotRepository; private final ViberBotRepository viberBotRepository; private final LocationApiService locationApiService; + private final OrderBagRepository orderBagRepository; + private final OrderBagService orderBagService; + @Lazy @Autowired private UBSManagementService ubsManagementService; @@ -358,7 +359,7 @@ private boolean isTariffAvailableForCurrentLocation(TariffsInfo tariffsInfo, Loc private UserPointsAndAllBagsDto getUserPointsAndAllBagsDtoByTariffIdAndUserPoints(Long tariffId, Integer userPoints) { - var bagTranslationDtoList = bagRepository.findBagsByTariffsInfoId(tariffId).stream() + var bagTranslationDtoList = bagRepository.findAllActiveBagsByTariffsInfoId(tariffId).stream() .map(bag -> modelMapper.map(bag, BagTranslationDto.class)) .collect(toList()); return new UserPointsAndAllBagsDto(bagTranslationDtoList, userPoints); @@ -379,8 +380,9 @@ private Location getLocationByOrderIdThroughLazyInitialization(Order order) { public PersonalDataDto getSecondPageData(String uuid) { User currentUser = userRepository.findByUuid(uuid); List ubsUser = ubsUserRepository.findUBSuserByUser(currentUser); + if (ubsUser.isEmpty()) { - ubsUser.add(UBSuser.builder().id(null).build()); + ubsUser = Collections.singletonList(UBSuser.builder().id(null).build()); } PersonalDataDto dto = modelMapper.map(currentUser, PersonalDataDto.class); dto.setUbsUserId(ubsUser.get(0).getId()); @@ -423,14 +425,14 @@ private void checkSumIfCourierLimitBySumOfOrder(TariffsInfo tariffsInfo, Long su public FondyOrderResponse saveFullOrderToDB(OrderResponseDto dto, String uuid, Long orderId) { final User currentUser = userRepository.findByUuid(uuid); TariffsInfo tariffsInfo = tryToFindTariffsInfoByBagIds(getBagIds(dto.getBags()), dto.getLocationId()); - Map amountOfBagsOrderedMap = new HashMap<>(); + List bagsOrdered = new ArrayList<>(); if (!dto.isShouldBePaid()) { dto.setCertificates(Collections.emptySet()); dto.setPointsToUse(0); } - long sumToPayWithoutDiscountInCoins = formBagsToBeSavedAndCalculateOrderSum(amountOfBagsOrderedMap, + long sumToPayWithoutDiscountInCoins = formBagsToBeSavedAndCalculateOrderSum(bagsOrdered, dto.getBags(), tariffsInfo); checkIfUserHaveEnoughPoints(currentUser.getCurrentPoints(), dto.getPointsToUse()); long sumToPayInCoins = reduceOrderSumDueToUsedPoints(sumToPayWithoutDiscountInCoins, dto.getPointsToUse()); @@ -443,7 +445,7 @@ public FondyOrderResponse saveFullOrderToDB(OrderResponseDto dto, String uuid, L UBSuser userData = formUserDataToBeSaved(dto.getPersonalData(), dto.getAddressId(), dto.getLocationId(), currentUser); - getOrder(dto, currentUser, amountOfBagsOrderedMap, sumToPayInCoins, order, orderCertificates, userData); + getOrder(dto, currentUser, bagsOrdered, sumToPayInCoins, order, orderCertificates, userData); eventService.save(OrderHistory.ORDER_FORMED, OrderHistory.CLIENT, order); if (sumToPayInCoins <= 0 || !dto.isShouldBePaid()) { @@ -461,8 +463,8 @@ private List getBagIds(List dto) { .collect(Collectors.toList()); } - private Bag tryToGetBagById(Integer id) { - return bagRepository.findById(id) + private Bag findActiveBagById(Integer id) { + return bagRepository.findActiveBagById(id) .orElseThrow(() -> new NotFoundException(BAG_NOT_FOUND + id)); } @@ -909,31 +911,17 @@ private AddressInfoDto addressInfoDtoBuilder(Order order) { } private List bagForUserDtosBuilder(Order order) { - Map actualBagAmounts = getActualBagAmountsForOrder(order); - List bagsForOrder = bagRepository.findBagsByOrderId(order.getId()); - return bagsForOrder.stream() - .filter(bag -> actualBagAmounts.containsKey(bag.getId())) - .map(bag -> buildBagForUserDto(bag, actualBagAmounts.get(bag.getId()))) + List bagsAmountInOrder = order.getOrderBags(); + Map actualBagsAmount = orderBagService.getActualBagsAmountForOrder(bagsAmountInOrder); + return bagsAmountInOrder.stream() + .map(orderBag -> buildBagForUserDto(orderBag, actualBagsAmount.get(orderBag.getBag().getId()))) .collect(toList()); } - private Map getActualBagAmountsForOrder(Order order) { - if (MapUtils.isNotEmpty(order.getExportedQuantity())) { - return order.getExportedQuantity(); - } - if (MapUtils.isNotEmpty(order.getConfirmedQuantity())) { - return order.getConfirmedQuantity(); - } - if (MapUtils.isNotEmpty(order.getAmountOfBagsOrdered())) { - return order.getAmountOfBagsOrdered(); - } - return new HashMap<>(); - } - - private BagForUserDto buildBagForUserDto(Bag bag, int count) { - BagForUserDto bagDto = modelMapper.map(bag, BagForUserDto.class); + private BagForUserDto buildBagForUserDto(OrderBag orderBag, int count) { + BagForUserDto bagDto = modelMapper.map(orderBag, BagForUserDto.class); bagDto.setCount(count); - bagDto.setTotalPrice(convertCoinsIntoBills(count * bag.getFullPrice())); + bagDto.setTotalPrice(convertCoinsIntoBills(count * orderBag.getPrice())); return bagDto; } @@ -1062,15 +1050,15 @@ private UBSuser updateRecipientDataInOrder(UBSuser ubsUser, UbsCustomersDtoUpdat } private Order formAndSaveOrder(Order order, Set orderCertificates, - Map amountOfBagsOrderedMap, UBSuser userData, + List bagsOrdered, UBSuser userData, User currentUser, long sumToPayInCoins) { order.setOrderStatus(OrderStatus.FORMED); order.setCertificates(orderCertificates); - order.setAmountOfBagsOrdered(amountOfBagsOrderedMap); + order.setOrderBags(bagsOrdered); order.setUbsUser(userData); order.setUser(currentUser); order.setSumTotalAmountWithoutDiscounts( - formBagsToBeSavedAndCalculateOrderSumClient(amountOfBagsOrderedMap)); + calculateOrderSumWithoutDiscounts(bagsOrdered)); setOrderPaymentStatus(order, sumToPayInCoins); Payment payment = Payment.builder() @@ -1085,7 +1073,7 @@ private Order formAndSaveOrder(Order order, Set orderCertificates, order.setPayment(new ArrayList<>()); } order.getPayment().add(payment); - + bagsOrdered.forEach(orderBag -> orderBag.setOrder(order)); orderRepository.save(order); return order; } @@ -1226,35 +1214,44 @@ private void checkAmountOfBagsIfCourierLimitByAmountOfBag(TariffsInfo courierLoc } } - private long formBagsToBeSavedAndCalculateOrderSumClient( - Map getOrderBagsAndQuantity) { - long sumToPayInCoins = 0L; - - for (Map.Entry temp : getOrderBagsAndQuantity.entrySet()) { - Integer amount = getOrderBagsAndQuantity.get(temp.getKey()); - Bag bag = bagRepository.findById(temp.getKey()) - .orElseThrow(() -> new NotFoundException(BAG_NOT_FOUND + temp.getKey())); - sumToPayInCoins += bag.getFullPrice() * amount; - } - return sumToPayInCoins; + private long calculateOrderSumWithoutDiscounts(List getOrderBagsAndQuantity) { + return getOrderBagsAndQuantity.stream() + .map(orderBag -> orderBag.getPrice() * orderBag.getAmount()) + .reduce(0L, Long::sum); } - private long formBagsToBeSavedAndCalculateOrderSum( - Map map, List bags, TariffsInfo tariffsInfo) { + private long formBagsToBeSavedAndCalculateOrderSum(List orderBagList, List bags, + TariffsInfo tariffsInfo) { long sumToPayInCoins = 0L; - + List bagIds = bags.stream().map(BagDto::getId).collect(toList()); for (BagDto temp : bags) { - Bag bag = tryToGetBagById(temp.getId()); + Bag bag = findActiveBagById(temp.getId()); if (bag.getLimitIncluded().booleanValue()) { checkAmountOfBagsIfCourierLimitByAmountOfBag(tariffsInfo, temp.getAmount()); checkSumIfCourierLimitBySumOfOrder(tariffsInfo, bag.getFullPrice() * temp.getAmount()); } sumToPayInCoins += bag.getFullPrice() * temp.getAmount(); - map.put(temp.getId(), temp.getAmount()); - } + OrderBag orderBag = createOrderBag(bag); + orderBag.setAmount(temp.getAmount()); + orderBagList.add(orderBag); + } + List notOrderedBags = tariffsInfo.getBags().stream() + .filter(orderBag -> orderBag.getStatus() == BagStatus.ACTIVE && !bagIds.contains(orderBag.getId())) + .map(this::createOrderBag).collect(toList()); + orderBagList.addAll(notOrderedBags.stream().peek(orderBag -> orderBag.setAmount(0)).collect(toList())); return sumToPayInCoins; } + private OrderBag createOrderBag(Bag bag) { + return OrderBag.builder() + .bag(bag) + .capacity(bag.getCapacity()) + .price(bag.getFullPrice()) + .name(bag.getName()) + .nameEng(bag.getNameEng()) + .build(); + } + private void validateCertificate(Certificate certificate) { if (certificate.getCertificateStatus() == CertificateStatus.NEW) { throw new CertificateIsNotActivated(CERTIFICATE_IS_NOT_ACTIVATED + certificate.getCode()); @@ -1408,9 +1405,9 @@ private long reduceOrderSumDueToUsedPoints(long sumToPayInCoins, int pointsToUse return sumToPayInCoins; } - private void getOrder(OrderResponseDto dto, User currentUser, Map amountOfBagsOrderedMap, + private void getOrder(OrderResponseDto dto, User currentUser, List amountOfBagsOrdered, long sumToPayInCoins, Order order, Set orderCertificates, UBSuser userData) { - formAndSaveOrder(order, orderCertificates, amountOfBagsOrderedMap, userData, currentUser, sumToPayInCoins); + formAndSaveOrder(order, orderCertificates, amountOfBagsOrdered, userData, currentUser, sumToPayInCoins); formAndSaveUser(currentUser, dto.getPointsToUse(), order); } @@ -1455,6 +1452,7 @@ public void deleteOrder(String uuid, Long id) { if (order == null) { throw new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST); } + order.setOrderBags(Collections.emptyList()); orderRepository.delete(order); } diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java index 5864a7320..ee5e82cb5 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java @@ -73,6 +73,7 @@ import greencity.enums.SortingOrder; import greencity.exceptions.BadRequestException; import greencity.exceptions.NotFoundException; +import greencity.repository.OrderBagRepository; import greencity.repository.BagRepository; import greencity.repository.CertificateRepository; import greencity.repository.EmployeeOrderPositionRepository; @@ -109,7 +110,6 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.server.ResponseStatusException; - import javax.persistence.EntityNotFoundException; import java.math.BigDecimal; import java.math.RoundingMode; @@ -179,6 +179,10 @@ public class UBSManagementServiceImpl implements UBSManagementService { @Lazy @Autowired private UBSClientService ubsClientService; + @Autowired + private final OrderBagService orderBagService; + @Autowired + private final OrderBagRepository orderBagRepository; /** * Method gets all order payments, count paid amount, amount which user should @@ -366,7 +370,7 @@ public OrderStatusPageDto getOrderStatusData(Long orderId, String email) { checkAvailableOrderForEmployee(order, email); CounterOrderDetailsDto prices = getPriceDetails(orderId); - var bagInfoDtoList = bagRepository.findBagsByTariffsInfoId(order.getTariffsInfo().getId()).stream() + var bagInfoDtoList = bagRepository.findAllActiveBagsByTariffsInfoId(order.getTariffsInfo().getId()).stream() .map(bag -> modelMapper.map(bag, BagInfoDto.class)) .collect(Collectors.toList()); @@ -709,7 +713,7 @@ private void collectEventAboutConfirmWaste(Map confirmed, Orde Long orderId, int countOfChanges, StringBuilder values) { for (Map.Entry entry : confirmed.entrySet()) { Integer capacity = bagRepository.findCapacityById(entry.getKey()); - Optional bagOptional = bagRepository.findById(entry.getKey()); + Optional bagOptional = bagRepository.findActiveBagById(entry.getKey()); if (bagOptional.isPresent() && checkOrderStatusAboutConfirmWaste(order)) { Optional confirmWasteWas = Optional.empty(); Optional initialAmount = Optional.empty(); @@ -736,7 +740,7 @@ private void collectEventAboutExportedWaste(Map exported, Orde Long orderId, int countOfChanges, StringBuilder values) { for (Map.Entry entry : exported.entrySet()) { Integer capacity = bagRepository.findCapacityById(entry.getKey()); - Optional bagOptional = bagRepository.findById(entry.getKey()); + Optional bagOptional = bagRepository.findActiveBagById(entry.getKey()); if (bagOptional.isPresent() && checkOrderStatusAboutExportedWaste(order)) { Optional exporterWasteWas = Optional.empty(); Optional confirmWasteWas = Optional.empty(); @@ -821,7 +825,7 @@ private CounterOrderDetailsDto getPriceDetails(Long id) { CounterOrderDetailsDto dto = new CounterOrderDetailsDto(); Order order = orderRepository.getOrderDetails(id) .orElseThrow(() -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST + id)); - List bag = bagRepository.findBagsByOrderId(id); + List bag = orderBagService.findAllBagsInOrderBagsList(orderBagRepository.findOrderBagsByOrderId(id)); final List currentCertificate = certificateRepository.findCertificate(id); long sumAmountInCoins = 0; @@ -1060,7 +1064,7 @@ private void setOrderDetailDto(OrderDetailDto dto, Order order) { dto.setAmount(modelMapper.map(order, new TypeToken>() { }.getType())); - dto.setCapacityAndPrice(bagRepository.findBagsByOrderId(order.getId()) + dto.setCapacityAndPrice(orderBagService.findAllBagsByOrderId(order.getId()) .stream() .map(b -> modelMapper.map(b, BagInfoDto.class)) .collect(Collectors.toList())); diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index 8af4d2756..7a4b20c19 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -129,6 +129,7 @@ import greencity.entity.order.Courier; import greencity.entity.order.Event; import greencity.entity.order.Order; +import greencity.entity.order.OrderBag; import greencity.entity.order.OrderPaymentStatusTranslation; import greencity.entity.order.OrderStatusTranslation; import greencity.entity.order.Payment; @@ -153,6 +154,7 @@ import greencity.entity.user.ubs.UBSuser; import greencity.entity.viber.ViberBot; import greencity.enums.AddressStatus; +import greencity.enums.BagStatus; import greencity.enums.CancellationReason; import greencity.enums.CertificateStatus; import greencity.enums.CourierLimit; @@ -171,7 +173,6 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; - import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; @@ -187,7 +188,6 @@ import java.util.Map; import java.util.Optional; import java.util.Set; - import static greencity.enums.NotificationReceiverType.EMAIL; import static greencity.enums.NotificationReceiverType.MOBILE; import static greencity.enums.NotificationReceiverType.SITE; @@ -209,7 +209,8 @@ public class ModelUtils { public static final List TEST_PAYMENT_LIST = createPaymentList(); public static final OrderDetailStatusDto ORDER_DETAIL_STATUS_DTO = createOrderDetailStatusDto(); public static final List TEST_BAG_MAPPING_DTO_LIST = createBagMappingDtoList(); - public static final Bag TEST_BAG = createBag(); + public static final Bag TEST_BAG = createBag(1); + public static final OrderBag TEST_ORDER_BAG = createOrderBag(); public static final BagForUserDto TEST_BAG_FOR_USER_DTO = createBagForUserDto(); public static final BagInfoDto TEST_BAG_INFO_DTO = createBagInfoDto(); public static final List TEST_BAG_LIST = singletonList(TEST_BAG); @@ -259,6 +260,7 @@ public class ModelUtils { public static final NotificationDto TEST_NOTIFICATION_DTO = createNotificationDto(); public static final UpdateOrderPageAdminDto UPDATE_ORDER_PAGE_ADMIN_DTO = updateOrderPageAdminDto(); public static final CourierUpdateDto UPDATE_COURIER_DTO = getUpdateCourierDto(); + public static final List TEST_BAG_LIST2 = Arrays.asList(createBag(1), createBag(2), createBag(3)); public static final String KYIV_REGION_EN = "Kyiv Oblast"; public static final String KYIV_REGION_UA = "Київська область"; @@ -2300,7 +2302,7 @@ private static BagInfoDto createBagInfoDto() { .capacity(20) .name("Name") .nameEng("NameEng") - .price(100.00) + .price(1000.00) .build(); } @@ -2311,9 +2313,10 @@ private static List createBagMappingDtoList() { .build()); } - private static Bag createBag() { - return Bag.builder() - .id(1) + private static Bag createBag(int id) { + Bag bag = Bag.builder() + .status(BagStatus.ACTIVE) + .id(id) .name("Name") .nameEng("NameEng") .capacity(20) @@ -2328,6 +2331,19 @@ private static Bag createBag() { .id(1L) .build()) .build(); + return bag.setFullPrice(100000L); + } + + private static OrderBag createOrderBag() { + return OrderBag.builder() + .id(1L) + .name("Name") + .nameEng("NameEng") + .capacity(20) + .price(100_00L) + .order(createOrder()) + .bag(createBag(1)) + .build(); } private static BagForUserDto createBagForUserDto() { @@ -2708,6 +2724,7 @@ public static GetTariffServiceDto getGetTariffServiceDto() { public static Optional getOptionalBag() { return Optional.of(Bag.builder() + .status(BagStatus.ACTIVE) .id(1) .capacity(120) .commission(50_00L) @@ -2722,7 +2739,94 @@ public static Optional getOptionalBag() { .build()); } + public static OrderBag getOrderBag2() { + return OrderBag.builder() + .id(2L) + .capacity(2200) + .price(22000_00L) + .name("name") + .nameEng("name eng") + .amount(20) + .bag(getBag2()) + .order(getOrder()) + .build(); + } + public static Bag getBag() { + return Bag.builder() + .status(BagStatus.ACTIVE) + .id(1) + .capacity(120) + .commission(50_00L) + .price(120_00L) + .fullPrice(120_00L) + .createdAt(LocalDate.now()) + .createdBy(getEmployee()) + .editedBy(getEmployee()) + .limitIncluded(true) + .tariffsInfo(getTariffInfo()) + .build(); + } + + public static Bag getBag2() { + return Bag.builder() + .status(BagStatus.ACTIVE) + .id(2) + .capacity(120) + .commission(50_00L) + .price(120_00L) + .fullPrice(2200000L) + .createdAt(LocalDate.now()) + .createdBy(getEmployee()) + .editedBy(getEmployee()) + .limitIncluded(true) + .tariffsInfo(getTariffInfo()) + .build(); + } + + public static OrderBag getOrderBag() { + return OrderBag.builder() + .id(1L) + .capacity(120) + .price(120_00L) + .name("name") + .nameEng("name eng") + .amount(1) + .bag(getBag()) + .order(getOrder()) + .build(); + } + + public static OrderBag getOrderBagWithConfirmedAmount() { + return OrderBag.builder() + .id(1L) + .capacity(120) + .price(120_00L) + .name("name") + .nameEng("name eng") + .amount(1) + .confirmedQuantity(2) + .bag(getBag()) + .order(getOrder()) + .build(); + } + + public static OrderBag getOrderBagWithExportedAmount() { + return OrderBag.builder() + .id(1L) + .capacity(120) + .price(120_00L) + .name("name") + .nameEng("name eng") + .amount(1) + .confirmedQuantity(2) + .exportedQuantity(2) + .bag(getBag()) + .order(getOrder()) + .build(); + } + + public static Bag getBagDeleted() { return Bag.builder() .id(1) .capacity(120) @@ -2735,11 +2839,14 @@ public static Bag getBag() { .description("Description") .descriptionEng("DescriptionEng") .limitIncluded(true) + .status(BagStatus.DELETED) + .tariffsInfo(getTariffInfo()) .build(); } public static Bag getBagForOrder() { return Bag.builder() + .status(BagStatus.ACTIVE) .id(3) .capacity(120) .commission(50_00L) @@ -2758,14 +2865,47 @@ public static Bag getBagForOrder() { public static TariffServiceDto getTariffServiceDto() { return TariffServiceDto.builder() .name("Бавовняна сумка") - .capacity(120) - .price(120.0) + .capacity(20) + .price(100.0) .commission(50.0) .description("Description") .build(); } + public static Bag getEditedBag() { + return Bag.builder() + .status(BagStatus.ACTIVE) + .id(1) + .capacity(20) + .price(100_00L) + .fullPrice(150_00L) + .commission(50_00L) + .name("Бавовняна сумка") + .description("Description") + .createdAt(LocalDate.now()) + .createdBy(getEmployee()) + .editedBy(getEmployee()) + .editedAt(LocalDate.now()) + .limitIncluded(true) + .status(BagStatus.ACTIVE) + .tariffsInfo(getTariffInfo()) + .build(); + + } + + public static OrderBag getEditedOrderBag() { + return OrderBag.builder() + .id(1L) + .amount(1) + .price(150_00L) + .capacity(20) + .name("Бавовняна сумка") + .bag(getBag()) + .order(getOrder()) + .build(); + } + public static Location getLocation() { return Location.builder() .id(1L) @@ -2823,6 +2963,7 @@ public static CourierDto getCourierDto() { public static Bag getTariffBag() { return Bag.builder() + .status(BagStatus.ACTIVE) .id(1) .capacity(20) .price(100_00L) @@ -2852,6 +2993,7 @@ public static BagTranslationDto getBagTranslationDto() { public static Bag getNewBag() { return Bag.builder() + .status(BagStatus.ACTIVE) .capacity(20) .price(100_00L) .commission(50_00L) @@ -2993,6 +3135,7 @@ public static Order getOrderUserSecond() { public static List getBag1list() { return List.of(Bag.builder() + .status(BagStatus.ACTIVE) .id(1) .price(100_00L) .capacity(20) @@ -3006,6 +3149,7 @@ public static List getBag1list() { public static List getBaglist() { return List.of(Bag.builder() + .status(BagStatus.ACTIVE) .id(1) .price(100_00L) .capacity(10) @@ -3013,6 +3157,7 @@ public static List getBaglist() { .fullPrice(20_00L) .build(), Bag.builder() + .status(BagStatus.ACTIVE) .id(2) .price(100_00L) .capacity(10) @@ -3023,6 +3168,7 @@ public static List getBaglist() { public static List getBag2list() { return List.of(Bag.builder() + .status(BagStatus.ACTIVE) .id(1) .price(100_00L) .capacity(10) @@ -3033,6 +3179,7 @@ public static List getBag2list() { public static List getBag3list() { return List.of(Bag.builder() + .status(BagStatus.ACTIVE) .id(1) .price(100_00L) .capacity(10) @@ -3040,6 +3187,7 @@ public static List getBag3list() { .fullPrice(2000_00L) .build(), Bag.builder() + .status(BagStatus.ACTIVE) .id(2) .price(100_00L) .capacity(10) @@ -3050,6 +3198,7 @@ public static List getBag3list() { public static List getBag4list() { return List.of(Bag.builder() + .status(BagStatus.ACTIVE) .id(1) .price(100_00L) .capacity(10) @@ -3060,6 +3209,7 @@ public static List getBag4list() { .limitIncluded(false) .build(), Bag.builder() + .status(BagStatus.ACTIVE) .id(2) .price(100_00L) .capacity(10) @@ -3333,6 +3483,7 @@ public static Location getLocationDto() { public static Bag bagDto() { return Bag.builder() + .status(BagStatus.ACTIVE) .id(1) .limitIncluded(false) .description("Description") @@ -3603,12 +3754,20 @@ public static BigOrderTableViews getBigOrderTableViewsByDateNullTest() { .setResponsibleNavigator(null); } + public static Map getAmount() { + Map hashMap = new HashMap<>(); + hashMap.put(1, 1); + hashMap.put(2, 1); + return hashMap; + } + public static Order getOrderForGetOrderStatusData2Test() { Map hashMap = new HashMap<>(); hashMap.put(1, 1); hashMap.put(2, 1); return Order.builder() + .orderBags(Arrays.asList(getOrderBag(), getOrderBag2())) .id(1L) .amountOfBagsOrdered(hashMap) .confirmedQuantity(hashMap) @@ -4907,4 +5066,4 @@ public static PositionWithTranslateDto getPositionWithTranslateDto(Long id) { public static Refund getRefund(Long id) { return Refund.builder().orderId(id).build(); } -} +} \ No newline at end of file diff --git a/service/src/test/java/greencity/mapping/bag/BagForUserDtoMapperTest.java b/service/src/test/java/greencity/mapping/bag/BagForUserDtoMapperTest.java index 1f9fcbcdd..033425d77 100644 --- a/service/src/test/java/greencity/mapping/bag/BagForUserDtoMapperTest.java +++ b/service/src/test/java/greencity/mapping/bag/BagForUserDtoMapperTest.java @@ -2,7 +2,7 @@ import greencity.ModelUtils; import greencity.dto.bag.BagForUserDto; -import greencity.entity.order.Bag; +import greencity.entity.order.OrderBag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -18,8 +18,8 @@ class BagForUserDtoMapperTest { @Test void convert() { BagForUserDto expected = ModelUtils.TEST_BAG_FOR_USER_DTO; - Bag bag = ModelUtils.TEST_BAG; - BagForUserDto actual = bagForUserDtoMapper.convert(bag); + OrderBag orderBag = ModelUtils.TEST_ORDER_BAG; + BagForUserDto actual = bagForUserDtoMapper.convert(orderBag); assertEquals(expected.getService(), actual.getService()); assertEquals(expected.getServiceEng(), actual.getServiceEng()); diff --git a/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java b/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java index bebf741f7..83f4ab80b 100644 --- a/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java +++ b/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java @@ -23,6 +23,7 @@ import greencity.exceptions.NotFoundException; import greencity.exceptions.http.AccessDeniedException; import greencity.repository.*; +import greencity.service.ubs.OrderBagService; import lombok.SneakyThrows; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; @@ -84,6 +85,8 @@ class NotificationServiceImplTest { private Clock fixedClock; ExecutorService mockExecutor = MoreExecutors.newDirectExecutorService(); + @Mock + private OrderBagService orderBagService; @Nested class ClockNotification { @@ -301,7 +304,7 @@ void testNotifyInactiveAccounts() { List.of(abstractNotificationProvider), templateRepository, mockExecutor, - internalUrlConfigProp); + internalUrlConfigProp, orderBagService); User user = User.builder().id(42L).build(); User user1 = User.builder().id(43L).build(); UserNotification notification = new UserNotification(); @@ -409,7 +412,7 @@ void testNotifyAllHalfPaidPackages() { parameters.add(NotificationParameter.builder().key("orderNumber") .value(orders.get(0).getId().toString()).build()); - when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag1list()); + when(orderBagService.findAllBagsByOrderId(any())).thenReturn(getBag1list()); when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); @@ -510,7 +513,7 @@ void testNotifyUnpaidOrderForBroughtByHimself() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); + when(orderBagService.findAllBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyUnpaidOrder(order); @@ -541,7 +544,7 @@ void testNotifyUnpaidOrderForDone() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); + when(orderBagService.findAllBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyUnpaidOrder(order); verify(userNotificationRepository).save(any()); @@ -572,7 +575,7 @@ void testNotifyUnpaidOrderForCancel() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); + when(orderBagService.findAllBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyUnpaidOrder(order); @@ -603,7 +606,7 @@ void testNotifyHalfPaidOrderForDone() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); + when(orderBagService.findAllBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyHalfPaidPackage(order); @@ -630,7 +633,7 @@ void testNotifyHalfPaidOrderForBroughtByHimself() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); + when(orderBagService.findAllBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyHalfPaidPackage(order); diff --git a/service/src/test/java/greencity/service/ubs/OrderBagServiceTest.java b/service/src/test/java/greencity/service/ubs/OrderBagServiceTest.java new file mode 100644 index 000000000..00d6a7daf --- /dev/null +++ b/service/src/test/java/greencity/service/ubs/OrderBagServiceTest.java @@ -0,0 +1,151 @@ +package greencity.service.ubs; + +import greencity.entity.order.Bag; +import greencity.entity.order.OrderBag; +import greencity.repository.OrderBagRepository; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.HashMap; +import java.util.ArrayList; +import static greencity.ModelUtils.getOrderBag; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import static greencity.ModelUtils.getBag; +import static greencity.ModelUtils.getBag2; +import static greencity.ModelUtils.getOrderBag2; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +@ExtendWith({MockitoExtension.class}) +class OrderBagServiceTest { + + @InjectMocks + private OrderBagService orderBagService; + @Mock + private OrderBagRepository orderBagRepository; + + @Test + void testfindAllBagsByOrderId() { + when(orderBagRepository.findOrderBagsByOrderId(any())).thenReturn(Arrays.asList(getOrderBag(), getOrderBag2())); + List bags = orderBagService.findAllBagsByOrderId(1L); + assertNotNull(bags); + Bag bag1 = getBag(); + Bag bag2 = getBag2(); + + assertEquals(bag1, bags.get(0)); + assertEquals(bag2, bags.get(1)); + } + + @Test + void testFindBagsByOrdersList() { + List bags = orderBagService.findAllBagsInOrderBagsList(Arrays.asList(getOrderBag(), getOrderBag2())); + Bag bag1 = getBag(); + Bag bag2 = getBag2(); + + assertNotNull(bags); + assertEquals(bag1, bags.get(0)); + assertEquals(bag2, bags.get(1)); + } + + @Test + void testGetActualBagsAmountForOrder_WithExportedQuantity() { + List bagsForOrder = new ArrayList<>(); + OrderBag bag1 = createOrderBagWithExportedQuantity(1, 10); + OrderBag bag2 = createOrderBagWithExportedQuantity(2, 20); + bagsForOrder.add(bag1); + bagsForOrder.add(bag2); + + Map result = orderBagService.getActualBagsAmountForOrder(bagsForOrder); + + Map expected = new HashMap<>(); + expected.put(1, 10); + expected.put(2, 20); + assertEquals(expected, result); + } + + @Test + void testGetActualBagsAmountForOrder_WithConfirmedQuantity() { + List bagsForOrder = new ArrayList<>(); + OrderBag bag1 = createOrderBagWithConfirmedQuantity(1, 5); + OrderBag bag2 = createOrderBagWithConfirmedQuantity(2, 15); + bagsForOrder.add(bag1); + bagsForOrder.add(bag2); + + Map result = orderBagService.getActualBagsAmountForOrder(bagsForOrder); + + Map expected = new HashMap<>(); + expected.put(1, 5); + expected.put(2, 15); + assertEquals(expected, result); + } + + @Test + void testGetActualBagsAmountForOrder_WithAmount() { + List bagsForOrder = new ArrayList<>(); + OrderBag bag1 = createOrderBagWithAmount(1, 3); + OrderBag bag2 = createOrderBagWithAmount(2, 7); + bagsForOrder.add(bag1); + bagsForOrder.add(bag2); + + Map result = orderBagService.getActualBagsAmountForOrder(bagsForOrder); + + Map expected = new HashMap<>(); + expected.put(1, 3); + expected.put(2, 7); + assertEquals(expected, result); + } + + @Test + void testGetActualBagsAmountForOrder_WithNoMatch() { + List bagsForOrder = new ArrayList<>(); + OrderBag bag1 = createOrderBagWithAmount(1, 3); + bag1.setExportedQuantity(null); + bag1.setConfirmedQuantity(null); + bag1.setAmount(null); + + OrderBag bag2 = createOrderBagWithAmount(2, 7); + bag2.setExportedQuantity(null); + bag2.setConfirmedQuantity(null); + bag2.setAmount(null); + bagsForOrder.add(bag1); + bagsForOrder.add(bag2); + + Map result = orderBagService.getActualBagsAmountForOrder(bagsForOrder); + + Map expected = new HashMap<>(); + assertEquals(expected, result); + } + + private OrderBag createOrderBagWithExportedQuantity(int bagId, int exportedQuantity) { + OrderBag orderBag = new OrderBag(); + Bag bag = new Bag(); + bag.setId(bagId); + orderBag.setBag(bag); + orderBag.setExportedQuantity(exportedQuantity); + return orderBag; + } + + private OrderBag createOrderBagWithConfirmedQuantity(int bagId, int confirmedQuantity) { + OrderBag orderBag = new OrderBag(); + Bag bag = new Bag(); + bag.setId(bagId); + orderBag.setBag(bag); + orderBag.setConfirmedQuantity(confirmedQuantity); + return orderBag; + } + + private OrderBag createOrderBagWithAmount(int bagId, int amount) { + OrderBag orderBag = new OrderBag(); + Bag bag = new Bag(); + bag.setId(bagId); + orderBag.setBag(bag); + orderBag.setAmount(amount); + return orderBag; + } +} \ No newline at end of file diff --git a/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java b/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java index 49327a86e..994107bba 100644 --- a/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java @@ -23,6 +23,7 @@ import greencity.dto.tariff.SetTariffLimitsDto; import greencity.entity.order.Bag; import greencity.entity.order.Courier; +import greencity.entity.order.Order; import greencity.entity.order.Service; import greencity.entity.order.TariffLocation; import greencity.entity.order.TariffsInfo; @@ -34,6 +35,7 @@ import greencity.enums.LocationStatus; import greencity.enums.StationStatus; import greencity.enums.TariffStatus; +import greencity.enums.BagStatus; import greencity.exceptions.BadRequestException; import greencity.exceptions.NotFoundException; import greencity.exceptions.UnprocessableEntityException; @@ -47,6 +49,8 @@ import greencity.repository.DeactivateChosenEntityRepository; import greencity.repository.EmployeeRepository; import greencity.repository.LocationRepository; +import greencity.repository.OrderBagRepository; +import greencity.repository.OrderRepository; import greencity.repository.ReceivingStationRepository; import greencity.repository.RegionRepository; import greencity.repository.ServiceRepository; @@ -63,25 +67,18 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.modelmapper.ModelMapper; - import java.time.LocalDate; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Arrays; import java.util.Optional; +import java.util.Map; +import java.util.HashMap; import java.util.Set; import java.util.UUID; import java.util.stream.Stream; - -import static greencity.ModelUtils.TEST_USER; -import static greencity.ModelUtils.getAllTariffsInfoDto; -import static greencity.ModelUtils.getCourier; -import static greencity.ModelUtils.getCourierDto; -import static greencity.ModelUtils.getCourierDtoList; -import static greencity.ModelUtils.getDeactivatedCourier; -import static greencity.ModelUtils.getEmployee; -import static greencity.ModelUtils.getReceivingStation; -import static greencity.ModelUtils.getReceivingStationDto; +import static greencity.ModelUtils.*; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNull; @@ -131,6 +128,12 @@ class SuperAdminServiceImplTest { private TariffLocationRepository tariffsLocationRepository; @Mock private DeactivateChosenEntityRepository deactivateTariffsForChosenParamRepository; + @Mock + private OrderBagRepository orderBagRepository; + @Mock + private OrderRepository orderRepository; + @Mock + private OrderBagService orderBagService; @AfterEach void afterEach() { @@ -146,7 +149,8 @@ void afterEach() { receivingStationRepository, tariffsInfoRepository, tariffsLocationRepository, - deactivateTariffsForChosenParamRepository); + deactivateTariffsForChosenParamRepository, + orderBagRepository); } @Test @@ -205,20 +209,34 @@ void addTariffServiceIfTariffNotFoundExceptionTest() { @Test void getTariffServiceTest() { - List bags = List.of(ModelUtils.getOptionalBag().get()); + List bags = List.of(ModelUtils.getNewBag()); GetTariffServiceDto dto = ModelUtils.getGetTariffServiceDto(); when(tariffsInfoRepository.existsById(1L)).thenReturn(true); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(bags); + when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(bags); when(modelMapper.map(bags.get(0), GetTariffServiceDto.class)).thenReturn(dto); superAdminService.getTariffService(1); verify(tariffsInfoRepository).existsById(1L); - verify(bagRepository).findBagsByTariffsInfoId(1L); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); verify(modelMapper).map(bags.get(0), GetTariffServiceDto.class); } + @Test + void getTariffServiceIfThereAreNoBags() { + List bags = Collections.emptyList(); + + when(tariffsInfoRepository.existsById(1L)).thenReturn(true); + when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(bags); + + List dtos = superAdminService.getTariffService(1); + + assertEquals(Collections.emptyList(), dtos); + verify(tariffsInfoRepository).existsById(1L); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); + } + @Test void getTariffServiceIfTariffNotFoundException() { when(tariffsInfoRepository.existsById(1L)).thenReturn(false); @@ -227,117 +245,251 @@ void getTariffServiceIfTariffNotFoundException() { () -> superAdminService.getTariffService(1)); verify(tariffsInfoRepository).existsById(1L); - verify(bagRepository, never()).findBagsByTariffsInfoId(1L); + verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(1L); } @Test - void deleteTariffServiceWhenTariffBagsWithLimits() { + void deleteTariffServiceWhenThereAreMoreThan1TypeOfBag() { Bag bag = ModelUtils.getBag(); + Bag bagDeleted = ModelUtils.getBagDeleted(); TariffsInfo tariffsInfo = ModelUtils.getTariffInfo(); - bag.setTariffsInfo(tariffsInfo); + Order order = ModelUtils.getOrder(); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag2())); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.save(bag)).thenReturn(bagDeleted); + when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(List.of(bag, getBag2())); + when(orderRepository.findAllByBagId(bag.getId())).thenReturn(Arrays.asList(order)); + when(orderBagService + .getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag2()))) + .thenReturn(ModelUtils.getAmount()); + when(orderBagRepository.findOrderBagsByBagId(any())).thenReturn(Collections.singletonList(getOrderBag())); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); - doNothing().when(bagRepository).delete(bag); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(List.of(bag)); superAdminService.deleteTariffService(1); - assertEquals(TariffStatus.ACTIVE, tariffsInfo.getTariffStatus()); - verify(bagRepository).findById(1); - verify(bagRepository).delete(bag); - verify(bagRepository).findBagsByTariffsInfoId(1L); + + verify(orderBagRepository).deleteOrderBagByBagIdAndOrderId(any(), any()); + verify(bagRepository).findActiveBagById(1); + verify(bagRepository).save(bag); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); verify(tariffsInfoRepository, never()).save(tariffsInfo); } @Test - void deleteTariffServiceWhenTariffBagsListIsEmpty() { + void testBagStatus() { Bag bag = ModelUtils.getBag(); + bag.setStatus(BagStatus.ACTIVE); + assertEquals(BagStatus.ACTIVE, bag.getStatus()); + bag.setStatus(BagStatus.DELETED); + assertEquals(BagStatus.DELETED, bag.getStatus()); + } + + @Test + void deleteTariffServiceWhenTariffBagsWithLimits() { + Bag bag = ModelUtils.getBag(); + Bag bagDeleted = ModelUtils.getBagDeleted(); TariffsInfo tariffsInfo = ModelUtils.getTariffInfo(); - bag.setTariffsInfo(tariffsInfo); - TariffsInfo tariffsInfoNew = ModelUtils.getTariffsInfoWithStatusNew(); - tariffsInfoNew.setBags(Collections.emptyList()); + Order order = ModelUtils.getOrder(); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + Map hashMap = new HashMap<>(); + hashMap.put(1, 1); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.save(bag)).thenReturn(bagDeleted); + when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(List.of(bag)); + when(orderRepository.findAllByBagId(bag.getId())).thenReturn(Arrays.asList(order)); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(hashMap); + when(orderBagRepository.findOrderBagsByBagId(any())).thenReturn(Collections.singletonList(getOrderBag())); + assertEquals(BagStatus.ACTIVE, bag.getStatus()); + superAdminService.deleteTariffService(1); + assertEquals(BagStatus.DELETED, bag.getStatus()); + verify(orderBagRepository).findOrderBagsByBagId(any()); + verify(bagRepository).findActiveBagById(1); + verify(bagRepository).save(bag); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); + verify(tariffsInfoRepository, never()).save(tariffsInfo); + } + + @Test + void deleteTariffServiceWhenTariffBagsListIsEmpty() { + Bag bag = ModelUtils.getBag(); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); - doNothing().when(bagRepository).delete(bag); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(Collections.emptyList()); - when(tariffsInfoRepository.save(tariffsInfo)).thenReturn(tariffsInfo); superAdminService.deleteTariffService(1); - assertEquals(TariffStatus.NEW, tariffsInfoNew.getTariffStatus()); - verify(bagRepository).findById(1); - verify(bagRepository).delete(bag); - verify(bagRepository).findBagsByTariffsInfoId(1L); - verify(tariffsInfoRepository).save(tariffsInfo); + + verify(orderBagRepository).findOrderBagsByBagId(any()); + verify(bagRepository).findActiveBagById(1); + verify(bagRepository).delete(any()); + } @Test void deleteTariffServiceWhenTariffBagsWithoutLimits() { Bag bag = ModelUtils.getBag(); - TariffsInfo tariffsInfo = ModelUtils.getTariffInfo(); bag.setLimitIncluded(false); - bag.setTariffsInfo(tariffsInfo); + Bag bagDeleted = ModelUtils.getBagDeleted(); + bagDeleted.setLimitIncluded(false); TariffsInfo tariffsInfoNew = ModelUtils.getTariffsInfoWithStatusNew(); tariffsInfoNew.setBags(Collections.emptyList()); + tariffsInfoNew.setTariffStatus(TariffStatus.DEACTIVATED); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.save(bag)).thenReturn(bagDeleted); + when(tariffsInfoRepository.save(tariffsInfoNew)).thenReturn(tariffsInfoNew); + when(orderBagRepository.findOrderBagsByBagId(any())).thenReturn(Collections.singletonList(getOrderBag())); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); - doNothing().when(bagRepository).delete(bag); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(List.of(bag)); - when(tariffsInfoRepository.save(tariffsInfo)).thenReturn(tariffsInfoNew); superAdminService.deleteTariffService(1); - assertEquals(TariffStatus.NEW, tariffsInfoNew.getTariffStatus()); - verify(bagRepository).findById(1); - verify(bagRepository).delete(bag); - verify(bagRepository).findBagsByTariffsInfoId(1L); + + verify(bagRepository).findActiveBagById(1); + verify(bagRepository).save(bag); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); verify(tariffsInfoRepository).save(tariffsInfoNew); } @Test - void deleteTariffServiceThrowNotFoundException() { - when(bagRepository.findById(1)).thenReturn(Optional.empty()); + void deleteTariffServiceThrowBagNotFoundException() { + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.deleteTariffService(1)); - verify(bagRepository).findById(1); - verify(bagRepository, never()).delete(any(Bag.class)); + verify(bagRepository).findActiveBagById(1); + verify(bagRepository, never()).save(any(Bag.class)); } @Test - void editTariffService() { + void editTariffServiceWithUnpaidOrder() { Bag bag = ModelUtils.getBag(); + Bag editedBag = ModelUtils.getEditedBag(); Employee employee = ModelUtils.getEmployee(); TariffServiceDto dto = ModelUtils.getTariffServiceDto(); GetTariffServiceDto editedDto = ModelUtils.getGetTariffServiceDto(); + Order order = ModelUtils.getOrder(); String uuid = UUID.randomUUID().toString(); + order.setOrderBags(List.of(ModelUtils.getOrderBag())); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); - when(bagRepository.save(bag)).thenReturn(bag); - when(modelMapper.map(bag, GetTariffServiceDto.class)).thenReturn(editedDto); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); + + when(bagRepository.save(editedBag)).thenReturn(editedBag); + when(modelMapper.map(editedBag, GetTariffServiceDto.class)).thenReturn(editedDto); + doNothing().when(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + when(orderRepository.findAllUnpaidOrdersByBagId(1)).thenReturn(List.of(order)); + when(orderRepository.saveAll(List.of(order))).thenReturn(List.of(order)); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); - superAdminService.editTariffService(dto, 1, uuid); + GetTariffServiceDto actual = superAdminService.editTariffService(dto, 1, uuid); + assertEquals(editedDto, actual); verify(employeeRepository).findByUuid(uuid); - verify(bagRepository).findById(1); - verify(bagRepository).save(bag); - verify(modelMapper).map(bag, GetTariffServiceDto.class); + verify(bagRepository).findActiveBagById(1); + verify(bagRepository).save(editedBag); + verify(modelMapper).map(editedBag, GetTariffServiceDto.class); + verify(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + verify(orderRepository).findAllUnpaidOrdersByBagId(1); + verify(orderRepository).saveAll(anyList()); } @Test - void editTariffServiceIfCommissionIsNull() { + void editTariffServiceWithUnpaidOrderAndBagConfirmedAmount() { Bag bag = ModelUtils.getBag(); + Bag editedBag = ModelUtils.getEditedBag(); Employee employee = ModelUtils.getEmployee(); TariffServiceDto dto = ModelUtils.getTariffServiceDto(); - dto.setCommission(null); GetTariffServiceDto editedDto = ModelUtils.getGetTariffServiceDto(); + Order order = ModelUtils.getOrder(); String uuid = UUID.randomUUID().toString(); + order.setOrderBags(List.of(ModelUtils.getOrderBagWithConfirmedAmount())); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); - when(bagRepository.save(bag)).thenReturn(bag); - when(modelMapper.map(bag, GetTariffServiceDto.class)).thenReturn(editedDto); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.save(editedBag)).thenReturn(editedBag); + when(modelMapper.map(editedBag, GetTariffServiceDto.class)).thenReturn(editedDto); + doNothing().when(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + when(orderRepository.findAllUnpaidOrdersByBagId(1)).thenReturn(List.of(order)); + when(orderRepository.saveAll(List.of(order))).thenReturn(List.of(order)); + when(orderBagService + .getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag().setConfirmedQuantity(2)))) + .thenReturn(ModelUtils.getAmount()); + + GetTariffServiceDto actual = superAdminService.editTariffService(dto, 1, uuid); + + assertEquals(editedDto, actual); + verify(employeeRepository).findByUuid(uuid); + verify(bagRepository).findActiveBagById(1); + verify(bagRepository).save(editedBag); + verify(modelMapper).map(editedBag, GetTariffServiceDto.class); + verify(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + verify(orderRepository).findAllUnpaidOrdersByBagId(1); + verify(orderRepository).saveAll(anyList()); + } + + @Test + void editTariffServiceWithUnpaidOrderAndBagExportedAmount() { + Bag bag = ModelUtils.getBag(); + Bag editedBag = ModelUtils.getEditedBag(); + Employee employee = ModelUtils.getEmployee(); + TariffServiceDto dto = ModelUtils.getTariffServiceDto(); + GetTariffServiceDto editedDto = ModelUtils.getGetTariffServiceDto(); + Order order = ModelUtils.getOrder(); + String uuid = UUID.randomUUID().toString(); + order.setOrderBags(List.of(ModelUtils.getOrderBagWithExportedAmount())); + + when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.save(editedBag)).thenReturn(editedBag); + when(modelMapper.map(editedBag, GetTariffServiceDto.class)).thenReturn(editedDto); + doNothing().when(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + when(orderRepository.findAllUnpaidOrdersByBagId(1)).thenReturn(List.of(order)); + when(orderRepository.saveAll(List.of(order))).thenReturn(List.of(order)); + when(orderBagService.getActualBagsAmountForOrder( + Arrays.asList(ModelUtils.getOrderBag().setExportedQuantity(2).setConfirmedQuantity(2)))) + .thenReturn(ModelUtils.getAmount()); + + GetTariffServiceDto actual = superAdminService.editTariffService(dto, 1, uuid); + + assertEquals(editedDto, actual); + verify(employeeRepository).findByUuid(uuid); + verify(bagRepository).findActiveBagById(1); + verify(bagRepository).findActiveBagById(1); + + verify(bagRepository).save(editedBag); + verify(modelMapper).map(editedBag, GetTariffServiceDto.class); + verify(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + verify(orderRepository).findAllUnpaidOrdersByBagId(1); + verify(orderRepository).saveAll(anyList()); + } + + @Test + void editTariffServiceWithoutUnpaidOrder() { + Bag bag = ModelUtils.getBag(); + Bag editedBag = ModelUtils.getEditedBag(); + Employee employee = ModelUtils.getEmployee(); + TariffServiceDto dto = ModelUtils.getTariffServiceDto(); + GetTariffServiceDto editedDto = ModelUtils.getGetTariffServiceDto(); + String uuid = UUID.randomUUID().toString(); + + when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.save(editedBag)).thenReturn(editedBag); + when(modelMapper.map(editedBag, GetTariffServiceDto.class)).thenReturn(editedDto); + doNothing().when(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + when(orderRepository.findAllUnpaidOrdersByBagId(1)).thenReturn(Collections.emptyList()); - superAdminService.editTariffService(dto, 1, uuid); + GetTariffServiceDto actual = superAdminService.editTariffService(dto, 1, uuid); + assertEquals(editedDto, actual); verify(employeeRepository).findByUuid(uuid); - verify(bagRepository).findById(1); - verify(bagRepository).save(bag); - verify(modelMapper).map(bag, GetTariffServiceDto.class); + verify(bagRepository).findActiveBagById(1); + verify(bagRepository).save(editedBag); + verify(modelMapper).map(editedBag, GetTariffServiceDto.class); + verify(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + verify(orderRepository).findAllUnpaidOrdersByBagId(1); + verify(orderRepository, never()).saveAll(anyList()); } @Test @@ -346,12 +498,12 @@ void editTariffServiceIfEmployeeNotFoundException() { Optional bag = ModelUtils.getOptionalBag(); String uuid = UUID.randomUUID().toString(); - when(bagRepository.findById(1)).thenReturn(bag); + when(bagRepository.findActiveBagById(1)).thenReturn(bag); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.editTariffService(dto, 1, uuid)); - verify(bagRepository).findById(1); + verify(bagRepository).findActiveBagById(1); verify(bagRepository, never()).save(any(Bag.class)); } @@ -360,11 +512,11 @@ void editTariffServiceIfBagNotFoundException() { TariffServiceDto dto = ModelUtils.getTariffServiceDto(); String uuid = UUID.randomUUID().toString(); - when(bagRepository.findById(1)).thenReturn(Optional.empty()); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.editTariffService(dto, 1, uuid)); - verify(bagRepository).findById(1); + verify(bagRepository).findActiveBagById(1); verify(bagRepository, never()).save(any(Bag.class)); } @@ -409,38 +561,40 @@ void deleteServiceThrowNotFoundException() { void getService() { Service service = ModelUtils.getService(); GetServiceDto getServiceDto = ModelUtils.getGetServiceDto(); + TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); - when(tariffsInfoRepository.existsById(1L)).thenReturn(true); + when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(service)); when(modelMapper.map(service, GetServiceDto.class)).thenReturn(getServiceDto); assertEquals(getServiceDto, superAdminService.getService(1L)); - verify(tariffsInfoRepository).existsById(1L); + verify(tariffsInfoRepository).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); verify(modelMapper).map(service, GetServiceDto.class); } @Test void getServiceIfServiceNotExists() { - when(tariffsInfoRepository.existsById(1L)).thenReturn(true); + TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); + + when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.empty()); assertNull(superAdminService.getService(1L)); - verify(tariffsInfoRepository).existsById(1L); + verify(tariffsInfoRepository).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); - verify(modelMapper, never()).map(any(Service.class), any(GetServiceDto.class)); } @Test void getServiceThrowTariffNotFoundException() { - when(tariffsInfoRepository.existsById(1L)).thenReturn(false); + when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.getService(1L)); - verify(tariffsInfoRepository).existsById(1L); + verify(tariffsInfoRepository).findById(1L); } @Test @@ -507,7 +661,6 @@ void addService() { TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); String uuid = UUID.randomUUID().toString(); - when(tariffsInfoRepository.existsById(1L)).thenReturn(true); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.empty()); when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); @@ -518,7 +671,6 @@ void addService() { assertEquals(getServiceDto, superAdminService.addService(1L, serviceDto, uuid)); verify(employeeRepository).findByUuid(uuid); - verify(tariffsInfoRepository).existsById(1L); verify(tariffsInfoRepository).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); verify(serviceRepository).save(service); @@ -530,31 +682,33 @@ void addService() { void addServiceThrowServiceAlreadyExistsException() { Service createdService = ModelUtils.getService(); ServiceDto serviceDto = ModelUtils.getServiceDto(); + TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); String uuid = UUID.randomUUID().toString(); - when(tariffsInfoRepository.existsById(1L)).thenReturn(true); + when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(createdService)); assertThrows(ServiceAlreadyExistsException.class, () -> superAdminService.addService(1L, serviceDto, uuid)); - verify(tariffsInfoRepository).existsById(1L); + verify(tariffsInfoRepository).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); } @Test void addServiceThrowEmployeeNotFoundException() { ServiceDto serviceDto = ModelUtils.getServiceDto(); + TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); String uuid = UUID.randomUUID().toString(); - when(tariffsInfoRepository.existsById(1L)).thenReturn(true); + when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.empty()); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.addService(1L, serviceDto, uuid)); - verify(tariffsInfoRepository).existsById(1L); + verify(tariffsInfoRepository).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); verify(employeeRepository).findByUuid(uuid); } @@ -564,12 +718,12 @@ void addServiceThrowTariffNotFoundException() { ServiceDto serviceDto = ModelUtils.getServiceDto(); String uuid = UUID.randomUUID().toString(); - when(tariffsInfoRepository.existsById(1L)).thenReturn(false); + when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.addService(1L, serviceDto, uuid)); - verify(tariffsInfoRepository).existsById(1L); + verify(tariffsInfoRepository).findById(1L); } @Test @@ -1364,14 +1518,14 @@ void setTariffLimitsWithAmountOfBags() { SetTariffLimitsDto dto = ModelUtils.setTariffLimitsWithAmountOfBags(); when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffInfo)); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); when(tariffsInfoRepository.save(tariffInfo)).thenReturn(tariffInfo); when(bagRepository.saveAll(List.of(bag))).thenReturn(List.of(bag)); superAdminService.setTariffLimits(1L, dto); verify(tariffsInfoRepository).findById(1L); - verify(bagRepository).findById(1); + verify(bagRepository).findActiveBagById(1); verify(tariffsInfoRepository).save(any()); verify(bagRepository).saveAll(List.of(bag)); } @@ -1383,14 +1537,14 @@ void setTariffLimitsWithPriceOfOrder() { SetTariffLimitsDto dto = ModelUtils.setTariffLimitsWithPriceOfOrder(); when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffInfo)); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); when(tariffsInfoRepository.save(tariffInfo)).thenReturn(tariffInfo); when(bagRepository.saveAll(List.of(bag))).thenReturn(List.of(bag)); superAdminService.setTariffLimits(1L, dto); verify(tariffsInfoRepository).findById(1L); - verify(bagRepository).findById(1); + verify(bagRepository).findActiveBagById(1); verify(tariffsInfoRepository).save(any()); verify(bagRepository).saveAll(List.of(bag)); } @@ -1402,14 +1556,14 @@ void setTariffLimitsWithNullMinAndMaxAndFalseBagLimitIncluded() { SetTariffLimitsDto dto = ModelUtils.setTariffLimitsWithNullMinAndMaxAndFalseBagLimit(); when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffInfo)); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); when(tariffsInfoRepository.save(tariffInfo)).thenReturn(tariffInfo); when(bagRepository.saveAll(List.of(bag))).thenReturn(List.of(bag)); superAdminService.setTariffLimits(1L, dto); verify(tariffsInfoRepository).findById(1L); - verify(bagRepository).findById(1); + verify(bagRepository).findActiveBagById(1); verify(tariffsInfoRepository).save(any()); verify(bagRepository).saveAll(List.of(bag)); } @@ -1422,13 +1576,13 @@ void setTariffLimitsIfBagNotBelongToTariff() { tariffInfo.setId(2L); when(tariffsInfoRepository.findById(2L)).thenReturn(Optional.of(tariffInfo)); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> superAdminService.setTariffLimits(2L, dto)); verify(tariffsInfoRepository).findById(2L); - verify(bagRepository).findById(1); + verify(bagRepository).findActiveBagById(1); } @Test @@ -1439,14 +1593,14 @@ void setTariffLimitsWithNullMaxAndTrueBagLimitIncluded() { dto.setMax(null); when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffInfo)); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); when(tariffsInfoRepository.save(tariffInfo)).thenReturn(tariffInfo); when(bagRepository.saveAll(List.of(bag))).thenReturn(List.of(bag)); superAdminService.setTariffLimits(1L, dto); verify(tariffsInfoRepository).findById(1L); - verify(bagRepository).findById(1); + verify(bagRepository).findActiveBagById(1); verify(tariffsInfoRepository).save(any()); verify(bagRepository).saveAll(List.of(bag)); } @@ -1459,14 +1613,14 @@ void setTariffLimitsWithNullMinAndTrueBagLimitIncluded() { dto.setMin(null); when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffInfo)); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); when(tariffsInfoRepository.save(tariffInfo)).thenReturn(tariffInfo); when(bagRepository.saveAll(List.of(bag))).thenReturn(List.of(bag)); superAdminService.setTariffLimits(1L, dto); verify(tariffsInfoRepository).findById(1L); - verify(bagRepository).findById(1); + verify(bagRepository).findActiveBagById(1); verify(tariffsInfoRepository).save(any()); verify(bagRepository).saveAll(List.of(bag)); } @@ -1572,13 +1726,13 @@ void setTariffLimitsBagThrowBagNotFound() { TariffsInfo tariffInfo = ModelUtils.getTariffInfo(); when(tariffsInfoRepository.findById(anyLong())).thenReturn(Optional.of(tariffInfo)); - when(bagRepository.findById(1)).thenReturn(Optional.empty()); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.setTariffLimits(1L, dto)); verify(tariffsInfoRepository).findById(1L); - verify(bagRepository).findById(1); + verify(bagRepository).findActiveBagById(1); } @Test diff --git a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java index 964b13b3a..7220e0147 100644 --- a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java @@ -8,6 +8,7 @@ import greencity.dto.OrderCourierPopUpDto; import greencity.dto.TariffsForLocationDto; import greencity.dto.address.AddressDto; + import greencity.dto.bag.BagDto; import greencity.dto.bag.BagForUserDto; import greencity.dto.bag.BagOrderDto; @@ -42,14 +43,7 @@ import greencity.dto.user.UserProfileDto; import greencity.dto.user.UserProfileUpdateDto; import greencity.entity.coords.Coordinates; -import greencity.entity.order.Bag; -import greencity.entity.order.Certificate; -import greencity.entity.order.Event; -import greencity.entity.order.Order; -import greencity.entity.order.OrderPaymentStatusTranslation; -import greencity.entity.order.OrderStatusTranslation; -import greencity.entity.order.Payment; -import greencity.entity.order.TariffsInfo; +import greencity.entity.order.*; import greencity.entity.telegram.TelegramBot; import greencity.entity.user.User; import greencity.entity.user.employee.Employee; @@ -77,6 +71,7 @@ import greencity.repository.EventRepository; import greencity.repository.LocationRepository; import greencity.repository.OrderAddressRepository; +import greencity.repository.OrderBagRepository; import greencity.repository.OrderPaymentStatusTranslationRepository; import greencity.repository.OrderRepository; import greencity.repository.OrderStatusTranslationRepository; @@ -321,6 +316,10 @@ class UBSClientServiceImplTest { @Mock private LocationApiService locationApiService; + @Mock + private OrderBagService orderBagService; + @Mock + private OrderBagRepository orderBagRepository; @Test void testGetAllDistricts() { @@ -401,7 +400,7 @@ void getFirstPageDataByTariffAndLocationIdShouldReturnExpectedData() { when(locationRepository.findById(locationId)).thenReturn(Optional.of(location)); when(tariffLocationRepository.findTariffLocationByTariffsInfoAndLocation(tariffsInfo, location)) .thenReturn(Optional.of(tariffLocation)); - when(bagRepository.findBagsByTariffsInfoId(tariffsInfoId)).thenReturn(bags); + when(bagRepository.findAllActiveBagsByTariffsInfoId(tariffsInfoId)).thenReturn(bags); when(modelMapper.map(bags.get(0), BagTranslationDto.class)).thenReturn(bagTranslationDto); var userPointsAndAllBagsDtoActual = @@ -421,7 +420,7 @@ void getFirstPageDataByTariffAndLocationIdShouldReturnExpectedData() { verify(tariffsInfoRepository).findById(tariffsInfoId); verify(locationRepository).findById(locationId); verify(tariffLocationRepository).findTariffLocationByTariffsInfoAndLocation(tariffsInfo, location); - verify(bagRepository).findBagsByTariffsInfoId(tariffsInfoId); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(tariffsInfoId); verify(modelMapper).map(bags.get(0), BagTranslationDto.class); } @@ -454,7 +453,7 @@ void getFirstPageDataByTariffAndLocationIdShouldThrowExceptionWhenTariffLocation verify(locationRepository).findById(locationId); verify(tariffLocationRepository).findTariffLocationByTariffsInfoAndLocation(tariffsInfo, location); - verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -485,7 +484,7 @@ void getFirstPageDataByTariffAndLocationIdShouldThrowExceptionWhenLocationDoesNo verify(locationRepository).findById(locationId); verify(tariffLocationRepository, never()).findTariffLocationByTariffsInfoAndLocation(any(), any()); - verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -515,7 +514,7 @@ void getFirstPageDataByTariffAndLocationIdShouldThrowExceptionWhenTariffDoesNotE verify(locationRepository, never()).findById(anyLong()); verify(tariffLocationRepository, never()).findTariffLocationByTariffsInfoAndLocation(any(), any()); - verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), anyLong()); } @@ -542,7 +541,7 @@ void getFirstPageDataByTariffAndLocationIdShouldThrowExceptionWhenUserDoesNotExi verify(tariffsInfoRepository, never()).findById(anyLong()); verify(locationRepository, never()).findById(anyLong()); verify(tariffLocationRepository, never()).findTariffLocationByTariffsInfoAndLocation(any(), any()); - verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -572,7 +571,7 @@ void checkIfTariffIsAvailableForCurrentLocationThrowExceptionWhenTariffIsDeactiv verify(locationRepository).findById(locationId); verify(tariffLocationRepository, never()).findTariffLocationByTariffsInfoAndLocation(any(), any()); - verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -602,7 +601,7 @@ void checkIfTariffIsAvailableForCurrentLocationThrowExceptionWhenLocationIsDeact verify(locationRepository).findById(locationId); verify(tariffLocationRepository, never()).findTariffLocationByTariffsInfoAndLocation(any(), any()); - verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -639,7 +638,7 @@ void checkIfTariffIsAvailableForCurrentLocationWhenLocationForTariffIsDeactivate verify(locationRepository).findById(locationId); verify(tariffLocationRepository).findTariffLocationByTariffsInfoAndLocation(tariffsInfo, location); - verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -667,7 +666,7 @@ void getFirstPageDataByOrderIdShouldReturnExpectedData() { when(orderRepository.findById(orderId)).thenReturn(Optional.of(order)); when(tariffLocationRepository.findTariffLocationByTariffsInfoAndLocation(tariffsInfo, location)) .thenReturn(Optional.of(tariffLocation)); - when(bagRepository.findBagsByTariffsInfoId(tariffsInfoId)).thenReturn(bags); + when(bagRepository.findAllActiveBagsByTariffsInfoId(tariffsInfoId)).thenReturn(bags); when(modelMapper.map(bags.get(0), BagTranslationDto.class)).thenReturn(bagTranslationDto); var userPointsAndAllBagsDtoActual = @@ -686,7 +685,7 @@ void getFirstPageDataByOrderIdShouldReturnExpectedData() { verify(userRepository).findUserByUuid(uuid); verify(orderRepository).findById(orderId); verify(tariffLocationRepository).findTariffLocationByTariffsInfoAndLocation(tariffsInfo, location); - verify(bagRepository).findBagsByTariffsInfoId(tariffsInfoId); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(tariffsInfoId); verify(modelMapper).map(bags.get(0), BagTranslationDto.class); } @@ -709,7 +708,7 @@ void getFirstPageDataByOrderIdShouldThrowExceptionWhenUserDoesNotExist() { verify(orderRepository, never()).findById(anyLong()); verify(tariffLocationRepository, never()).findTariffLocationByTariffsInfoAndLocation(any(), any()); - verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -735,7 +734,7 @@ void getFirstPageDataByOrderIdShouldThrowExceptionWhenOrderDoesNotExist() { verify(orderRepository).findById(orderId); verify(tariffLocationRepository, never()).findTariffLocationByTariffsInfoAndLocation(any(), any()); - verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -773,23 +772,129 @@ void testSaveToDB() throws IllegalAccessException { f.set(ubsService, "1"); } } - + tariffsInfo.setBags(Arrays.asList(bag)); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); when(orderRepository.findById(any())).thenReturn(Optional.of(order1)); when(encryptionUtil.formRequestSignature(any(), eq(null), eq("1"))).thenReturn("TestValue"); when(fondyClient.getCheckoutResponse(any())).thenReturn(getSuccessfulFondyResponse()); - FondyOrderResponse result = ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null); Assertions.assertNotNull(result); } + @Test + void testSaveToDB_AddressNotEqualsUsers() throws IllegalAccessException { + User user = getUserWithLastLocation(); + user.setAlternateEmail("test@mail.com"); + user.setCurrentPoints(900); + + OrderResponseDto dto = getOrderResponseDto(); + dto.getBags().get(0).setAmount(15); + dto.setAddressId(1L); + dto.setLocationId(1L); + Order order = getOrder(); + user.setOrders(new ArrayList<>()); + user.getOrders().add(order); + user.setChangeOfPointsList(new ArrayList<>()); + + Bag bag = getBagForOrder(); + TariffsInfo tariffsInfo = getTariffInfo(); + + UBSuser ubSuser = getUBSuser(); + + OrderAddress orderAddress = ubSuser.getOrderAddress(); + orderAddress.setAddressStatus(AddressStatus.NEW); + + Order order1 = getOrder(); + order1.setPayment(new ArrayList<>()); + Payment payment1 = getPayment(); + payment1.setId(1L); + order1.getPayment().add(payment1); + + Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); + for (Field f : fields) { + if (f.getName().equals("merchantId")) { + f.setAccessible(true); + f.set(ubsService, "1"); + } + } + tariffsInfo.setBags(Arrays.asList(bag)); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user.setId(null), user); + when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) + .thenReturn(Optional.of(tariffsInfo)); + when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); + when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser.setId(null))); + when(modelMapper.map(dto, Order.class)).thenReturn(order); + when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser.setId(null)); + when(addressRepository.findById(any())).thenReturn(Optional.of(getAddress().setUser(getTestUser()))); + when(locationRepository.findById(any())).thenReturn(Optional.of(getLocation())); + + assertThrows(NotFoundException.class, + () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); + + } + + @Test + void testSaveToDB_AddressStatusDeleted() throws IllegalAccessException { + User user = getUserWithLastLocation(); + user.setAlternateEmail("test@mail.com"); + user.setCurrentPoints(900); + + OrderResponseDto dto = getOrderResponseDto(); + dto.getBags().get(0).setAmount(15); + dto.setAddressId(1L); + dto.setLocationId(1L); + Order order = getOrder(); + user.setOrders(new ArrayList<>()); + user.getOrders().add(order); + user.setChangeOfPointsList(new ArrayList<>()); + + Bag bag = getBagForOrder(); + TariffsInfo tariffsInfo = getTariffInfo(); + + UBSuser ubSuser = getUBSuser(); + + OrderAddress orderAddress = ubSuser.getOrderAddress(); + orderAddress.setAddressStatus(AddressStatus.NEW); + + Order order1 = getOrder(); + order1.setPayment(new ArrayList<>()); + Payment payment1 = getPayment(); + payment1.setId(1L); + order1.getPayment().add(payment1); + + Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); + for (Field f : fields) { + if (f.getName().equals("merchantId")) { + f.setAccessible(true); + f.set(ubsService, "1"); + } + } + tariffsInfo.setBags(Arrays.asList(bag)); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user.setId(null), user); + when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) + .thenReturn(Optional.of(tariffsInfo)); + when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); + when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser.setId(null))); + when(modelMapper.map(dto, Order.class)).thenReturn(order); + when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser.setId(null)); + when(addressRepository.findById(any())) + .thenReturn(Optional.of(getAddress().setAddressStatus(AddressStatus.DELETED))); + when(locationRepository.findById(any())).thenReturn(Optional.of(getLocation())); + assertThrows(NotFoundException.class, + () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); + + } + @Test void testSaveToDBWithTwoBags() throws IllegalAccessException { User user = getUserWithLastLocation(); @@ -807,10 +912,12 @@ void testSaveToDBWithTwoBags() throws IllegalAccessException { Bag bag1 = getBagForOrder(); bag1.setId(1); + bag1.setCapacity(100); bag1.setLimitIncluded(false); Bag bag3 = getBagForOrder(); + bag3.setCapacity(1000); TariffsInfo tariffsInfo = getTariffInfo(); - + tariffsInfo.setBags(Arrays.asList(bag1, bag3)); UBSuser ubSuser = getUBSuser(); OrderAddress orderAddress = ubSuser.getOrderAddress(); @@ -821,7 +928,9 @@ void testSaveToDBWithTwoBags() throws IllegalAccessException { Payment payment1 = getPayment(); payment1.setId(1L); order1.getPayment().add(payment1); - + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag(), ModelUtils.getOrderBag())); + order1 + .setOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag(), ModelUtils.getOrderBag())); Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { if (f.getName().equals("merchantId")) { @@ -833,8 +942,8 @@ void testSaveToDBWithTwoBags() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag1)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag3)); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag1)); + when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag3)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); @@ -863,6 +972,7 @@ void testSaveToDBWithCertificates() throws IllegalAccessException { Bag bag = getBagForOrder(); TariffsInfo tariffsInfo = getTariffInfo(); + tariffsInfo.setBags(Arrays.asList(bag)); UBSuser ubSuser = getUBSuser(); @@ -886,7 +996,7 @@ void testSaveToDBWithCertificates() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); when(certificateRepository.findById(anyString())).thenReturn(Optional.of(getCertificate())); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); @@ -915,6 +1025,7 @@ void testSaveToDBWithDontSendLinkToFondy() throws IllegalAccessException { Bag bag = getBagForOrder(); TariffsInfo tariffsInfo = getTariffInfo(); + tariffsInfo.setBags(Arrays.asList(bag)); Certificate certificate = getCertificate(); certificate.setPoints(1000_00); @@ -941,7 +1052,7 @@ void testSaveToDBWithDontSendLinkToFondy() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); when(certificateRepository.findById(anyString())).thenReturn(Optional.of(certificate)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); @@ -968,6 +1079,7 @@ void testSaveToDBWhenSumToPayLessThanPoints() throws IllegalAccessException { Bag bag = getBagForOrder(); TariffsInfo tariffsInfo = getTariffInfo(); + tariffsInfo.setBags(Arrays.asList(bag)); UBSuser ubSuser = getUBSuser(); @@ -991,7 +1103,7 @@ void testSaveToDBWhenSumToPayLessThanPoints() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); @@ -1012,17 +1124,19 @@ void testSaveToDbThrowBadRequestExceptionPriceLowerThanLimit() throws IllegalAcc OrderResponseDto dto = getOrderResponseDto(); dto.getBags().get(0).setAmount(1); + Bag bag = getBagForOrder(); Order order = getOrder(); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + TariffsInfo tariffsInfo = getTariffInfo(); + tariffsInfo.setBags(Arrays.asList(bag)); user.setOrders(new ArrayList<>()); user.getOrders().add(order); user.setChangeOfPointsList(new ArrayList<>()); - Bag bag = getBagForOrder(); - when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(tariffsInfo)); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); @@ -1030,7 +1144,7 @@ void testSaveToDbThrowBadRequestExceptionPriceLowerThanLimit() throws IllegalAcc verify(userRepository, times(1)).findByUuid(anyString()); verify(tariffsInfoRepository, times(1)) .findTariffsInfoByBagIdAndLocationId(anyList(), anyLong()); - verify(bagRepository, times(1)).findById(anyInt()); + verify(bagRepository, times(1)).findActiveBagById(anyInt()); } @Test @@ -1050,7 +1164,7 @@ void testSaveToDbThrowBadRequestExceptionPriceGreaterThanLimit() throws IllegalA when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); @@ -1058,7 +1172,7 @@ void testSaveToDbThrowBadRequestExceptionPriceGreaterThanLimit() throws IllegalA verify(userRepository, times(1)).findByUuid(anyString()); verify(tariffsInfoRepository, times(1)) .findTariffsInfoByBagIdAndLocationId(anyList(), anyLong()); - verify(bagRepository, times(1)).findById(anyInt()); + verify(bagRepository, times(1)).findActiveBagById(anyInt()); } @Test @@ -1089,10 +1203,14 @@ void testSaveToDBWShouldThrowBadRequestException() throws IllegalAccessException payment1.setId(1L); order1.getPayment().add(payment1); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); @@ -1100,7 +1218,6 @@ void testSaveToDBWShouldThrowBadRequestException() throws IllegalAccessException verify(userRepository, times(1)).findByUuid(anyString()); verify(tariffsInfoRepository, times(1)) .findTariffsInfoByBagIdAndLocationId(anyList(), anyLong()); - verify(bagRepository, times(1)).findById(any()); } @Test @@ -1178,7 +1295,7 @@ void testSaveToDBWShouldThrowBagNotFoundExceptionException() throws IllegalAcces when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findById(3)).thenReturn(Optional.empty()); + when(bagRepository.findActiveBagById(3)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); @@ -1186,7 +1303,7 @@ void testSaveToDBWShouldThrowBagNotFoundExceptionException() throws IllegalAcces verify(userRepository, times(1)).findByUuid(anyString()); verify(tariffsInfoRepository, times(1)) .findTariffsInfoByBagIdAndLocationId(anyList(), anyLong()); - verify(bagRepository).findById(3); + verify(bagRepository).findActiveBagById(3); } @@ -1215,11 +1332,14 @@ void testSaveToDBWithoutOrderUnpaid() throws IllegalAccessException { Payment payment1 = getPayment(); payment1.setId(1L); order1.getPayment().add(payment1); - - when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + TariffsInfo tariffsInfo = getTariffsInfo(); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(tariffsInfo)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); when(orderRepository.findById(any())).thenReturn(Optional.of(order1)); @@ -1230,7 +1350,6 @@ void testSaveToDBWithoutOrderUnpaid() throws IllegalAccessException { verify(userRepository, times(1)).findByUuid("35467585763t4sfgchjfuyetf"); verify(tariffsInfoRepository, times(1)) .findTariffsInfoByBagIdAndLocationId(anyList(), anyLong()); - verify(bagRepository, times(2)).findById(any()); verify(ubsUserRepository, times(1)).findById(anyLong()); verify(modelMapper, times(1)).map(dto.getPersonalData(), UBSuser.class); verify(orderRepository, times(1)).findById(anyLong()); @@ -1244,14 +1363,19 @@ void saveToDBFailPaidOrder() { dto.getBags().get(0).setAmount(5); Order order = getOrder(); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); Bag bag = getBagForOrder(); TariffsInfo tariffsInfo = getTariffInfo(); - + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); + when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) + .thenReturn(Optional.of(tariffsInfo)); when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); when(orderRepository.findById(any())).thenReturn(Optional.of(order)); assertThrows(BadRequestException.class, @@ -1296,7 +1420,7 @@ void testSaveToDBThrowsException() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); } @@ -1320,6 +1444,65 @@ void getSecondPageData() { assertEquals(expected, actual); } + @Test + void getSecondPageData_AlternativeEmailIsNull() { + String uuid = "35467585763t4sfgchjfuyetf"; + PersonalDataDto expected = getOrderResponseDto().getPersonalData(); + + User user = getTestUser() + .setUuid(uuid) + .setRecipientEmail("mail@mail.ua") + .setRecipientPhone("067894522"); + List ubsUser = Arrays.asList(getUBSuser()); + when(userRepository.findByUuid(uuid)).thenReturn(user); + when(ubsUserRepository.findUBSuserByUser(user)).thenReturn(ubsUser); + when(modelMapper.map(user, PersonalDataDto.class)).thenReturn(expected); + + PersonalDataDto actual = ubsService.getSecondPageData("35467585763t4sfgchjfuyetf"); + + assertEquals(expected, actual); + } + + @Test + void getSecondPageData_AlternativeEmailIsEmpty() { + String uuid = "35467585763t4sfgchjfuyetf"; + PersonalDataDto expected = getOrderResponseDto().getPersonalData(); + + User user = getTestUser() + .setUuid(uuid) + .setRecipientEmail("mail@mail.ua") + .setRecipientPhone("067894522") + .setAlternateEmail(""); + List ubsUser = Arrays.asList(getUBSuser()); + when(userRepository.findByUuid(uuid)).thenReturn(user); + when(ubsUserRepository.findUBSuserByUser(user)).thenReturn(ubsUser); + when(modelMapper.map(user, PersonalDataDto.class)).thenReturn(expected); + + PersonalDataDto actual = ubsService.getSecondPageData("35467585763t4sfgchjfuyetf"); + + assertEquals(expected, actual); + } + + @Test + void getSecondPageData_ubsUser_isEmpty() { + String uuid = "35467585763t4sfgchjfuyetf"; + PersonalDataDto expected = getOrderResponseDto().getPersonalData(); + + User user = getTestUser() + .setUuid(uuid) + .setRecipientEmail("mail@mail.ua") + .setRecipientPhone("067894522") + .setAlternateEmail("my@email.com"); + List ubsUser = Arrays.asList(getUBSuser()); + when(userRepository.findByUuid(uuid)).thenReturn(user); + when(ubsUserRepository.findUBSuserByUser(user)).thenReturn(Collections.emptyList()); + when(modelMapper.map(user, PersonalDataDto.class)).thenReturn(expected); + + PersonalDataDto actual = ubsService.getSecondPageData("35467585763t4sfgchjfuyetf"); + + assertEquals(expected, actual); + } + @Test void getSecondPageDataWithUserFounded() { @@ -2568,54 +2751,11 @@ void deleteOrderFail() { }); } - @Test - void processOrderFondyClient() throws Exception { - Order order = getOrderCount(); - HashMap value = new HashMap<>(); - value.put(1, 22); - order.setAmountOfBagsOrdered(value); - order.setPointsToUse(100); - order.setSumTotalAmountWithoutDiscounts(1000_00L); - order.setCertificates(Set.of(getCertificate())); - order.setPayment(TEST_PAYMENT_LIST); - User user = getUser(); - user.setCurrentPoints(100); - user.setChangeOfPointsList(new ArrayList<>()); - order.setUser(user); - - OrderFondyClientDto dto = getOrderFondyClientDto(); - Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); - for (Field f : fields) { - if (f.getName().equals("merchantId")) { - f.setAccessible(true); - f.set(ubsService, "1"); - } - } - - Certificate certificate = getCertificate(); - CertificateDto certificateDto = createCertificateDto(); - - when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); - when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); - - when(encryptionUtil.formRequestSignature(any(), eq(null), eq("1"))).thenReturn("TestValue"); - when(fondyClient.getCheckoutResponse(any())).thenReturn(getSuccessfulFondyResponse()); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); - when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); - when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); - - ubsService.processOrderFondyClient(dto, "uuid"); - - verify(encryptionUtil).formRequestSignature(any(), eq(null), eq("1")); - verify(fondyClient).getCheckoutResponse(any()); - - } - @Test void processOrderFondyClient2() throws Exception { Order order = getOrderCount(); Certificate certificate = getCertificate(); - certificate.setPoints(1500); + HashMap value = new HashMap<>(); value.put(1, 22); order.setAmountOfBagsOrdered(value); @@ -2631,6 +2771,9 @@ void processOrderFondyClient2() throws Exception { OrderFondyClientDto dto = getOrderFondyClientDto(); dto.setCertificates(Set.of("1111-1234")); + order.setCertificates(Set.of(getCertificate())); + order.setPayment(TEST_PAYMENT_LIST); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { if (f.getName().equals("merchantId")) { @@ -2639,26 +2782,26 @@ void processOrderFondyClient2() throws Exception { } } + order.setPointsToUse(-10000); CertificateDto certificateDto = createCertificateDto(); - certificateDto.setPoints(1500); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); + when(fondyClient.getCheckoutResponse(any())).thenReturn(getSuccessfulFondyResponse()); + when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); when(certificateRepository.findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE)).thenReturn(Set.of(certificate)); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); - when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); - when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); ubsService.processOrderFondyClient(dto, "uuid"); - verify(orderRepository).findById(1L); verify(userRepository).findUserByUuid("uuid"); verify(certificateRepository).findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE); - verify(bagRepository).findBagsByOrderId(order.getId()); - verify(modelMapper).map(certificate, CertificateDto.class); - verify(modelMapper).map(any(Bag.class), eq(BagForUserDto.class)); + verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); } @Test @@ -2677,7 +2820,6 @@ void processOrderFondyClientCertificeteNotFoundExeption() throws Exception { user.setCurrentPoints(100); user.setChangeOfPointsList(new ArrayList<>()); order.setUser(user); - OrderFondyClientDto dto = getOrderFondyClientDto(); dto.setCertificates(Set.of("1111-1234")); @@ -2691,24 +2833,22 @@ void processOrderFondyClientCertificeteNotFoundExeption() throws Exception { CertificateDto certificateDto = createCertificateDto(); certificateDto.setPoints(1500); - + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); when(certificateRepository.findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE)).thenReturn(Collections.emptySet()); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); - when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); - + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); assertThrows(NotFoundException.class, () -> ubsService.processOrderFondyClient(dto, "uuid")); - verify(orderRepository).findById(1L); verify(userRepository).findUserByUuid("uuid"); verify(certificateRepository).findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE); - verify(bagRepository).findBagsByOrderId(order.getId()); verify(modelMapper).map(certificate, CertificateDto.class); - verify(modelMapper).map(any(Bag.class), eq(BagForUserDto.class)); + verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); } @Test @@ -2741,14 +2881,16 @@ void processOrderFondyClientCertificeteNotFoundExeption2() throws Exception { CertificateDto certificateDto = createCertificateDto(); certificateDto.setPoints(1500); - + order.setPointsToUse(-1000); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); when(certificateRepository.findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE)).thenReturn(Set.of(certificate)); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); - when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); assertThrows(NotFoundException.class, () -> ubsService.processOrderFondyClient(dto, "uuid")); @@ -2756,9 +2898,8 @@ void processOrderFondyClientCertificeteNotFoundExeption2() throws Exception { verify(userRepository).findUserByUuid("uuid"); verify(certificateRepository).findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE); - verify(bagRepository).findBagsByOrderId(order.getId()); verify(modelMapper).map(certificate, CertificateDto.class); - verify(modelMapper).map(any(Bag.class), eq(BagForUserDto.class)); + verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); } @Test @@ -2776,7 +2917,8 @@ void processOrderFondyClientIfSumToPayLessThanPoints() throws Exception { user.setCurrentPoints(100); user.setChangeOfPointsList(new ArrayList<>()); order.setUser(user); - + order.setPointsToUse(-10000); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); OrderFondyClientDto dto = getOrderFondyClientDto(); Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { @@ -2791,12 +2933,11 @@ void processOrderFondyClientIfSumToPayLessThanPoints() throws Exception { when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); - - when(encryptionUtil.formRequestSignature(any(), eq(null), eq("1"))).thenReturn("TestValue"); when(fondyClient.getCheckoutResponse(any())).thenReturn(getSuccessfulFondyResponse()); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); - when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); ubsService.processOrderFondyClient(dto, "uuid"); @@ -2831,7 +2972,6 @@ void saveFullOrderToDBForIF() throws IllegalAccessException { bag.setFullPrice(400_00L); TariffsInfo tariffsInfo = getTariffsInfo(); bag.setTariffsInfo(tariffsInfo); - UBSuser ubSuser = getUBSuser(); OrderAddress address = ubSuser.getOrderAddress(); @@ -2842,6 +2982,8 @@ void saveFullOrderToDBForIF() throws IllegalAccessException { Payment payment1 = getPayment(); payment1.setId(1L); order1.getPayment().add(payment1); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + order1.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { @@ -2851,10 +2993,13 @@ void saveFullOrderToDBForIF() throws IllegalAccessException { } } - when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(tariffsInfo)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(certificateRepository.findById("1111-1234")).thenReturn(Optional.of(getCertificate())); @@ -2882,7 +3027,7 @@ void saveFullOrderToDBWhenSumToPayeqNull() throws IllegalAccessException { user.setOrders(new ArrayList<>()); user.getOrders().add(order); user.setChangeOfPointsList(new ArrayList<>()); - + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag())); Bag bag = getBagForOrder(); UBSuser ubSuser = getUBSuser().setId(null); @@ -2905,11 +3050,15 @@ void saveFullOrderToDBWhenSumToPayeqNull() throws IllegalAccessException { f.set(ubsService, "1"); } } - - when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + TariffsInfo tariffsInfo = getTariffsInfo(); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(tariffsInfo)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(addressRepository.findById(any())).thenReturn(Optional.of(address)); when(locationRepository.findById(anyLong())).thenReturn(Optional.of(location)); @@ -2957,7 +3106,7 @@ void testSaveToDBfromIForIFThrowsException() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(getTariffInfoWithLimitOfBags())); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> { ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null); }); @@ -2999,7 +3148,7 @@ void testCheckSumIfCourierLimitBySumOfOrderForIF1() throws IllegalAccessExceptio when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> { ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null); @@ -3042,7 +3191,7 @@ void testCheckSumIfCourierLimitBySumOfOrderForIF2() throws InvocationTargetExcep when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> { ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null); @@ -3167,13 +3316,14 @@ void getOrderForUserTest() { order.setAmountOfBagsOrdered(Map.of(1, 10)); bags.add(bag); order.setUser(user); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); orderList.add(order); - + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); when(ordersForUserRepository.getAllByUserUuidAndId(user.getUuid(), order.getId())) .thenReturn(order); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(bags); - when(modelMapper.map(bag, BagForUserDto.class)).thenReturn(bagForUserDto); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); when(orderStatusTranslationRepository .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue())) .thenReturn(Optional.of(orderStatusTranslation)); @@ -3183,8 +3333,7 @@ void getOrderForUserTest() { ubsService.getOrderForUser(user.getUuid(), 1L); - verify(modelMapper, times(bags.size())).map(bag, BagForUserDto.class); - verify(bagRepository).findBagsByOrderId(order.getId()); + verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); verify(orderStatusTranslationRepository, times(orderList.size())) .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue()); verify(orderPaymentStatusTranslationRepository, times(orderList.size())) @@ -3227,30 +3376,30 @@ void getOrdersForUserTest() { orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); Page page = new PageImpl<>(orderList, pageable, 1); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(bags); - when(modelMapper.map(bag, BagForUserDto.class)).thenReturn(bagForUserDto); + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); when(orderStatusTranslationRepository .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue())) .thenReturn(Optional.of(orderStatusTranslation)); when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); assertEquals(dto.getTotalElements(), orderList.size()); assertEquals(dto.getPage().get(0).getId(), order.getId()); - verify(modelMapper, times(bags.size())).map(bag, BagForUserDto.class); - verify(bagRepository).findBagsByOrderId(order.getId()); + verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); verify(orderStatusTranslationRepository, times(orderList.size())) .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue()); verify(orderPaymentStatusTranslationRepository, times(orderList.size())) - .getById( - (long) order.getOrderPaymentStatus().getStatusValue()); + .getById((long) order.getOrderPaymentStatus().getStatusValue()); verify(ordersForUserRepository).getAllByUserUuid(pageable, user.getUuid()); } @@ -3260,6 +3409,7 @@ void testOrdersForUserWithExportedQuantity() { OrderPaymentStatusTranslation orderPaymentStatusTranslation = getOrderPaymentStatusTranslation(); OrdersDataForUserDto ordersDataForUserDto = getOrderStatusDto(); Order order = getOrderTest(); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); User user = getTestUser(); Bag bag = bagDto(); @@ -3279,22 +3429,21 @@ void testOrdersForUserWithExportedQuantity() { when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(bags); - when(modelMapper.map(bag, BagForUserDto.class)).thenReturn(bagForUserDto); when(orderStatusTranslationRepository .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue())) .thenReturn(Optional.of(orderStatusTranslation)); when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); - + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); assertEquals(dto.getTotalElements(), orderList.size()); assertEquals(dto.getPage().get(0).getId(), order.getId()); - verify(modelMapper, times(bags.size())).map(bag, BagForUserDto.class); - verify(bagRepository).findBagsByOrderId(order.getId()); + verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); verify(orderStatusTranslationRepository, times(orderList.size())) .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue()); verify(orderPaymentStatusTranslationRepository, times(orderList.size())) @@ -3321,6 +3470,7 @@ void testOrdersForUserWithConfirmedQuantity() { order.setConfirmedQuantity(Map.of(1, 10)); bags.add(bag); order.setUser(user); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); @@ -3328,22 +3478,21 @@ void testOrdersForUserWithConfirmedQuantity() { when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(bags); - when(modelMapper.map(bag, BagForUserDto.class)).thenReturn(bagForUserDto); + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); when(orderStatusTranslationRepository .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue())) .thenReturn(Optional.of(orderStatusTranslation)); when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); - + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); assertEquals(dto.getTotalElements(), orderList.size()); assertEquals(dto.getPage().get(0).getId(), order.getId()); - verify(modelMapper, times(bags.size())).map(bag, BagForUserDto.class); - verify(bagRepository).findBagsByOrderId(order.getId()); + verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); verify(orderStatusTranslationRepository, times(orderList.size())) .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue()); verify(orderPaymentStatusTranslationRepository, times(orderList.size())) @@ -3363,10 +3512,14 @@ void senderInfoDtoBuilderTest() { order.setAmountOfBagsOrdered(Map.of(1, 10)); order.setUser(user); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); Page page = new PageImpl<>(orderList, pageable, 1); + TariffsInfo tariffsInfo = getTariffsInfo(); + tariffsInfo.setBags(Arrays.asList(getBag())); + order.setTariffsInfo(tariffsInfo); when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); when(orderStatusTranslationRepository @@ -3375,7 +3528,9 @@ void senderInfoDtoBuilderTest() { when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); - + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); assertEquals(dto.getTotalElements(), orderList.size()); assertEquals(dto.getPage().get(0).getId(), order.getId()); @@ -3488,7 +3643,7 @@ void checkIfAddressHasBeenDeletedTest() throws IllegalAccessException { user.setOrders(new ArrayList<>()); user.getOrders().add(order); user.setChangeOfPointsList(new ArrayList<>()); - + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); Bag bag = getBagForOrder(); UBSuser ubSuser = getUBSuser(); @@ -3503,11 +3658,15 @@ void checkIfAddressHasBeenDeletedTest() throws IllegalAccessException { f.set(ubsService, "1"); } } - + TariffsInfo tariffsInfo = getTariffsInfo(); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(tariffsInfo)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); @@ -3547,11 +3706,15 @@ void checkAddressUserTest() throws IllegalAccessException { f.set(ubsService, "1"); } } - + TariffsInfo tariffsInfo = getTariffsInfo(); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(tariffsInfo)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); @@ -3583,11 +3746,16 @@ void checkIfUserHaveEnoughPointsTest() throws IllegalAccessException { f.set(ubsService, "1"); } } + TariffsInfo tariffsInfo = getTariffsInfo(); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(tariffsInfo)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); @@ -3654,11 +3822,15 @@ void testOrdersForUserWithQuantity() { bag.setFullPrice(1200_00L); bags.add(bag); order.setUser(user); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); Page page = new PageImpl<>(orderList, pageable, 1); - + TariffsInfo tariffsInfo = getTariffsInfo(); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); when(orderStatusTranslationRepository @@ -3667,6 +3839,9 @@ void testOrdersForUserWithQuantity() { when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); diff --git a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java index 208fefea9..cf3265bba 100644 --- a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java @@ -68,6 +68,7 @@ import greencity.repository.ServiceRepository; import greencity.repository.TariffsInfoRepository; import greencity.repository.UserRepository; +import greencity.repository.OrderBagRepository; import greencity.service.locations.LocationApiService; import greencity.service.notification.NotificationServiceImpl; import org.junit.jupiter.api.Assertions; @@ -123,9 +124,6 @@ import static greencity.ModelUtils.UPDATE_ORDER_PAGE_ADMIN_DTO; import static greencity.ModelUtils.getAddBonusesToUserDto; import static greencity.ModelUtils.getAdminCommentDto; -import static greencity.ModelUtils.getBag1list; -import static greencity.ModelUtils.getBag2list; -import static greencity.ModelUtils.getBag3list; import static greencity.ModelUtils.getBagInfoDto; import static greencity.ModelUtils.getBaglist; import static greencity.ModelUtils.getCertificateList; @@ -172,6 +170,7 @@ import static java.util.Collections.singletonList; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.anyLong; @@ -267,6 +266,10 @@ class UBSManagementServiceImplTest { @Mock RefundRepository refundRepository; + @Mock + private OrderBagService orderBagService; + @Mock + private OrderBagRepository orderBagRepository; @Test void getAllCertificates() { @@ -418,7 +421,6 @@ void checkUpdateManualPayment() { when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(paymentRepository.findById(1L)).thenReturn(Optional.of(getManualPayment())); when(paymentRepository.save(any())).thenReturn(getManualPayment()); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(getBaglist()); doNothing().when(eventService).save(OrderHistory.UPDATE_PAYMENT_MANUALLY + 1, employee.getFirstName() + " " + employee.getLastName(), getOrder()); @@ -427,7 +429,6 @@ void checkUpdateManualPayment() { verify(paymentRepository, times(1)).save(any()); verify(eventService, times(2)).save(any(), any(), any()); verify(fileService, times(0)).delete(null); - verify(bagRepository).findBagsByOrderId(order.getId()); } @Test @@ -483,12 +484,14 @@ void saveNewManualPaymentWithHalfPaidAmount() { when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(paymentRepository.save(any())) .thenReturn(payment); doNothing().when(eventService).save(any(), any(), any()); + when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); + ubsManagementService.saveNewManualPayment(1L, paymentDetails, null, "test@gmail.com"); + verify(employeeRepository, times(2)).findByEmail(anyString()); verify(eventService, times(1)).save(OrderHistory.ADD_PAYMENT_MANUALLY + 1, "Петро Петренко", order); @@ -518,7 +521,6 @@ void saveNewManualPaymentWithPaidAmount() { when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(paymentRepository.save(any())) .thenReturn(payment); @@ -1023,7 +1025,7 @@ void testGetOrderDetails() { when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(TEST_ORDER)); when(modelMapper.map(TEST_ORDER, new TypeToken>() { }.getType())).thenReturn(TEST_BAG_MAPPING_DTO_LIST); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(TEST_BAG_LIST); + when(orderBagService.findAllBagsByOrderId(1L)).thenReturn(TEST_BAG_LIST); when(modelMapper.map(TEST_BAG, BagInfoDto.class)).thenReturn(TEST_BAG_INFO_DTO); when(bagRepository.findAllByOrder(1L)).thenReturn(TEST_BAG_LIST); when(modelMapper.map(any(), eq(new TypeToken>() { @@ -1036,7 +1038,7 @@ void testGetOrderDetails() { verify(orderRepository).getOrderDetails(1L); verify(modelMapper).map(TEST_ORDER, new TypeToken>() { }.getType()); - verify(bagRepository).findBagsByOrderId(1L); + verify(orderBagService).findAllBagsByOrderId(1L); verify(bagRepository, times(1)).findAllByOrder(anyLong()); verify(modelMapper).map(TEST_BAG, BagInfoDto.class); verify(modelMapper).map(any(), eq(new TypeToken>() { @@ -1149,8 +1151,7 @@ void testSetOrderDetail() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); +// when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); when(paymentRepository.selectSumPaid(1L)).thenReturn(5000L); ubsManagementService.setOrderDetail(1L, @@ -1169,9 +1170,9 @@ void testSetOrderDetailNeedToChangeStatusToHALF_PAID() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); - when(paymentRepository.selectSumPaid(1L)).thenReturn(5000L); + when(orderRepository.findSumOfCertificatesByOrderId(1L)).thenReturn(10L); + when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); + doNothing().when(orderRepository).updateOrderPaymentStatus(1L, OrderPaymentStatus.HALF_PAID.name()); ubsManagementService.setOrderDetail(1L, @@ -1192,11 +1193,10 @@ void testSetOrderDetailNeedToChangeStatusToUNPAID() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); +// when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); when(paymentRepository.selectSumPaid(1L)).thenReturn(null); doNothing().when(orderRepository).updateOrderPaymentStatus(1L, OrderPaymentStatus.UNPAID.name()); - + when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "abc"); @@ -1214,7 +1214,7 @@ void testSetOrderDetailWhenSumPaidIsNull() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); +// when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); when(paymentRepository.selectSumPaid(1L)).thenReturn(null); ubsManagementService.setOrderDetail(1L, @@ -1253,12 +1253,10 @@ void testSetOrderDetailIfHalfPaid() { Bag tariffBagDto = ModelUtils.getTariffBag(); List bagList = getBaglist(); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(orderDto)); - when(bagRepository.findCapacityById(1)).thenReturn(1); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(orderDetailDto)); - when(bagRepository.findById(1)).thenReturn(Optional.ofNullable(tariffBagDto)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(bagList); when(paymentRepository.selectSumPaid(1L)).thenReturn(0L); when(orderRepository.findSumOfCertificatesByOrderId(1L)).thenReturn(0L); + when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1276,14 +1274,11 @@ void testSetOrderDetailIfPaidAndPriceLessThanDiscount() { when(orderRepository.findSumOfCertificatesByOrderId(order.getId())).thenReturn(600L); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto2())); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(order.getId(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "abc"); - - verify(certificateRepository).save(ModelUtils.getCertificate2().setPoints(20)); + verify(certificateRepository).save(ModelUtils.getCertificate2().setPoints(0)); verify(userRepository).updateUserCurrentPoints(1L, 100); verify(orderRepository).updateOrderPointsToUse(1L, 0); } @@ -1297,8 +1292,7 @@ void testSetOrderDetailIfPaidAndPriceLessThanPaidSum() { when(orderRepository.findSumOfCertificatesByOrderId(order.getId())).thenReturn(600L); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto2())); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); +// when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(order.getId(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1312,12 +1306,9 @@ void testSetOrderDetailIfPaidAndPriceLessThanPaidSum() { @Test void testSetOrderDetailConfirmed() { when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusConfirmedDto())); - when(bagRepository.findCapacityById(1)).thenReturn(1); doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), @@ -1333,19 +1324,17 @@ void testSetOrderDetailConfirmed2() { when(bagRepository.findCapacityById(1)).thenReturn(1); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); when(orderDetailRepository.ifRecordExist(any(), any())).thenReturn(1L); - when(orderDetailRepository.getAmount(any(), any())).thenReturn(1L); + ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "test@gmail.com"); + verify(orderRepository, times(2)).findById(1L); verify(bagRepository, times(2)).findCapacityById(1); - verify(bagRepository, times(2)).findById(1); - verify(orderDetailRepository, times(2)).ifRecordExist(any(), any()); + verify(bagRepository, times(2)).findActiveBagById(1); verify(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); - verify(orderDetailRepository).getAmount(any(), any()); verify(orderDetailRepository, times(0)).updateExporter(anyInt(), anyLong(), anyLong()); } @@ -1357,16 +1346,17 @@ void testSetOrderDetailWithExportedWaste() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); when(orderDetailRepository.ifRecordExist(any(), any())).thenReturn(1L); + ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "test@gmail.com"); + verify(orderRepository, times(2)).findById(1L); verify(bagRepository, times(2)).findCapacityById(1); - verify(bagRepository, times(2)).findById(1); - verify(orderDetailRepository, times(3)).ifRecordExist(any(), any()); + verify(bagRepository, times(2)).findActiveBagById(1); + verify(orderDetailRepository, times(2)).ifRecordExist(any(), any()); verify(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); verify(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); } @@ -1378,7 +1368,6 @@ void testSetOrderDetailFormed() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1392,7 +1381,7 @@ void testSetOrderDetailFormedWithBagNoPresent() { when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findCapacityById(1)).thenReturn(1); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.empty()); +// when(bagRepository.findActiveBagById(1)).thenReturn(Optional.empty()); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1411,8 +1400,6 @@ void testSetOrderDetailNotTakenOut() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1430,7 +1417,6 @@ void testSetOrderDetailOnTheRoute() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1449,7 +1435,7 @@ void testSetOrderDetailsDone() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); + ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), @@ -1467,7 +1453,6 @@ void testSetOrderBroughtItHimself() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), @@ -1485,7 +1470,6 @@ void testSetOrderDetailsCanseled() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1625,7 +1609,6 @@ void updateOrderAdminPageInfoTest() { when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, 1L, "en", "test@gmail.com"); UpdateOrderPageAdminDto emptyDto = new UpdateOrderPageAdminDto(); @@ -1665,7 +1648,6 @@ void updateOrderAdminPageInfoWithUbsCourierSumAndWriteOffStationSum() { when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, 1L, "en", "test@gmail.com"); UpdateOrderPageAdminDto emptyDto = new UpdateOrderPageAdminDto(); @@ -1930,7 +1912,6 @@ void getOrderSumDetailsForCanceledPaidOrderWithBags() { Order order = ModelUtils.getCanceledPaidOrder(); order.setOrderDate(LocalDateTime.now()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag3list()); doNothing().when(notificationService).notifyPaidOrder(order); doNothing().when(notificationService).notifyHalfPaidPackage(order); @@ -1959,7 +1940,6 @@ void getOrderSumDetailsForFormedHalfPaidOrder() { Order order = ModelUtils.getFormedHalfPaidOrder(); order.setOrderDate(LocalDateTime.now()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); doNothing().when(notificationService).notifyPaidOrder(order); doNothing().when(notificationService).notifyHalfPaidPackage(order); @@ -1974,7 +1954,6 @@ void getOrderSumDetailsForFormedHalfPaidOrderWithDiffBags() { Order order = ModelUtils.getFormedHalfPaidOrder(); order.setOrderDate(LocalDateTime.now()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag3list()); doNothing().when(notificationService).notifyPaidOrder(order); doNothing().when(notificationService).notifyHalfPaidPackage(order); @@ -1989,7 +1968,6 @@ void getOrderSumDetailsForCanceledHalfPaidOrder() { Order order = ModelUtils.getCanceledHalfPaidOrder(); order.setOrderDate(LocalDateTime.now()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); doNothing().when(notificationService).notifyPaidOrder(order); doNothing().when(notificationService).notifyHalfPaidPackage(order); @@ -2015,8 +1993,7 @@ void getOrderStatusDataTest() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); + when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(1L)).thenReturn(getCertificateList()); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(getService())); @@ -2033,9 +2010,7 @@ void getOrderStatusDataTest() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); - verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findBagsByOrderId(1L); - verify(bagRepository).findBagsByTariffsInfoId(1L); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); verify(certificateRepository).findCertificate(1L); verify(orderRepository, times(5)).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); @@ -2092,8 +2067,7 @@ void getOrderStatusDataTestEmptyPriceDetails() { .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag2list()); + when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.empty()); when(modelMapper.map(getBaglist().get(0), BagInfoDto.class)).thenReturn(bagInfoDto); when(orderStatusTranslationRepository.getOrderStatusTranslationById(6L)) @@ -2109,8 +2083,7 @@ void getOrderStatusDataTestEmptyPriceDetails() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findBagsByOrderId(1L); - verify(bagRepository).findBagsByTariffsInfoId(1L); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); verify(certificateRepository).findCertificate(1L); verify(orderRepository, times(5)).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); @@ -2134,8 +2107,7 @@ void getOrderStatusDataWithEmptyCertificateTest() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); + when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(getService())); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); when(modelMapper.map(getBaglist().get(0), BagInfoDto.class)).thenReturn(bagInfoDto); @@ -2150,8 +2122,7 @@ void getOrderStatusDataWithEmptyCertificateTest() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findBagsByOrderId(1L); - verify(bagRepository).findBagsByTariffsInfoId(1L); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); verify(orderRepository, times(5)).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); verify(modelMapper).map(getBaglist().get(0), BagInfoDto.class); @@ -2173,8 +2144,7 @@ void getOrderStatusDataWhenOrderTranslationIsNull() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); + when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(getService())); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); when(modelMapper.map(getBaglist().get(0), BagInfoDto.class)).thenReturn(bagInfoDto); @@ -2187,8 +2157,7 @@ void getOrderStatusDataWhenOrderTranslationIsNull() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findBagsByOrderId(1L); - verify(bagRepository).findBagsByTariffsInfoId(1L); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); verify(orderRepository, times(5)).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); verify(modelMapper).map(getBaglist().get(0), BagInfoDto.class); @@ -2210,7 +2179,6 @@ void getOrderStatusDataExceptionTest() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(1L)).thenReturn(getCertificateList()); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(getService())); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); @@ -2486,8 +2454,7 @@ void getOrderStatusDataWithNotEmptyLists() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); + when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(1L)).thenReturn(getCertificateList()); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); when(modelMapper.map(getBaglist().get(0), BagInfoDto.class)).thenReturn(bagInfoDto); @@ -2505,8 +2472,7 @@ void getOrderStatusDataWithNotEmptyLists() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findBagsByTariffsInfoId(1L); - verify(bagRepository).findBagsByOrderId(1L); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); verify(certificateRepository).findCertificate(1L); verify(orderRepository, times(5)).findById(1L); verify(modelMapper).map(getBaglist().get(0), BagInfoDto.class); @@ -2532,8 +2498,7 @@ void getOrderStatusesTranslationTest() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); + when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(1L)).thenReturn(getCertificateList()); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); when(modelMapper.map(getBaglist().get(0), BagInfoDto.class)).thenReturn(bagInfoDto); @@ -2556,8 +2521,7 @@ void getOrderStatusesTranslationTest() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findBagsByOrderId(1L); - verify(bagRepository).findBagsByTariffsInfoId(1L); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); verify(certificateRepository).findCertificate(1L); verify(orderRepository, times(5)).findById(1L); verify(modelMapper).map(getBaglist().get(0), BagInfoDto.class); @@ -2634,7 +2598,6 @@ void addBonusesToUserTest() { Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); ubsManagementService.addBonusesToUser(getAddBonusesToUserDto(), 1L, employee.getEmail()); @@ -2642,7 +2605,7 @@ void addBonusesToUserTest() { verify(orderRepository).findById(1L); verify(orderRepository).save(order); verify(userRepository).save(user); - verify(notificationService).notifyBonuses(order, 809L); + verify(notificationService).notifyBonuses(order, 900L); verify(eventService).saveEvent(OrderHistory.ADDED_BONUSES, employee.getEmail(), order); } @@ -2654,7 +2617,7 @@ void addBonusesToUserIfOrderStatusIsCanceled() { Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); +// when(orderBagService.findAllBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); ubsManagementService.addBonusesToUser(getAddBonusesToUserDto(), 1L, employee.getEmail()); @@ -2673,7 +2636,6 @@ void addBonusesToUserWithoutExportedBagsTest() { Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); ubsManagementService.addBonusesToUser(getAddBonusesToUserDto(), 1L, employee.getEmail()); @@ -2681,26 +2643,18 @@ void addBonusesToUserWithoutExportedBagsTest() { verify(orderRepository).findById(1L); verify(orderRepository).save(order); verify(userRepository).save(user); - verify(notificationService).notifyBonuses(order, 209L); + verify(notificationService).notifyBonuses(order, 300L); verify(eventService).saveEvent(OrderHistory.ADDED_BONUSES, employee.getEmail(), order); } - @Test - void addBonusesToUserWithoutOrderTest() { - when(orderRepository.findById(1L)).thenReturn(Optional.empty()); - AddBonusesToUserDto dto = getAddBonusesToUserDto(); - String email = getEmployee().getEmail(); - assertThrows(NotFoundException.class, () -> ubsManagementService.addBonusesToUser(dto, 1L, email)); - } - @Test void addBonusesToUserWithNoOverpaymentTest() { Order order = getOrderForGetOrderStatusData2Test(); String email = getEmployee().getEmail(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag3list()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); + when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); AddBonusesToUserDto addBonusesToUserDto = getAddBonusesToUserDto(); assertThrows(BadRequestException.class, From d11d585d2927a9ea9456be86c2239dc059e0de26 Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Mon, 31 Jul 2023 19:20:30 +0300 Subject: [PATCH 40/80] Revert "[Orders] After changing tariff the price of paid order is not changing (#1201)" (#1204) This reverts commit 4decde541e0c432cc032f66ceac7a70302a12045. --- .../main/java/greencity/entity/order/Bag.java | 22 +- .../java/greencity/entity/order/Order.java | 42 +- .../java/greencity/entity/order/OrderBag.java | 70 --- .../main/java/greencity/enums/BagStatus.java | 6 - .../greencity/repository/BagRepository.java | 38 +- .../repository/OrderBagRepository.java | 73 --- .../greencity/repository/OrderRepository.java | 18 - .../db/changelog/db.changelog-master.xml | 3 - ...olumn-order-bag-mapping-table-Spodaryk.xml | 59 -- ...dd-column-status-to-bag-table-Spodaryk.xml | 17 - ...pdate-order-bag-mapping-table-Spodaryk.xml | 8 - ...pdate-order-bag-mapping-table-Spodaryk.sql | 6 - .../java/greencity/enums/BagStatusTest.java | 45 -- .../mapping/bag/BagForUserDtoMapper.java | 8 +- .../notification/NotificationServiceImpl.java | 5 +- .../service/ubs/OrderBagService.java | 90 ---- .../service/ubs/SuperAdminServiceImpl.java | 105 +--- .../service/ubs/UBSClientServiceImpl.java | 110 ++-- .../service/ubs/UBSManagementServiceImpl.java | 16 +- .../src/test/java/greencity/ModelUtils.java | 179 +------ .../mapping/bag/BagForUserDtoMapperTest.java | 6 +- .../NotificationServiceImplTest.java | 17 +- .../service/ubs/OrderBagServiceTest.java | 151 ------ .../ubs/SuperAdminServiceImplTest.java | 358 ++++--------- .../service/ubs/UBSClientServiceImplTest.java | 503 ++++++------------ .../ubs/UBSManagementServiceImplTest.java | 138 +++-- 26 files changed, 494 insertions(+), 1599 deletions(-) delete mode 100644 dao/src/main/java/greencity/entity/order/OrderBag.java delete mode 100644 dao/src/main/java/greencity/enums/BagStatus.java delete mode 100644 dao/src/main/java/greencity/repository/OrderBagRepository.java delete mode 100644 dao/src/main/resources/db/changelog/logs/ch-add-column-order-bag-mapping-table-Spodaryk.xml delete mode 100644 dao/src/main/resources/db/changelog/logs/ch-add-column-status-to-bag-table-Spodaryk.xml delete mode 100644 dao/src/main/resources/db/changelog/logs/ch-update-order-bag-mapping-table-Spodaryk.xml delete mode 100644 dao/src/main/resources/db/changelog/logs/sql/ch-update-order-bag-mapping-table-Spodaryk.sql delete mode 100644 dao/src/test/java/greencity/enums/BagStatusTest.java delete mode 100644 service/src/main/java/greencity/service/ubs/OrderBagService.java delete mode 100644 service/src/test/java/greencity/service/ubs/OrderBagServiceTest.java diff --git a/dao/src/main/java/greencity/entity/order/Bag.java b/dao/src/main/java/greencity/entity/order/Bag.java index 82a4cfa4b..dafb97462 100644 --- a/dao/src/main/java/greencity/entity/order/Bag.java +++ b/dao/src/main/java/greencity/entity/order/Bag.java @@ -1,7 +1,6 @@ package greencity.entity.order; import greencity.entity.user.employee.Employee; -import greencity.enums.BagStatus; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -9,18 +8,8 @@ import lombok.EqualsAndHashCode; import lombok.ToString; import lombok.Builder; -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.CascadeType; + +import javax.persistence.*; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import java.time.LocalDate; @@ -87,12 +76,7 @@ public class Bag { @JoinColumn private Employee editedBy; - @ManyToOne(cascade = CascadeType.REMOVE, - fetch = FetchType.EAGER) + @ManyToOne @JoinColumn(nullable = false) private TariffsInfo tariffsInfo; - - @Column(nullable = false) - @Enumerated(EnumType.STRING) - private BagStatus status; } diff --git a/dao/src/main/java/greencity/entity/order/Order.java b/dao/src/main/java/greencity/entity/order/Order.java index af48dfe0b..8215634a9 100644 --- a/dao/src/main/java/greencity/entity/order/Order.java +++ b/dao/src/main/java/greencity/entity/order/Order.java @@ -1,43 +1,21 @@ package greencity.entity.order; +import greencity.enums.CancellationReason; +import greencity.enums.OrderPaymentStatus; +import greencity.enums.OrderStatus; import greencity.entity.notifications.UserNotification; import greencity.entity.user.User; import greencity.entity.user.employee.Employee; import greencity.entity.user.employee.EmployeeOrderPosition; import greencity.entity.user.employee.ReceivingStation; import greencity.entity.user.ubs.UBSuser; -import greencity.enums.CancellationReason; -import greencity.enums.OrderPaymentStatus; -import greencity.enums.OrderStatus; import greencity.filters.StringListConverter; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.ToString; +import lombok.*; import org.hibernate.annotations.Cascade; -import javax.persistence.CascadeType; -import javax.persistence.CollectionTable; -import javax.persistence.Column; -import javax.persistence.Convert; -import javax.persistence.ElementCollection; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.MapKeyColumn; -import javax.persistence.OneToMany; -import javax.persistence.Table; +import javax.persistence.*; import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; @@ -50,10 +28,10 @@ @Builder @Table(name = "orders") @EqualsAndHashCode(exclude = {"employeeOrderPositions", "userNotifications", "ubsUser", - "changeOfPointsList", "blockedByEmployee", "certificates", "payment", "employeeOrderPositions", + "changeOfPointsList", "blockedByEmployee", "certificates", "attachedEmployees", "payment", "employeeOrderPositions", "events", "imageReasonNotTakingBags", "additionalOrders"}) @ToString(exclude = {"employeeOrderPositions", "userNotifications", "ubsUser", - "changeOfPointsList", "blockedByEmployee", "certificates", "payment", "employeeOrderPositions", + "changeOfPointsList", "blockedByEmployee", "certificates", "attachedEmployees", "payment", "employeeOrderPositions", "events", "imageReasonNotTakingBags", "additionalOrders"}) public class Order { @Id @@ -182,10 +160,4 @@ public class Order { @Column(name = "write_off_station_sum") private Long writeOffStationSum; - - @OneToMany( - mappedBy = "order", - cascade = CascadeType.ALL, - orphanRemoval = true) - private List orderBags = new ArrayList<>(); } diff --git a/dao/src/main/java/greencity/entity/order/OrderBag.java b/dao/src/main/java/greencity/entity/order/OrderBag.java deleted file mode 100644 index 320212b23..000000000 --- a/dao/src/main/java/greencity/entity/order/OrderBag.java +++ /dev/null @@ -1,70 +0,0 @@ -package greencity.entity.order; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.ToString; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.Table; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.Size; - -@Entity -@NoArgsConstructor -@AllArgsConstructor -@EqualsAndHashCode(exclude = {"order", "bag"}) -@ToString(exclude = {"order", "bag"}) -@Getter -@Setter -@Builder -@Table(name = "order_bag_mapping") -public class OrderBag { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @ManyToOne(fetch = FetchType.EAGER) - @JoinColumn(name = "order_id") - private Order order; - - @ManyToOne(fetch = FetchType.EAGER) - - @JoinColumn(name = "bag_id") - private Bag bag; - - @Column(nullable = false) - private Integer amount; - - @Column(name = "confirmed_quantity") - private Integer confirmedQuantity; - - @Column(name = "exported_quantity") - private Integer exportedQuantity; - - @Column(nullable = false) - private Integer capacity; - - @Column(nullable = false) - private Long price; - - @NotBlank - @Size(min = 1, max = 30) - @Column(nullable = false) - private String name; - - @NotBlank - @Size(min = 1, max = 30) - @Column(nullable = false) - private String nameEng; -} diff --git a/dao/src/main/java/greencity/enums/BagStatus.java b/dao/src/main/java/greencity/enums/BagStatus.java deleted file mode 100644 index f0f3fe1c2..000000000 --- a/dao/src/main/java/greencity/enums/BagStatus.java +++ /dev/null @@ -1,6 +0,0 @@ -package greencity.enums; - -public enum BagStatus { - ACTIVE, - DELETED -} diff --git a/dao/src/main/java/greencity/repository/BagRepository.java b/dao/src/main/java/greencity/repository/BagRepository.java index 8746565b7..18d35c029 100644 --- a/dao/src/main/java/greencity/repository/BagRepository.java +++ b/dao/src/main/java/greencity/repository/BagRepository.java @@ -8,10 +8,21 @@ import java.util.List; import java.util.Map; -import java.util.Optional; @Repository public interface BagRepository extends JpaRepository { + /** + * method, that returns {@link List}of{@link Bag} that have bags by order id. + * + * @param id order id + * @return {@link List}of{@link Bag} by it's language and orderId. + * @author Mahdziak Orest + */ + @Query(value = "SELECT * FROM ORDER_BAG_MAPPING as OBM " + + "JOIN BAG AS B ON OBM.ORDER_ID = :orderId and OBM.BAG_ID = B.ID " + + "ORDER BY B.ID", nativeQuery = true) + List findBagsByOrderId(@Param("orderId") Long id); + /** * This is method which find capacity by id. * @@ -68,26 +79,11 @@ public interface BagRepository extends JpaRepository { List findAllByOrder(@Param("orderId") Long orderId); /** - * method, that returns {@link List} of {@link Bag} by id. - * - * @param bagId {@link Integer} tariff service id - * @return {@link Optional} of {@link Bag} - * @author Oksana Spodaryk - */ - @Query(nativeQuery = true, - value = "SELECT * FROM bag " - + "WHERE id = :bagId AND status = 'ACTIVE'") - Optional findActiveBagById(Integer bagId); - - /** - * method, that returns {@link List} of active {@link Bag} by tariff id. + * method, that returns {@link List} of {@link Bag} by tariff id. * - * @param tariffInfoId {@link Long} tariff id - * @return {@link List} of {@link Bag} - * @author Oksana Spodaryk + * @param tariffInfoId tariff id {@link Long} + * @return {@link List} of {@link Bag} by tariffInfoId. + * @author Safarov Renat */ - @Query(nativeQuery = true, - value = "SELECT * FROM bag " - + "WHERE tariffs_info_id = :tariffInfoId AND status = 'ACTIVE'") - List findAllActiveBagsByTariffsInfoId(Long tariffInfoId); + List findBagsByTariffsInfoId(Long tariffInfoId); } \ No newline at end of file diff --git a/dao/src/main/java/greencity/repository/OrderBagRepository.java b/dao/src/main/java/greencity/repository/OrderBagRepository.java deleted file mode 100644 index 5d17132ce..000000000 --- a/dao/src/main/java/greencity/repository/OrderBagRepository.java +++ /dev/null @@ -1,73 +0,0 @@ -package greencity.repository; - -import greencity.entity.order.OrderBag; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Modifying; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; -import org.springframework.stereotype.Repository; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -@Repository -public interface OrderBagRepository extends JpaRepository { - /** - * Deletes the OrderBag from the ORDER_BAG_MAPPING table where the bagId and - * orderId match the provided values. - * - * @param bagId The ID of the bag to be deleted. - * @param orderId The ID of the order to which the bag is associated. - */ - @Transactional - @Modifying - @Query(value = "DELETE FROM ORDER_BAG_MAPPING WHERE BAG_ID = :bagId AND ORDER_ID = :orderId", nativeQuery = true) - void deleteOrderBagByBagIdAndOrderId(@Param("bagId") Integer bagId, @Param("orderId") Long orderId); - - /** - * Retrieves a list of order bags based on the given bag ID. - * - * @param id the ID of the order - * @return a list of order bags matching the bag ID - */ - @Query(value = "SELECT * FROM ORDER_BAG_MAPPING as OBM " - + "where OBM.BAG_ID = :bagId", nativeQuery = true) - List findOrderBagsByBagId(@Param("bagId") Integer id); - - /** - * Retrieves a list of order bags based on the given order ID. - * - * @param id the ID of the order - * @return a list of order bags matching the order ID - */ - @Query(value = "SELECT * FROM ORDER_BAG_MAPPING as OBM " - + "where OBM.ORDER_ID = :orderId", nativeQuery = true) - List findOrderBagsByOrderId(@Param("orderId") Long id); - - /** - * method updates the bag data of OrderBag for all unpaid orders. - * - * @param bagId {@link Integer} bag id - * @param capacity {@link Integer} bag capacity - * @param price {@link Long} bag full price in coins - * @param name {@link String} bag name - * @param nameEng {@link String} bag english name - * @author Oksana Spodaryk - */ - @Transactional - @Modifying - @Query(value = "update order_bag_mapping obm " - + "set capacity = :capacity, price = :price, name = :name, name_eng = :nameEng " - + "from orders o " - + "where o.id = obm.order_id and obm.bag_id = :bagId and o.order_payment_status = 'UNPAID'", nativeQuery = true) - void updateAllByBagIdForUnpaidOrders(Integer bagId, Integer capacity, Long price, String name, String nameEng); - - /** - * method returns all OrderBags by bag id. - * - * @param bagId {@link Integer} bag id - * @return {@link List} of {@link OrderBag} - * @author Julia Seti - */ - List findAllByBagId(Integer bagId); -} diff --git a/dao/src/main/java/greencity/repository/OrderRepository.java b/dao/src/main/java/greencity/repository/OrderRepository.java index a4616a199..3011eb235 100644 --- a/dao/src/main/java/greencity/repository/OrderRepository.java +++ b/dao/src/main/java/greencity/repository/OrderRepository.java @@ -251,22 +251,4 @@ void changeReceivingStationForAllOrders(@Param("receiving_station") Long station void updateOrderStatusToExpected(@Param("actual_status") String actualStatus, @Param("expected_status") String expectedStatus, @Param("currentDate") LocalDate currentDate); - - /** - * method returns all unpaid orders that contain a bag with id. - */ - @Query(nativeQuery = true, - value = "select * from orders o " - + "left join order_bag_mapping obm on o.id = obm.order_id " - + "where obm.bag_id = :bagId and o.order_payment_status = 'UNPAID'") - List findAllUnpaidOrdersByBagId(Integer bagId); - - /** - * method returns all orders that contain a bag with id. - */ - @Query(nativeQuery = true, - value = "select * from orders o " - + "left join order_bag_mapping obm on o.id = obm.order_id " - + "where obm.bag_id = :bagId") - List findAllByBagId(Integer bagId); } diff --git a/dao/src/main/resources/db/changelog/db.changelog-master.xml b/dao/src/main/resources/db/changelog/db.changelog-master.xml index 28ba8a72f..db07e44e8 100644 --- a/dao/src/main/resources/db/changelog/db.changelog-master.xml +++ b/dao/src/main/resources/db/changelog/db.changelog-master.xml @@ -207,7 +207,6 @@ - @@ -215,6 +214,4 @@ - - \ No newline at end of file diff --git a/dao/src/main/resources/db/changelog/logs/ch-add-column-order-bag-mapping-table-Spodaryk.xml b/dao/src/main/resources/db/changelog/logs/ch-add-column-order-bag-mapping-table-Spodaryk.xml deleted file mode 100644 index 6cb5ee653..000000000 --- a/dao/src/main/resources/db/changelog/logs/ch-add-column-order-bag-mapping-table-Spodaryk.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dao/src/main/resources/db/changelog/logs/ch-add-column-status-to-bag-table-Spodaryk.xml b/dao/src/main/resources/db/changelog/logs/ch-add-column-status-to-bag-table-Spodaryk.xml deleted file mode 100644 index 4bc7dbfbe..000000000 --- a/dao/src/main/resources/db/changelog/logs/ch-add-column-status-to-bag-table-Spodaryk.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/dao/src/main/resources/db/changelog/logs/ch-update-order-bag-mapping-table-Spodaryk.xml b/dao/src/main/resources/db/changelog/logs/ch-update-order-bag-mapping-table-Spodaryk.xml deleted file mode 100644 index dbe8a62e2..000000000 --- a/dao/src/main/resources/db/changelog/logs/ch-update-order-bag-mapping-table-Spodaryk.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/dao/src/main/resources/db/changelog/logs/sql/ch-update-order-bag-mapping-table-Spodaryk.sql b/dao/src/main/resources/db/changelog/logs/sql/ch-update-order-bag-mapping-table-Spodaryk.sql deleted file mode 100644 index b71d14c9a..000000000 --- a/dao/src/main/resources/db/changelog/logs/sql/ch-update-order-bag-mapping-table-Spodaryk.sql +++ /dev/null @@ -1,6 +0,0 @@ -update order_bag_mapping -set capacity=bag.capacity, - price=bag.full_price, - name=bag.name, - name_eng=bag.name_eng from bag -where bag_id=bag.id \ No newline at end of file diff --git a/dao/src/test/java/greencity/enums/BagStatusTest.java b/dao/src/test/java/greencity/enums/BagStatusTest.java deleted file mode 100644 index 2a79b535e..000000000 --- a/dao/src/test/java/greencity/enums/BagStatusTest.java +++ /dev/null @@ -1,45 +0,0 @@ -package greencity.enums; - -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNotEquals; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertArrayEquals; - -class BagStatusTest { - - @Test - void enumValuesExistenceTest() { - assertNotNull(BagStatus.ACTIVE); - assertNotNull(BagStatus.DELETED); - } - - @Test - void enumValuesUniquenessTest() { - assertNotEquals(BagStatus.ACTIVE, BagStatus.DELETED); - } - - @Test - void enumValuesToStringTest() { - assertEquals("ACTIVE", BagStatus.ACTIVE.toString()); - assertEquals("DELETED", BagStatus.DELETED.toString()); - } - - @Test - void valueOfTest() { - assertEquals(BagStatus.ACTIVE, BagStatus.valueOf("ACTIVE")); - assertEquals(BagStatus.DELETED, BagStatus.valueOf("DELETED")); - } - - @Test - void enumOrdinalTest() { - assertEquals(0, BagStatus.ACTIVE.ordinal()); - assertEquals(1, BagStatus.DELETED.ordinal()); - } - - @Test - void enumValuesArrayTest() { - BagStatus[] expectedArray = {BagStatus.ACTIVE, BagStatus.DELETED}; - assertArrayEquals(expectedArray, BagStatus.values()); - } -} diff --git a/service/src/main/java/greencity/mapping/bag/BagForUserDtoMapper.java b/service/src/main/java/greencity/mapping/bag/BagForUserDtoMapper.java index 68f4bb7b4..fe66bbe7b 100644 --- a/service/src/main/java/greencity/mapping/bag/BagForUserDtoMapper.java +++ b/service/src/main/java/greencity/mapping/bag/BagForUserDtoMapper.java @@ -2,21 +2,21 @@ import greencity.constant.AppConstant; import greencity.dto.bag.BagForUserDto; -import greencity.entity.order.OrderBag; +import greencity.entity.order.Bag; import org.modelmapper.AbstractConverter; import org.springframework.stereotype.Component; import java.math.BigDecimal; @Component -public class BagForUserDtoMapper extends AbstractConverter { +public class BagForUserDtoMapper extends AbstractConverter { @Override - protected BagForUserDto convert(OrderBag source) { + protected BagForUserDto convert(Bag source) { return BagForUserDto.builder() .service(source.getName()) .serviceEng(source.getNameEng()) .capacity(source.getCapacity()) - .fullPrice(BigDecimal.valueOf(source.getPrice()) + .fullPrice(BigDecimal.valueOf(source.getFullPrice()) .movePointLeft(AppConstant.TWO_DECIMALS_AFTER_POINT_IN_CURRENCY) .doubleValue()) .build(); diff --git a/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java b/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java index 8f0cb757f..56d7aec6a 100644 --- a/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java +++ b/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java @@ -20,7 +20,6 @@ import greencity.exceptions.http.AccessDeniedException; import greencity.repository.*; import greencity.service.ubs.NotificationService; -import greencity.service.ubs.OrderBagService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.MapUtils; @@ -76,8 +75,6 @@ public class NotificationServiceImpl implements NotificationService { private static final String ORDER_NUMBER_KEY = "orderNumber"; private static final String AMOUNT_TO_PAY_KEY = "amountToPay"; private static final String PAY_BUTTON = "payButton"; - @Autowired - private final OrderBagService orderBagService; /** * {@inheritDoc} @@ -242,7 +239,7 @@ private Double getAmountToPay(Order order) { long ubsCourierSumInCoins = order.getUbsCourierSum() == null ? 0L : order.getUbsCourierSum(); long writeStationSumInCoins = order.getWriteOffStationSum() == null ? 0L : order.getWriteOffStationSum(); - List bagsType = orderBagService.findAllBagsByOrderId(order.getId()); + List bagsType = bagRepository.findBagsByOrderId(order.getId()); Map bagsAmount; if (MapUtils.isNotEmpty(order.getExportedQuantity())) { bagsAmount = order.getExportedQuantity(); diff --git a/service/src/main/java/greencity/service/ubs/OrderBagService.java b/service/src/main/java/greencity/service/ubs/OrderBagService.java deleted file mode 100644 index 8922d6710..000000000 --- a/service/src/main/java/greencity/service/ubs/OrderBagService.java +++ /dev/null @@ -1,90 +0,0 @@ -package greencity.service.ubs; - -import greencity.entity.order.Bag; -import greencity.entity.order.OrderBag; -import greencity.exceptions.NotFoundException; -import greencity.repository.OrderBagRepository; -import lombok.Data; -import org.springframework.stereotype.Service; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import static greencity.constant.ErrorMessage.BAG_NOT_FOUND; - -@Service -@Data -public class OrderBagService { - private final OrderBagRepository orderBagRepository; - - private Long getBagPrice(List orderBags, Integer id) { - return orderBags.stream() - .filter(ob -> ob.getBag().getId().equals(id)) - .map(OrderBag::getPrice) - .findFirst() - .orElseThrow(() -> new NotFoundException(BAG_NOT_FOUND + id)); - } - - /** - * Finds all bags belonging to a specific list of OrderBag instances. - * - * @param orderBags A list of OrderBag instances to search within. - * @return A list of Bag instances associated with the provided OrderBag - * instances. - */ - public List findAllBagsInOrderBagsList(List orderBags) { - return orderBags.stream() - .map(OrderBag::getBag) - .peek(b -> b.setFullPrice(getBagPrice(orderBags, b.getId()))) - .collect(Collectors.toList()); - } - - /** - * Finds all bags belonging to a specific OrderBag based on the provided ID. - * - * @param id The ID of the OrderBag to search for. - * @return A list of Bag instances associated with the provided OrderBag ID. - */ - public List findAllBagsByOrderId(Long id) { - List orderBags = orderBagRepository.findOrderBagsByOrderId(id); - return findAllBagsInOrderBagsList(orderBags); - } - - /** - * Calculates the actual bags' amounts for the given list of OrderBags and - * returns the result as a Map. This method checks the OrderBags in the input - * list and calculates the actual amount for each bag based on the availability - * of different quantity attributes in the OrderBag objects. It prioritizes the - * following quantities in descending order: 1. Exported Quantity: If all - * OrderBags have the 'exportedQuantity' attribute set, the method will use it. - * 2. Confirmed Quantity: If 'exportedQuantity' is not available for all - * OrderBags but 'confirmedQuantity' is, the method will use it. 3. Regular - * Amount: If neither 'exportedQuantity' nor 'confirmedQuantity' are available - * for all OrderBags, the method will use the 'amount' attribute. - * - * @param bagsForOrder The list of OrderBag objects for which the actual amounts - * need to be calculated. - * @return A Map containing the bag ID as the key and the corresponding actual - * amount as the value. If any OrderBag in the input list lacks all - * three attributes (exportedQuantity, confirmedQuantity, and amount), - * the corresponding entry will not be included in the result map. - * @throws NullPointerException if 'bagsForOrder' is null. - */ - public Map getActualBagsAmountForOrder(List bagsForOrder) { - if (bagsForOrder.stream().allMatch(orderBag -> orderBag.getExportedQuantity() != null)) { - return bagsForOrder.stream() - .collect(Collectors.toMap(orderBag -> orderBag.getBag().getId(), OrderBag::getExportedQuantity)); - } - if (bagsForOrder.stream().allMatch(orderBag -> orderBag.getConfirmedQuantity() != null)) { - return bagsForOrder.stream() - .collect(Collectors.toMap(orderBag -> orderBag.getBag().getId(), OrderBag::getConfirmedQuantity)); - } - if (bagsForOrder.stream().allMatch(orderBag -> orderBag.getAmount() != null)) { - return bagsForOrder.stream() - .collect(Collectors.toMap(orderBag -> orderBag.getBag().getId(), OrderBag::getAmount)); - } - return new HashMap<>(); - } -} diff --git a/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java b/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java index 78f3d053f..9d623c99d 100644 --- a/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java @@ -24,8 +24,6 @@ import greencity.dto.tariff.GetTariffsInfoDto; import greencity.dto.tariff.SetTariffLimitsDto; import greencity.entity.coords.Coordinates; -import greencity.entity.order.Order; -import greencity.entity.order.OrderBag; import greencity.entity.order.Bag; import greencity.entity.order.Courier; import greencity.entity.order.Service; @@ -35,9 +33,7 @@ import greencity.entity.user.Region; import greencity.entity.user.employee.Employee; import greencity.entity.user.employee.ReceivingStation; -import greencity.enums.BagStatus; import greencity.enums.CourierLimit; -import greencity.enums.OrderPaymentStatus; import greencity.enums.CourierStatus; import greencity.enums.LocationStatus; import greencity.enums.StationStatus; @@ -52,8 +48,6 @@ import greencity.filters.TariffsInfoSpecification; import greencity.repository.BagRepository; import greencity.repository.CourierRepository; -import greencity.repository.OrderBagRepository; -import greencity.repository.OrderRepository; import greencity.repository.DeactivateChosenEntityRepository; import greencity.repository.EmployeeRepository; import greencity.repository.LocationRepository; @@ -77,7 +71,6 @@ import java.util.Comparator; import java.util.HashSet; import java.util.List; -import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; @@ -120,9 +113,6 @@ public class SuperAdminServiceImpl implements SuperAdminService { "Current region: %s or cities: %s or receiving stations: %s don't exist."; private static final String REGION_OR_CITIES_OR_RECEIVING_STATIONS_OR_COURIER_NOT_EXIST_MESSAGE = "Current region: %s or cities: %s or receiving stations: %s or courier: %s don't exist."; - private final OrderBagRepository orderBagRepository; - private final OrderRepository orderRepository; - private final OrderBagService orderBagService; @Override public GetTariffServiceDto addTariffService(long tariffId, TariffServiceDto dto, String employeeUuid) { @@ -134,7 +124,6 @@ private Bag createBag(long tariffId, TariffServiceDto dto, String employeeUuid) TariffsInfo tariffsInfo = tryToFindTariffById(tariffId); Employee employee = tryToFindEmployeeByUuid(employeeUuid); Bag bag = modelMapper.map(dto, Bag.class); - bag.setStatus(BagStatus.ACTIVE); bag.setTariffsInfo(tariffsInfo); bag.setCreatedBy(employee); return bag; @@ -143,7 +132,7 @@ private Bag createBag(long tariffId, TariffServiceDto dto, String employeeUuid) @Override public List getTariffService(long tariffId) { if (tariffsInfoRepository.existsById(tariffId)) { - return bagRepository.findAllActiveBagsByTariffsInfoId(tariffId) + return bagRepository.findBagsByTariffsInfoId(tariffId) .stream() .map(it -> modelMapper.map(it, GetTariffServiceDto.class)) .collect(Collectors.toList()); @@ -153,41 +142,13 @@ public List getTariffService(long tariffId) { } @Override - @Transactional public void deleteTariffService(Integer bagId) { Bag bag = tryToFindBagById(bagId); - if (CollectionUtils.isEmpty(orderBagRepository.findOrderBagsByBagId(bagId))) { - bagRepository.delete(bag); - return; - } - bag.setStatus(BagStatus.DELETED); - bagRepository.save(bag); - deleteTariffsInfo(bag); - orderRepository.findAllByBagId(bagId).forEach(order -> deleteBagFromOrder(order, bag)); - } - - private void deleteBagFromOrder(Order order, Bag bag) { - Integer bagId = bag.getId(); - Map amount = orderBagService.getActualBagsAmountForOrder(order.getOrderBags()); - Integer totalBagsAmount = amount.values().stream().reduce(0, Integer::sum); - if (amount.get(bagId).equals(0) || order.getOrderPaymentStatus().equals(OrderPaymentStatus.UNPAID)) { - if (totalBagsAmount.equals(amount.get(bagId))) { - order.setOrderBags(new ArrayList<>()); - orderRepository.delete(order); - return; - } - order.getOrderBags().stream().filter(orderBag -> orderBag.getBag().getId().equals(bagId)) - .findFirst() - .ifPresent(orderBag -> orderBagRepository.deleteOrderBagByBagIdAndOrderId(bagId, order.getId())); - orderRepository.save(order); - } - } - - private void deleteTariffsInfo(Bag bag) { TariffsInfo tariffsInfo = bag.getTariffsInfo(); - List bags = bagRepository.findAllActiveBagsByTariffsInfoId(tariffsInfo.getId()); + bagRepository.delete(bag); + List bags = bagRepository.findBagsByTariffsInfoId(tariffsInfo.getId()); if (bags.isEmpty() || bags.stream().noneMatch(Bag::getLimitIncluded)) { - tariffsInfo.setTariffStatus(TariffStatus.DEACTIVATED); + tariffsInfo.setTariffStatus(TariffStatus.NEW); tariffsInfo.setBags(bags); tariffsInfo.setMax(null); tariffsInfo.setMin(null); @@ -198,39 +159,9 @@ private void deleteTariffsInfo(Bag bag) { } @Override - @Transactional - public GetTariffServiceDto editTariffService(TariffServiceDto dto, Integer bagId, String employeeUuid) { - Bag bag = tryToFindBagById(bagId); + public GetTariffServiceDto editTariffService(TariffServiceDto dto, Integer id, String employeeUuid) { + Bag bag = tryToFindBagById(id); Employee employee = tryToFindEmployeeByUuid(employeeUuid); - updateTariffService(dto, bag); - bag.setEditedBy(employee); - - orderBagRepository.updateAllByBagIdForUnpaidOrders( - bagId, bag.getCapacity(), bag.getFullPrice(), bag.getName(), bag.getNameEng()); - - List orders = orderRepository.findAllUnpaidOrdersByBagId(bagId); - if (CollectionUtils.isNotEmpty(orders)) { - orders.forEach(it -> updateOrderSumToPay(it, bag)); - orderRepository.saveAll(orders); - } - return modelMapper.map(bagRepository.save(bag), GetTariffServiceDto.class); - } - - private void updateOrderSumToPay(Order order, Bag bag) { - Map amount = orderBagService.getActualBagsAmountForOrder(order.getOrderBags()); - Long sumToPayInCoins = order.getOrderBags().stream() - .map(orderBag -> amount.get(orderBag.getBag().getId()) * getBagPrice(orderBag, bag)) - .reduce(0L, Long::sum); - order.setSumTotalAmountWithoutDiscounts(sumToPayInCoins); - } - - private Long getBagPrice(OrderBag orderBag, Bag bag) { - return bag.getId().equals(orderBag.getBag().getId()) - ? bag.getFullPrice() - : orderBag.getPrice(); - } - - private void updateTariffService(TariffServiceDto dto, Bag bag) { bag.setCapacity(dto.getCapacity()); bag.setPrice(convertBillsIntoCoins(dto.getPrice())); bag.setCommission(convertBillsIntoCoins(dto.getCommission())); @@ -240,6 +171,8 @@ private void updateTariffService(TariffServiceDto dto, Bag bag) { bag.setDescription(dto.getDescription()); bag.setDescriptionEng(dto.getDescriptionEng()); bag.setEditedAt(LocalDate.now()); + bag.setEditedBy(employee); + return modelMapper.map(bagRepository.save(bag), GetTariffServiceDto.class); } private Long convertBillsIntoCoins(Double bills) { @@ -252,8 +185,8 @@ private Long convertBillsIntoCoins(Double bills) { } private Bag tryToFindBagById(Integer id) { - return bagRepository.findActiveBagById(id).orElseThrow( - () -> new NotFoundException(ErrorMessage.BAG_NOT_FOUND + id)); + return bagRepository.findById(id) + .orElseThrow(() -> new NotFoundException(ErrorMessage.BAG_NOT_FOUND + id)); } private Long getFullPrice(Double price, Double commission) { @@ -267,9 +200,9 @@ public GetServiceDto addService(Long tariffId, ServiceDto dto, String employeeUu } private Service createService(Long tariffId, ServiceDto dto, String employeeUuid) { - TariffsInfo tariffsInfo = tryToFindTariffById(tariffId); - if (serviceRepository.findServiceByTariffsInfoId(tariffId).isEmpty()) { + if (tryToFindServiceByTariffsInfoId(tariffId).isEmpty()) { Employee employee = tryToFindEmployeeByUuid(employeeUuid); + TariffsInfo tariffsInfo = tryToFindTariffById(tariffId); Service service = modelMapper.map(dto, Service.class); service.setCreatedBy(employee); service.setCreatedAt(LocalDate.now()); @@ -282,16 +215,14 @@ private Service createService(Long tariffId, ServiceDto dto, String employeeUuid @Override public GetServiceDto getService(long tariffId) { - tryToFindTariffById(tariffId); - return serviceRepository.findServiceByTariffsInfoId(tariffId) + return tryToFindServiceByTariffsInfoId(tariffId) .map(it -> modelMapper.map(it, GetServiceDto.class)) .orElse(null); } @Override public void deleteService(long id) { - Service service = tryToFindServiceById(id); - serviceRepository.delete(service); + serviceRepository.delete(tryToFindServiceById(id)); } @Override @@ -313,6 +244,14 @@ private Employee tryToFindEmployeeByUuid(String employeeUuid) { .orElseThrow(() -> new NotFoundException(ErrorMessage.EMPLOYEE_WITH_UUID_NOT_FOUND + employeeUuid)); } + private Optional tryToFindServiceByTariffsInfoId(long tariffId) { + if (tariffsInfoRepository.existsById(tariffId)) { + return serviceRepository.findServiceByTariffsInfoId(tariffId); + } else { + throw new NotFoundException(ErrorMessage.TARIFF_NOT_FOUND + tariffId); + } + } + private Service tryToFindServiceById(long id) { return serviceRepository.findById(id) .orElseThrow(() -> new NotFoundException(ErrorMessage.SERVICE_IS_NOT_FOUND_BY_ID + id)); diff --git a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java index a5adf0f1d..a879098f5 100644 --- a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java @@ -59,7 +59,6 @@ import greencity.entity.order.ChangeOfPoints; import greencity.entity.order.Event; import greencity.entity.order.Order; -import greencity.entity.order.OrderBag; import greencity.entity.order.OrderPaymentStatusTranslation; import greencity.entity.order.OrderStatusTranslation; import greencity.entity.order.Payment; @@ -73,7 +72,6 @@ import greencity.entity.user.ubs.UBSuser; import greencity.entity.viber.ViberBot; import greencity.enums.AddressStatus; -import greencity.enums.BagStatus; import greencity.enums.BotType; import greencity.enums.CertificateStatus; import greencity.enums.CourierLimit; @@ -96,7 +94,6 @@ import greencity.repository.EventRepository; import greencity.repository.LocationRepository; import greencity.repository.OrderAddressRepository; -import greencity.repository.OrderBagRepository; import greencity.repository.OrderPaymentStatusTranslationRepository; import greencity.repository.OrderRepository; import greencity.repository.OrderStatusTranslationRepository; @@ -117,6 +114,7 @@ import greencity.util.OrderUtils; import lombok.Data; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; import org.json.JSONObject; import org.modelmapper.ModelMapper; import org.springframework.beans.factory.annotation.Autowired; @@ -125,6 +123,7 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; + import javax.persistence.EntityNotFoundException; import javax.transaction.Transactional; import java.math.BigDecimal; @@ -137,6 +136,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.EnumSet; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Locale; @@ -148,6 +148,7 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.LongStream; + import static greencity.constant.ErrorMessage.ACTUAL_ADDRESS_NOT_FOUND; import static greencity.constant.ErrorMessage.ADDRESS_ALREADY_EXISTS; import static greencity.constant.ErrorMessage.BAD_ORDER_STATUS_REQUEST; @@ -191,6 +192,7 @@ import static greencity.constant.ErrorMessage.USER_DONT_HAVE_ENOUGH_POINTS; import static greencity.constant.ErrorMessage.USER_WITH_CURRENT_ID_DOES_NOT_EXIST; import static greencity.constant.ErrorMessage.USER_WITH_CURRENT_UUID_DOES_NOT_EXIST; + import static java.util.Objects.nonNull; import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toList; @@ -229,9 +231,6 @@ public class UBSClientServiceImpl implements UBSClientService { private final TelegramBotRepository telegramBotRepository; private final ViberBotRepository viberBotRepository; private final LocationApiService locationApiService; - private final OrderBagRepository orderBagRepository; - private final OrderBagService orderBagService; - @Lazy @Autowired private UBSManagementService ubsManagementService; @@ -359,7 +358,7 @@ private boolean isTariffAvailableForCurrentLocation(TariffsInfo tariffsInfo, Loc private UserPointsAndAllBagsDto getUserPointsAndAllBagsDtoByTariffIdAndUserPoints(Long tariffId, Integer userPoints) { - var bagTranslationDtoList = bagRepository.findAllActiveBagsByTariffsInfoId(tariffId).stream() + var bagTranslationDtoList = bagRepository.findBagsByTariffsInfoId(tariffId).stream() .map(bag -> modelMapper.map(bag, BagTranslationDto.class)) .collect(toList()); return new UserPointsAndAllBagsDto(bagTranslationDtoList, userPoints); @@ -380,9 +379,8 @@ private Location getLocationByOrderIdThroughLazyInitialization(Order order) { public PersonalDataDto getSecondPageData(String uuid) { User currentUser = userRepository.findByUuid(uuid); List ubsUser = ubsUserRepository.findUBSuserByUser(currentUser); - if (ubsUser.isEmpty()) { - ubsUser = Collections.singletonList(UBSuser.builder().id(null).build()); + ubsUser.add(UBSuser.builder().id(null).build()); } PersonalDataDto dto = modelMapper.map(currentUser, PersonalDataDto.class); dto.setUbsUserId(ubsUser.get(0).getId()); @@ -425,14 +423,14 @@ private void checkSumIfCourierLimitBySumOfOrder(TariffsInfo tariffsInfo, Long su public FondyOrderResponse saveFullOrderToDB(OrderResponseDto dto, String uuid, Long orderId) { final User currentUser = userRepository.findByUuid(uuid); TariffsInfo tariffsInfo = tryToFindTariffsInfoByBagIds(getBagIds(dto.getBags()), dto.getLocationId()); - List bagsOrdered = new ArrayList<>(); + Map amountOfBagsOrderedMap = new HashMap<>(); if (!dto.isShouldBePaid()) { dto.setCertificates(Collections.emptySet()); dto.setPointsToUse(0); } - long sumToPayWithoutDiscountInCoins = formBagsToBeSavedAndCalculateOrderSum(bagsOrdered, + long sumToPayWithoutDiscountInCoins = formBagsToBeSavedAndCalculateOrderSum(amountOfBagsOrderedMap, dto.getBags(), tariffsInfo); checkIfUserHaveEnoughPoints(currentUser.getCurrentPoints(), dto.getPointsToUse()); long sumToPayInCoins = reduceOrderSumDueToUsedPoints(sumToPayWithoutDiscountInCoins, dto.getPointsToUse()); @@ -445,7 +443,7 @@ public FondyOrderResponse saveFullOrderToDB(OrderResponseDto dto, String uuid, L UBSuser userData = formUserDataToBeSaved(dto.getPersonalData(), dto.getAddressId(), dto.getLocationId(), currentUser); - getOrder(dto, currentUser, bagsOrdered, sumToPayInCoins, order, orderCertificates, userData); + getOrder(dto, currentUser, amountOfBagsOrderedMap, sumToPayInCoins, order, orderCertificates, userData); eventService.save(OrderHistory.ORDER_FORMED, OrderHistory.CLIENT, order); if (sumToPayInCoins <= 0 || !dto.isShouldBePaid()) { @@ -463,8 +461,8 @@ private List getBagIds(List dto) { .collect(Collectors.toList()); } - private Bag findActiveBagById(Integer id) { - return bagRepository.findActiveBagById(id) + private Bag tryToGetBagById(Integer id) { + return bagRepository.findById(id) .orElseThrow(() -> new NotFoundException(BAG_NOT_FOUND + id)); } @@ -911,17 +909,31 @@ private AddressInfoDto addressInfoDtoBuilder(Order order) { } private List bagForUserDtosBuilder(Order order) { - List bagsAmountInOrder = order.getOrderBags(); - Map actualBagsAmount = orderBagService.getActualBagsAmountForOrder(bagsAmountInOrder); - return bagsAmountInOrder.stream() - .map(orderBag -> buildBagForUserDto(orderBag, actualBagsAmount.get(orderBag.getBag().getId()))) + Map actualBagAmounts = getActualBagAmountsForOrder(order); + List bagsForOrder = bagRepository.findBagsByOrderId(order.getId()); + return bagsForOrder.stream() + .filter(bag -> actualBagAmounts.containsKey(bag.getId())) + .map(bag -> buildBagForUserDto(bag, actualBagAmounts.get(bag.getId()))) .collect(toList()); } - private BagForUserDto buildBagForUserDto(OrderBag orderBag, int count) { - BagForUserDto bagDto = modelMapper.map(orderBag, BagForUserDto.class); + private Map getActualBagAmountsForOrder(Order order) { + if (MapUtils.isNotEmpty(order.getExportedQuantity())) { + return order.getExportedQuantity(); + } + if (MapUtils.isNotEmpty(order.getConfirmedQuantity())) { + return order.getConfirmedQuantity(); + } + if (MapUtils.isNotEmpty(order.getAmountOfBagsOrdered())) { + return order.getAmountOfBagsOrdered(); + } + return new HashMap<>(); + } + + private BagForUserDto buildBagForUserDto(Bag bag, int count) { + BagForUserDto bagDto = modelMapper.map(bag, BagForUserDto.class); bagDto.setCount(count); - bagDto.setTotalPrice(convertCoinsIntoBills(count * orderBag.getPrice())); + bagDto.setTotalPrice(convertCoinsIntoBills(count * bag.getFullPrice())); return bagDto; } @@ -1050,15 +1062,15 @@ private UBSuser updateRecipientDataInOrder(UBSuser ubsUser, UbsCustomersDtoUpdat } private Order formAndSaveOrder(Order order, Set orderCertificates, - List bagsOrdered, UBSuser userData, + Map amountOfBagsOrderedMap, UBSuser userData, User currentUser, long sumToPayInCoins) { order.setOrderStatus(OrderStatus.FORMED); order.setCertificates(orderCertificates); - order.setOrderBags(bagsOrdered); + order.setAmountOfBagsOrdered(amountOfBagsOrderedMap); order.setUbsUser(userData); order.setUser(currentUser); order.setSumTotalAmountWithoutDiscounts( - calculateOrderSumWithoutDiscounts(bagsOrdered)); + formBagsToBeSavedAndCalculateOrderSumClient(amountOfBagsOrderedMap)); setOrderPaymentStatus(order, sumToPayInCoins); Payment payment = Payment.builder() @@ -1073,7 +1085,7 @@ private Order formAndSaveOrder(Order order, Set orderCertificates, order.setPayment(new ArrayList<>()); } order.getPayment().add(payment); - bagsOrdered.forEach(orderBag -> orderBag.setOrder(order)); + orderRepository.save(order); return order; } @@ -1214,44 +1226,35 @@ private void checkAmountOfBagsIfCourierLimitByAmountOfBag(TariffsInfo courierLoc } } - private long calculateOrderSumWithoutDiscounts(List getOrderBagsAndQuantity) { - return getOrderBagsAndQuantity.stream() - .map(orderBag -> orderBag.getPrice() * orderBag.getAmount()) - .reduce(0L, Long::sum); + private long formBagsToBeSavedAndCalculateOrderSumClient( + Map getOrderBagsAndQuantity) { + long sumToPayInCoins = 0L; + + for (Map.Entry temp : getOrderBagsAndQuantity.entrySet()) { + Integer amount = getOrderBagsAndQuantity.get(temp.getKey()); + Bag bag = bagRepository.findById(temp.getKey()) + .orElseThrow(() -> new NotFoundException(BAG_NOT_FOUND + temp.getKey())); + sumToPayInCoins += bag.getFullPrice() * amount; + } + return sumToPayInCoins; } - private long formBagsToBeSavedAndCalculateOrderSum(List orderBagList, List bags, - TariffsInfo tariffsInfo) { + private long formBagsToBeSavedAndCalculateOrderSum( + Map map, List bags, TariffsInfo tariffsInfo) { long sumToPayInCoins = 0L; - List bagIds = bags.stream().map(BagDto::getId).collect(toList()); + for (BagDto temp : bags) { - Bag bag = findActiveBagById(temp.getId()); + Bag bag = tryToGetBagById(temp.getId()); if (bag.getLimitIncluded().booleanValue()) { checkAmountOfBagsIfCourierLimitByAmountOfBag(tariffsInfo, temp.getAmount()); checkSumIfCourierLimitBySumOfOrder(tariffsInfo, bag.getFullPrice() * temp.getAmount()); } sumToPayInCoins += bag.getFullPrice() * temp.getAmount(); - OrderBag orderBag = createOrderBag(bag); - orderBag.setAmount(temp.getAmount()); - orderBagList.add(orderBag); - } - List notOrderedBags = tariffsInfo.getBags().stream() - .filter(orderBag -> orderBag.getStatus() == BagStatus.ACTIVE && !bagIds.contains(orderBag.getId())) - .map(this::createOrderBag).collect(toList()); - orderBagList.addAll(notOrderedBags.stream().peek(orderBag -> orderBag.setAmount(0)).collect(toList())); + map.put(temp.getId(), temp.getAmount()); + } return sumToPayInCoins; } - private OrderBag createOrderBag(Bag bag) { - return OrderBag.builder() - .bag(bag) - .capacity(bag.getCapacity()) - .price(bag.getFullPrice()) - .name(bag.getName()) - .nameEng(bag.getNameEng()) - .build(); - } - private void validateCertificate(Certificate certificate) { if (certificate.getCertificateStatus() == CertificateStatus.NEW) { throw new CertificateIsNotActivated(CERTIFICATE_IS_NOT_ACTIVATED + certificate.getCode()); @@ -1405,9 +1408,9 @@ private long reduceOrderSumDueToUsedPoints(long sumToPayInCoins, int pointsToUse return sumToPayInCoins; } - private void getOrder(OrderResponseDto dto, User currentUser, List amountOfBagsOrdered, + private void getOrder(OrderResponseDto dto, User currentUser, Map amountOfBagsOrderedMap, long sumToPayInCoins, Order order, Set orderCertificates, UBSuser userData) { - formAndSaveOrder(order, orderCertificates, amountOfBagsOrdered, userData, currentUser, sumToPayInCoins); + formAndSaveOrder(order, orderCertificates, amountOfBagsOrderedMap, userData, currentUser, sumToPayInCoins); formAndSaveUser(currentUser, dto.getPointsToUse(), order); } @@ -1452,7 +1455,6 @@ public void deleteOrder(String uuid, Long id) { if (order == null) { throw new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST); } - order.setOrderBags(Collections.emptyList()); orderRepository.delete(order); } diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java index ee5e82cb5..5864a7320 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java @@ -73,7 +73,6 @@ import greencity.enums.SortingOrder; import greencity.exceptions.BadRequestException; import greencity.exceptions.NotFoundException; -import greencity.repository.OrderBagRepository; import greencity.repository.BagRepository; import greencity.repository.CertificateRepository; import greencity.repository.EmployeeOrderPositionRepository; @@ -110,6 +109,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.server.ResponseStatusException; + import javax.persistence.EntityNotFoundException; import java.math.BigDecimal; import java.math.RoundingMode; @@ -179,10 +179,6 @@ public class UBSManagementServiceImpl implements UBSManagementService { @Lazy @Autowired private UBSClientService ubsClientService; - @Autowired - private final OrderBagService orderBagService; - @Autowired - private final OrderBagRepository orderBagRepository; /** * Method gets all order payments, count paid amount, amount which user should @@ -370,7 +366,7 @@ public OrderStatusPageDto getOrderStatusData(Long orderId, String email) { checkAvailableOrderForEmployee(order, email); CounterOrderDetailsDto prices = getPriceDetails(orderId); - var bagInfoDtoList = bagRepository.findAllActiveBagsByTariffsInfoId(order.getTariffsInfo().getId()).stream() + var bagInfoDtoList = bagRepository.findBagsByTariffsInfoId(order.getTariffsInfo().getId()).stream() .map(bag -> modelMapper.map(bag, BagInfoDto.class)) .collect(Collectors.toList()); @@ -713,7 +709,7 @@ private void collectEventAboutConfirmWaste(Map confirmed, Orde Long orderId, int countOfChanges, StringBuilder values) { for (Map.Entry entry : confirmed.entrySet()) { Integer capacity = bagRepository.findCapacityById(entry.getKey()); - Optional bagOptional = bagRepository.findActiveBagById(entry.getKey()); + Optional bagOptional = bagRepository.findById(entry.getKey()); if (bagOptional.isPresent() && checkOrderStatusAboutConfirmWaste(order)) { Optional confirmWasteWas = Optional.empty(); Optional initialAmount = Optional.empty(); @@ -740,7 +736,7 @@ private void collectEventAboutExportedWaste(Map exported, Orde Long orderId, int countOfChanges, StringBuilder values) { for (Map.Entry entry : exported.entrySet()) { Integer capacity = bagRepository.findCapacityById(entry.getKey()); - Optional bagOptional = bagRepository.findActiveBagById(entry.getKey()); + Optional bagOptional = bagRepository.findById(entry.getKey()); if (bagOptional.isPresent() && checkOrderStatusAboutExportedWaste(order)) { Optional exporterWasteWas = Optional.empty(); Optional confirmWasteWas = Optional.empty(); @@ -825,7 +821,7 @@ private CounterOrderDetailsDto getPriceDetails(Long id) { CounterOrderDetailsDto dto = new CounterOrderDetailsDto(); Order order = orderRepository.getOrderDetails(id) .orElseThrow(() -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST + id)); - List bag = orderBagService.findAllBagsInOrderBagsList(orderBagRepository.findOrderBagsByOrderId(id)); + List bag = bagRepository.findBagsByOrderId(id); final List currentCertificate = certificateRepository.findCertificate(id); long sumAmountInCoins = 0; @@ -1064,7 +1060,7 @@ private void setOrderDetailDto(OrderDetailDto dto, Order order) { dto.setAmount(modelMapper.map(order, new TypeToken>() { }.getType())); - dto.setCapacityAndPrice(orderBagService.findAllBagsByOrderId(order.getId()) + dto.setCapacityAndPrice(bagRepository.findBagsByOrderId(order.getId()) .stream() .map(b -> modelMapper.map(b, BagInfoDto.class)) .collect(Collectors.toList())); diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index 7a4b20c19..8af4d2756 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -129,7 +129,6 @@ import greencity.entity.order.Courier; import greencity.entity.order.Event; import greencity.entity.order.Order; -import greencity.entity.order.OrderBag; import greencity.entity.order.OrderPaymentStatusTranslation; import greencity.entity.order.OrderStatusTranslation; import greencity.entity.order.Payment; @@ -154,7 +153,6 @@ import greencity.entity.user.ubs.UBSuser; import greencity.entity.viber.ViberBot; import greencity.enums.AddressStatus; -import greencity.enums.BagStatus; import greencity.enums.CancellationReason; import greencity.enums.CertificateStatus; import greencity.enums.CourierLimit; @@ -173,6 +171,7 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; + import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; @@ -188,6 +187,7 @@ import java.util.Map; import java.util.Optional; import java.util.Set; + import static greencity.enums.NotificationReceiverType.EMAIL; import static greencity.enums.NotificationReceiverType.MOBILE; import static greencity.enums.NotificationReceiverType.SITE; @@ -209,8 +209,7 @@ public class ModelUtils { public static final List TEST_PAYMENT_LIST = createPaymentList(); public static final OrderDetailStatusDto ORDER_DETAIL_STATUS_DTO = createOrderDetailStatusDto(); public static final List TEST_BAG_MAPPING_DTO_LIST = createBagMappingDtoList(); - public static final Bag TEST_BAG = createBag(1); - public static final OrderBag TEST_ORDER_BAG = createOrderBag(); + public static final Bag TEST_BAG = createBag(); public static final BagForUserDto TEST_BAG_FOR_USER_DTO = createBagForUserDto(); public static final BagInfoDto TEST_BAG_INFO_DTO = createBagInfoDto(); public static final List TEST_BAG_LIST = singletonList(TEST_BAG); @@ -260,7 +259,6 @@ public class ModelUtils { public static final NotificationDto TEST_NOTIFICATION_DTO = createNotificationDto(); public static final UpdateOrderPageAdminDto UPDATE_ORDER_PAGE_ADMIN_DTO = updateOrderPageAdminDto(); public static final CourierUpdateDto UPDATE_COURIER_DTO = getUpdateCourierDto(); - public static final List TEST_BAG_LIST2 = Arrays.asList(createBag(1), createBag(2), createBag(3)); public static final String KYIV_REGION_EN = "Kyiv Oblast"; public static final String KYIV_REGION_UA = "Київська область"; @@ -2302,7 +2300,7 @@ private static BagInfoDto createBagInfoDto() { .capacity(20) .name("Name") .nameEng("NameEng") - .price(1000.00) + .price(100.00) .build(); } @@ -2313,10 +2311,9 @@ private static List createBagMappingDtoList() { .build()); } - private static Bag createBag(int id) { - Bag bag = Bag.builder() - .status(BagStatus.ACTIVE) - .id(id) + private static Bag createBag() { + return Bag.builder() + .id(1) .name("Name") .nameEng("NameEng") .capacity(20) @@ -2331,19 +2328,6 @@ private static Bag createBag(int id) { .id(1L) .build()) .build(); - return bag.setFullPrice(100000L); - } - - private static OrderBag createOrderBag() { - return OrderBag.builder() - .id(1L) - .name("Name") - .nameEng("NameEng") - .capacity(20) - .price(100_00L) - .order(createOrder()) - .bag(createBag(1)) - .build(); } private static BagForUserDto createBagForUserDto() { @@ -2724,7 +2708,6 @@ public static GetTariffServiceDto getGetTariffServiceDto() { public static Optional getOptionalBag() { return Optional.of(Bag.builder() - .status(BagStatus.ACTIVE) .id(1) .capacity(120) .commission(50_00L) @@ -2739,94 +2722,7 @@ public static Optional getOptionalBag() { .build()); } - public static OrderBag getOrderBag2() { - return OrderBag.builder() - .id(2L) - .capacity(2200) - .price(22000_00L) - .name("name") - .nameEng("name eng") - .amount(20) - .bag(getBag2()) - .order(getOrder()) - .build(); - } - public static Bag getBag() { - return Bag.builder() - .status(BagStatus.ACTIVE) - .id(1) - .capacity(120) - .commission(50_00L) - .price(120_00L) - .fullPrice(120_00L) - .createdAt(LocalDate.now()) - .createdBy(getEmployee()) - .editedBy(getEmployee()) - .limitIncluded(true) - .tariffsInfo(getTariffInfo()) - .build(); - } - - public static Bag getBag2() { - return Bag.builder() - .status(BagStatus.ACTIVE) - .id(2) - .capacity(120) - .commission(50_00L) - .price(120_00L) - .fullPrice(2200000L) - .createdAt(LocalDate.now()) - .createdBy(getEmployee()) - .editedBy(getEmployee()) - .limitIncluded(true) - .tariffsInfo(getTariffInfo()) - .build(); - } - - public static OrderBag getOrderBag() { - return OrderBag.builder() - .id(1L) - .capacity(120) - .price(120_00L) - .name("name") - .nameEng("name eng") - .amount(1) - .bag(getBag()) - .order(getOrder()) - .build(); - } - - public static OrderBag getOrderBagWithConfirmedAmount() { - return OrderBag.builder() - .id(1L) - .capacity(120) - .price(120_00L) - .name("name") - .nameEng("name eng") - .amount(1) - .confirmedQuantity(2) - .bag(getBag()) - .order(getOrder()) - .build(); - } - - public static OrderBag getOrderBagWithExportedAmount() { - return OrderBag.builder() - .id(1L) - .capacity(120) - .price(120_00L) - .name("name") - .nameEng("name eng") - .amount(1) - .confirmedQuantity(2) - .exportedQuantity(2) - .bag(getBag()) - .order(getOrder()) - .build(); - } - - public static Bag getBagDeleted() { return Bag.builder() .id(1) .capacity(120) @@ -2839,14 +2735,11 @@ public static Bag getBagDeleted() { .description("Description") .descriptionEng("DescriptionEng") .limitIncluded(true) - .status(BagStatus.DELETED) - .tariffsInfo(getTariffInfo()) .build(); } public static Bag getBagForOrder() { return Bag.builder() - .status(BagStatus.ACTIVE) .id(3) .capacity(120) .commission(50_00L) @@ -2865,47 +2758,14 @@ public static Bag getBagForOrder() { public static TariffServiceDto getTariffServiceDto() { return TariffServiceDto.builder() .name("Бавовняна сумка") - .capacity(20) - .price(100.0) + .capacity(120) + .price(120.0) .commission(50.0) .description("Description") .build(); } - public static Bag getEditedBag() { - return Bag.builder() - .status(BagStatus.ACTIVE) - .id(1) - .capacity(20) - .price(100_00L) - .fullPrice(150_00L) - .commission(50_00L) - .name("Бавовняна сумка") - .description("Description") - .createdAt(LocalDate.now()) - .createdBy(getEmployee()) - .editedBy(getEmployee()) - .editedAt(LocalDate.now()) - .limitIncluded(true) - .status(BagStatus.ACTIVE) - .tariffsInfo(getTariffInfo()) - .build(); - - } - - public static OrderBag getEditedOrderBag() { - return OrderBag.builder() - .id(1L) - .amount(1) - .price(150_00L) - .capacity(20) - .name("Бавовняна сумка") - .bag(getBag()) - .order(getOrder()) - .build(); - } - public static Location getLocation() { return Location.builder() .id(1L) @@ -2963,7 +2823,6 @@ public static CourierDto getCourierDto() { public static Bag getTariffBag() { return Bag.builder() - .status(BagStatus.ACTIVE) .id(1) .capacity(20) .price(100_00L) @@ -2993,7 +2852,6 @@ public static BagTranslationDto getBagTranslationDto() { public static Bag getNewBag() { return Bag.builder() - .status(BagStatus.ACTIVE) .capacity(20) .price(100_00L) .commission(50_00L) @@ -3135,7 +2993,6 @@ public static Order getOrderUserSecond() { public static List getBag1list() { return List.of(Bag.builder() - .status(BagStatus.ACTIVE) .id(1) .price(100_00L) .capacity(20) @@ -3149,7 +3006,6 @@ public static List getBag1list() { public static List getBaglist() { return List.of(Bag.builder() - .status(BagStatus.ACTIVE) .id(1) .price(100_00L) .capacity(10) @@ -3157,7 +3013,6 @@ public static List getBaglist() { .fullPrice(20_00L) .build(), Bag.builder() - .status(BagStatus.ACTIVE) .id(2) .price(100_00L) .capacity(10) @@ -3168,7 +3023,6 @@ public static List getBaglist() { public static List getBag2list() { return List.of(Bag.builder() - .status(BagStatus.ACTIVE) .id(1) .price(100_00L) .capacity(10) @@ -3179,7 +3033,6 @@ public static List getBag2list() { public static List getBag3list() { return List.of(Bag.builder() - .status(BagStatus.ACTIVE) .id(1) .price(100_00L) .capacity(10) @@ -3187,7 +3040,6 @@ public static List getBag3list() { .fullPrice(2000_00L) .build(), Bag.builder() - .status(BagStatus.ACTIVE) .id(2) .price(100_00L) .capacity(10) @@ -3198,7 +3050,6 @@ public static List getBag3list() { public static List getBag4list() { return List.of(Bag.builder() - .status(BagStatus.ACTIVE) .id(1) .price(100_00L) .capacity(10) @@ -3209,7 +3060,6 @@ public static List getBag4list() { .limitIncluded(false) .build(), Bag.builder() - .status(BagStatus.ACTIVE) .id(2) .price(100_00L) .capacity(10) @@ -3483,7 +3333,6 @@ public static Location getLocationDto() { public static Bag bagDto() { return Bag.builder() - .status(BagStatus.ACTIVE) .id(1) .limitIncluded(false) .description("Description") @@ -3754,20 +3603,12 @@ public static BigOrderTableViews getBigOrderTableViewsByDateNullTest() { .setResponsibleNavigator(null); } - public static Map getAmount() { - Map hashMap = new HashMap<>(); - hashMap.put(1, 1); - hashMap.put(2, 1); - return hashMap; - } - public static Order getOrderForGetOrderStatusData2Test() { Map hashMap = new HashMap<>(); hashMap.put(1, 1); hashMap.put(2, 1); return Order.builder() - .orderBags(Arrays.asList(getOrderBag(), getOrderBag2())) .id(1L) .amountOfBagsOrdered(hashMap) .confirmedQuantity(hashMap) @@ -5066,4 +4907,4 @@ public static PositionWithTranslateDto getPositionWithTranslateDto(Long id) { public static Refund getRefund(Long id) { return Refund.builder().orderId(id).build(); } -} \ No newline at end of file +} diff --git a/service/src/test/java/greencity/mapping/bag/BagForUserDtoMapperTest.java b/service/src/test/java/greencity/mapping/bag/BagForUserDtoMapperTest.java index 033425d77..1f9fcbcdd 100644 --- a/service/src/test/java/greencity/mapping/bag/BagForUserDtoMapperTest.java +++ b/service/src/test/java/greencity/mapping/bag/BagForUserDtoMapperTest.java @@ -2,7 +2,7 @@ import greencity.ModelUtils; import greencity.dto.bag.BagForUserDto; -import greencity.entity.order.OrderBag; +import greencity.entity.order.Bag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -18,8 +18,8 @@ class BagForUserDtoMapperTest { @Test void convert() { BagForUserDto expected = ModelUtils.TEST_BAG_FOR_USER_DTO; - OrderBag orderBag = ModelUtils.TEST_ORDER_BAG; - BagForUserDto actual = bagForUserDtoMapper.convert(orderBag); + Bag bag = ModelUtils.TEST_BAG; + BagForUserDto actual = bagForUserDtoMapper.convert(bag); assertEquals(expected.getService(), actual.getService()); assertEquals(expected.getServiceEng(), actual.getServiceEng()); diff --git a/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java b/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java index 83f4ab80b..bebf741f7 100644 --- a/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java +++ b/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java @@ -23,7 +23,6 @@ import greencity.exceptions.NotFoundException; import greencity.exceptions.http.AccessDeniedException; import greencity.repository.*; -import greencity.service.ubs.OrderBagService; import lombok.SneakyThrows; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; @@ -85,8 +84,6 @@ class NotificationServiceImplTest { private Clock fixedClock; ExecutorService mockExecutor = MoreExecutors.newDirectExecutorService(); - @Mock - private OrderBagService orderBagService; @Nested class ClockNotification { @@ -304,7 +301,7 @@ void testNotifyInactiveAccounts() { List.of(abstractNotificationProvider), templateRepository, mockExecutor, - internalUrlConfigProp, orderBagService); + internalUrlConfigProp); User user = User.builder().id(42L).build(); User user1 = User.builder().id(43L).build(); UserNotification notification = new UserNotification(); @@ -412,7 +409,7 @@ void testNotifyAllHalfPaidPackages() { parameters.add(NotificationParameter.builder().key("orderNumber") .value(orders.get(0).getId().toString()).build()); - when(orderBagService.findAllBagsByOrderId(any())).thenReturn(getBag1list()); + when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag1list()); when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); @@ -513,7 +510,7 @@ void testNotifyUnpaidOrderForBroughtByHimself() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(orderBagService.findAllBagsByOrderId(any())).thenReturn(getBag4list()); + when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyUnpaidOrder(order); @@ -544,7 +541,7 @@ void testNotifyUnpaidOrderForDone() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(orderBagService.findAllBagsByOrderId(any())).thenReturn(getBag4list()); + when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyUnpaidOrder(order); verify(userNotificationRepository).save(any()); @@ -575,7 +572,7 @@ void testNotifyUnpaidOrderForCancel() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(orderBagService.findAllBagsByOrderId(any())).thenReturn(getBag4list()); + when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyUnpaidOrder(order); @@ -606,7 +603,7 @@ void testNotifyHalfPaidOrderForDone() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(orderBagService.findAllBagsByOrderId(any())).thenReturn(getBag4list()); + when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyHalfPaidPackage(order); @@ -633,7 +630,7 @@ void testNotifyHalfPaidOrderForBroughtByHimself() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(orderBagService.findAllBagsByOrderId(any())).thenReturn(getBag4list()); + when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyHalfPaidPackage(order); diff --git a/service/src/test/java/greencity/service/ubs/OrderBagServiceTest.java b/service/src/test/java/greencity/service/ubs/OrderBagServiceTest.java deleted file mode 100644 index 00d6a7daf..000000000 --- a/service/src/test/java/greencity/service/ubs/OrderBagServiceTest.java +++ /dev/null @@ -1,151 +0,0 @@ -package greencity.service.ubs; - -import greencity.entity.order.Bag; -import greencity.entity.order.OrderBag; -import greencity.repository.OrderBagRepository; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.HashMap; -import java.util.ArrayList; -import static greencity.ModelUtils.getOrderBag; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -import static greencity.ModelUtils.getBag; -import static greencity.ModelUtils.getBag2; -import static greencity.ModelUtils.getOrderBag2; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.when; - -@ExtendWith({MockitoExtension.class}) -class OrderBagServiceTest { - - @InjectMocks - private OrderBagService orderBagService; - @Mock - private OrderBagRepository orderBagRepository; - - @Test - void testfindAllBagsByOrderId() { - when(orderBagRepository.findOrderBagsByOrderId(any())).thenReturn(Arrays.asList(getOrderBag(), getOrderBag2())); - List bags = orderBagService.findAllBagsByOrderId(1L); - assertNotNull(bags); - Bag bag1 = getBag(); - Bag bag2 = getBag2(); - - assertEquals(bag1, bags.get(0)); - assertEquals(bag2, bags.get(1)); - } - - @Test - void testFindBagsByOrdersList() { - List bags = orderBagService.findAllBagsInOrderBagsList(Arrays.asList(getOrderBag(), getOrderBag2())); - Bag bag1 = getBag(); - Bag bag2 = getBag2(); - - assertNotNull(bags); - assertEquals(bag1, bags.get(0)); - assertEquals(bag2, bags.get(1)); - } - - @Test - void testGetActualBagsAmountForOrder_WithExportedQuantity() { - List bagsForOrder = new ArrayList<>(); - OrderBag bag1 = createOrderBagWithExportedQuantity(1, 10); - OrderBag bag2 = createOrderBagWithExportedQuantity(2, 20); - bagsForOrder.add(bag1); - bagsForOrder.add(bag2); - - Map result = orderBagService.getActualBagsAmountForOrder(bagsForOrder); - - Map expected = new HashMap<>(); - expected.put(1, 10); - expected.put(2, 20); - assertEquals(expected, result); - } - - @Test - void testGetActualBagsAmountForOrder_WithConfirmedQuantity() { - List bagsForOrder = new ArrayList<>(); - OrderBag bag1 = createOrderBagWithConfirmedQuantity(1, 5); - OrderBag bag2 = createOrderBagWithConfirmedQuantity(2, 15); - bagsForOrder.add(bag1); - bagsForOrder.add(bag2); - - Map result = orderBagService.getActualBagsAmountForOrder(bagsForOrder); - - Map expected = new HashMap<>(); - expected.put(1, 5); - expected.put(2, 15); - assertEquals(expected, result); - } - - @Test - void testGetActualBagsAmountForOrder_WithAmount() { - List bagsForOrder = new ArrayList<>(); - OrderBag bag1 = createOrderBagWithAmount(1, 3); - OrderBag bag2 = createOrderBagWithAmount(2, 7); - bagsForOrder.add(bag1); - bagsForOrder.add(bag2); - - Map result = orderBagService.getActualBagsAmountForOrder(bagsForOrder); - - Map expected = new HashMap<>(); - expected.put(1, 3); - expected.put(2, 7); - assertEquals(expected, result); - } - - @Test - void testGetActualBagsAmountForOrder_WithNoMatch() { - List bagsForOrder = new ArrayList<>(); - OrderBag bag1 = createOrderBagWithAmount(1, 3); - bag1.setExportedQuantity(null); - bag1.setConfirmedQuantity(null); - bag1.setAmount(null); - - OrderBag bag2 = createOrderBagWithAmount(2, 7); - bag2.setExportedQuantity(null); - bag2.setConfirmedQuantity(null); - bag2.setAmount(null); - bagsForOrder.add(bag1); - bagsForOrder.add(bag2); - - Map result = orderBagService.getActualBagsAmountForOrder(bagsForOrder); - - Map expected = new HashMap<>(); - assertEquals(expected, result); - } - - private OrderBag createOrderBagWithExportedQuantity(int bagId, int exportedQuantity) { - OrderBag orderBag = new OrderBag(); - Bag bag = new Bag(); - bag.setId(bagId); - orderBag.setBag(bag); - orderBag.setExportedQuantity(exportedQuantity); - return orderBag; - } - - private OrderBag createOrderBagWithConfirmedQuantity(int bagId, int confirmedQuantity) { - OrderBag orderBag = new OrderBag(); - Bag bag = new Bag(); - bag.setId(bagId); - orderBag.setBag(bag); - orderBag.setConfirmedQuantity(confirmedQuantity); - return orderBag; - } - - private OrderBag createOrderBagWithAmount(int bagId, int amount) { - OrderBag orderBag = new OrderBag(); - Bag bag = new Bag(); - bag.setId(bagId); - orderBag.setBag(bag); - orderBag.setAmount(amount); - return orderBag; - } -} \ No newline at end of file diff --git a/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java b/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java index 994107bba..49327a86e 100644 --- a/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java @@ -23,7 +23,6 @@ import greencity.dto.tariff.SetTariffLimitsDto; import greencity.entity.order.Bag; import greencity.entity.order.Courier; -import greencity.entity.order.Order; import greencity.entity.order.Service; import greencity.entity.order.TariffLocation; import greencity.entity.order.TariffsInfo; @@ -35,7 +34,6 @@ import greencity.enums.LocationStatus; import greencity.enums.StationStatus; import greencity.enums.TariffStatus; -import greencity.enums.BagStatus; import greencity.exceptions.BadRequestException; import greencity.exceptions.NotFoundException; import greencity.exceptions.UnprocessableEntityException; @@ -49,8 +47,6 @@ import greencity.repository.DeactivateChosenEntityRepository; import greencity.repository.EmployeeRepository; import greencity.repository.LocationRepository; -import greencity.repository.OrderBagRepository; -import greencity.repository.OrderRepository; import greencity.repository.ReceivingStationRepository; import greencity.repository.RegionRepository; import greencity.repository.ServiceRepository; @@ -67,18 +63,25 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.modelmapper.ModelMapper; + import java.time.LocalDate; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.Arrays; import java.util.Optional; -import java.util.Map; -import java.util.HashMap; import java.util.Set; import java.util.UUID; import java.util.stream.Stream; -import static greencity.ModelUtils.*; + +import static greencity.ModelUtils.TEST_USER; +import static greencity.ModelUtils.getAllTariffsInfoDto; +import static greencity.ModelUtils.getCourier; +import static greencity.ModelUtils.getCourierDto; +import static greencity.ModelUtils.getCourierDtoList; +import static greencity.ModelUtils.getDeactivatedCourier; +import static greencity.ModelUtils.getEmployee; +import static greencity.ModelUtils.getReceivingStation; +import static greencity.ModelUtils.getReceivingStationDto; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNull; @@ -128,12 +131,6 @@ class SuperAdminServiceImplTest { private TariffLocationRepository tariffsLocationRepository; @Mock private DeactivateChosenEntityRepository deactivateTariffsForChosenParamRepository; - @Mock - private OrderBagRepository orderBagRepository; - @Mock - private OrderRepository orderRepository; - @Mock - private OrderBagService orderBagService; @AfterEach void afterEach() { @@ -149,8 +146,7 @@ void afterEach() { receivingStationRepository, tariffsInfoRepository, tariffsLocationRepository, - deactivateTariffsForChosenParamRepository, - orderBagRepository); + deactivateTariffsForChosenParamRepository); } @Test @@ -209,34 +205,20 @@ void addTariffServiceIfTariffNotFoundExceptionTest() { @Test void getTariffServiceTest() { - List bags = List.of(ModelUtils.getNewBag()); + List bags = List.of(ModelUtils.getOptionalBag().get()); GetTariffServiceDto dto = ModelUtils.getGetTariffServiceDto(); when(tariffsInfoRepository.existsById(1L)).thenReturn(true); - when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(bags); + when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(bags); when(modelMapper.map(bags.get(0), GetTariffServiceDto.class)).thenReturn(dto); superAdminService.getTariffService(1); verify(tariffsInfoRepository).existsById(1L); - verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); + verify(bagRepository).findBagsByTariffsInfoId(1L); verify(modelMapper).map(bags.get(0), GetTariffServiceDto.class); } - @Test - void getTariffServiceIfThereAreNoBags() { - List bags = Collections.emptyList(); - - when(tariffsInfoRepository.existsById(1L)).thenReturn(true); - when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(bags); - - List dtos = superAdminService.getTariffService(1); - - assertEquals(Collections.emptyList(), dtos); - verify(tariffsInfoRepository).existsById(1L); - verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); - } - @Test void getTariffServiceIfTariffNotFoundException() { when(tariffsInfoRepository.existsById(1L)).thenReturn(false); @@ -245,251 +227,117 @@ void getTariffServiceIfTariffNotFoundException() { () -> superAdminService.getTariffService(1)); verify(tariffsInfoRepository).existsById(1L); - verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(1L); - } - - @Test - void deleteTariffServiceWhenThereAreMoreThan1TypeOfBag() { - Bag bag = ModelUtils.getBag(); - Bag bagDeleted = ModelUtils.getBagDeleted(); - TariffsInfo tariffsInfo = ModelUtils.getTariffInfo(); - Order order = ModelUtils.getOrder(); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag2())); - when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); - when(bagRepository.save(bag)).thenReturn(bagDeleted); - when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(List.of(bag, getBag2())); - when(orderRepository.findAllByBagId(bag.getId())).thenReturn(Arrays.asList(order)); - when(orderBagService - .getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag2()))) - .thenReturn(ModelUtils.getAmount()); - when(orderBagRepository.findOrderBagsByBagId(any())).thenReturn(Collections.singletonList(getOrderBag())); - - superAdminService.deleteTariffService(1); - - verify(orderBagRepository).deleteOrderBagByBagIdAndOrderId(any(), any()); - verify(bagRepository).findActiveBagById(1); - verify(bagRepository).save(bag); - verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); - verify(tariffsInfoRepository, never()).save(tariffsInfo); - } - - @Test - void testBagStatus() { - Bag bag = ModelUtils.getBag(); - bag.setStatus(BagStatus.ACTIVE); - assertEquals(BagStatus.ACTIVE, bag.getStatus()); - bag.setStatus(BagStatus.DELETED); - assertEquals(BagStatus.DELETED, bag.getStatus()); + verify(bagRepository, never()).findBagsByTariffsInfoId(1L); } @Test void deleteTariffServiceWhenTariffBagsWithLimits() { Bag bag = ModelUtils.getBag(); - Bag bagDeleted = ModelUtils.getBagDeleted(); TariffsInfo tariffsInfo = ModelUtils.getTariffInfo(); - Order order = ModelUtils.getOrder(); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); - Map hashMap = new HashMap<>(); - hashMap.put(1, 1); - when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); - when(bagRepository.save(bag)).thenReturn(bagDeleted); - when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(List.of(bag)); - when(orderRepository.findAllByBagId(bag.getId())).thenReturn(Arrays.asList(order)); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) - .thenReturn(hashMap); - when(orderBagRepository.findOrderBagsByBagId(any())).thenReturn(Collections.singletonList(getOrderBag())); - assertEquals(BagStatus.ACTIVE, bag.getStatus()); + bag.setTariffsInfo(tariffsInfo); + + when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + doNothing().when(bagRepository).delete(bag); + when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(List.of(bag)); superAdminService.deleteTariffService(1); - assertEquals(BagStatus.DELETED, bag.getStatus()); - verify(orderBagRepository).findOrderBagsByBagId(any()); - verify(bagRepository).findActiveBagById(1); - verify(bagRepository).save(bag); - verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); + assertEquals(TariffStatus.ACTIVE, tariffsInfo.getTariffStatus()); + verify(bagRepository).findById(1); + verify(bagRepository).delete(bag); + verify(bagRepository).findBagsByTariffsInfoId(1L); verify(tariffsInfoRepository, never()).save(tariffsInfo); } @Test void deleteTariffServiceWhenTariffBagsListIsEmpty() { Bag bag = ModelUtils.getBag(); - when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); + TariffsInfo tariffsInfo = ModelUtils.getTariffInfo(); + bag.setTariffsInfo(tariffsInfo); + TariffsInfo tariffsInfoNew = ModelUtils.getTariffsInfoWithStatusNew(); + tariffsInfoNew.setBags(Collections.emptyList()); + when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + doNothing().when(bagRepository).delete(bag); + when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(Collections.emptyList()); + when(tariffsInfoRepository.save(tariffsInfo)).thenReturn(tariffsInfo); superAdminService.deleteTariffService(1); - - verify(orderBagRepository).findOrderBagsByBagId(any()); - verify(bagRepository).findActiveBagById(1); - verify(bagRepository).delete(any()); - + assertEquals(TariffStatus.NEW, tariffsInfoNew.getTariffStatus()); + verify(bagRepository).findById(1); + verify(bagRepository).delete(bag); + verify(bagRepository).findBagsByTariffsInfoId(1L); + verify(tariffsInfoRepository).save(tariffsInfo); } @Test void deleteTariffServiceWhenTariffBagsWithoutLimits() { Bag bag = ModelUtils.getBag(); + TariffsInfo tariffsInfo = ModelUtils.getTariffInfo(); bag.setLimitIncluded(false); - Bag bagDeleted = ModelUtils.getBagDeleted(); - bagDeleted.setLimitIncluded(false); + bag.setTariffsInfo(tariffsInfo); TariffsInfo tariffsInfoNew = ModelUtils.getTariffsInfoWithStatusNew(); tariffsInfoNew.setBags(Collections.emptyList()); - tariffsInfoNew.setTariffStatus(TariffStatus.DEACTIVATED); - when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); - when(bagRepository.save(bag)).thenReturn(bagDeleted); - when(tariffsInfoRepository.save(tariffsInfoNew)).thenReturn(tariffsInfoNew); - when(orderBagRepository.findOrderBagsByBagId(any())).thenReturn(Collections.singletonList(getOrderBag())); + when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + doNothing().when(bagRepository).delete(bag); + when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(List.of(bag)); + when(tariffsInfoRepository.save(tariffsInfo)).thenReturn(tariffsInfoNew); superAdminService.deleteTariffService(1); - - verify(bagRepository).findActiveBagById(1); - verify(bagRepository).save(bag); - verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); + assertEquals(TariffStatus.NEW, tariffsInfoNew.getTariffStatus()); + verify(bagRepository).findById(1); + verify(bagRepository).delete(bag); + verify(bagRepository).findBagsByTariffsInfoId(1L); verify(tariffsInfoRepository).save(tariffsInfoNew); } @Test - void deleteTariffServiceThrowBagNotFoundException() { - when(bagRepository.findActiveBagById(1)).thenReturn(Optional.empty()); + void deleteTariffServiceThrowNotFoundException() { + when(bagRepository.findById(1)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.deleteTariffService(1)); - verify(bagRepository).findActiveBagById(1); - verify(bagRepository, never()).save(any(Bag.class)); - } - - @Test - void editTariffServiceWithUnpaidOrder() { - Bag bag = ModelUtils.getBag(); - Bag editedBag = ModelUtils.getEditedBag(); - Employee employee = ModelUtils.getEmployee(); - TariffServiceDto dto = ModelUtils.getTariffServiceDto(); - GetTariffServiceDto editedDto = ModelUtils.getGetTariffServiceDto(); - Order order = ModelUtils.getOrder(); - String uuid = UUID.randomUUID().toString(); - order.setOrderBags(List.of(ModelUtils.getOrderBag())); - - when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); - when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); - - when(bagRepository.save(editedBag)).thenReturn(editedBag); - when(modelMapper.map(editedBag, GetTariffServiceDto.class)).thenReturn(editedDto); - doNothing().when(orderBagRepository) - .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); - when(orderRepository.findAllUnpaidOrdersByBagId(1)).thenReturn(List.of(order)); - when(orderRepository.saveAll(List.of(order))).thenReturn(List.of(order)); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) - .thenReturn(ModelUtils.getAmount()); - - GetTariffServiceDto actual = superAdminService.editTariffService(dto, 1, uuid); - - assertEquals(editedDto, actual); - verify(employeeRepository).findByUuid(uuid); - verify(bagRepository).findActiveBagById(1); - verify(bagRepository).save(editedBag); - verify(modelMapper).map(editedBag, GetTariffServiceDto.class); - verify(orderBagRepository) - .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); - verify(orderRepository).findAllUnpaidOrdersByBagId(1); - verify(orderRepository).saveAll(anyList()); + verify(bagRepository).findById(1); + verify(bagRepository, never()).delete(any(Bag.class)); } @Test - void editTariffServiceWithUnpaidOrderAndBagConfirmedAmount() { + void editTariffService() { Bag bag = ModelUtils.getBag(); - Bag editedBag = ModelUtils.getEditedBag(); Employee employee = ModelUtils.getEmployee(); TariffServiceDto dto = ModelUtils.getTariffServiceDto(); GetTariffServiceDto editedDto = ModelUtils.getGetTariffServiceDto(); - Order order = ModelUtils.getOrder(); String uuid = UUID.randomUUID().toString(); - order.setOrderBags(List.of(ModelUtils.getOrderBagWithConfirmedAmount())); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); - when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); - when(bagRepository.save(editedBag)).thenReturn(editedBag); - when(modelMapper.map(editedBag, GetTariffServiceDto.class)).thenReturn(editedDto); - doNothing().when(orderBagRepository) - .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); - when(orderRepository.findAllUnpaidOrdersByBagId(1)).thenReturn(List.of(order)); - when(orderRepository.saveAll(List.of(order))).thenReturn(List.of(order)); - when(orderBagService - .getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag().setConfirmedQuantity(2)))) - .thenReturn(ModelUtils.getAmount()); - - GetTariffServiceDto actual = superAdminService.editTariffService(dto, 1, uuid); - - assertEquals(editedDto, actual); - verify(employeeRepository).findByUuid(uuid); - verify(bagRepository).findActiveBagById(1); - verify(bagRepository).save(editedBag); - verify(modelMapper).map(editedBag, GetTariffServiceDto.class); - verify(orderBagRepository) - .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); - verify(orderRepository).findAllUnpaidOrdersByBagId(1); - verify(orderRepository).saveAll(anyList()); - } + when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.save(bag)).thenReturn(bag); + when(modelMapper.map(bag, GetTariffServiceDto.class)).thenReturn(editedDto); - @Test - void editTariffServiceWithUnpaidOrderAndBagExportedAmount() { - Bag bag = ModelUtils.getBag(); - Bag editedBag = ModelUtils.getEditedBag(); - Employee employee = ModelUtils.getEmployee(); - TariffServiceDto dto = ModelUtils.getTariffServiceDto(); - GetTariffServiceDto editedDto = ModelUtils.getGetTariffServiceDto(); - Order order = ModelUtils.getOrder(); - String uuid = UUID.randomUUID().toString(); - order.setOrderBags(List.of(ModelUtils.getOrderBagWithExportedAmount())); + superAdminService.editTariffService(dto, 1, uuid); - when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); - when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); - when(bagRepository.save(editedBag)).thenReturn(editedBag); - when(modelMapper.map(editedBag, GetTariffServiceDto.class)).thenReturn(editedDto); - doNothing().when(orderBagRepository) - .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); - when(orderRepository.findAllUnpaidOrdersByBagId(1)).thenReturn(List.of(order)); - when(orderRepository.saveAll(List.of(order))).thenReturn(List.of(order)); - when(orderBagService.getActualBagsAmountForOrder( - Arrays.asList(ModelUtils.getOrderBag().setExportedQuantity(2).setConfirmedQuantity(2)))) - .thenReturn(ModelUtils.getAmount()); - - GetTariffServiceDto actual = superAdminService.editTariffService(dto, 1, uuid); - - assertEquals(editedDto, actual); verify(employeeRepository).findByUuid(uuid); - verify(bagRepository).findActiveBagById(1); - verify(bagRepository).findActiveBagById(1); - - verify(bagRepository).save(editedBag); - verify(modelMapper).map(editedBag, GetTariffServiceDto.class); - verify(orderBagRepository) - .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); - verify(orderRepository).findAllUnpaidOrdersByBagId(1); - verify(orderRepository).saveAll(anyList()); + verify(bagRepository).findById(1); + verify(bagRepository).save(bag); + verify(modelMapper).map(bag, GetTariffServiceDto.class); } @Test - void editTariffServiceWithoutUnpaidOrder() { + void editTariffServiceIfCommissionIsNull() { Bag bag = ModelUtils.getBag(); - Bag editedBag = ModelUtils.getEditedBag(); Employee employee = ModelUtils.getEmployee(); TariffServiceDto dto = ModelUtils.getTariffServiceDto(); + dto.setCommission(null); GetTariffServiceDto editedDto = ModelUtils.getGetTariffServiceDto(); String uuid = UUID.randomUUID().toString(); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); - when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); - when(bagRepository.save(editedBag)).thenReturn(editedBag); - when(modelMapper.map(editedBag, GetTariffServiceDto.class)).thenReturn(editedDto); - doNothing().when(orderBagRepository) - .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); - when(orderRepository.findAllUnpaidOrdersByBagId(1)).thenReturn(Collections.emptyList()); + when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.save(bag)).thenReturn(bag); + when(modelMapper.map(bag, GetTariffServiceDto.class)).thenReturn(editedDto); - GetTariffServiceDto actual = superAdminService.editTariffService(dto, 1, uuid); + superAdminService.editTariffService(dto, 1, uuid); - assertEquals(editedDto, actual); verify(employeeRepository).findByUuid(uuid); - verify(bagRepository).findActiveBagById(1); - verify(bagRepository).save(editedBag); - verify(modelMapper).map(editedBag, GetTariffServiceDto.class); - verify(orderBagRepository) - .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); - verify(orderRepository).findAllUnpaidOrdersByBagId(1); - verify(orderRepository, never()).saveAll(anyList()); + verify(bagRepository).findById(1); + verify(bagRepository).save(bag); + verify(modelMapper).map(bag, GetTariffServiceDto.class); } @Test @@ -498,12 +346,12 @@ void editTariffServiceIfEmployeeNotFoundException() { Optional bag = ModelUtils.getOptionalBag(); String uuid = UUID.randomUUID().toString(); - when(bagRepository.findActiveBagById(1)).thenReturn(bag); + when(bagRepository.findById(1)).thenReturn(bag); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.editTariffService(dto, 1, uuid)); - verify(bagRepository).findActiveBagById(1); + verify(bagRepository).findById(1); verify(bagRepository, never()).save(any(Bag.class)); } @@ -512,11 +360,11 @@ void editTariffServiceIfBagNotFoundException() { TariffServiceDto dto = ModelUtils.getTariffServiceDto(); String uuid = UUID.randomUUID().toString(); - when(bagRepository.findActiveBagById(1)).thenReturn(Optional.empty()); + when(bagRepository.findById(1)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.editTariffService(dto, 1, uuid)); - verify(bagRepository).findActiveBagById(1); + verify(bagRepository).findById(1); verify(bagRepository, never()).save(any(Bag.class)); } @@ -561,40 +409,38 @@ void deleteServiceThrowNotFoundException() { void getService() { Service service = ModelUtils.getService(); GetServiceDto getServiceDto = ModelUtils.getGetServiceDto(); - TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); - when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); + when(tariffsInfoRepository.existsById(1L)).thenReturn(true); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(service)); when(modelMapper.map(service, GetServiceDto.class)).thenReturn(getServiceDto); assertEquals(getServiceDto, superAdminService.getService(1L)); - verify(tariffsInfoRepository).findById(1L); + verify(tariffsInfoRepository).existsById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); verify(modelMapper).map(service, GetServiceDto.class); } @Test void getServiceIfServiceNotExists() { - TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); - - when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); + when(tariffsInfoRepository.existsById(1L)).thenReturn(true); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.empty()); assertNull(superAdminService.getService(1L)); - verify(tariffsInfoRepository).findById(1L); + verify(tariffsInfoRepository).existsById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); + verify(modelMapper, never()).map(any(Service.class), any(GetServiceDto.class)); } @Test void getServiceThrowTariffNotFoundException() { - when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.empty()); + when(tariffsInfoRepository.existsById(1L)).thenReturn(false); assertThrows(NotFoundException.class, () -> superAdminService.getService(1L)); - verify(tariffsInfoRepository).findById(1L); + verify(tariffsInfoRepository).existsById(1L); } @Test @@ -661,6 +507,7 @@ void addService() { TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); String uuid = UUID.randomUUID().toString(); + when(tariffsInfoRepository.existsById(1L)).thenReturn(true); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.empty()); when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); @@ -671,6 +518,7 @@ void addService() { assertEquals(getServiceDto, superAdminService.addService(1L, serviceDto, uuid)); verify(employeeRepository).findByUuid(uuid); + verify(tariffsInfoRepository).existsById(1L); verify(tariffsInfoRepository).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); verify(serviceRepository).save(service); @@ -682,33 +530,31 @@ void addService() { void addServiceThrowServiceAlreadyExistsException() { Service createdService = ModelUtils.getService(); ServiceDto serviceDto = ModelUtils.getServiceDto(); - TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); String uuid = UUID.randomUUID().toString(); - when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); + when(tariffsInfoRepository.existsById(1L)).thenReturn(true); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(createdService)); assertThrows(ServiceAlreadyExistsException.class, () -> superAdminService.addService(1L, serviceDto, uuid)); - verify(tariffsInfoRepository).findById(1L); + verify(tariffsInfoRepository).existsById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); } @Test void addServiceThrowEmployeeNotFoundException() { ServiceDto serviceDto = ModelUtils.getServiceDto(); - TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); String uuid = UUID.randomUUID().toString(); - when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); + when(tariffsInfoRepository.existsById(1L)).thenReturn(true); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.empty()); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.addService(1L, serviceDto, uuid)); - verify(tariffsInfoRepository).findById(1L); + verify(tariffsInfoRepository).existsById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); verify(employeeRepository).findByUuid(uuid); } @@ -718,12 +564,12 @@ void addServiceThrowTariffNotFoundException() { ServiceDto serviceDto = ModelUtils.getServiceDto(); String uuid = UUID.randomUUID().toString(); - when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.empty()); + when(tariffsInfoRepository.existsById(1L)).thenReturn(false); assertThrows(NotFoundException.class, () -> superAdminService.addService(1L, serviceDto, uuid)); - verify(tariffsInfoRepository).findById(1L); + verify(tariffsInfoRepository).existsById(1L); } @Test @@ -1518,14 +1364,14 @@ void setTariffLimitsWithAmountOfBags() { SetTariffLimitsDto dto = ModelUtils.setTariffLimitsWithAmountOfBags(); when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffInfo)); - when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); when(tariffsInfoRepository.save(tariffInfo)).thenReturn(tariffInfo); when(bagRepository.saveAll(List.of(bag))).thenReturn(List.of(bag)); superAdminService.setTariffLimits(1L, dto); verify(tariffsInfoRepository).findById(1L); - verify(bagRepository).findActiveBagById(1); + verify(bagRepository).findById(1); verify(tariffsInfoRepository).save(any()); verify(bagRepository).saveAll(List.of(bag)); } @@ -1537,14 +1383,14 @@ void setTariffLimitsWithPriceOfOrder() { SetTariffLimitsDto dto = ModelUtils.setTariffLimitsWithPriceOfOrder(); when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffInfo)); - when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); when(tariffsInfoRepository.save(tariffInfo)).thenReturn(tariffInfo); when(bagRepository.saveAll(List.of(bag))).thenReturn(List.of(bag)); superAdminService.setTariffLimits(1L, dto); verify(tariffsInfoRepository).findById(1L); - verify(bagRepository).findActiveBagById(1); + verify(bagRepository).findById(1); verify(tariffsInfoRepository).save(any()); verify(bagRepository).saveAll(List.of(bag)); } @@ -1556,14 +1402,14 @@ void setTariffLimitsWithNullMinAndMaxAndFalseBagLimitIncluded() { SetTariffLimitsDto dto = ModelUtils.setTariffLimitsWithNullMinAndMaxAndFalseBagLimit(); when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffInfo)); - when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); when(tariffsInfoRepository.save(tariffInfo)).thenReturn(tariffInfo); when(bagRepository.saveAll(List.of(bag))).thenReturn(List.of(bag)); superAdminService.setTariffLimits(1L, dto); verify(tariffsInfoRepository).findById(1L); - verify(bagRepository).findActiveBagById(1); + verify(bagRepository).findById(1); verify(tariffsInfoRepository).save(any()); verify(bagRepository).saveAll(List.of(bag)); } @@ -1576,13 +1422,13 @@ void setTariffLimitsIfBagNotBelongToTariff() { tariffInfo.setId(2L); when(tariffsInfoRepository.findById(2L)).thenReturn(Optional.of(tariffInfo)); - when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> superAdminService.setTariffLimits(2L, dto)); verify(tariffsInfoRepository).findById(2L); - verify(bagRepository).findActiveBagById(1); + verify(bagRepository).findById(1); } @Test @@ -1593,14 +1439,14 @@ void setTariffLimitsWithNullMaxAndTrueBagLimitIncluded() { dto.setMax(null); when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffInfo)); - when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); when(tariffsInfoRepository.save(tariffInfo)).thenReturn(tariffInfo); when(bagRepository.saveAll(List.of(bag))).thenReturn(List.of(bag)); superAdminService.setTariffLimits(1L, dto); verify(tariffsInfoRepository).findById(1L); - verify(bagRepository).findActiveBagById(1); + verify(bagRepository).findById(1); verify(tariffsInfoRepository).save(any()); verify(bagRepository).saveAll(List.of(bag)); } @@ -1613,14 +1459,14 @@ void setTariffLimitsWithNullMinAndTrueBagLimitIncluded() { dto.setMin(null); when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffInfo)); - when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); when(tariffsInfoRepository.save(tariffInfo)).thenReturn(tariffInfo); when(bagRepository.saveAll(List.of(bag))).thenReturn(List.of(bag)); superAdminService.setTariffLimits(1L, dto); verify(tariffsInfoRepository).findById(1L); - verify(bagRepository).findActiveBagById(1); + verify(bagRepository).findById(1); verify(tariffsInfoRepository).save(any()); verify(bagRepository).saveAll(List.of(bag)); } @@ -1726,13 +1572,13 @@ void setTariffLimitsBagThrowBagNotFound() { TariffsInfo tariffInfo = ModelUtils.getTariffInfo(); when(tariffsInfoRepository.findById(anyLong())).thenReturn(Optional.of(tariffInfo)); - when(bagRepository.findActiveBagById(1)).thenReturn(Optional.empty()); + when(bagRepository.findById(1)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.setTariffLimits(1L, dto)); verify(tariffsInfoRepository).findById(1L); - verify(bagRepository).findActiveBagById(1); + verify(bagRepository).findById(1); } @Test diff --git a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java index 7220e0147..964b13b3a 100644 --- a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java @@ -8,7 +8,6 @@ import greencity.dto.OrderCourierPopUpDto; import greencity.dto.TariffsForLocationDto; import greencity.dto.address.AddressDto; - import greencity.dto.bag.BagDto; import greencity.dto.bag.BagForUserDto; import greencity.dto.bag.BagOrderDto; @@ -43,7 +42,14 @@ import greencity.dto.user.UserProfileDto; import greencity.dto.user.UserProfileUpdateDto; import greencity.entity.coords.Coordinates; -import greencity.entity.order.*; +import greencity.entity.order.Bag; +import greencity.entity.order.Certificate; +import greencity.entity.order.Event; +import greencity.entity.order.Order; +import greencity.entity.order.OrderPaymentStatusTranslation; +import greencity.entity.order.OrderStatusTranslation; +import greencity.entity.order.Payment; +import greencity.entity.order.TariffsInfo; import greencity.entity.telegram.TelegramBot; import greencity.entity.user.User; import greencity.entity.user.employee.Employee; @@ -71,7 +77,6 @@ import greencity.repository.EventRepository; import greencity.repository.LocationRepository; import greencity.repository.OrderAddressRepository; -import greencity.repository.OrderBagRepository; import greencity.repository.OrderPaymentStatusTranslationRepository; import greencity.repository.OrderRepository; import greencity.repository.OrderStatusTranslationRepository; @@ -316,10 +321,6 @@ class UBSClientServiceImplTest { @Mock private LocationApiService locationApiService; - @Mock - private OrderBagService orderBagService; - @Mock - private OrderBagRepository orderBagRepository; @Test void testGetAllDistricts() { @@ -400,7 +401,7 @@ void getFirstPageDataByTariffAndLocationIdShouldReturnExpectedData() { when(locationRepository.findById(locationId)).thenReturn(Optional.of(location)); when(tariffLocationRepository.findTariffLocationByTariffsInfoAndLocation(tariffsInfo, location)) .thenReturn(Optional.of(tariffLocation)); - when(bagRepository.findAllActiveBagsByTariffsInfoId(tariffsInfoId)).thenReturn(bags); + when(bagRepository.findBagsByTariffsInfoId(tariffsInfoId)).thenReturn(bags); when(modelMapper.map(bags.get(0), BagTranslationDto.class)).thenReturn(bagTranslationDto); var userPointsAndAllBagsDtoActual = @@ -420,7 +421,7 @@ void getFirstPageDataByTariffAndLocationIdShouldReturnExpectedData() { verify(tariffsInfoRepository).findById(tariffsInfoId); verify(locationRepository).findById(locationId); verify(tariffLocationRepository).findTariffLocationByTariffsInfoAndLocation(tariffsInfo, location); - verify(bagRepository).findAllActiveBagsByTariffsInfoId(tariffsInfoId); + verify(bagRepository).findBagsByTariffsInfoId(tariffsInfoId); verify(modelMapper).map(bags.get(0), BagTranslationDto.class); } @@ -453,7 +454,7 @@ void getFirstPageDataByTariffAndLocationIdShouldThrowExceptionWhenTariffLocation verify(locationRepository).findById(locationId); verify(tariffLocationRepository).findTariffLocationByTariffsInfoAndLocation(tariffsInfo, location); - verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -484,7 +485,7 @@ void getFirstPageDataByTariffAndLocationIdShouldThrowExceptionWhenLocationDoesNo verify(locationRepository).findById(locationId); verify(tariffLocationRepository, never()).findTariffLocationByTariffsInfoAndLocation(any(), any()); - verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -514,7 +515,7 @@ void getFirstPageDataByTariffAndLocationIdShouldThrowExceptionWhenTariffDoesNotE verify(locationRepository, never()).findById(anyLong()); verify(tariffLocationRepository, never()).findTariffLocationByTariffsInfoAndLocation(any(), any()); - verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), anyLong()); } @@ -541,7 +542,7 @@ void getFirstPageDataByTariffAndLocationIdShouldThrowExceptionWhenUserDoesNotExi verify(tariffsInfoRepository, never()).findById(anyLong()); verify(locationRepository, never()).findById(anyLong()); verify(tariffLocationRepository, never()).findTariffLocationByTariffsInfoAndLocation(any(), any()); - verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -571,7 +572,7 @@ void checkIfTariffIsAvailableForCurrentLocationThrowExceptionWhenTariffIsDeactiv verify(locationRepository).findById(locationId); verify(tariffLocationRepository, never()).findTariffLocationByTariffsInfoAndLocation(any(), any()); - verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -601,7 +602,7 @@ void checkIfTariffIsAvailableForCurrentLocationThrowExceptionWhenLocationIsDeact verify(locationRepository).findById(locationId); verify(tariffLocationRepository, never()).findTariffLocationByTariffsInfoAndLocation(any(), any()); - verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -638,7 +639,7 @@ void checkIfTariffIsAvailableForCurrentLocationWhenLocationForTariffIsDeactivate verify(locationRepository).findById(locationId); verify(tariffLocationRepository).findTariffLocationByTariffsInfoAndLocation(tariffsInfo, location); - verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -666,7 +667,7 @@ void getFirstPageDataByOrderIdShouldReturnExpectedData() { when(orderRepository.findById(orderId)).thenReturn(Optional.of(order)); when(tariffLocationRepository.findTariffLocationByTariffsInfoAndLocation(tariffsInfo, location)) .thenReturn(Optional.of(tariffLocation)); - when(bagRepository.findAllActiveBagsByTariffsInfoId(tariffsInfoId)).thenReturn(bags); + when(bagRepository.findBagsByTariffsInfoId(tariffsInfoId)).thenReturn(bags); when(modelMapper.map(bags.get(0), BagTranslationDto.class)).thenReturn(bagTranslationDto); var userPointsAndAllBagsDtoActual = @@ -685,7 +686,7 @@ void getFirstPageDataByOrderIdShouldReturnExpectedData() { verify(userRepository).findUserByUuid(uuid); verify(orderRepository).findById(orderId); verify(tariffLocationRepository).findTariffLocationByTariffsInfoAndLocation(tariffsInfo, location); - verify(bagRepository).findAllActiveBagsByTariffsInfoId(tariffsInfoId); + verify(bagRepository).findBagsByTariffsInfoId(tariffsInfoId); verify(modelMapper).map(bags.get(0), BagTranslationDto.class); } @@ -708,7 +709,7 @@ void getFirstPageDataByOrderIdShouldThrowExceptionWhenUserDoesNotExist() { verify(orderRepository, never()).findById(anyLong()); verify(tariffLocationRepository, never()).findTariffLocationByTariffsInfoAndLocation(any(), any()); - verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -734,7 +735,7 @@ void getFirstPageDataByOrderIdShouldThrowExceptionWhenOrderDoesNotExist() { verify(orderRepository).findById(orderId); verify(tariffLocationRepository, never()).findTariffLocationByTariffsInfoAndLocation(any(), any()); - verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -772,129 +773,23 @@ void testSaveToDB() throws IllegalAccessException { f.set(ubsService, "1"); } } - tariffsInfo.setBags(Arrays.asList(bag)); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); when(orderRepository.findById(any())).thenReturn(Optional.of(order1)); when(encryptionUtil.formRequestSignature(any(), eq(null), eq("1"))).thenReturn("TestValue"); when(fondyClient.getCheckoutResponse(any())).thenReturn(getSuccessfulFondyResponse()); + FondyOrderResponse result = ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null); Assertions.assertNotNull(result); } - @Test - void testSaveToDB_AddressNotEqualsUsers() throws IllegalAccessException { - User user = getUserWithLastLocation(); - user.setAlternateEmail("test@mail.com"); - user.setCurrentPoints(900); - - OrderResponseDto dto = getOrderResponseDto(); - dto.getBags().get(0).setAmount(15); - dto.setAddressId(1L); - dto.setLocationId(1L); - Order order = getOrder(); - user.setOrders(new ArrayList<>()); - user.getOrders().add(order); - user.setChangeOfPointsList(new ArrayList<>()); - - Bag bag = getBagForOrder(); - TariffsInfo tariffsInfo = getTariffInfo(); - - UBSuser ubSuser = getUBSuser(); - - OrderAddress orderAddress = ubSuser.getOrderAddress(); - orderAddress.setAddressStatus(AddressStatus.NEW); - - Order order1 = getOrder(); - order1.setPayment(new ArrayList<>()); - Payment payment1 = getPayment(); - payment1.setId(1L); - order1.getPayment().add(payment1); - - Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); - for (Field f : fields) { - if (f.getName().equals("merchantId")) { - f.setAccessible(true); - f.set(ubsService, "1"); - } - } - tariffsInfo.setBags(Arrays.asList(bag)); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); - when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user.setId(null), user); - when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); - when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser.setId(null))); - when(modelMapper.map(dto, Order.class)).thenReturn(order); - when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser.setId(null)); - when(addressRepository.findById(any())).thenReturn(Optional.of(getAddress().setUser(getTestUser()))); - when(locationRepository.findById(any())).thenReturn(Optional.of(getLocation())); - - assertThrows(NotFoundException.class, - () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); - - } - - @Test - void testSaveToDB_AddressStatusDeleted() throws IllegalAccessException { - User user = getUserWithLastLocation(); - user.setAlternateEmail("test@mail.com"); - user.setCurrentPoints(900); - - OrderResponseDto dto = getOrderResponseDto(); - dto.getBags().get(0).setAmount(15); - dto.setAddressId(1L); - dto.setLocationId(1L); - Order order = getOrder(); - user.setOrders(new ArrayList<>()); - user.getOrders().add(order); - user.setChangeOfPointsList(new ArrayList<>()); - - Bag bag = getBagForOrder(); - TariffsInfo tariffsInfo = getTariffInfo(); - - UBSuser ubSuser = getUBSuser(); - - OrderAddress orderAddress = ubSuser.getOrderAddress(); - orderAddress.setAddressStatus(AddressStatus.NEW); - - Order order1 = getOrder(); - order1.setPayment(new ArrayList<>()); - Payment payment1 = getPayment(); - payment1.setId(1L); - order1.getPayment().add(payment1); - - Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); - for (Field f : fields) { - if (f.getName().equals("merchantId")) { - f.setAccessible(true); - f.set(ubsService, "1"); - } - } - tariffsInfo.setBags(Arrays.asList(bag)); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); - when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user.setId(null), user); - when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); - when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser.setId(null))); - when(modelMapper.map(dto, Order.class)).thenReturn(order); - when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser.setId(null)); - when(addressRepository.findById(any())) - .thenReturn(Optional.of(getAddress().setAddressStatus(AddressStatus.DELETED))); - when(locationRepository.findById(any())).thenReturn(Optional.of(getLocation())); - assertThrows(NotFoundException.class, - () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); - - } - @Test void testSaveToDBWithTwoBags() throws IllegalAccessException { User user = getUserWithLastLocation(); @@ -912,12 +807,10 @@ void testSaveToDBWithTwoBags() throws IllegalAccessException { Bag bag1 = getBagForOrder(); bag1.setId(1); - bag1.setCapacity(100); bag1.setLimitIncluded(false); Bag bag3 = getBagForOrder(); - bag3.setCapacity(1000); TariffsInfo tariffsInfo = getTariffInfo(); - tariffsInfo.setBags(Arrays.asList(bag1, bag3)); + UBSuser ubSuser = getUBSuser(); OrderAddress orderAddress = ubSuser.getOrderAddress(); @@ -928,9 +821,7 @@ void testSaveToDBWithTwoBags() throws IllegalAccessException { Payment payment1 = getPayment(); payment1.setId(1L); order1.getPayment().add(payment1); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag(), ModelUtils.getOrderBag())); - order1 - .setOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag(), ModelUtils.getOrderBag())); + Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { if (f.getName().equals("merchantId")) { @@ -942,8 +833,8 @@ void testSaveToDBWithTwoBags() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag1)); - when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag3)); + when(bagRepository.findById(1)).thenReturn(Optional.of(bag1)); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag3)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); @@ -972,7 +863,6 @@ void testSaveToDBWithCertificates() throws IllegalAccessException { Bag bag = getBagForOrder(); TariffsInfo tariffsInfo = getTariffInfo(); - tariffsInfo.setBags(Arrays.asList(bag)); UBSuser ubSuser = getUBSuser(); @@ -996,7 +886,7 @@ void testSaveToDBWithCertificates() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); when(certificateRepository.findById(anyString())).thenReturn(Optional.of(getCertificate())); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); @@ -1025,7 +915,6 @@ void testSaveToDBWithDontSendLinkToFondy() throws IllegalAccessException { Bag bag = getBagForOrder(); TariffsInfo tariffsInfo = getTariffInfo(); - tariffsInfo.setBags(Arrays.asList(bag)); Certificate certificate = getCertificate(); certificate.setPoints(1000_00); @@ -1052,7 +941,7 @@ void testSaveToDBWithDontSendLinkToFondy() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); when(certificateRepository.findById(anyString())).thenReturn(Optional.of(certificate)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); @@ -1079,7 +968,6 @@ void testSaveToDBWhenSumToPayLessThanPoints() throws IllegalAccessException { Bag bag = getBagForOrder(); TariffsInfo tariffsInfo = getTariffInfo(); - tariffsInfo.setBags(Arrays.asList(bag)); UBSuser ubSuser = getUBSuser(); @@ -1103,7 +991,7 @@ void testSaveToDBWhenSumToPayLessThanPoints() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); @@ -1124,19 +1012,17 @@ void testSaveToDbThrowBadRequestExceptionPriceLowerThanLimit() throws IllegalAcc OrderResponseDto dto = getOrderResponseDto(); dto.getBags().get(0).setAmount(1); - Bag bag = getBagForOrder(); Order order = getOrder(); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); - TariffsInfo tariffsInfo = getTariffInfo(); - tariffsInfo.setBags(Arrays.asList(bag)); user.setOrders(new ArrayList<>()); user.getOrders().add(order); user.setChangeOfPointsList(new ArrayList<>()); + Bag bag = getBagForOrder(); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(getTariffInfo())); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); @@ -1144,7 +1030,7 @@ void testSaveToDbThrowBadRequestExceptionPriceLowerThanLimit() throws IllegalAcc verify(userRepository, times(1)).findByUuid(anyString()); verify(tariffsInfoRepository, times(1)) .findTariffsInfoByBagIdAndLocationId(anyList(), anyLong()); - verify(bagRepository, times(1)).findActiveBagById(anyInt()); + verify(bagRepository, times(1)).findById(anyInt()); } @Test @@ -1164,7 +1050,7 @@ void testSaveToDbThrowBadRequestExceptionPriceGreaterThanLimit() throws IllegalA when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); @@ -1172,7 +1058,7 @@ void testSaveToDbThrowBadRequestExceptionPriceGreaterThanLimit() throws IllegalA verify(userRepository, times(1)).findByUuid(anyString()); verify(tariffsInfoRepository, times(1)) .findTariffsInfoByBagIdAndLocationId(anyList(), anyLong()); - verify(bagRepository, times(1)).findActiveBagById(anyInt()); + verify(bagRepository, times(1)).findById(anyInt()); } @Test @@ -1203,14 +1089,10 @@ void testSaveToDBWShouldThrowBadRequestException() throws IllegalAccessException payment1.setId(1L); order1.getPayment().add(payment1); - bag.setTariffsInfo(tariffsInfo); - tariffsInfo.setBags(Arrays.asList(bag)); - order.setTariffsInfo(tariffsInfo); - when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); @@ -1218,6 +1100,7 @@ void testSaveToDBWShouldThrowBadRequestException() throws IllegalAccessException verify(userRepository, times(1)).findByUuid(anyString()); verify(tariffsInfoRepository, times(1)) .findTariffsInfoByBagIdAndLocationId(anyList(), anyLong()); + verify(bagRepository, times(1)).findById(any()); } @Test @@ -1295,7 +1178,7 @@ void testSaveToDBWShouldThrowBagNotFoundExceptionException() throws IllegalAcces when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findActiveBagById(3)).thenReturn(Optional.empty()); + when(bagRepository.findById(3)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); @@ -1303,7 +1186,7 @@ void testSaveToDBWShouldThrowBagNotFoundExceptionException() throws IllegalAcces verify(userRepository, times(1)).findByUuid(anyString()); verify(tariffsInfoRepository, times(1)) .findTariffsInfoByBagIdAndLocationId(anyList(), anyLong()); - verify(bagRepository).findActiveBagById(3); + verify(bagRepository).findById(3); } @@ -1332,14 +1215,11 @@ void testSaveToDBWithoutOrderUnpaid() throws IllegalAccessException { Payment payment1 = getPayment(); payment1.setId(1L); order1.getPayment().add(payment1); - TariffsInfo tariffsInfo = getTariffsInfo(); - bag.setTariffsInfo(tariffsInfo); - tariffsInfo.setBags(Arrays.asList(bag)); - order.setTariffsInfo(tariffsInfo); - when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); - when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); + when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) + .thenReturn(Optional.of(getTariffInfo())); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); when(orderRepository.findById(any())).thenReturn(Optional.of(order1)); @@ -1350,6 +1230,7 @@ void testSaveToDBWithoutOrderUnpaid() throws IllegalAccessException { verify(userRepository, times(1)).findByUuid("35467585763t4sfgchjfuyetf"); verify(tariffsInfoRepository, times(1)) .findTariffsInfoByBagIdAndLocationId(anyList(), anyLong()); + verify(bagRepository, times(2)).findById(any()); verify(ubsUserRepository, times(1)).findById(anyLong()); verify(modelMapper, times(1)).map(dto.getPersonalData(), UBSuser.class); verify(orderRepository, times(1)).findById(anyLong()); @@ -1363,19 +1244,14 @@ void saveToDBFailPaidOrder() { dto.getBags().get(0).setAmount(5); Order order = getOrder(); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); Bag bag = getBagForOrder(); TariffsInfo tariffsInfo = getTariffInfo(); - bag.setTariffsInfo(tariffsInfo); - tariffsInfo.setBags(Arrays.asList(bag)); - order.setTariffsInfo(tariffsInfo); - when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); when(orderRepository.findById(any())).thenReturn(Optional.of(order)); assertThrows(BadRequestException.class, @@ -1420,7 +1296,7 @@ void testSaveToDBThrowsException() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); } @@ -1444,65 +1320,6 @@ void getSecondPageData() { assertEquals(expected, actual); } - @Test - void getSecondPageData_AlternativeEmailIsNull() { - String uuid = "35467585763t4sfgchjfuyetf"; - PersonalDataDto expected = getOrderResponseDto().getPersonalData(); - - User user = getTestUser() - .setUuid(uuid) - .setRecipientEmail("mail@mail.ua") - .setRecipientPhone("067894522"); - List ubsUser = Arrays.asList(getUBSuser()); - when(userRepository.findByUuid(uuid)).thenReturn(user); - when(ubsUserRepository.findUBSuserByUser(user)).thenReturn(ubsUser); - when(modelMapper.map(user, PersonalDataDto.class)).thenReturn(expected); - - PersonalDataDto actual = ubsService.getSecondPageData("35467585763t4sfgchjfuyetf"); - - assertEquals(expected, actual); - } - - @Test - void getSecondPageData_AlternativeEmailIsEmpty() { - String uuid = "35467585763t4sfgchjfuyetf"; - PersonalDataDto expected = getOrderResponseDto().getPersonalData(); - - User user = getTestUser() - .setUuid(uuid) - .setRecipientEmail("mail@mail.ua") - .setRecipientPhone("067894522") - .setAlternateEmail(""); - List ubsUser = Arrays.asList(getUBSuser()); - when(userRepository.findByUuid(uuid)).thenReturn(user); - when(ubsUserRepository.findUBSuserByUser(user)).thenReturn(ubsUser); - when(modelMapper.map(user, PersonalDataDto.class)).thenReturn(expected); - - PersonalDataDto actual = ubsService.getSecondPageData("35467585763t4sfgchjfuyetf"); - - assertEquals(expected, actual); - } - - @Test - void getSecondPageData_ubsUser_isEmpty() { - String uuid = "35467585763t4sfgchjfuyetf"; - PersonalDataDto expected = getOrderResponseDto().getPersonalData(); - - User user = getTestUser() - .setUuid(uuid) - .setRecipientEmail("mail@mail.ua") - .setRecipientPhone("067894522") - .setAlternateEmail("my@email.com"); - List ubsUser = Arrays.asList(getUBSuser()); - when(userRepository.findByUuid(uuid)).thenReturn(user); - when(ubsUserRepository.findUBSuserByUser(user)).thenReturn(Collections.emptyList()); - when(modelMapper.map(user, PersonalDataDto.class)).thenReturn(expected); - - PersonalDataDto actual = ubsService.getSecondPageData("35467585763t4sfgchjfuyetf"); - - assertEquals(expected, actual); - } - @Test void getSecondPageDataWithUserFounded() { @@ -2752,10 +2569,53 @@ void deleteOrderFail() { } @Test - void processOrderFondyClient2() throws Exception { + void processOrderFondyClient() throws Exception { Order order = getOrderCount(); + HashMap value = new HashMap<>(); + value.put(1, 22); + order.setAmountOfBagsOrdered(value); + order.setPointsToUse(100); + order.setSumTotalAmountWithoutDiscounts(1000_00L); + order.setCertificates(Set.of(getCertificate())); + order.setPayment(TEST_PAYMENT_LIST); + User user = getUser(); + user.setCurrentPoints(100); + user.setChangeOfPointsList(new ArrayList<>()); + order.setUser(user); + + OrderFondyClientDto dto = getOrderFondyClientDto(); + Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); + for (Field f : fields) { + if (f.getName().equals("merchantId")) { + f.setAccessible(true); + f.set(ubsService, "1"); + } + } + Certificate certificate = getCertificate(); + CertificateDto certificateDto = createCertificateDto(); + + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); + when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); + + when(encryptionUtil.formRequestSignature(any(), eq(null), eq("1"))).thenReturn("TestValue"); + when(fondyClient.getCheckoutResponse(any())).thenReturn(getSuccessfulFondyResponse()); + when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); + when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); + when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + + ubsService.processOrderFondyClient(dto, "uuid"); + + verify(encryptionUtil).formRequestSignature(any(), eq(null), eq("1")); + verify(fondyClient).getCheckoutResponse(any()); + } + + @Test + void processOrderFondyClient2() throws Exception { + Order order = getOrderCount(); + Certificate certificate = getCertificate(); + certificate.setPoints(1500); HashMap value = new HashMap<>(); value.put(1, 22); order.setAmountOfBagsOrdered(value); @@ -2771,9 +2631,6 @@ void processOrderFondyClient2() throws Exception { OrderFondyClientDto dto = getOrderFondyClientDto(); dto.setCertificates(Set.of("1111-1234")); - order.setCertificates(Set.of(getCertificate())); - order.setPayment(TEST_PAYMENT_LIST); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { if (f.getName().equals("merchantId")) { @@ -2782,26 +2639,26 @@ void processOrderFondyClient2() throws Exception { } } - order.setPointsToUse(-10000); CertificateDto certificateDto = createCertificateDto(); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + certificateDto.setPoints(1500); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); - when(fondyClient.getCheckoutResponse(any())).thenReturn(getSuccessfulFondyResponse()); - when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); - when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); when(certificateRepository.findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE)).thenReturn(Set.of(certificate)); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) - .thenReturn(ModelUtils.getAmount()); + when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); + when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); + when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); ubsService.processOrderFondyClient(dto, "uuid"); + verify(orderRepository).findById(1L); verify(userRepository).findUserByUuid("uuid"); verify(certificateRepository).findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE); - verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); + verify(bagRepository).findBagsByOrderId(order.getId()); + verify(modelMapper).map(certificate, CertificateDto.class); + verify(modelMapper).map(any(Bag.class), eq(BagForUserDto.class)); } @Test @@ -2820,6 +2677,7 @@ void processOrderFondyClientCertificeteNotFoundExeption() throws Exception { user.setCurrentPoints(100); user.setChangeOfPointsList(new ArrayList<>()); order.setUser(user); + OrderFondyClientDto dto = getOrderFondyClientDto(); dto.setCertificates(Set.of("1111-1234")); @@ -2833,22 +2691,24 @@ void processOrderFondyClientCertificeteNotFoundExeption() throws Exception { CertificateDto certificateDto = createCertificateDto(); certificateDto.setPoints(1500); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) - .thenReturn(ModelUtils.getAmount()); + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); when(certificateRepository.findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE)).thenReturn(Collections.emptySet()); + when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); - when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + assertThrows(NotFoundException.class, () -> ubsService.processOrderFondyClient(dto, "uuid")); + verify(orderRepository).findById(1L); verify(userRepository).findUserByUuid("uuid"); verify(certificateRepository).findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE); + verify(bagRepository).findBagsByOrderId(order.getId()); verify(modelMapper).map(certificate, CertificateDto.class); - verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); + verify(modelMapper).map(any(Bag.class), eq(BagForUserDto.class)); } @Test @@ -2881,16 +2741,14 @@ void processOrderFondyClientCertificeteNotFoundExeption2() throws Exception { CertificateDto certificateDto = createCertificateDto(); certificateDto.setPoints(1500); - order.setPointsToUse(-1000); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); when(certificateRepository.findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE)).thenReturn(Set.of(certificate)); + when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); - when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) - .thenReturn(ModelUtils.getAmount()); + when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); assertThrows(NotFoundException.class, () -> ubsService.processOrderFondyClient(dto, "uuid")); @@ -2898,8 +2756,9 @@ void processOrderFondyClientCertificeteNotFoundExeption2() throws Exception { verify(userRepository).findUserByUuid("uuid"); verify(certificateRepository).findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE); + verify(bagRepository).findBagsByOrderId(order.getId()); verify(modelMapper).map(certificate, CertificateDto.class); - verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); + verify(modelMapper).map(any(Bag.class), eq(BagForUserDto.class)); } @Test @@ -2917,8 +2776,7 @@ void processOrderFondyClientIfSumToPayLessThanPoints() throws Exception { user.setCurrentPoints(100); user.setChangeOfPointsList(new ArrayList<>()); order.setUser(user); - order.setPointsToUse(-10000); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + OrderFondyClientDto dto = getOrderFondyClientDto(); Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { @@ -2933,11 +2791,12 @@ void processOrderFondyClientIfSumToPayLessThanPoints() throws Exception { when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); + + when(encryptionUtil.formRequestSignature(any(), eq(null), eq("1"))).thenReturn("TestValue"); when(fondyClient.getCheckoutResponse(any())).thenReturn(getSuccessfulFondyResponse()); + when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); - when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) - .thenReturn(ModelUtils.getAmount()); + when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); ubsService.processOrderFondyClient(dto, "uuid"); @@ -2972,6 +2831,7 @@ void saveFullOrderToDBForIF() throws IllegalAccessException { bag.setFullPrice(400_00L); TariffsInfo tariffsInfo = getTariffsInfo(); bag.setTariffsInfo(tariffsInfo); + UBSuser ubSuser = getUBSuser(); OrderAddress address = ubSuser.getOrderAddress(); @@ -2982,8 +2842,6 @@ void saveFullOrderToDBForIF() throws IllegalAccessException { Payment payment1 = getPayment(); payment1.setId(1L); order1.getPayment().add(payment1); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); - order1.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { @@ -2993,13 +2851,10 @@ void saveFullOrderToDBForIF() throws IllegalAccessException { } } - bag.setTariffsInfo(tariffsInfo); - tariffsInfo.setBags(Arrays.asList(bag)); - order.setTariffsInfo(tariffsInfo); - when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); - when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); + when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) + .thenReturn(Optional.of(getTariffInfo())); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(certificateRepository.findById("1111-1234")).thenReturn(Optional.of(getCertificate())); @@ -3027,7 +2882,7 @@ void saveFullOrderToDBWhenSumToPayeqNull() throws IllegalAccessException { user.setOrders(new ArrayList<>()); user.getOrders().add(order); user.setChangeOfPointsList(new ArrayList<>()); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag())); + Bag bag = getBagForOrder(); UBSuser ubSuser = getUBSuser().setId(null); @@ -3050,15 +2905,11 @@ void saveFullOrderToDBWhenSumToPayeqNull() throws IllegalAccessException { f.set(ubsService, "1"); } } - TariffsInfo tariffsInfo = getTariffsInfo(); - bag.setTariffsInfo(tariffsInfo); - tariffsInfo.setBags(Arrays.asList(bag)); - order.setTariffsInfo(tariffsInfo); - when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); - when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); - when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) + .thenReturn(Optional.of(getTariffInfo())); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(addressRepository.findById(any())).thenReturn(Optional.of(address)); when(locationRepository.findById(anyLong())).thenReturn(Optional.of(location)); @@ -3106,7 +2957,7 @@ void testSaveToDBfromIForIFThrowsException() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(getTariffInfoWithLimitOfBags())); - when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> { ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null); }); @@ -3148,7 +2999,7 @@ void testCheckSumIfCourierLimitBySumOfOrderForIF1() throws IllegalAccessExceptio when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> { ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null); @@ -3191,7 +3042,7 @@ void testCheckSumIfCourierLimitBySumOfOrderForIF2() throws InvocationTargetExcep when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> { ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null); @@ -3316,14 +3167,13 @@ void getOrderForUserTest() { order.setAmountOfBagsOrdered(Map.of(1, 10)); bags.add(bag); order.setUser(user); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); orderList.add(order); - when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(ordersForUserRepository.getAllByUserUuidAndId(user.getUuid(), order.getId())) .thenReturn(order); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) - .thenReturn(ModelUtils.getAmount()); + when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(bags); + when(modelMapper.map(bag, BagForUserDto.class)).thenReturn(bagForUserDto); when(orderStatusTranslationRepository .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue())) .thenReturn(Optional.of(orderStatusTranslation)); @@ -3333,7 +3183,8 @@ void getOrderForUserTest() { ubsService.getOrderForUser(user.getUuid(), 1L); - verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); + verify(modelMapper, times(bags.size())).map(bag, BagForUserDto.class); + verify(bagRepository).findBagsByOrderId(order.getId()); verify(orderStatusTranslationRepository, times(orderList.size())) .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue()); verify(orderPaymentStatusTranslationRepository, times(orderList.size())) @@ -3376,30 +3227,30 @@ void getOrdersForUserTest() { orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); Page page = new PageImpl<>(orderList, pageable, 1); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); - when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(bags); + when(modelMapper.map(bag, BagForUserDto.class)).thenReturn(bagForUserDto); when(orderStatusTranslationRepository .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue())) .thenReturn(Optional.of(orderStatusTranslation)); when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) - .thenReturn(ModelUtils.getAmount()); PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); assertEquals(dto.getTotalElements(), orderList.size()); assertEquals(dto.getPage().get(0).getId(), order.getId()); - verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); + verify(modelMapper, times(bags.size())).map(bag, BagForUserDto.class); + verify(bagRepository).findBagsByOrderId(order.getId()); verify(orderStatusTranslationRepository, times(orderList.size())) .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue()); verify(orderPaymentStatusTranslationRepository, times(orderList.size())) - .getById((long) order.getOrderPaymentStatus().getStatusValue()); + .getById( + (long) order.getOrderPaymentStatus().getStatusValue()); verify(ordersForUserRepository).getAllByUserUuid(pageable, user.getUuid()); } @@ -3409,7 +3260,6 @@ void testOrdersForUserWithExportedQuantity() { OrderPaymentStatusTranslation orderPaymentStatusTranslation = getOrderPaymentStatusTranslation(); OrdersDataForUserDto ordersDataForUserDto = getOrderStatusDto(); Order order = getOrderTest(); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); User user = getTestUser(); Bag bag = bagDto(); @@ -3429,21 +3279,22 @@ void testOrdersForUserWithExportedQuantity() { when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); + when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(bags); + when(modelMapper.map(bag, BagForUserDto.class)).thenReturn(bagForUserDto); when(orderStatusTranslationRepository .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue())) .thenReturn(Optional.of(orderStatusTranslation)); when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) - .thenReturn(ModelUtils.getAmount()); - when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); assertEquals(dto.getTotalElements(), orderList.size()); assertEquals(dto.getPage().get(0).getId(), order.getId()); - verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); + verify(modelMapper, times(bags.size())).map(bag, BagForUserDto.class); + verify(bagRepository).findBagsByOrderId(order.getId()); verify(orderStatusTranslationRepository, times(orderList.size())) .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue()); verify(orderPaymentStatusTranslationRepository, times(orderList.size())) @@ -3470,7 +3321,6 @@ void testOrdersForUserWithConfirmedQuantity() { order.setConfirmedQuantity(Map.of(1, 10)); bags.add(bag); order.setUser(user); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); @@ -3478,21 +3328,22 @@ void testOrdersForUserWithConfirmedQuantity() { when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); - when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(bags); + when(modelMapper.map(bag, BagForUserDto.class)).thenReturn(bagForUserDto); when(orderStatusTranslationRepository .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue())) .thenReturn(Optional.of(orderStatusTranslation)); when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) - .thenReturn(ModelUtils.getAmount()); + PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); assertEquals(dto.getTotalElements(), orderList.size()); assertEquals(dto.getPage().get(0).getId(), order.getId()); - verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); + verify(modelMapper, times(bags.size())).map(bag, BagForUserDto.class); + verify(bagRepository).findBagsByOrderId(order.getId()); verify(orderStatusTranslationRepository, times(orderList.size())) .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue()); verify(orderPaymentStatusTranslationRepository, times(orderList.size())) @@ -3512,14 +3363,10 @@ void senderInfoDtoBuilderTest() { order.setAmountOfBagsOrdered(Map.of(1, 10)); order.setUser(user); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); Page page = new PageImpl<>(orderList, pageable, 1); - TariffsInfo tariffsInfo = getTariffsInfo(); - tariffsInfo.setBags(Arrays.asList(getBag())); - order.setTariffsInfo(tariffsInfo); when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); when(orderStatusTranslationRepository @@ -3528,9 +3375,7 @@ void senderInfoDtoBuilderTest() { when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); - when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) - .thenReturn(ModelUtils.getAmount()); + PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); assertEquals(dto.getTotalElements(), orderList.size()); assertEquals(dto.getPage().get(0).getId(), order.getId()); @@ -3643,7 +3488,7 @@ void checkIfAddressHasBeenDeletedTest() throws IllegalAccessException { user.setOrders(new ArrayList<>()); user.getOrders().add(order); user.setChangeOfPointsList(new ArrayList<>()); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + Bag bag = getBagForOrder(); UBSuser ubSuser = getUBSuser(); @@ -3658,15 +3503,11 @@ void checkIfAddressHasBeenDeletedTest() throws IllegalAccessException { f.set(ubsService, "1"); } } - TariffsInfo tariffsInfo = getTariffsInfo(); - bag.setTariffsInfo(tariffsInfo); - tariffsInfo.setBags(Arrays.asList(bag)); - order.setTariffsInfo(tariffsInfo); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); - when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); - when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(getTariffInfo())); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); @@ -3706,15 +3547,11 @@ void checkAddressUserTest() throws IllegalAccessException { f.set(ubsService, "1"); } } - TariffsInfo tariffsInfo = getTariffsInfo(); - bag.setTariffsInfo(tariffsInfo); - tariffsInfo.setBags(Arrays.asList(bag)); - order.setTariffsInfo(tariffsInfo); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); - when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); - when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(getTariffInfo())); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); @@ -3746,16 +3583,11 @@ void checkIfUserHaveEnoughPointsTest() throws IllegalAccessException { f.set(ubsService, "1"); } } - TariffsInfo tariffsInfo = getTariffsInfo(); - bag.setTariffsInfo(tariffsInfo); - tariffsInfo.setBags(Arrays.asList(bag)); - order.setTariffsInfo(tariffsInfo); when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); - when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); - when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(getTariffInfo())); + when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); @@ -3822,15 +3654,11 @@ void testOrdersForUserWithQuantity() { bag.setFullPrice(1200_00L); bags.add(bag); order.setUser(user); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); Page page = new PageImpl<>(orderList, pageable, 1); - TariffsInfo tariffsInfo = getTariffsInfo(); - bag.setTariffsInfo(tariffsInfo); - tariffsInfo.setBags(Arrays.asList(bag)); - order.setTariffsInfo(tariffsInfo); + when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); when(orderStatusTranslationRepository @@ -3839,9 +3667,6 @@ void testOrdersForUserWithQuantity() { when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); - when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); - when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) - .thenReturn(ModelUtils.getAmount()); PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); diff --git a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java index cf3265bba..208fefea9 100644 --- a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java @@ -68,7 +68,6 @@ import greencity.repository.ServiceRepository; import greencity.repository.TariffsInfoRepository; import greencity.repository.UserRepository; -import greencity.repository.OrderBagRepository; import greencity.service.locations.LocationApiService; import greencity.service.notification.NotificationServiceImpl; import org.junit.jupiter.api.Assertions; @@ -124,6 +123,9 @@ import static greencity.ModelUtils.UPDATE_ORDER_PAGE_ADMIN_DTO; import static greencity.ModelUtils.getAddBonusesToUserDto; import static greencity.ModelUtils.getAdminCommentDto; +import static greencity.ModelUtils.getBag1list; +import static greencity.ModelUtils.getBag2list; +import static greencity.ModelUtils.getBag3list; import static greencity.ModelUtils.getBagInfoDto; import static greencity.ModelUtils.getBaglist; import static greencity.ModelUtils.getCertificateList; @@ -170,7 +172,6 @@ import static java.util.Collections.singletonList; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.anyLong; @@ -266,10 +267,6 @@ class UBSManagementServiceImplTest { @Mock RefundRepository refundRepository; - @Mock - private OrderBagService orderBagService; - @Mock - private OrderBagRepository orderBagRepository; @Test void getAllCertificates() { @@ -421,6 +418,7 @@ void checkUpdateManualPayment() { when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(paymentRepository.findById(1L)).thenReturn(Optional.of(getManualPayment())); when(paymentRepository.save(any())).thenReturn(getManualPayment()); + when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(getBaglist()); doNothing().when(eventService).save(OrderHistory.UPDATE_PAYMENT_MANUALLY + 1, employee.getFirstName() + " " + employee.getLastName(), getOrder()); @@ -429,6 +427,7 @@ void checkUpdateManualPayment() { verify(paymentRepository, times(1)).save(any()); verify(eventService, times(2)).save(any(), any(), any()); verify(fileService, times(0)).delete(null); + verify(bagRepository).findBagsByOrderId(order.getId()); } @Test @@ -484,14 +483,12 @@ void saveNewManualPaymentWithHalfPaidAmount() { when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(paymentRepository.save(any())) .thenReturn(payment); doNothing().when(eventService).save(any(), any(), any()); - when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); - ubsManagementService.saveNewManualPayment(1L, paymentDetails, null, "test@gmail.com"); - verify(employeeRepository, times(2)).findByEmail(anyString()); verify(eventService, times(1)).save(OrderHistory.ADD_PAYMENT_MANUALLY + 1, "Петро Петренко", order); @@ -521,6 +518,7 @@ void saveNewManualPaymentWithPaidAmount() { when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(paymentRepository.save(any())) .thenReturn(payment); @@ -1025,7 +1023,7 @@ void testGetOrderDetails() { when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(TEST_ORDER)); when(modelMapper.map(TEST_ORDER, new TypeToken>() { }.getType())).thenReturn(TEST_BAG_MAPPING_DTO_LIST); - when(orderBagService.findAllBagsByOrderId(1L)).thenReturn(TEST_BAG_LIST); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(TEST_BAG_LIST); when(modelMapper.map(TEST_BAG, BagInfoDto.class)).thenReturn(TEST_BAG_INFO_DTO); when(bagRepository.findAllByOrder(1L)).thenReturn(TEST_BAG_LIST); when(modelMapper.map(any(), eq(new TypeToken>() { @@ -1038,7 +1036,7 @@ void testGetOrderDetails() { verify(orderRepository).getOrderDetails(1L); verify(modelMapper).map(TEST_ORDER, new TypeToken>() { }.getType()); - verify(orderBagService).findAllBagsByOrderId(1L); + verify(bagRepository).findBagsByOrderId(1L); verify(bagRepository, times(1)).findAllByOrder(anyLong()); verify(modelMapper).map(TEST_BAG, BagInfoDto.class); verify(modelMapper).map(any(), eq(new TypeToken>() { @@ -1151,7 +1149,8 @@ void testSetOrderDetail() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); -// when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); + when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); when(paymentRepository.selectSumPaid(1L)).thenReturn(5000L); ubsManagementService.setOrderDetail(1L, @@ -1170,9 +1169,9 @@ void testSetOrderDetailNeedToChangeStatusToHALF_PAID() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(orderRepository.findSumOfCertificatesByOrderId(1L)).thenReturn(10L); - when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); - + when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); + when(paymentRepository.selectSumPaid(1L)).thenReturn(5000L); doNothing().when(orderRepository).updateOrderPaymentStatus(1L, OrderPaymentStatus.HALF_PAID.name()); ubsManagementService.setOrderDetail(1L, @@ -1193,10 +1192,11 @@ void testSetOrderDetailNeedToChangeStatusToUNPAID() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); -// when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); + when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); when(paymentRepository.selectSumPaid(1L)).thenReturn(null); doNothing().when(orderRepository).updateOrderPaymentStatus(1L, OrderPaymentStatus.UNPAID.name()); - when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); + ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "abc"); @@ -1214,7 +1214,7 @@ void testSetOrderDetailWhenSumPaidIsNull() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); -// when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); + when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); when(paymentRepository.selectSumPaid(1L)).thenReturn(null); ubsManagementService.setOrderDetail(1L, @@ -1253,10 +1253,12 @@ void testSetOrderDetailIfHalfPaid() { Bag tariffBagDto = ModelUtils.getTariffBag(); List bagList = getBaglist(); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(orderDto)); + when(bagRepository.findCapacityById(1)).thenReturn(1); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(orderDetailDto)); + when(bagRepository.findById(1)).thenReturn(Optional.ofNullable(tariffBagDto)); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(bagList); when(paymentRepository.selectSumPaid(1L)).thenReturn(0L); when(orderRepository.findSumOfCertificatesByOrderId(1L)).thenReturn(0L); - when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1274,11 +1276,14 @@ void testSetOrderDetailIfPaidAndPriceLessThanDiscount() { when(orderRepository.findSumOfCertificatesByOrderId(order.getId())).thenReturn(600L); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto2())); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); + when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(order.getId(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "abc"); - verify(certificateRepository).save(ModelUtils.getCertificate2().setPoints(0)); + + verify(certificateRepository).save(ModelUtils.getCertificate2().setPoints(20)); verify(userRepository).updateUserCurrentPoints(1L, 100); verify(orderRepository).updateOrderPointsToUse(1L, 0); } @@ -1292,7 +1297,8 @@ void testSetOrderDetailIfPaidAndPriceLessThanPaidSum() { when(orderRepository.findSumOfCertificatesByOrderId(order.getId())).thenReturn(600L); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto2())); -// when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); + when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(order.getId(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1306,9 +1312,12 @@ void testSetOrderDetailIfPaidAndPriceLessThanPaidSum() { @Test void testSetOrderDetailConfirmed() { when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusConfirmedDto())); + when(bagRepository.findCapacityById(1)).thenReturn(1); doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); + when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), @@ -1324,17 +1333,19 @@ void testSetOrderDetailConfirmed2() { when(bagRepository.findCapacityById(1)).thenReturn(1); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); when(orderDetailRepository.ifRecordExist(any(), any())).thenReturn(1L); - + when(orderDetailRepository.getAmount(any(), any())).thenReturn(1L); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "test@gmail.com"); - verify(orderRepository, times(2)).findById(1L); verify(bagRepository, times(2)).findCapacityById(1); - verify(bagRepository, times(2)).findActiveBagById(1); + verify(bagRepository, times(2)).findById(1); + verify(orderDetailRepository, times(2)).ifRecordExist(any(), any()); verify(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); + verify(orderDetailRepository).getAmount(any(), any()); verify(orderDetailRepository, times(0)).updateExporter(anyInt(), anyLong(), anyLong()); } @@ -1346,17 +1357,16 @@ void testSetOrderDetailWithExportedWaste() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); when(orderDetailRepository.ifRecordExist(any(), any())).thenReturn(1L); - ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "test@gmail.com"); - verify(orderRepository, times(2)).findById(1L); verify(bagRepository, times(2)).findCapacityById(1); - verify(bagRepository, times(2)).findActiveBagById(1); - verify(orderDetailRepository, times(2)).ifRecordExist(any(), any()); + verify(bagRepository, times(2)).findById(1); + verify(orderDetailRepository, times(3)).ifRecordExist(any(), any()); verify(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); verify(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); } @@ -1368,6 +1378,7 @@ void testSetOrderDetailFormed() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1381,7 +1392,7 @@ void testSetOrderDetailFormedWithBagNoPresent() { when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findCapacityById(1)).thenReturn(1); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); -// when(bagRepository.findActiveBagById(1)).thenReturn(Optional.empty()); + when(bagRepository.findById(1)).thenReturn(Optional.empty()); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1400,6 +1411,8 @@ void testSetOrderDetailNotTakenOut() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); + when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1417,6 +1430,7 @@ void testSetOrderDetailOnTheRoute() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1435,7 +1449,7 @@ void testSetOrderDetailsDone() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - + when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), @@ -1453,6 +1467,7 @@ void testSetOrderBroughtItHimself() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), @@ -1470,6 +1485,7 @@ void testSetOrderDetailsCanseled() { doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(1L, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1609,6 +1625,7 @@ void updateOrderAdminPageInfoTest() { when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, 1L, "en", "test@gmail.com"); UpdateOrderPageAdminDto emptyDto = new UpdateOrderPageAdminDto(); @@ -1648,6 +1665,7 @@ void updateOrderAdminPageInfoWithUbsCourierSumAndWriteOffStationSum() { when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); when(orderRepository.getOrderDetails(anyLong())) .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, 1L, "en", "test@gmail.com"); UpdateOrderPageAdminDto emptyDto = new UpdateOrderPageAdminDto(); @@ -1912,6 +1930,7 @@ void getOrderSumDetailsForCanceledPaidOrderWithBags() { Order order = ModelUtils.getCanceledPaidOrder(); order.setOrderDate(LocalDateTime.now()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag3list()); doNothing().when(notificationService).notifyPaidOrder(order); doNothing().when(notificationService).notifyHalfPaidPackage(order); @@ -1940,6 +1959,7 @@ void getOrderSumDetailsForFormedHalfPaidOrder() { Order order = ModelUtils.getFormedHalfPaidOrder(); order.setOrderDate(LocalDateTime.now()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); doNothing().when(notificationService).notifyPaidOrder(order); doNothing().when(notificationService).notifyHalfPaidPackage(order); @@ -1954,6 +1974,7 @@ void getOrderSumDetailsForFormedHalfPaidOrderWithDiffBags() { Order order = ModelUtils.getFormedHalfPaidOrder(); order.setOrderDate(LocalDateTime.now()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag3list()); doNothing().when(notificationService).notifyPaidOrder(order); doNothing().when(notificationService).notifyHalfPaidPackage(order); @@ -1968,6 +1989,7 @@ void getOrderSumDetailsForCanceledHalfPaidOrder() { Order order = ModelUtils.getCanceledHalfPaidOrder(); order.setOrderDate(LocalDateTime.now()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); doNothing().when(notificationService).notifyPaidOrder(order); doNothing().when(notificationService).notifyHalfPaidPackage(order); @@ -1993,7 +2015,8 @@ void getOrderStatusDataTest() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); + when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(1L)).thenReturn(getCertificateList()); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(getService())); @@ -2010,7 +2033,9 @@ void getOrderStatusDataTest() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); - verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); + verify(orderRepository).getOrderDetails(1L); + verify(bagRepository).findBagsByOrderId(1L); + verify(bagRepository).findBagsByTariffsInfoId(1L); verify(certificateRepository).findCertificate(1L); verify(orderRepository, times(5)).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); @@ -2067,7 +2092,8 @@ void getOrderStatusDataTestEmptyPriceDetails() { .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); - when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); + when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag2list()); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.empty()); when(modelMapper.map(getBaglist().get(0), BagInfoDto.class)).thenReturn(bagInfoDto); when(orderStatusTranslationRepository.getOrderStatusTranslationById(6L)) @@ -2083,7 +2109,8 @@ void getOrderStatusDataTestEmptyPriceDetails() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); + verify(bagRepository).findBagsByOrderId(1L); + verify(bagRepository).findBagsByTariffsInfoId(1L); verify(certificateRepository).findCertificate(1L); verify(orderRepository, times(5)).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); @@ -2107,7 +2134,8 @@ void getOrderStatusDataWithEmptyCertificateTest() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); + when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(getService())); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); when(modelMapper.map(getBaglist().get(0), BagInfoDto.class)).thenReturn(bagInfoDto); @@ -2122,7 +2150,8 @@ void getOrderStatusDataWithEmptyCertificateTest() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); + verify(bagRepository).findBagsByOrderId(1L); + verify(bagRepository).findBagsByTariffsInfoId(1L); verify(orderRepository, times(5)).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); verify(modelMapper).map(getBaglist().get(0), BagInfoDto.class); @@ -2144,7 +2173,8 @@ void getOrderStatusDataWhenOrderTranslationIsNull() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); + when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(getService())); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); when(modelMapper.map(getBaglist().get(0), BagInfoDto.class)).thenReturn(bagInfoDto); @@ -2157,7 +2187,8 @@ void getOrderStatusDataWhenOrderTranslationIsNull() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); + verify(bagRepository).findBagsByOrderId(1L); + verify(bagRepository).findBagsByTariffsInfoId(1L); verify(orderRepository, times(5)).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); verify(modelMapper).map(getBaglist().get(0), BagInfoDto.class); @@ -2179,6 +2210,7 @@ void getOrderStatusDataExceptionTest() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(1L)).thenReturn(getCertificateList()); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(getService())); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); @@ -2454,7 +2486,8 @@ void getOrderStatusDataWithNotEmptyLists() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); + when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(1L)).thenReturn(getCertificateList()); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); when(modelMapper.map(getBaglist().get(0), BagInfoDto.class)).thenReturn(bagInfoDto); @@ -2472,7 +2505,8 @@ void getOrderStatusDataWithNotEmptyLists() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); + verify(bagRepository).findBagsByTariffsInfoId(1L); + verify(bagRepository).findBagsByOrderId(1L); verify(certificateRepository).findCertificate(1L); verify(orderRepository, times(5)).findById(1L); verify(modelMapper).map(getBaglist().get(0), BagInfoDto.class); @@ -2498,7 +2532,8 @@ void getOrderStatusesTranslationTest() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); + when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(1L)).thenReturn(getCertificateList()); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); when(modelMapper.map(getBaglist().get(0), BagInfoDto.class)).thenReturn(bagInfoDto); @@ -2521,7 +2556,8 @@ void getOrderStatusesTranslationTest() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); + verify(bagRepository).findBagsByOrderId(1L); + verify(bagRepository).findBagsByTariffsInfoId(1L); verify(certificateRepository).findCertificate(1L); verify(orderRepository, times(5)).findById(1L); verify(modelMapper).map(getBaglist().get(0), BagInfoDto.class); @@ -2598,6 +2634,7 @@ void addBonusesToUserTest() { Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); ubsManagementService.addBonusesToUser(getAddBonusesToUserDto(), 1L, employee.getEmail()); @@ -2605,7 +2642,7 @@ void addBonusesToUserTest() { verify(orderRepository).findById(1L); verify(orderRepository).save(order); verify(userRepository).save(user); - verify(notificationService).notifyBonuses(order, 900L); + verify(notificationService).notifyBonuses(order, 809L); verify(eventService).saveEvent(OrderHistory.ADDED_BONUSES, employee.getEmail(), order); } @@ -2617,7 +2654,7 @@ void addBonusesToUserIfOrderStatusIsCanceled() { Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); -// when(orderBagService.findAllBagsByOrderId(1L)).thenReturn(getBaglist()); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); ubsManagementService.addBonusesToUser(getAddBonusesToUserDto(), 1L, employee.getEmail()); @@ -2636,6 +2673,7 @@ void addBonusesToUserWithoutExportedBagsTest() { Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); ubsManagementService.addBonusesToUser(getAddBonusesToUserDto(), 1L, employee.getEmail()); @@ -2643,18 +2681,26 @@ void addBonusesToUserWithoutExportedBagsTest() { verify(orderRepository).findById(1L); verify(orderRepository).save(order); verify(userRepository).save(user); - verify(notificationService).notifyBonuses(order, 300L); + verify(notificationService).notifyBonuses(order, 209L); verify(eventService).saveEvent(OrderHistory.ADDED_BONUSES, employee.getEmail(), order); } + @Test + void addBonusesToUserWithoutOrderTest() { + when(orderRepository.findById(1L)).thenReturn(Optional.empty()); + AddBonusesToUserDto dto = getAddBonusesToUserDto(); + String email = getEmployee().getEmail(); + assertThrows(NotFoundException.class, () -> ubsManagementService.addBonusesToUser(dto, 1L, email)); + } + @Test void addBonusesToUserWithNoOverpaymentTest() { Order order = getOrderForGetOrderStatusData2Test(); String email = getEmployee().getEmail(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); + when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag3list()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); - when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); AddBonusesToUserDto addBonusesToUserDto = getAddBonusesToUserDto(); assertThrows(BadRequestException.class, From 0903928d99a869d7c8470beade06255ecc177a71 Mon Sep 17 00:00:00 2001 From: Anton Bondar <53192419+ABbondar@users.noreply.github.com> Date: Mon, 7 Aug 2023 10:11:50 +0300 Subject: [PATCH 41/80] addresses in order (#1205) --- .../controller/AddressController.java | 14 +-- core/src/test/java/greencity/ModelUtils.java | 4 + .../dto/CreateAddressRequestDto.java | 41 +++++-- .../service/ubs/UBSClientServiceImpl.java | 32 ++++- .../src/test/java/greencity/ModelUtils.java | 109 ++++++++++++++++++ .../service/ubs/UBSClientServiceImplTest.java | 88 +++++++++++--- 6 files changed, 258 insertions(+), 30 deletions(-) diff --git a/core/src/main/java/greencity/controller/AddressController.java b/core/src/main/java/greencity/controller/AddressController.java index b3b134f09..0f7c0a01f 100644 --- a/core/src/main/java/greencity/controller/AddressController.java +++ b/core/src/main/java/greencity/controller/AddressController.java @@ -17,17 +17,17 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseStatus; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; import springfox.documentation.annotations.ApiIgnore; import javax.validation.Valid; diff --git a/core/src/test/java/greencity/ModelUtils.java b/core/src/test/java/greencity/ModelUtils.java index 29a6f19d3..a08a68d88 100644 --- a/core/src/test/java/greencity/ModelUtils.java +++ b/core/src/test/java/greencity/ModelUtils.java @@ -562,6 +562,10 @@ public static CreateAddressRequestDto getAddressRequestDto() { .houseCorpus("2") .entranceNumber("3") .placeId("place_id") + .city("city") + .cityEn("cityEn") + .street("street") + .streetEn("streetEn") .build(); } diff --git a/service-api/src/main/java/greencity/dto/CreateAddressRequestDto.java b/service-api/src/main/java/greencity/dto/CreateAddressRequestDto.java index 41a172b4e..75715bce1 100644 --- a/service-api/src/main/java/greencity/dto/CreateAddressRequestDto.java +++ b/service-api/src/main/java/greencity/dto/CreateAddressRequestDto.java @@ -1,9 +1,5 @@ package greencity.dto; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; - import lombok.AllArgsConstructor; import lombok.Builder; import lombok.EqualsAndHashCode; @@ -11,39 +7,68 @@ import lombok.NoArgsConstructor; import lombok.ToString; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.Pattern; + @Getter @AllArgsConstructor @NoArgsConstructor -@EqualsAndHashCode +@EqualsAndHashCode(exclude = {"placeId", "searchAddress", "addressComment"}) @ToString @Builder public class CreateAddressRequestDto { // CHECKSTYLE:OFF - private static final String validationMessage = "use only English,or Ukrainian letter"; - private static final String notEmptyValidationMessage = "name must not be empty"; + private static final String validationMessage = "Use only English,or Ukrainian letter"; + private static final String notEmptyValidationMessage = "Name must not be empty"; private static final String houseNumberNotValid = "House number is invalid"; + @Pattern(regexp = "[-A-Za-zА-Яа-яЁёЇїІіЄєҐґ0-9.,ʼ'`ʹ—/\"\\s]*", message = validationMessage) @NotEmpty(message = notEmptyValidationMessage) private String searchAddress; + @Pattern(regexp = "[-A-Za-zА-Яа-яЇїІіЄєҐґ .,ʼ'`ʹ]*", message = validationMessage) @NotEmpty(message = notEmptyValidationMessage) private String districtEn; + @Pattern(regexp = "[-A-Za-zА-Яа-яЇїІіЄєҐґ .,ʼ'`ʹ]*", message = validationMessage) @NotEmpty(message = notEmptyValidationMessage) private String district; + @Pattern(regexp = "[-A-Za-zА-Яа-яЇїІіЄєҐґ ʼ'`ʹ]*", message = validationMessage) @NotEmpty(message = notEmptyValidationMessage) private String regionEn; + @Pattern(regexp = "[-A-Za-zА-Яа-яЇїІіЄєҐґ ʼ'`ʹ]*", message = validationMessage) @NotEmpty(message = notEmptyValidationMessage) private String region; + @Pattern(regexp = "[-A-Za-zА-Яа-яЁёЇїІіЄєҐґ0-9.,ʼ'`ʹ—/\"\\s]" + "{1,10}", message = houseNumberNotValid) @NotBlank(message = notEmptyValidationMessage) private String houseNumber; + private String entranceNumber; + private String houseCorpus; + @Pattern(regexp = "[-A-Za-zА-Яа-яЇїІіЄєҐґ 0-9.,ʼ'`ʹ!?]*", message = validationMessage) private String addressComment; - @NotEmpty + private String placeId; + + @Pattern(regexp = "[-A-Za-zА-Яа-яЇїІіЄєҐґ .,ʼ'`ʹ]*", message = validationMessage) + @NotEmpty(message = notEmptyValidationMessage) + private String city; + + @Pattern(regexp = "[-A-Za-zА-Яа-яЇїІіЄєҐґ .,ʼ'`ʹ]*", message = validationMessage) + @NotEmpty(message = notEmptyValidationMessage) + private String cityEn; + + @Pattern(regexp = "[-A-Za-zА-Яа-яЇїІіЄєҐґ .,ʼ'`ʹ]*", message = validationMessage) + @NotEmpty(message = notEmptyValidationMessage) + private String street; + + @Pattern(regexp = "[-A-Za-zА-Яа-яЇїІіЄєҐґ .,ʼ'`ʹ]*", message = validationMessage) + @NotEmpty(message = notEmptyValidationMessage) + private String streetEn; } diff --git a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java index a879098f5..4b18d8f5a 100644 --- a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java @@ -192,7 +192,6 @@ import static greencity.constant.ErrorMessage.USER_DONT_HAVE_ENOUGH_POINTS; import static greencity.constant.ErrorMessage.USER_WITH_CURRENT_ID_DOES_NOT_EXIST; import static greencity.constant.ErrorMessage.USER_WITH_CURRENT_UUID_DOES_NOT_EXIST; - import static java.util.Objects.nonNull; import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toList; @@ -559,6 +558,12 @@ public OrderWithAddressesResponseDto saveCurrentAddressForOrder(CreateAddressReq throw new BadRequestException(NUMBER_OF_ADDRESSES_EXCEEDED); } + if (addressRequestDto.getPlaceId().isEmpty()) { + checkIfAddressExistIgnorePlaceId(addresses, addressRequestDto); + saveAddressWithoutPlaceId(addresses, addressRequestDto, currentUser); + return findAllAddressesForCurrentOrder(uuid); + } + OrderAddressDtoRequest dtoRequest = getLocationDto(addressRequestDto.getPlaceId()); OrderAddressDtoRequest addressRequestDtoForNullCheck = @@ -566,6 +571,7 @@ public OrderWithAddressesResponseDto saveCurrentAddressForOrder(CreateAddressReq addressRequestDtoForNullCheck.setId(0L); checkNullFieldsOnGoogleResponse(dtoRequest, addressRequestDtoForNullCheck); + checkIfAddressExistIgnorePlaceId(addresses, addressRequestDto); checkIfAddressExist(addresses, dtoRequest); Address address = modelMapper.map(dtoRequest, Address.class); @@ -616,6 +622,19 @@ public OrderWithAddressesResponseDto updateCurrentAddressForOrder(OrderAddressDt return findAllAddressesForCurrentOrder(uuid); } + private void saveAddressWithoutPlaceId(List
addresses, CreateAddressRequestDto addressRequestDto, + User currentUser) { + Address address = modelMapper.map(addressRequestDto, Address.class); + + address.setCoordinates(Coordinates.builder().latitude(0.0).build()); + address.setCoordinates(Coordinates.builder().longitude(0.0).build()); + + address.setUser(currentUser); + address.setActual(addresses.isEmpty()); + address.setAddressStatus(AddressStatus.NEW); + addressRepo.save(address); + } + private void checkIfAddressExist(List
addresses, OrderAddressDtoRequest dtoRequest) { boolean exist = addresses.stream() .map(address -> modelMapper.map(address, OrderAddressDtoRequest.class)) @@ -626,6 +645,17 @@ private void checkIfAddressExist(List
addresses, OrderAddressDtoRequest } } + private void checkIfAddressExistIgnorePlaceId(List
addresses, + CreateAddressRequestDto addressRequestDto) { + boolean exist = addresses.stream() + .map(address -> modelMapper.map(address, CreateAddressRequestDto.class)) + .anyMatch(addressDto -> addressDto.equals(addressRequestDto)); + + if (exist) { + throw new BadRequestException(ADDRESS_ALREADY_EXISTS); + } + } + private Map> initializeUkrainianGeoCodingResult( OrderAddressDtoRequest dtoRequest) { return Map.of( diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index 8af4d2756..01c8d4cf8 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -1656,6 +1656,25 @@ public static AddressDto addressDto() { .build(); } + public static AddressDto addressWithEmptyPlaceIdDto() { + return AddressDto.builder() + .id(1L) + .entranceNumber("7a") + .houseCorpus("2") + .houseNumber("25") + .street("Street") + .streetEn("StreetEn") + .coordinates(Coordinates.builder() + .latitude(0.0) + .longitude(0.0) + .build()) + .district("Distinct") + .city("City") + .cityEn("CityEn") + .actual(false) + .build(); + } + public static AddressDto addressWithKyivRegionDto() { return AddressDto.builder() .id(1L) @@ -4409,6 +4428,59 @@ public static CreateAddressRequestDto getAddressRequestDto() { .build(); } + public static CreateAddressRequestDto getAddressRequestToSaveDto() { + return CreateAddressRequestDto.builder() + .addressComment("fdsfs2") + .searchAddress("fake street name2, 132, fake street2, 020002") + .district("fdsfds2") + .districtEn("dsadsad2") + .region("regdsad2") + .regionEn("regdsaden2") + .houseNumber("12") + .houseCorpus("22") + .entranceNumber("32") + .placeId("place_id") + .build(); + } + + public static CreateAddressRequestDto getAddressRequestWithEmptyPlaceIdDto() { + return CreateAddressRequestDto.builder() + .addressComment("fdsfs") + .searchAddress("fake street name, 13, fake street, 02000") + .district("fdsfds") + .districtEn("dsadsad") + .region("regdsad") + .regionEn("regdsaden") + .houseNumber("1") + .houseCorpus("2") + .entranceNumber("3") + .placeId("") + .street("street") + .streetEn("streetEn") + .city("city") + .cityEn("cityEn") + .build(); + } + + public static CreateAddressRequestDto getAddressRequestWithEmptyPlaceIdToSaveDto() { + return CreateAddressRequestDto.builder() + .addressComment("fdsfs1") + .searchAddress("fake street name, 13, fake street, 02000") + .district("fdsfds1") + .districtEn("dsadsad1") + .region("regdsad1") + .regionEn("regdsaden1") + .houseNumber("11") + .houseCorpus("21") + .entranceNumber("31") + .placeId("") + .street("street1") + .streetEn("streetEn1") + .city("city1") + .cityEn("cityEn1") + .build(); + } + public static CreateAddressRequestDto getAddressWithKyivRegionRequestDto() { return CreateAddressRequestDto.builder() .addressComment("fdsfs") @@ -4424,6 +4496,21 @@ public static CreateAddressRequestDto getAddressWithKyivRegionRequestDto() { .build(); } + public static CreateAddressRequestDto getAddressWithKyivRegionToSaveRequestDto() { + return CreateAddressRequestDto.builder() + .addressComment("fdsfs1") + .searchAddress("fake street name, 13, fake street, 02000") + .district("fdsfds1") + .districtEn("dsadsad1") + .regionEn(KYIV_REGION_EN) + .region(KYIV_REGION_UA) + .houseNumber("11") + .houseCorpus("21") + .entranceNumber("31") + .placeId("place_id") + .build(); + } + public static OrderAddressDtoRequest getTestOrderAddressDtoRequest() { return OrderAddressDtoRequest.builder() .id(0L) @@ -4509,6 +4596,28 @@ public static OrderWithAddressesResponseDto getAddressDtoResponse() { .build(); } + public static OrderWithAddressesResponseDto getOrderWithAddressesResponseDto() { + return OrderWithAddressesResponseDto.builder() + .addressList(List.of( + AddressDto.builder() + .id(1L) + .city("City") + .cityEn("CityEn") + .district("Distinct") + .entranceNumber("7a") + .houseCorpus("2") + .houseNumber("25") + .street("Street") + .streetEn("StreetEn") + .coordinates(Coordinates.builder() + .latitude(0.0) + .longitude(0.0) + .build()) + .actual(false) + .build())) + .build(); + } + public static TariffsForLocationDto getTariffsForLocationDto() { return TariffsForLocationDto.builder().build(); } diff --git a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java index 964b13b3a..0e9a92570 100644 --- a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java @@ -133,6 +133,7 @@ import static greencity.ModelUtils.addressDto; import static greencity.ModelUtils.addressDtoList; import static greencity.ModelUtils.addressList; +import static greencity.ModelUtils.addressWithEmptyPlaceIdDto; import static greencity.ModelUtils.addressWithKyivRegionDto; import static greencity.ModelUtils.bagDto; import static greencity.ModelUtils.botList; @@ -140,7 +141,11 @@ import static greencity.ModelUtils.getAddress; import static greencity.ModelUtils.getAddressDtoResponse; import static greencity.ModelUtils.getAddressRequestDto; +import static greencity.ModelUtils.getAddressRequestToSaveDto; +import static greencity.ModelUtils.getAddressRequestWithEmptyPlaceIdDto; +import static greencity.ModelUtils.getAddressRequestWithEmptyPlaceIdToSaveDto; import static greencity.ModelUtils.getAddressWithKyivRegionRequestDto; +import static greencity.ModelUtils.getAddressWithKyivRegionToSaveRequestDto; import static greencity.ModelUtils.getBag; import static greencity.ModelUtils.getBag1list; import static greencity.ModelUtils.getBag4list; @@ -171,6 +176,7 @@ import static greencity.ModelUtils.getOrderStatusDto; import static greencity.ModelUtils.getOrderStatusTranslation; import static greencity.ModelUtils.getOrderTest; +import static greencity.ModelUtils.getOrderWithAddressesResponseDto; import static greencity.ModelUtils.getOrderWithEvents; import static greencity.ModelUtils.getOrderWithTariffAndLocation; import static greencity.ModelUtils.getOrderWithoutPayment; @@ -1780,26 +1786,66 @@ void testSaveCurrentAddressForOrder() { String uuid = user.getUuid(); OrderAddressDtoRequest dtoRequest = getTestOrderAddressLocationDto(); CreateAddressRequestDto createAddressRequestDto = getAddressRequestDto(); + CreateAddressRequestDto createAddressRequestToSaveDto = getAddressRequestToSaveDto(); Address addressToSave = new Address(); when(userRepository.findByUuid(user.getUuid())).thenReturn(user); when(addressRepository.findAllNonDeletedAddressesByUserId(user.getId())).thenReturn(addresses); when(googleApiService.getResultFromGeoCode(eq(dtoRequest.getPlaceId()), anyInt())) .thenReturn(getGeocodingResult().get(0)); - when(modelMapper.map(any(), - eq(OrderAddressDtoRequest.class))) - .thenReturn(TEST_ORDER_ADDRESS_DTO_REQUEST); - when(modelMapper.map(any(), - eq(Address.class))).thenReturn(addressToSave); - when(modelMapper.map(addresses.get(0), - AddressDto.class)) - .thenReturn(addressDto()); + + when(modelMapper.map(any(), eq(CreateAddressRequestDto.class))).thenReturn(createAddressRequestDto); + when(modelMapper.map(any(), eq(OrderAddressDtoRequest.class))).thenReturn(TEST_ORDER_ADDRESS_DTO_REQUEST); + when(modelMapper.map(any(), eq(Address.class))).thenReturn(addressToSave); + when(modelMapper.map(addresses.get(0), AddressDto.class)).thenReturn(addressDto()); OrderWithAddressesResponseDto actualWithSearchAddress = - ubsService.saveCurrentAddressForOrder(createAddressRequestDto, uuid); + ubsService.saveCurrentAddressForOrder(createAddressRequestToSaveDto, uuid); assertEquals(getAddressDtoResponse(), actualWithSearchAddress); verify(addressRepository).save(addressToSave); + + verify(userRepository, times(2)).findByUuid(user.getUuid()); + verify(addressRepository, times(2)).findAllNonDeletedAddressesByUserId(user.getId()); + verify(googleApiService, times(2)).getResultFromGeoCode(eq(dtoRequest.getPlaceId()), anyInt()); + + verify(modelMapper).map(any(), eq(CreateAddressRequestDto.class)); + verify(modelMapper, times(2)).map(any(), eq(OrderAddressDtoRequest.class)); + verify(modelMapper).map(any(), eq(Address.class)); + verify(modelMapper).map(addresses.get(0), AddressDto.class); + } + + @Test + void saveCurrentAddressForOrderWithEmptyPlaceIdTest() { + User user = getUserForCreate(); + List
addresses = user.getAddresses(); + addresses.get(0).setActual(false); + addresses.get(0).setAddressStatus(AddressStatus.NEW); + + String uuid = user.getUuid(); + CreateAddressRequestDto createAddressRequestDto = getAddressRequestWithEmptyPlaceIdDto(); + CreateAddressRequestDto createAddressRequestToSaveDto = getAddressRequestWithEmptyPlaceIdToSaveDto(); + Address addressToSave = new Address(); + + when(userRepository.findByUuid(user.getUuid())).thenReturn(user); + when(addressRepository.findAllNonDeletedAddressesByUserId(user.getId())).thenReturn(addresses); + + when(modelMapper.map(any(), eq(CreateAddressRequestDto.class))).thenReturn(createAddressRequestDto); + when(modelMapper.map(any(), eq(Address.class))).thenReturn(addressToSave); + when(modelMapper.map(addresses.get(0), AddressDto.class)).thenReturn(addressWithEmptyPlaceIdDto()); + + OrderWithAddressesResponseDto actualWithSearchAddress = + ubsService.saveCurrentAddressForOrder(createAddressRequestToSaveDto, uuid); + + assertEquals(getOrderWithAddressesResponseDto(), actualWithSearchAddress); + verify(addressRepository).save(addressToSave); + + verify(userRepository, times(2)).findByUuid(user.getUuid()); + verify(addressRepository, times(2)).findAllNonDeletedAddressesByUserId(user.getId()); + + verify(modelMapper).map(any(), eq(CreateAddressRequestDto.class)); + verify(modelMapper).map(any(), eq(Address.class)); + verify(modelMapper).map(addresses.get(0), AddressDto.class); } @Test @@ -1812,6 +1858,7 @@ void saveCurrentAddressForOrderForAddressesBelongToKyivEnTest() { String uuid = user.getUuid(); OrderAddressDtoRequest dtoRequest = getTestOrderAddressLocationDto(); CreateAddressRequestDto createAddressRequestDto = getAddressWithKyivRegionRequestDto(); + CreateAddressRequestDto createAddressRequestToSaveDto = getAddressWithKyivRegionToSaveRequestDto(); Address addressToSave = new Address(); when(userRepository.findByUuid(user.getUuid())).thenReturn(user); @@ -1819,12 +1866,13 @@ void saveCurrentAddressForOrderForAddressesBelongToKyivEnTest() { when(googleApiService.getResultFromGeoCode(eq(dtoRequest.getPlaceId()), anyInt())) .thenReturn(getGeocodingResultWithKyivRegion().get(0)); + when(modelMapper.map(any(), eq(CreateAddressRequestDto.class))).thenReturn(createAddressRequestDto); when(modelMapper.map(any(), eq(OrderAddressDtoRequest.class))).thenReturn(TEST_ORDER_ADDRESS_DTO_REQUEST); when(modelMapper.map(any(), eq(Address.class))).thenReturn(addressToSave); when(modelMapper.map(addresses.get(0), AddressDto.class)).thenReturn(addressWithKyivRegionDto()); OrderWithAddressesResponseDto actualWithSearchAddress = - ubsService.saveCurrentAddressForOrder(createAddressRequestDto, uuid); + ubsService.saveCurrentAddressForOrder(createAddressRequestToSaveDto, uuid); assertEquals(KYIV_REGION_EN, actualWithSearchAddress.getAddressList().get(0).getRegionEn()); @@ -1832,6 +1880,7 @@ void saveCurrentAddressForOrderForAddressesBelongToKyivEnTest() { verify(addressRepository, times(2)).findAllNonDeletedAddressesByUserId(user.getId()); verify(googleApiService, times(2)).getResultFromGeoCode(eq(dtoRequest.getPlaceId()), anyInt()); + verify(modelMapper).map(any(), eq(CreateAddressRequestDto.class)); verify(modelMapper, times(2)).map(any(), eq(OrderAddressDtoRequest.class)); verify(modelMapper).map(any(), eq(Address.class)); verify(modelMapper).map(addresses.get(0), AddressDto.class); @@ -1849,6 +1898,7 @@ void saveCurrentAddressForOrderForAddressesBelongToKyivUaTest() { String uuid = user.getUuid(); OrderAddressDtoRequest dtoRequest = getTestOrderAddressLocationDto(); CreateAddressRequestDto createAddressRequestDto = getAddressWithKyivRegionRequestDto(); + CreateAddressRequestDto createAddressRequestToSaveDto = getAddressWithKyivRegionToSaveRequestDto(); Address addressToSave = new Address(); when(userRepository.findByUuid(user.getUuid())).thenReturn(user); @@ -1856,12 +1906,13 @@ void saveCurrentAddressForOrderForAddressesBelongToKyivUaTest() { when(googleApiService.getResultFromGeoCode(eq(dtoRequest.getPlaceId()), anyInt())) .thenReturn(getGeocodingResultWithKyivRegion().get(1)); + when(modelMapper.map(any(), eq(CreateAddressRequestDto.class))).thenReturn(createAddressRequestDto); when(modelMapper.map(any(), eq(OrderAddressDtoRequest.class))).thenReturn(TEST_ORDER_ADDRESS_DTO_REQUEST); when(modelMapper.map(any(), eq(Address.class))).thenReturn(addressToSave); when(modelMapper.map(addresses.get(0), AddressDto.class)).thenReturn(addressWithKyivRegionDto()); OrderWithAddressesResponseDto actualWithSearchAddress = - ubsService.saveCurrentAddressForOrder(createAddressRequestDto, uuid); + ubsService.saveCurrentAddressForOrder(createAddressRequestToSaveDto, uuid); assertEquals(KYIV_REGION_UA, actualWithSearchAddress.getAddressList().get(0).getRegion()); @@ -1869,6 +1920,7 @@ void saveCurrentAddressForOrderForAddressesBelongToKyivUaTest() { verify(addressRepository, times(2)).findAllNonDeletedAddressesByUserId(user.getId()); verify(googleApiService, times(2)).getResultFromGeoCode(eq(dtoRequest.getPlaceId()), anyInt()); + verify(modelMapper).map(any(), eq(CreateAddressRequestDto.class)); verify(modelMapper, times(2)).map(any(), eq(OrderAddressDtoRequest.class)); verify(modelMapper).map(any(), eq(Address.class)); verify(modelMapper).map(addresses.get(0), AddressDto.class); @@ -1892,15 +1944,23 @@ void testSaveCurrentAddressForOrderAlreadyExistException() { when(addressRepository.findAllNonDeletedAddressesByUserId(user.getId())).thenReturn(addresses); when(googleApiService.getResultFromGeoCode(eq(dtoRequest.getPlaceId()), anyInt())) .thenReturn(getGeocodingResult().get(0)); + dtoRequest.setPlaceId(null); - when(modelMapper.map(any(), - eq(OrderAddressDtoRequest.class))) - .thenReturn(dtoRequest); + + when(modelMapper.map(any(), eq(CreateAddressRequestDto.class))).thenReturn(createAddressRequestDto); + when(modelMapper.map(any(), eq(OrderAddressDtoRequest.class))).thenReturn(dtoRequest); BadRequestException exception = assertThrows(BadRequestException.class, () -> ubsService.saveCurrentAddressForOrder(createAddressRequestDto, uuid)); assertEquals(ADDRESS_ALREADY_EXISTS, exception.getMessage()); + + verify(userRepository).findByUuid(user.getUuid()); + verify(addressRepository).findAllNonDeletedAddressesByUserId(user.getId()); + verify(googleApiService, times(0)).getResultFromGeoCode(eq(dtoRequest.getPlaceId()), anyInt()); + + verify(modelMapper).map(any(), eq(CreateAddressRequestDto.class)); + verify(modelMapper).map(any(), eq(OrderAddressDtoRequest.class)); } @Test From fc17bc47b7a55418aa39179b799e1efcd076ebb1 Mon Sep 17 00:00:00 2001 From: Anton Bondar <53192419+ABbondar@users.noreply.github.com> Date: Mon, 7 Aug 2023 11:38:34 +0300 Subject: [PATCH 42/80] [UBS] - Add an option for the user to save the garbage collection address themselves without using Google API #6139 (#1206) * address request * var name * var name --- .../src/main/java/greencity/dto/CreateAddressRequestDto.java | 1 - 1 file changed, 1 deletion(-) diff --git a/service-api/src/main/java/greencity/dto/CreateAddressRequestDto.java b/service-api/src/main/java/greencity/dto/CreateAddressRequestDto.java index 75715bce1..bc67fb868 100644 --- a/service-api/src/main/java/greencity/dto/CreateAddressRequestDto.java +++ b/service-api/src/main/java/greencity/dto/CreateAddressRequestDto.java @@ -24,7 +24,6 @@ public class CreateAddressRequestDto { private static final String houseNumberNotValid = "House number is invalid"; @Pattern(regexp = "[-A-Za-zА-Яа-яЁёЇїІіЄєҐґ0-9.,ʼ'`ʹ—/\"\\s]*", message = validationMessage) - @NotEmpty(message = notEmptyValidationMessage) private String searchAddress; @Pattern(regexp = "[-A-Za-zА-Яа-яЇїІіЄєҐґ .,ʼ'`ʹ]*", message = validationMessage) From 0b7c95444590ea29288459b3f0150ed0ad9312ed Mon Sep 17 00:00:00 2001 From: HelenSotnik <63450632+HelenSotnik@users.noreply.github.com> Date: Mon, 7 Aug 2023 19:05:06 +0300 Subject: [PATCH 43/80] Commit with change of max characters for Tariff Service Name from 30 to 255 (#1209) Co-authored-by: Helen Sotnik --- dao/src/main/java/greencity/entity/order/Bag.java | 4 ++-- .../src/main/java/greencity/dto/service/TariffServiceDto.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dao/src/main/java/greencity/entity/order/Bag.java b/dao/src/main/java/greencity/entity/order/Bag.java index dafb97462..85d312524 100644 --- a/dao/src/main/java/greencity/entity/order/Bag.java +++ b/dao/src/main/java/greencity/entity/order/Bag.java @@ -47,10 +47,10 @@ public class Bag { @Column(nullable = false) private Long fullPrice; - @Column(nullable = false, length = 30) + @Column(nullable = false) private String name; - @Column(nullable = false, length = 30) + @Column(nullable = false) private String nameEng; @Column(nullable = false) diff --git a/service-api/src/main/java/greencity/dto/service/TariffServiceDto.java b/service-api/src/main/java/greencity/dto/service/TariffServiceDto.java index e20f5dfc0..f45455855 100644 --- a/service-api/src/main/java/greencity/dto/service/TariffServiceDto.java +++ b/service-api/src/main/java/greencity/dto/service/TariffServiceDto.java @@ -43,11 +43,11 @@ public class TariffServiceDto { private Double commission; @NotBlank - @Length(min = 1, max = 30) + @Length(min = 1, max = 255) private String name; @NotBlank - @Length(min = 1, max = 30) + @Length(min = 1, max = 255) private String nameEng; @NotBlank From cee8928dc5d3f3d703ef357cfa21b604a14a5ccb Mon Sep 17 00:00:00 2001 From: HelenSotnik <63450632+HelenSotnik@users.noreply.github.com> Date: Mon, 7 Aug 2023 21:05:07 +0300 Subject: [PATCH 44/80] 5579 bug change tariff service name from30 to255 char (#1210) * Commit with change of max characters for Tariff Service Name from 30 to 255 * Commit with changes in db table service columns from 30 to 255 --------- Co-authored-by: Helen Sotnik --- .../main/resources/db/changelog/db.changelog-master.xml | 1 + .../2023-08-07-change-service-name-column-length.xml | 9 +++++++++ .../db/changelog/sql/tariff-name-length-change.sql | 4 ++++ 3 files changed, 14 insertions(+) create mode 100644 dao/src/main/resources/db/changelog/logs/2023-08-07-change-service-name-column-length.xml create mode 100644 dao/src/main/resources/db/changelog/sql/tariff-name-length-change.sql diff --git a/dao/src/main/resources/db/changelog/db.changelog-master.xml b/dao/src/main/resources/db/changelog/db.changelog-master.xml index db07e44e8..9cec8ece8 100644 --- a/dao/src/main/resources/db/changelog/db.changelog-master.xml +++ b/dao/src/main/resources/db/changelog/db.changelog-master.xml @@ -214,4 +214,5 @@ + \ No newline at end of file diff --git a/dao/src/main/resources/db/changelog/logs/2023-08-07-change-service-name-column-length.xml b/dao/src/main/resources/db/changelog/logs/2023-08-07-change-service-name-column-length.xml new file mode 100644 index 000000000..6f54bd7a8 --- /dev/null +++ b/dao/src/main/resources/db/changelog/logs/2023-08-07-change-service-name-column-length.xml @@ -0,0 +1,9 @@ + + + + + Changed service name and name_eng columns length from 30 to 255 chars + + \ No newline at end of file diff --git a/dao/src/main/resources/db/changelog/sql/tariff-name-length-change.sql b/dao/src/main/resources/db/changelog/sql/tariff-name-length-change.sql new file mode 100644 index 000000000..0d1b2722d --- /dev/null +++ b/dao/src/main/resources/db/changelog/sql/tariff-name-length-change.sql @@ -0,0 +1,4 @@ +ALTER TABLE service + ALTER COLUMN name TYPE varchar(255); +ALTER TABLE service + ALTER COLUMN name_eng TYPE varchar(255); \ No newline at end of file From 1f1058a524aecddd16ac48c4e32b90e2c2ea9ef3 Mon Sep 17 00:00:00 2001 From: HelenSotnik <63450632+HelenSotnik@users.noreply.github.com> Date: Wed, 9 Aug 2023 09:54:13 +0300 Subject: [PATCH 45/80] Commit with changes columns length to 255 and validation max length in dto and entity (#1212) Co-authored-by: Helen Sotnik --- dao/src/main/java/greencity/entity/order/Service.java | 4 ++-- .../main/resources/db/changelog/db.changelog-master.xml | 1 + .../logs/2023-08-08-change-bag-name-column-length.xml | 9 +++++++++ .../db/changelog/sql/bag-name-length-change.sql | 4 ++++ .../src/main/java/greencity/dto/service/ServiceDto.java | 4 ++-- 5 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 dao/src/main/resources/db/changelog/logs/2023-08-08-change-bag-name-column-length.xml create mode 100644 dao/src/main/resources/db/changelog/sql/bag-name-length-change.sql diff --git a/dao/src/main/java/greencity/entity/order/Service.java b/dao/src/main/java/greencity/entity/order/Service.java index 3e935d336..e35880258 100644 --- a/dao/src/main/java/greencity/entity/order/Service.java +++ b/dao/src/main/java/greencity/entity/order/Service.java @@ -40,10 +40,10 @@ public class Service { @Column(nullable = false) private Long price; - @Column(nullable = false, length = 30) + @Column(nullable = false) private String name; - @Column(nullable = false, length = 30) + @Column(nullable = false) private String nameEng; @Column(nullable = false) diff --git a/dao/src/main/resources/db/changelog/db.changelog-master.xml b/dao/src/main/resources/db/changelog/db.changelog-master.xml index 9cec8ece8..028dc5a36 100644 --- a/dao/src/main/resources/db/changelog/db.changelog-master.xml +++ b/dao/src/main/resources/db/changelog/db.changelog-master.xml @@ -215,4 +215,5 @@ + \ No newline at end of file diff --git a/dao/src/main/resources/db/changelog/logs/2023-08-08-change-bag-name-column-length.xml b/dao/src/main/resources/db/changelog/logs/2023-08-08-change-bag-name-column-length.xml new file mode 100644 index 000000000..606843013 --- /dev/null +++ b/dao/src/main/resources/db/changelog/logs/2023-08-08-change-bag-name-column-length.xml @@ -0,0 +1,9 @@ + + + + + Changed bag name and name_eng columns length from 30 to 255 chars + + \ No newline at end of file diff --git a/dao/src/main/resources/db/changelog/sql/bag-name-length-change.sql b/dao/src/main/resources/db/changelog/sql/bag-name-length-change.sql new file mode 100644 index 000000000..b6346448a --- /dev/null +++ b/dao/src/main/resources/db/changelog/sql/bag-name-length-change.sql @@ -0,0 +1,4 @@ +ALTER TABLE bag + ALTER COLUMN name TYPE varchar(255); +ALTER TABLE bag + ALTER COLUMN name_eng TYPE varchar(255); \ No newline at end of file diff --git a/service-api/src/main/java/greencity/dto/service/ServiceDto.java b/service-api/src/main/java/greencity/dto/service/ServiceDto.java index 98ae5c26a..5986aef4f 100644 --- a/service-api/src/main/java/greencity/dto/service/ServiceDto.java +++ b/service-api/src/main/java/greencity/dto/service/ServiceDto.java @@ -22,11 +22,11 @@ @ToString public class ServiceDto { @NotBlank - @Length(max = 30) + @Length(max = 255) private String name; @NotBlank - @Length(max = 30) + @Length(max = 255) private String nameEng; @NotBlank From aa9ecbfef089a6e835a59015170a97d81473fee2 Mon Sep 17 00:00:00 2001 From: Anton Bondar <53192419+ABbondar@users.noreply.github.com> Date: Fri, 11 Aug 2023 12:28:50 +0300 Subject: [PATCH 46/80] [UBS] - Exception occurs when we try to update order page admin info #6128 (#1203) * update order * update order and save reason * formatter * tests * formatting * code refactoring * code smells * suggested changes * required fields --- .../controller/ManagementOrderController.java | 57 +- core/src/test/java/greencity/ModelUtils.java | 11 + .../ManagementOrderControllerTest.java | 32 +- .../service/ubs/UBSManagementService.java | 68 +- .../service/ubs/UBSManagementServiceImpl.java | 153 ++-- .../src/test/java/greencity/ModelUtils.java | 8 +- .../ubs/UBSManagementServiceImplTest.java | 738 +++++++++--------- 7 files changed, 615 insertions(+), 452 deletions(-) diff --git a/core/src/main/java/greencity/controller/ManagementOrderController.java b/core/src/main/java/greencity/controller/ManagementOrderController.java index d356ab351..43656c871 100644 --- a/core/src/main/java/greencity/controller/ManagementOrderController.java +++ b/core/src/main/java/greencity/controller/ManagementOrderController.java @@ -4,7 +4,6 @@ import greencity.annotations.CurrentUserUuid; import greencity.constants.HttpStatuses; import greencity.dto.bag.AdditionalBagInfoDto; -import greencity.dto.bag.ReasonNotTakeBagDto; import greencity.dto.certificate.CertificateDtoForAdding; import greencity.dto.certificate.CertificateDtoForSearching; import greencity.dto.employee.EmployeePositionDtoRequest; @@ -505,7 +504,7 @@ public ResponseEntity getOrderDetailStatus( } /** - * Controller for update order and payment status. + * Controller for update order and payment status by id. * * @return {@link OrderDetailStatusDto}. * @author Orest Mahdziak @@ -524,7 +523,7 @@ public ResponseEntity updateOrderDetailStatus( @Valid @PathVariable("id") Long id, @RequestBody OrderDetailStatusRequestDto dto, Principal principal) { return ResponseEntity.status(HttpStatus.CREATED) - .body(ubsManagementService.updateOrderDetailStatus(id, dto, principal.getName())); + .body(ubsManagementService.updateOrderDetailStatusById(id, dto, principal.getName())); } /** @@ -629,7 +628,7 @@ public ResponseEntity updateOrderExportInfo( @Valid @PathVariable("id") Long id, @RequestBody ExportDetailsDtoUpdate dto, Principal principal) { return ResponseEntity.status(HttpStatus.CREATED) - .body(ubsManagementService.updateOrderExportDetails(id, dto, principal.getName())); + .body(ubsManagementService.updateOrderExportDetailsById(id, dto, principal.getName())); } /** @@ -836,26 +835,6 @@ public ResponseEntity updateUsersViolation(@Valid @RequestPart Updat return new ResponseEntity<>(HttpStatus.CREATED); } - /** - * Controller for save reason not taking the bag. * - * - * @return {ReasonNotTakeBagDto}. * @author Bohdan Fedorkiv - */ - - @ApiOperation(value = "Save reason for not taking the bag") - @ApiResponses(value = { - @ApiResponse(code = 201, message = HttpStatuses.CREATED, response = ReasonNotTakeBagDto.class), - @ApiResponse(code = 401, message = HttpStatuses.UNAUTHORIZED), - @ApiResponse(code = 400, message = HttpStatuses.BAD_REQUEST), - @ApiResponse(code = 422, message = HttpStatuses.UNPROCESSABLE_ENTITY)}) - @PutMapping(value = "/save-reason/{id}", - consumes = {MediaType.MULTIPART_FORM_DATA_VALUE, MediaType.APPLICATION_JSON_UTF8_VALUE}) - public ResponseEntity saveReason(@PathVariable("id") Long id, - @RequestPart String description, - @RequestPart(required = false) @Nullable MultipartFile[] images) { - return ResponseEntity.status(HttpStatus.CREATED).body(ubsManagementService.saveReason(id, description, images)); - } - /** * Controller for saving Admin comment. * @@ -898,19 +877,25 @@ public ResponseEntity saveAdminCommentToOrder( public ResponseEntity updateEcoStoreIdToOrder( @RequestBody @Valid EcoNumberDto ecoNumberDto, @PathVariable(name = "id") Long orderId, Principal principal) { - ubsManagementService.updateEcoNumberForOrder(ecoNumberDto, orderId, principal.getName()); + ubsManagementService.updateEcoNumberForOrderById(ecoNumberDto, orderId, principal.getName()); return ResponseEntity.status(HttpStatus.CREATED).build(); } /** - * Controller for updating order admin page info. + * Controller for updating order admin page info and save reason if needed. * - * @param updateOrderPageDto {@link UpdateOrderPageAdminDto}. - * @param orderId {@link Long}. + * @param orderId {@link Long}. + * @param updateOrderPageAdminDto {@link UpdateOrderPageAdminDto}. + * @param language {@link String}. + * @param principal {@link Principal}. + * @param description {@link String}. + * @param images {@link MultipartFile}. * * @author Bahlay Yuriy. + * @author Anton Bondar. */ - @ApiOperation(value = "update order admin page info") + + @ApiOperation(value = "update order admin page info and save reason if needed") @ApiResponses(value = { @ApiResponse(code = 201, message = HttpStatuses.CREATED), @ApiResponse(code = 400, message = HttpStatuses.BAD_REQUEST), @@ -920,11 +905,15 @@ public ResponseEntity updateEcoStoreIdToOrder( @ApiResponse(code = 422, message = HttpStatuses.UNPROCESSABLE_ENTITY) }) @PreAuthorize("@preAuthorizer.hasAuthority('EDIT_ORDER', authentication)") - @PatchMapping("/update-order-page-admin-info/{id}") - public ResponseEntity updatePageAdminInfo( - @RequestBody @Valid UpdateOrderPageAdminDto updateOrderPageDto, @PathVariable(name = "id") Long orderId, - @RequestParam String lang, Principal principal) { - ubsManagementService.updateOrderAdminPageInfo(updateOrderPageDto, orderId, lang, principal.getName()); + @PatchMapping(value = "/update-order-page-admin-info/{id}", + consumes = {MediaType.MULTIPART_FORM_DATA_VALUE, MediaType.APPLICATION_JSON_UTF8_VALUE}) + public ResponseEntity updatePageAdminInfo(@PathVariable(name = "id") Long orderId, + @Valid @RequestPart UpdateOrderPageAdminDto updateOrderPageAdminDto, + @RequestParam String language, + @ApiIgnore Principal principal, String description, + @RequestPart(required = false) @Nullable MultipartFile[] images) { + ubsManagementService.updateOrderAdminPageInfoAndSaveReason(orderId, updateOrderPageAdminDto, language, + principal.getName(), description, images); return ResponseEntity.status(HttpStatus.CREATED).build(); } diff --git a/core/src/test/java/greencity/ModelUtils.java b/core/src/test/java/greencity/ModelUtils.java index a08a68d88..6637796c4 100644 --- a/core/src/test/java/greencity/ModelUtils.java +++ b/core/src/test/java/greencity/ModelUtils.java @@ -30,10 +30,12 @@ import greencity.dto.order.OrderCancellationReasonDto; import greencity.dto.order.OrderClientDto; import greencity.dto.order.OrderDetailStatusDto; +import greencity.dto.order.OrderDetailStatusRequestDto; import greencity.dto.order.OrderFondyClientDto; import greencity.dto.order.OrderResponseDto; import greencity.dto.order.RequestToChangeOrdersDataDto; import greencity.dto.order.UpdateAllOrderPageDto; +import greencity.dto.order.UpdateOrderPageAdminDto; import greencity.dto.payment.ManualPaymentRequestDto; import greencity.dto.payment.PaymentResponseDto; import greencity.dto.position.PositionDto; @@ -597,4 +599,13 @@ public static UserProfileCreateDto getUserProfileCreateDto() { .uuid("f81d4fae-7dec-11d0-a765-00a0c91e6bf6") .build(); } + + public static UpdateOrderPageAdminDto getUpdateOrderPageAdminDto() { + return UpdateOrderPageAdminDto.builder() + .generalOrderInfo(OrderDetailStatusRequestDto + .builder() + .orderStatus("NOT_TAKEN_OUT") + .build()) + .build(); + } } diff --git a/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java b/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java index afc765953..0d620c303 100644 --- a/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java +++ b/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java @@ -9,6 +9,7 @@ import greencity.dto.order.OrderCancellationReasonDto; import greencity.dto.order.OrderDetailStatusDto; import greencity.dto.order.UpdateAllOrderPageDto; +import greencity.dto.order.UpdateOrderPageAdminDto; import greencity.dto.payment.ManualPaymentRequestDto; import greencity.dto.user.AddBonusesToUserDto; import greencity.dto.user.AddingPointsToUserDto; @@ -43,6 +44,7 @@ import static greencity.ModelUtils.getAddBonusesToUserDto; import static greencity.ModelUtils.getEcoNumberDto; import static greencity.ModelUtils.getRequestDto; +import static greencity.ModelUtils.getUpdateOrderPageAdminDto; import static greencity.ModelUtils.getUuid; import static greencity.ModelUtils.getViolationDetailInfoDto; import static org.mockito.Mockito.doNothing; @@ -55,8 +57,8 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @ExtendWith(MockitoExtension.class) class ManagementOrderControllerTest { @@ -507,4 +509,32 @@ void saveOrderIdForRefundTest() throws Exception { mockMvc.perform(post(ubsLink + "/save-order-for-refund/{orderId}", 1L) .principal(principal)).andExpect(status().isCreated()); } + + @Test + void updatePageAdminInfoTest() throws Exception { + UpdateOrderPageAdminDto dto = getUpdateOrderPageAdminDto(); + ObjectMapper objectMapper = new ObjectMapper(); + String responseJSON = objectMapper.writeValueAsString(dto); + + MockMultipartFile jsonFile = new MockMultipartFile( + "updateOrderPageAdminDto", + "updateOrderPageAdminDto.json", + "application/json", + responseJSON.getBytes()); + + MockMultipartHttpServletRequestBuilder builder = + MockMvcRequestBuilders.multipart(ubsLink + "/update-order-page-admin-info/{id}", 1L); + builder.with(request -> { + request.setMethod("PATCH"); + return request; + }); + + mockMvc.perform( + builder.file(jsonFile) + .param("language", "en") + .param("description", "false") + .principal(principal) + .contentType(MediaType.MULTIPART_FORM_DATA)) + .andExpect(status().isCreated()); + } } diff --git a/service-api/src/main/java/greencity/service/ubs/UBSManagementService.java b/service-api/src/main/java/greencity/service/ubs/UBSManagementService.java index 443ed3b08..cfda1e4eb 100644 --- a/service-api/src/main/java/greencity/service/ubs/UBSManagementService.java +++ b/service-api/src/main/java/greencity/service/ubs/UBSManagementService.java @@ -1,7 +1,6 @@ package greencity.service.ubs; import greencity.dto.bag.AdditionalBagInfoDto; -import greencity.dto.bag.ReasonNotTakeBagDto; import greencity.dto.certificate.CertificateDtoForSearching; import greencity.dto.employee.EmployeePositionDtoRequest; import greencity.dto.order.AdminCommentDto; @@ -29,6 +28,7 @@ import greencity.dto.user.AddBonusesToUserDto; import greencity.dto.user.AddingPointsToUserDto; import greencity.dto.violation.ViolationsInfoDto; +import greencity.entity.order.Order; import greencity.enums.SortingOrder; import org.springframework.data.domain.Pageable; import org.springframework.web.multipart.MultipartFile; @@ -91,12 +91,13 @@ PageableDto getAllCertificates(Pageable page, String /** * Method that update address. * - * @param dtoUpdate of {@link OrderAddressExportDetailsDtoUpdate} order id; + * @param dtoUpdate of {@link OrderAddressExportDetailsDtoUpdate} order id. + * @param order {@link Order}. * @param email {@link String}. - * @return {@link OrderAddressDtoResponse} that contains address; + * @return {@link OrderAddressDtoResponse} that contains address. * @author Mahdziak Orest */ - Optional updateAddress(OrderAddressExportDetailsDtoUpdate dtoUpdate, Long orderId, + Optional updateAddress(OrderAddressExportDetailsDtoUpdate dtoUpdate, Order order, String email); /** @@ -111,7 +112,7 @@ Optional updateAddress(OrderAddressExportDetailsDtoUpda * * @author Mahdziak Orest */ - void setOrderDetail(Long orderId, + void setOrderDetail(Order order, Map confirmed, Map exported, String email); /** @@ -150,12 +151,19 @@ void setOrderDetail(Long orderId, */ OrderDetailStatusDto getOrderDetailStatus(Long id); + /** + * Method that update order and payment status by id. + * + * @author Mahdziak Orest + */ + OrderDetailStatusDto updateOrderDetailStatusById(Long id, OrderDetailStatusRequestDto dto, String email); + /** * Method that update order and payment status. * * @author Mahdziak Orest */ - OrderDetailStatusDto updateOrderDetailStatus(Long id, OrderDetailStatusRequestDto dto, String email); + OrderDetailStatusDto updateOrderDetailStatus(Order order, OrderDetailStatusRequestDto dto, String email); /** * Method that get export details by order id. @@ -169,7 +177,14 @@ void setOrderDetail(Long orderId, * * @author Mahdziak Orest */ - ExportDetailsDto updateOrderExportDetails(Long id, ExportDetailsDtoUpdate dto, String uuid); + ExportDetailsDto updateOrderExportDetailsById(Long id, ExportDetailsDtoUpdate dto, String uuid); + + /** + * Method that update export details by order. + * + * @author Mahdziak Orest + */ + ExportDetailsDto updateOrderExportDetails(Order order, ExportDetailsDtoUpdate dto, String uuid); /** * Method that gets bags additional information. @@ -225,10 +240,10 @@ ManualPaymentResponseDto updateManualPayment(Long paymentId, ManualPaymentReques /** * Method that save ReasonNotTakeBagDto. */ - ReasonNotTakeBagDto saveReason(Long orderId, String description, MultipartFile[] images); + void saveReason(Order order, String description, MultipartFile[] images); /** - * This is method which is save Admin comment. + * This is method which save Admin comment. * * @param adminCommentDto {@link AdminCommentDto}. * @param email {@link String}. @@ -238,7 +253,7 @@ ManualPaymentResponseDto updateManualPayment(Long paymentId, ManualPaymentReques void saveAdminCommentToOrder(AdminCommentDto adminCommentDto, String email); /** - * This is method updates eco id from the shop for order. + * This is method updates eco id from the shop for order by id. * * @param ecoNumberDto {@link EcoNumberDto}. * @param orderId {@link Long}. @@ -246,18 +261,45 @@ ManualPaymentResponseDto updateManualPayment(Long paymentId, ManualPaymentReques * * @author Yuriy Bahlay. */ - void updateEcoNumberForOrder(EcoNumberDto ecoNumberDto, Long orderId, String email); + void updateEcoNumberForOrderById(EcoNumberDto ecoNumberDto, Long orderId, String email); + + /** + * This is method updates eco id from the shop for order. + * + * @param ecoNumberDto {@link EcoNumberDto}. + * @param order {@link Order}. + * @param email {@link String}. + * + * @author Yuriy Bahlay. + */ + void updateEcoNumberForOrder(EcoNumberDto ecoNumberDto, Order order, String email); + + /** + * This is method which is updates admin page info for order and save reason. + * + * @param orderId {@link Long}. + * @param updateOrderPageAdminDto {@link UpdateOrderPageAdminDto}. + * @param language {@link String}. + * @param email {@link String}. + * @param description {@link String}. + * @param images {@link MultipartFile}. + * + * @author Anton Bondar. + */ + void updateOrderAdminPageInfoAndSaveReason(Long orderId, UpdateOrderPageAdminDto updateOrderPageAdminDto, + String language, + String email, String description, MultipartFile[] images); /** * This is method which is updates admin page info for order. * * @param updateOrderPageAdminDto {@link UpdateOrderPageAdminDto}. - * @param orderId {@link Long}. + * @param order {@link Order}. * @param email {@link String}. * * @author Yuriy Bahlay. */ - void updateOrderAdminPageInfo(UpdateOrderPageAdminDto updateOrderPageAdminDto, Long orderId, String lang, + void updateOrderAdminPageInfo(UpdateOrderPageAdminDto updateOrderPageAdminDto, Order order, String lang, String email); /** diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java index 5864a7320..c2f220b76 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java @@ -329,10 +329,8 @@ public ReadAddressByOrderDto getAddressByOrderId(Long orderId) { * {@inheritDoc} */ @Override - public Optional updateAddress(OrderAddressExportDetailsDtoUpdate dtoUpdate, Long orderId, + public Optional updateAddress(OrderAddressExportDetailsDtoUpdate dtoUpdate, Order order, String email) { - Order order = orderRepository.findById(orderId) - .orElseThrow(() -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST)); Optional addressForAdminPage = orderAddressRepository.findById(dtoUpdate.getAddressId()); if (addressForAdminPage.isPresent()) { orderAddressRepository.save(updateAddressOrderInfo(addressForAdminPage.get(), dtoUpdate)); @@ -594,14 +592,13 @@ public List getOrderDetails(Long orderId, String language) { */ @Override - public void setOrderDetail(Long orderId, + public void setOrderDetail(Order order, Map confirmed, Map exported, String email) { + Long orderId = order.getId(); final long wasPaidInCoins = paymentRepository.selectSumPaid(orderId) == null ? 0L : paymentRepository.selectSumPaid(orderId); - collectEventsAboutSetOrderDetails(confirmed, exported, orderId, email); - final Order order = orderRepository.findById(orderId).orElseThrow( - () -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST)); + collectEventsAboutSetOrderDetails(confirmed, exported, order, email); if (!(order.getOrderStatus() == OrderStatus.DONE || order.getOrderStatus() == OrderStatus.NOT_TAKEN_OUT || order.getOrderStatus() == OrderStatus.CANCELED)) { exported = null; @@ -639,6 +636,13 @@ public void setOrderDetail(Long orderId, long totalPriceInCoins = convertBillsIntoCoins(setTotalPrice(getPriceDetails(orderId))); long needToPayInCoins = totalPriceInCoins - wasPaidInCoins - discountInCoins; + updatePaymentStatus(order, wasPaidInCoins, discountInCoins, totalPriceInCoins, needToPayInCoins); + } + + private void updatePaymentStatus(Order order, long wasPaidInCoins, long discountInCoins, + long totalPriceInCoins, long needToPayInCoins) { + Long orderId = order.getId(); + if (needToPayInCoins == 0) { orderRepository.updateOrderPaymentStatus(orderId, OrderPaymentStatus.PAID.name()); return; @@ -688,17 +692,14 @@ private void recalculatePoints(int amount, Order order) { } private void collectEventsAboutSetOrderDetails(Map confirmed, Map exported, - Long orderId, String email) { - Order order = orderRepository.findById(orderId).orElseThrow( - () -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST)); - + Order order, String email) { StringBuilder values = new StringBuilder(); int countOfChanges = 0; if (nonNull(exported)) { - collectEventAboutExportedWaste(exported, order, orderId, countOfChanges, values); + collectEventAboutExportedWaste(exported, order, order.getId(), countOfChanges, values); } if (nonNull(confirmed)) { - collectEventAboutConfirmWaste(confirmed, order, orderId, countOfChanges, values); + collectEventAboutConfirmWaste(confirmed, order, order.getId(), countOfChanges, values); } if (nonNull(confirmed) || nonNull(exported)) { eventService.saveEvent(values.toString(), email, order); @@ -983,12 +984,21 @@ public OrderDetailStatusDto getOrderDetailStatus(Long id) { */ @Override - public OrderDetailStatusDto updateOrderDetailStatus(Long id, OrderDetailStatusRequestDto dto, String email) { + public OrderDetailStatusDto updateOrderDetailStatusById(Long id, OrderDetailStatusRequestDto dto, String email) { Order order = orderRepository.findById(id) .orElseThrow(() -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST + id)); - List payment = paymentRepository.findAllByOrderId(id); + return updateOrderDetailStatus(order, dto, email); + } + + /** + * {@inheritDoc} + */ + + @Override + public OrderDetailStatusDto updateOrderDetailStatus(Order order, OrderDetailStatusRequestDto dto, String email) { + List payment = paymentRepository.findAllByOrderId(order.getId()); if (payment.isEmpty()) { - throw new NotFoundException(PAYMENT_NOT_FOUND + id); + throw new NotFoundException(PAYMENT_NOT_FOUND + order.getId()); } if (nonNull(dto.getAdminComment())) { order.setAdminComment(dto.getAdminComment()); @@ -1022,8 +1032,7 @@ public OrderDetailStatusDto updateOrderDetailStatus(Long id, OrderDetailStatusRe orderRepository.save(order); } if (nonNull(dto.getOrderPaymentStatus())) { - paymentRepository.findAllByOrderId(id) - .forEach(x -> x.setPaymentStatus(PaymentStatus.valueOf(dto.getOrderPaymentStatus()))); + payment.forEach(x -> x.setPaymentStatus(PaymentStatus.valueOf(dto.getOrderPaymentStatus()))); paymentRepository.saveAll(payment); } @@ -1155,9 +1164,23 @@ public ExportDetailsDto getOrderExportDetails(Long id) { * @author Orest Mahdziak */ @Override - public ExportDetailsDto updateOrderExportDetails(Long id, ExportDetailsDtoUpdate dto, String email) { + public ExportDetailsDto updateOrderExportDetailsById(Long id, ExportDetailsDtoUpdate dto, String email) { Order order = orderRepository.findById(id) .orElseThrow(() -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST + id)); + return updateOrderExportDetails(order, dto, email); + } + + /** + * Method returns update export details by order id. + * + * @param order of {@link Order}; + * @param dto of{@link ExportDetailsDtoUpdate}; + * @param email {@link String} email; + * @return {@link ExportDetailsDto}; + * @author Orest Mahdziak + */ + @Override + public ExportDetailsDto updateOrderExportDetails(Order order, ExportDetailsDtoUpdate dto, String email) { final List receivingStation = getAllReceivingStations(); String action; if (order.getReceivingStation() == null && order.getDateOfExport() == null @@ -1503,9 +1526,7 @@ public EmployeePositionDtoRequest getAllEmployeesByPosition(Long orderId, String } @Override - public ReasonNotTakeBagDto saveReason(Long orderId, String description, MultipartFile[] images) { - final Order order = orderRepository.findById(orderId) - .orElseThrow(() -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST + orderId)); + public void saveReason(Order order, String description, MultipartFile[] images) { List pictures = new ArrayList<>(); for (MultipartFile image : images) { if (image != null) { @@ -1521,9 +1542,7 @@ public ReasonNotTakeBagDto saveReason(Long orderId, String description, Multipar dto.setCurrentUser(order.getUser().getRecipientName() + " " + order.getUser().getRecipientSurname()); order.setImageReasonNotTakingBags(pictures); order.setReasonNotTakingBagDescription(description); - order.setOrderStatus(OrderStatus.CANCELED); orderRepository.save(order); - return dto; } /** @@ -1553,9 +1572,22 @@ public void saveAdminCommentToOrder(AdminCommentDto adminCommentDto, String emai * @author Yuriy Bahlay, Sikhovskiy Rostyslav. */ @Override - public void updateEcoNumberForOrder(EcoNumberDto ecoNumberDto, Long orderId, String email) { + public void updateEcoNumberForOrderById(EcoNumberDto ecoNumberDto, Long orderId, String email) { Order order = orderRepository.findById(orderId).orElseThrow( () -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST + orderId)); + updateEcoNumberForOrder(ecoNumberDto, order, email); + } + + /** + * This is method updates eco id from the shop for order. + * + * @param ecoNumberDto {@link EcoNumberDto}. + * @param order {@link Order}. + * @param email {@link String}. + * @author Yuriy Bahlay, Sikhovskiy Rostyslav. + */ + @Override + public void updateEcoNumberForOrder(EcoNumberDto ecoNumberDto, Order order, String email) { Set oldEcoNumbers = Set.copyOf(order.getAdditionalOrders()); Set newEcoNumbers = ecoNumberDto.getEcoNumber(); @@ -1565,19 +1597,17 @@ public void updateEcoNumberForOrder(EcoNumberDto ecoNumberDto, Long orderId, Str if (!removed.isEmpty()) { historyChanges.append(collectInfoAboutChangesOfEcoNumber(removed, OrderHistory.DELETED_ECO_NUMBER)); - removed.stream() - .forEach(oldNumber -> order.getAdditionalOrders().remove(oldNumber)); + removed.forEach(oldNumber -> order.getAdditionalOrders().remove(oldNumber)); } if (!added.isEmpty() && !added.contains("")) { historyChanges.append(collectInfoAboutChangesOfEcoNumber(added, OrderHistory.ADD_NEW_ECO_NUMBER)); - added.stream() - .forEach(newNumber -> { - if (!newNumber.matches("[0-9]+") || newNumber.length() != 10) { - throw new BadRequestException(INCORRECT_ECO_NUMBER); - } - order.getAdditionalOrders().add(newNumber); - }); + added.forEach(newNumber -> { + if (!newNumber.matches("[0-9]+") || newNumber.length() != 10) { + throw new BadRequestException(INCORRECT_ECO_NUMBER); + } + order.getAdditionalOrders().add(newNumber); + }); } orderRepository.save(order); @@ -1590,7 +1620,7 @@ private String collectInfoAboutChangesOfEcoNumber(Collection newEcoNumbe private void isOrderStatusCanceledOrDone(Order order) { if (order.getOrderStatus() == OrderStatus.CANCELED || order.getOrderStatus() == OrderStatus.DONE) { - throw new IllegalStateException(String.format(ORDER_CAN_NOT_BE_UPDATED, order.getOrderStatus())); + throw new BadRequestException(String.format(ORDER_CAN_NOT_BE_UPDATED, order.getOrderStatus())); } } @@ -1600,28 +1630,28 @@ private void updateOrderPageFields(UpdateOrderPageAdminDto updateOrderPageDto, O ubsClientService.updateUbsUserInfoInOrder(updateOrderPageDto.getUserInfoDto(), email); } if (nonNull(updateOrderPageDto.getAddressExportDetailsDto())) { - updateAddress(updateOrderPageDto.getAddressExportDetailsDto(), orderId, email); + updateAddress(updateOrderPageDto.getAddressExportDetailsDto(), order, email); } - setUbsCourierSumAndWriteOffStationSum(orderId, updateOrderPageDto.getWriteOffStationSum(), + setUbsCourierSumAndWriteOffStationSum(order, updateOrderPageDto.getWriteOffStationSum(), updateOrderPageDto.getUbsCourierSum()); if (nonNull(updateOrderPageDto.getExportDetailsDto())) { - updateOrderExportDetails(orderId, updateOrderPageDto.getExportDetailsDto(), email); + updateOrderExportDetails(order, updateOrderPageDto.getExportDetailsDto(), email); } if (nonNull(updateOrderPageDto.getGeneralOrderInfo())) { - updateOrderDetailStatus(orderId, updateOrderPageDto.getGeneralOrderInfo(), email); + updateOrderDetailStatus(order, updateOrderPageDto.getGeneralOrderInfo(), email); } if (nonNull(updateOrderPageDto.getEcoNumberFromShop())) { - updateEcoNumberForOrder(updateOrderPageDto.getEcoNumberFromShop(), orderId, email); + updateEcoNumberForOrder(updateOrderPageDto.getEcoNumberFromShop(), order, email); } if (nonNull(updateOrderPageDto.getOrderDetailDto())) { setOrderDetail( - orderId, + order, updateOrderPageDto.getOrderDetailDto().getAmountOfBagsConfirmed(), updateOrderPageDto.getOrderDetailDto().getAmountOfBagsExported(), email); } if (nonNull(updateOrderPageDto.getUpdateResponsibleEmployeeDto())) { - updateOrderPageDto.getUpdateResponsibleEmployeeDto().stream() + updateOrderPageDto.getUpdateResponsibleEmployeeDto() .forEach(dto -> ordersAdminsPageService.responsibleEmployee(List.of(orderId), dto.getEmployeeId().toString(), dto.getPositionId(), @@ -1638,27 +1668,48 @@ private void updateOrderPageFields(UpdateOrderPageAdminDto updateOrderPageDto, O } } + /** + * This is method which is updates admin page info for order and save reason. + * + * @param orderId {@link Long}. + * @param updateOrderPageAdminDto {@link UpdateOrderPageAdminDto}. + * @param language {@link String}. + * @param email {@link String}. + * @param description {@link String}. + * @param images {@link MultipartFile}. + * + * @author Anton Bondar. + */ + @Override + @Transactional + public void updateOrderAdminPageInfoAndSaveReason(Long orderId, UpdateOrderPageAdminDto updateOrderPageAdminDto, + String language, + String email, String description, MultipartFile[] images) { + Order order = orderRepository.findById(orderId) + .orElseThrow(() -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST + orderId)); + + updateOrderAdminPageInfo(updateOrderPageAdminDto, order, language, email); + saveReason(order, description, images); + } + /** * This is method which is updates admin page info for order. * * @param updateOrderPageDto {@link UpdateOrderPageAdminDto}. - * @param orderId {@link Long}. + * @param order {@link Order}. * @author Yuriy Bahlay, Sikhovskiy Rostyslav. */ @Override @Transactional - public void updateOrderAdminPageInfo(UpdateOrderPageAdminDto updateOrderPageDto, Long orderId, String lang, + public void updateOrderAdminPageInfo(UpdateOrderPageAdminDto updateOrderPageDto, Order order, String lang, String email) { - Order order = orderRepository.findById(orderId) - .orElseThrow(() -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST + orderId)); - isOrderStatusCanceledOrDone(order); checkAvailableOrderForEmployee(order, email); if (order.getOrderStatus() == OrderStatus.BROUGHT_IT_HIMSELF && nonNull(updateOrderPageDto.getGeneralOrderInfo())) { - updateOrderDetailStatus(orderId, updateOrderPageDto.getGeneralOrderInfo(), email); + updateOrderDetailStatus(order, updateOrderPageDto.getGeneralOrderInfo(), email); } else { try { updateOrderPageFields(updateOrderPageDto, order, email); @@ -1668,9 +1719,7 @@ && nonNull(updateOrderPageDto.getGeneralOrderInfo())) { } } - private void setUbsCourierSumAndWriteOffStationSum(Long orderId, Double writeOffStationSum, Double ubsCourierSum) { - Order order = orderRepository.findById(orderId) - .orElseThrow(() -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST + orderId)); + private void setUbsCourierSumAndWriteOffStationSum(Order order, Double writeOffStationSum, Double ubsCourierSum) { if (writeOffStationSum != null) { order.setWriteOffStationSum(convertBillsIntoCoins(writeOffStationSum)); } @@ -1732,7 +1781,7 @@ public void updateAllOrderAdminPageInfo(UpdateAllOrderPageDto updateAllOrderPage Order order = orderRepository.findById(id).orElseThrow( () -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST + id)); try { - updateOrderExportDetails(id, updateAllOrderPageDto.getExportDetailsDto(), email); + updateOrderExportDetailsById(id, updateAllOrderPageDto.getExportDetailsDto(), email); checkUpdateResponsibleEmployeeDto(updateAllOrderPageDto, order, email); } catch (Exception e) { throw new BadRequestException(e.getMessage()); diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index 01c8d4cf8..9a26a60cc 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -3235,10 +3235,10 @@ public static UpdateOrderPageAdminDto updateOrderPageAdminDto() { .build()) .userInfoDto(UbsCustomersDtoUpdate .builder() - .recipientId(2L) - .recipientName("aaaaa") - .recipientPhoneNumber("085555") - .recipientEmail("yura@333gmail.com") + .recipientId(1L) + .recipientName("Anatolii Petyrov") + .recipientPhoneNumber("095123456") + .recipientEmail("anatolii.andr@gmail.com") .build()) .addressExportDetailsDto(OrderAddressExportDetailsDtoUpdate .builder() diff --git a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java index 208fefea9..9934a1ac6 100644 --- a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java @@ -8,6 +8,7 @@ import greencity.dto.bag.AdditionalBagInfoDto; import greencity.dto.bag.BagInfoDto; import greencity.dto.bag.BagMappingDto; +import greencity.dto.bag.ReasonNotTakeBagDto; import greencity.dto.certificate.CertificateDtoForSearching; import greencity.dto.employee.EmployeePositionDtoRequest; import greencity.dto.order.AdminCommentDto; @@ -153,7 +154,13 @@ import static greencity.ModelUtils.getOrderStatusTranslations; import static greencity.ModelUtils.getOrderUserFirst; import static greencity.ModelUtils.getOrderWithoutPayment; +import static greencity.ModelUtils.getOrdersStatusBROUGHT_IT_HIMSELFDto; +import static greencity.ModelUtils.getOrdersStatusCanseledDto; +import static greencity.ModelUtils.getOrdersStatusConfirmedDto; +import static greencity.ModelUtils.getOrdersStatusDoneDto; import static greencity.ModelUtils.getOrdersStatusFormedDto; +import static greencity.ModelUtils.getOrdersStatusNotTakenOutDto; +import static greencity.ModelUtils.getOrdersStatusOnThe_RouteDto; import static greencity.ModelUtils.getPayment; import static greencity.ModelUtils.getReceivingList; import static greencity.ModelUtils.getReceivingStation; @@ -167,7 +174,6 @@ import static greencity.ModelUtils.updateAllOrderPageDto; import static greencity.ModelUtils.updateOrderPageAdminDto; import static greencity.constant.ErrorMessage.EMPLOYEE_NOT_FOUND; -import static greencity.constant.ErrorMessage.ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST; import static greencity.constant.ErrorMessage.ORDER_CAN_NOT_BE_UPDATED; import static java.util.Collections.singletonList; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -179,10 +185,9 @@ import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.eq; -import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; @@ -332,9 +337,11 @@ void updateExportDetailsByOrderId() { List stations = List.of(new ReceivingStation()); when(receivingStationRepository.findAll()).thenReturn(stations); - ubsManagementService.updateOrderExportDetails(order.getId(), dto, "abc"); + ubsManagementService.updateOrderExportDetailsById(order.getId(), dto, "abc"); - verify(orderRepository, times(1)).save(order); + verify(orderRepository).findById(1L); + verify(receivingStationRepository).findById(1L); + verify(receivingStationRepository).findAll(); } @Test @@ -347,9 +354,11 @@ void updateExportDetailsNotSuccessfulByOrderId() { List stations = List.of(new ReceivingStation()); when(receivingStationRepository.findAll()).thenReturn(stations); - ubsManagementService.updateOrderExportDetails(order.getId(), dto, "abc"); + ubsManagementService.updateOrderExportDetailsById(order.getId(), dto, "abc"); - verify(orderRepository, times(1)).save(order); + verify(orderRepository).findById(1L); + verify(receivingStationRepository).findById(1L); + verify(receivingStationRepository).findAll(); } @Test @@ -703,17 +712,17 @@ void checkReturnOverpaymentInfo() { } @Test - void checkReturnOverpaymentThroweException() { + void checkReturnOverpaymentThrowsException() { Assertions.assertThrows(NotFoundException.class, () -> ubsManagementService.returnOverpaymentInfo(100L, 1., 1L)); } @Test - void checkReturnOverpaymentThroweExceptioninGetPaymentInfo() { + void checkReturnOverpaymentThrowsExceptionInGetPaymentInfo() { Order order = getOrder(); when(orderRepository.findUserById(1L)).thenReturn(Optional.of(order)); - Assertions.assertThrows(NotFoundException.class, () -> ubsManagementService.returnOverpaymentInfo(1L, 1., 1L)); + verify(orderRepository).findUserById(1L); } @Test @@ -752,7 +761,8 @@ void updateOrderDetailStatusThrowException() { when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrder())); OrderDetailStatusRequestDto requestDto = getTestOrderDetailStatusRequestDto(); assertThrows(NotFoundException.class, - () -> ubsManagementService.updateOrderDetailStatus(1L, requestDto, "uuid")); + () -> ubsManagementService.updateOrderDetailStatusById(1L, requestDto, "uuid")); + verify(orderRepository).findById(1L); } @Test @@ -768,22 +778,22 @@ void updateOrderDetailStatusFirst() { order.setPayment(payment); - when(orderRepository.findById(anyLong())).thenReturn(Optional.of(order)); - when(paymentRepository.findAllByOrderId(anyLong())).thenReturn(payment); + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); + when(paymentRepository.findAllByOrderId(1L)).thenReturn(payment); when(paymentRepository.saveAll(any())).thenReturn(payment); when(orderRepository.save(any())).thenReturn(order); OrderDetailStatusRequestDto testOrderDetail = getTestOrderDetailStatusRequestDto(); OrderDetailStatusDto expectedObject = ModelUtils.getTestOrderDetailStatusDto(); OrderDetailStatusDto producedObject = ubsManagementService - .updateOrderDetailStatus(order.getId(), testOrderDetail, "test@gmail.com"); + .updateOrderDetailStatusById(order.getId(), testOrderDetail, "test@gmail.com"); assertEquals(expectedObject.getOrderStatus(), producedObject.getOrderStatus()); assertEquals(expectedObject.getPaymentStatus(), producedObject.getPaymentStatus()); assertEquals(expectedObject.getDate(), producedObject.getDate()); testOrderDetail.setOrderStatus(OrderStatus.FORMED.toString()); expectedObject.setOrderStatus(OrderStatus.FORMED.toString()); OrderDetailStatusDto producedObjectAdjustment = ubsManagementService - .updateOrderDetailStatus(order.getId(), testOrderDetail, "test@gmail.com"); + .updateOrderDetailStatusById(order.getId(), testOrderDetail, "test@gmail.com"); assertEquals(expectedObject.getOrderStatus(), producedObjectAdjustment.getOrderStatus()); assertEquals(expectedObject.getPaymentStatus(), producedObjectAdjustment.getPaymentStatus()); @@ -792,7 +802,7 @@ void updateOrderDetailStatusFirst() { testOrderDetail.setOrderStatus(OrderStatus.ADJUSTMENT.toString()); expectedObject.setOrderStatus(OrderStatus.ADJUSTMENT.toString()); OrderDetailStatusDto producedObjectConfirmed = ubsManagementService - .updateOrderDetailStatus(order.getId(), testOrderDetail, "test@gmail.com"); + .updateOrderDetailStatusById(order.getId(), testOrderDetail, "test@gmail.com"); assertEquals(expectedObject.getOrderStatus(), producedObjectConfirmed.getOrderStatus()); assertEquals(expectedObject.getPaymentStatus(), producedObjectConfirmed.getPaymentStatus()); @@ -801,7 +811,7 @@ void updateOrderDetailStatusFirst() { testOrderDetail.setOrderStatus(OrderStatus.CONFIRMED.toString()); expectedObject.setOrderStatus(OrderStatus.CONFIRMED.toString()); OrderDetailStatusDto producedObjectNotTakenOut = ubsManagementService - .updateOrderDetailStatus(order.getId(), testOrderDetail, "test@gmail.com"); + .updateOrderDetailStatusById(order.getId(), testOrderDetail, "test@gmail.com"); assertEquals(expectedObject.getOrderStatus(), producedObjectNotTakenOut.getOrderStatus()); assertEquals(expectedObject.getPaymentStatus(), producedObjectNotTakenOut.getPaymentStatus()); @@ -811,7 +821,7 @@ void updateOrderDetailStatusFirst() { testOrderDetail.setOrderStatus(OrderStatus.CANCELED.toString()); expectedObject.setOrderStatus(OrderStatus.CANCELED.toString()); OrderDetailStatusDto producedObjectCancelled = ubsManagementService - .updateOrderDetailStatus(order.getId(), testOrderDetail, "test@gmail.com"); + .updateOrderDetailStatusById(order.getId(), testOrderDetail, "test@gmail.com"); assertEquals(expectedObject.getOrderStatus(), producedObjectCancelled.getOrderStatus()); assertEquals(expectedObject.getPaymentStatus(), producedObjectCancelled.getPaymentStatus()); @@ -822,7 +832,7 @@ void updateOrderDetailStatusFirst() { testOrderDetail.setOrderStatus(OrderStatus.DONE.toString()); expectedObject.setOrderStatus(OrderStatus.DONE.toString()); OrderDetailStatusDto producedObjectDone = ubsManagementService - .updateOrderDetailStatus(order.getId(), testOrderDetail, "test@gmail.com"); + .updateOrderDetailStatusById(order.getId(), testOrderDetail, "test@gmail.com"); assertEquals(expectedObject.getOrderStatus(), producedObjectDone.getOrderStatus()); assertEquals(expectedObject.getPaymentStatus(), producedObjectDone.getPaymentStatus()); @@ -833,7 +843,7 @@ void updateOrderDetailStatusFirst() { testOrderDetail.setOrderStatus(OrderStatus.CANCELED.toString()); expectedObject.setOrderStatus(OrderStatus.CANCELED.toString()); OrderDetailStatusDto producedObjectCancelled2 = ubsManagementService - .updateOrderDetailStatus(order.getId(), testOrderDetail, "test@gmail.com"); + .updateOrderDetailStatusById(order.getId(), testOrderDetail, "test@gmail.com"); assertEquals(expectedObject.getOrderStatus(), producedObjectCancelled2.getOrderStatus()); assertEquals(expectedObject.getPaymentStatus(), producedObjectCancelled2.getPaymentStatus()); @@ -844,7 +854,7 @@ void updateOrderDetailStatusFirst() { testOrderDetail.setOrderStatus(OrderStatus.BROUGHT_IT_HIMSELF.toString()); expectedObject.setOrderStatus(OrderStatus.BROUGHT_IT_HIMSELF.toString()); OrderDetailStatusDto producedObjectBroughtItHimself = ubsManagementService - .updateOrderDetailStatus(order.getId(), testOrderDetail, "test@gmail.com"); + .updateOrderDetailStatusById(order.getId(), testOrderDetail, "test@gmail.com"); assertEquals(expectedObject.getOrderStatus(), producedObjectBroughtItHimself.getOrderStatus()); assertEquals(expectedObject.getPaymentStatus(), producedObjectBroughtItHimself.getPaymentStatus()); @@ -854,7 +864,7 @@ void updateOrderDetailStatusFirst() { testOrderDetail.setOrderStatus(OrderStatus.CANCELED.toString()); expectedObject.setOrderStatus(OrderStatus.CANCELED.toString()); OrderDetailStatusDto producedObjectCancelled3 = ubsManagementService - .updateOrderDetailStatus(order.getId(), testOrderDetail, "test@gmail.com"); + .updateOrderDetailStatusById(order.getId(), testOrderDetail, "test@gmail.com"); assertEquals(expectedObject.getOrderStatus(), producedObjectCancelled3.getOrderStatus()); assertEquals(expectedObject.getPaymentStatus(), producedObjectCancelled3.getPaymentStatus()); @@ -886,8 +896,8 @@ void updateOrderDetailStatusSecond() { List payment = new ArrayList<>(); payment.add(Payment.builder().build()); - when(orderRepository.findById(anyLong())).thenReturn(Optional.of(order)); - when(paymentRepository.findAllByOrderId(anyLong())).thenReturn(payment); + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); + when(paymentRepository.findAllByOrderId(1L)).thenReturn(payment); when(paymentRepository.saveAll(any())).thenReturn(payment); when(orderRepository.save(any())).thenReturn(order); @@ -898,11 +908,16 @@ void updateOrderDetailStatusSecond() { testOrderDetail.setOrderStatus(OrderStatus.ON_THE_ROUTE.toString()); expectedObject.setOrderStatus(OrderStatus.ON_THE_ROUTE.toString()); OrderDetailStatusDto producedObjectOnTheRoute = ubsManagementService - .updateOrderDetailStatus(order.getId(), testOrderDetail, "abc"); + .updateOrderDetailStatusById(order.getId(), testOrderDetail, "abc"); assertEquals(expectedObject.getOrderStatus(), producedObjectOnTheRoute.getOrderStatus()); assertEquals(expectedObject.getPaymentStatus(), producedObjectOnTheRoute.getPaymentStatus()); assertEquals(expectedObject.getDate(), producedObjectOnTheRoute.getDate()); + + verify(orderRepository).findById(1L); + verify(paymentRepository).findAllByOrderId(1L); + verify(paymentRepository).saveAll(any()); + verify(orderRepository, times(2)).save(any()); } @Test @@ -953,37 +968,35 @@ void getAllEmployeesByPositionThrowBadRequestException() { @Test void testUpdateAddress() { + Order order = getOrder(); OrderAddress orderAddress = getOrderAddress(); orderAddress.setId(1L); OrderAddressExportDetailsDtoUpdate dtoUpdate = ModelUtils.getOrderAddressExportDetailsDtoUpdate(); - when(orderRepository.findById(1L)).thenReturn(Optional.of(TEST_ORDER)); when(orderAddressRepository.findById(dtoUpdate.getAddressId())).thenReturn(Optional.of(orderAddress)); when(orderAddressRepository.save(orderAddress)).thenReturn(orderAddress); when(modelMapper.map(orderAddress, OrderAddressDtoResponse.class)).thenReturn(TEST_ORDER_ADDRESS_DTO_RESPONSE); Optional actual = - ubsManagementService.updateAddress(TEST_ORDER_ADDRESS_DTO_UPDATE, 1L, "test@gmail.com"); + ubsManagementService.updateAddress(TEST_ORDER_ADDRESS_DTO_UPDATE, order, "test@gmail.com"); assertEquals(Optional.of(TEST_ORDER_ADDRESS_DTO_RESPONSE), actual); - verify(orderRepository).findById(1L); + + verify(orderAddressRepository).findById(dtoUpdate.getAddressId()); verify(orderAddressRepository).save(orderAddress); - verify(orderAddressRepository).findById(orderAddress.getId()); verify(modelMapper).map(orderAddress, OrderAddressDtoResponse.class); } @Test void testUpdateAddressThrowsOrderNotFoundException() { - when(orderRepository.findById(1L)).thenReturn(Optional.empty()); - + Order order = getOrder(); assertThrows(NotFoundException.class, - () -> ubsManagementService.updateAddress(TEST_ORDER_ADDRESS_DTO_UPDATE, 1L, "abc")); + () -> ubsManagementService.updateAddress(TEST_ORDER_ADDRESS_DTO_UPDATE, order, "abc")); } @Test void testUpdateAddressThrowsNotFoundOrderAddressException() { - when(orderRepository.findById(1L)).thenReturn(Optional.of(ModelUtils.getOrderWithoutAddress())); - + Order order = getOrder(); assertThrows(NotFoundException.class, - () -> ubsManagementService.updateAddress(TEST_ORDER_ADDRESS_DTO_UPDATE, 1L, "abc")); + () -> ubsManagementService.updateAddress(TEST_ORDER_ADDRESS_DTO_UPDATE, order, "abc")); } @Test @@ -1143,116 +1156,97 @@ void testGetAdditionalBagsInfoThrowsException() { @Test void testSetOrderDetail() { - when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusDoneDto())); + Order order = getOrdersStatusDoneDto(); + when(bagRepository.findCapacityById(1)).thenReturn(1); - doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); - doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); - when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); when(paymentRepository.selectSumPaid(1L)).thenReturn(5000L); - ubsManagementService.setOrderDetail(1L, + ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "abc"); - verify(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); - verify(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); + verify(bagRepository, times(2)).findCapacityById(1); + verify(orderRepository).getOrderDetails(1L); + verify(bagRepository, times(2)).findById(1); + verify(bagRepository).findBagsByOrderId(1L); + verify(paymentRepository, times(2)).selectSumPaid(1L); } @Test - void testSetOrderDetailNeedToChangeStatusToHALF_PAID() { - when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusDoneDto())); + void testSetOrderDetailNeedToChangeStatusToHalfPaid() { + Order order = getOrdersStatusDoneDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); - doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); - when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + + when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); when(paymentRepository.selectSumPaid(1L)).thenReturn(5000L); - doNothing().when(orderRepository).updateOrderPaymentStatus(1L, OrderPaymentStatus.HALF_PAID.name()); - ubsManagementService.setOrderDetail(1L, + ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "abc"); - verify(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); - verify(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); - verify(orderRepository).updateOrderPaymentStatus(1L, OrderPaymentStatus.HALF_PAID.name()); - verify(notificationService).notifyHalfPaidPackage(any(Order.class)); + verify(bagRepository, times(2)).findCapacityById(1); + + verify(orderRepository).getOrderDetails(1L); + verify(bagRepository, times(2)).findById(1); + verify(bagRepository).findBagsByOrderId(1L); + verify(paymentRepository, times(2)).selectSumPaid(1L); } @Test - void testSetOrderDetailNeedToChangeStatusToUNPAID() { - when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusDoneDto())); + void testSetOrderDetailNeedToChangeStatusToUnpaid() { + Order order = getOrdersStatusDoneDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); - doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); - when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + + when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); when(paymentRepository.selectSumPaid(1L)).thenReturn(null); - doNothing().when(orderRepository).updateOrderPaymentStatus(1L, OrderPaymentStatus.UNPAID.name()); - ubsManagementService.setOrderDetail(1L, + ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "abc"); - verify(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); - verify(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); - verify(orderRepository).updateOrderPaymentStatus(1L, OrderPaymentStatus.UNPAID.name()); + verify(bagRepository, times(2)).findCapacityById(1); + + verify(orderRepository).getOrderDetails(1L); + verify(bagRepository, times(2)).findById(1); + verify(bagRepository).findBagsByOrderId(1L); + verify(paymentRepository).selectSumPaid(1L); } @Test void testSetOrderDetailWhenSumPaidIsNull() { - when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusDoneDto())); + Order order = getOrdersStatusDoneDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); - doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); - when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + + when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); when(paymentRepository.selectSumPaid(1L)).thenReturn(null); - ubsManagementService.setOrderDetail(1L, + ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "abc"); - verify(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); - verify(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); - } - - @Test - void testSetOrderDetailWhenOrderNotFound() { - when(orderRepository.findById(1L)).thenReturn(Optional.empty()); - Map amountOfBagsConfirmed = UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto() - .getAmountOfBagsConfirmed(); - Map amountOfBagsExported = UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto() - .getAmountOfBagsExported(); - - NotFoundException exception = assertThrows(NotFoundException.class, - () -> ubsManagementService.setOrderDetail( - 1L, - amountOfBagsConfirmed, - amountOfBagsExported, - "abc"), - ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST); - - assertEquals(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST, exception.getMessage()); + verify(bagRepository, times(2)).findCapacityById(1); - verify(orderRepository).findById(1L); + verify(orderRepository).getOrderDetails(1L); + verify(bagRepository, times(2)).findById(1); + verify(paymentRepository).selectSumPaid(1L); } @Test void testSetOrderDetailIfHalfPaid() { - Order orderDto = ModelUtils.getOrdersStatusDoneDto(); + Order order = getOrder(); Order orderDetailDto = getOrdersStatusFormedDto(); + Bag tariffBagDto = ModelUtils.getTariffBag(); List bagList = getBaglist(); - when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(orderDto)); + when(bagRepository.findCapacityById(1)).thenReturn(1); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(orderDetailDto)); when(bagRepository.findById(1)).thenReturn(Optional.ofNullable(tariffBagDto)); @@ -1260,257 +1254,270 @@ void testSetOrderDetailIfHalfPaid() { when(paymentRepository.selectSumPaid(1L)).thenReturn(0L); when(orderRepository.findSumOfCertificatesByOrderId(1L)).thenReturn(0L); - ubsManagementService.setOrderDetail(1L, + ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "abc"); - verify(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); - verify(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); - verify(orderRepository).updateOrderPaymentStatus(1L, OrderPaymentStatus.UNPAID.name()); + + verify(bagRepository, times(2)).findCapacityById(1); + verify(orderRepository).getOrderDetails(1L); + verify(bagRepository, times(2)).findById(1); + verify(bagRepository).findBagsByOrderId(1L); + verify(paymentRepository, times(2)).selectSumPaid(1L); + verify(orderRepository).findSumOfCertificatesByOrderId(1L); } @Test void testSetOrderDetailIfPaidAndPriceLessThanDiscount() { Order order = ModelUtils.getOrdersStatusAdjustmentDto2(); - when(orderRepository.findById(order.getId())).thenReturn(Optional.of(order)); + when(certificateRepository.findCertificate(order.getId())).thenReturn(List.of(ModelUtils.getCertificate2())); when(orderRepository.findSumOfCertificatesByOrderId(order.getId())).thenReturn(600L); - when(orderRepository.getOrderDetails(anyLong())) + when(orderRepository.getOrderDetails(1L)) .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto2())); when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - ubsManagementService.setOrderDetail(order.getId(), + ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "abc"); - verify(certificateRepository).save(ModelUtils.getCertificate2().setPoints(20)); - verify(userRepository).updateUserCurrentPoints(1L, 100); - verify(orderRepository).updateOrderPointsToUse(1L, 0); + verify(certificateRepository).findCertificate(order.getId()); + verify(orderRepository).findSumOfCertificatesByOrderId(order.getId()); + verify(orderRepository).getOrderDetails(1L); + verify(bagRepository).findBagsByOrderId(1L); + verify(bagRepository, times(2)).findById(1); } @Test void testSetOrderDetailIfPaidAndPriceLessThanPaidSum() { Order order = ModelUtils.getOrdersStatusAdjustmentDto2(); when(paymentRepository.selectSumPaid(order.getId())).thenReturn(10000L); - when(orderRepository.findById(order.getId())).thenReturn(Optional.of(order)); when(certificateRepository.findCertificate(order.getId())).thenReturn(List.of(ModelUtils.getCertificate2())); when(orderRepository.findSumOfCertificatesByOrderId(order.getId())).thenReturn(600L); - when(orderRepository.getOrderDetails(anyLong())) + when(orderRepository.getOrderDetails(1L)) .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto2())); when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - ubsManagementService.setOrderDetail(order.getId(), + ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "abc"); - verify(certificateRepository).save(ModelUtils.getCertificate2().setPoints(0)); - verify(userRepository).updateUserCurrentPoints(1L, 100); - verify(orderRepository).updateOrderPointsToUse(1L, 0); + verify(paymentRepository, times(2)).selectSumPaid(order.getId()); + verify(certificateRepository).findCertificate(order.getId()); + verify(orderRepository).findSumOfCertificatesByOrderId(order.getId()); + verify(orderRepository).getOrderDetails(1L); + verify(bagRepository).findBagsByOrderId(1L); + verify(bagRepository, times(2)).findById(1); } @Test void testSetOrderDetailConfirmed() { - when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusConfirmedDto())); + Order order = getOrdersStatusConfirmedDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); - when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); + + when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - ubsManagementService.setOrderDetail(1L, + + ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "test@gmail.com"); - verify(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); - verify(orderDetailRepository, times(0)).updateExporter(anyInt(), anyLong(), anyLong()); + verify(bagRepository, times(2)).findCapacityById(1); + + verify(orderRepository).getOrderDetails(1L); + verify(bagRepository, times(2)).findById(1); } @Test void testSetOrderDetailConfirmed2() { - when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusConfirmedDto())); + Order order = getOrdersStatusConfirmedDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + + when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - when(orderDetailRepository.ifRecordExist(any(), any())).thenReturn(1L); - when(orderDetailRepository.getAmount(any(), any())).thenReturn(1L); - ubsManagementService.setOrderDetail(1L, + when(orderDetailRepository.ifRecordExist(1L, 1L)).thenReturn(1L); + when(orderDetailRepository.getAmount(1L, 1L)).thenReturn(1L); + + ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "test@gmail.com"); - verify(orderRepository, times(2)).findById(1L); + verify(bagRepository, times(2)).findCapacityById(1); + + verify(orderRepository).getOrderDetails(1L); verify(bagRepository, times(2)).findById(1); - verify(orderDetailRepository, times(2)).ifRecordExist(any(), any()); - verify(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); - verify(orderDetailRepository).getAmount(any(), any()); - verify(orderDetailRepository, times(0)).updateExporter(anyInt(), anyLong(), anyLong()); + verify(orderDetailRepository, times(2)).ifRecordExist(1L, 1L); + verify(orderDetailRepository).getAmount(1L, 1L); } @Test void testSetOrderDetailWithExportedWaste() { - when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusDoneDto())); + Order order = getOrdersStatusDoneDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); - doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); - when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + + when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - when(orderDetailRepository.ifRecordExist(any(), any())).thenReturn(1L); - ubsManagementService.setOrderDetail(1L, + when(orderDetailRepository.ifRecordExist(1L, 1L)).thenReturn(1L); + + ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "test@gmail.com"); - verify(orderRepository, times(2)).findById(1L); + verify(bagRepository, times(2)).findCapacityById(1); + + verify(orderRepository).getOrderDetails(1L); verify(bagRepository, times(2)).findById(1); - verify(orderDetailRepository, times(3)).ifRecordExist(any(), any()); - verify(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); - verify(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); + verify(orderDetailRepository, times(3)).ifRecordExist(1L, 1L); } @Test void testSetOrderDetailFormed() { - when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + Order order = getOrdersStatusFormedDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); - when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + + when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - ubsManagementService.setOrderDetail(1L, + ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "test@gmail.com"); - verify(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); + verify(bagRepository, times(2)).findCapacityById(1); + + verify(orderRepository).getOrderDetails(1L); + verify(bagRepository, times(2)).findById(1); } @Test void testSetOrderDetailFormedWithBagNoPresent() { - when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + Order order = getOrdersStatusFormedDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.empty()); - ubsManagementService.setOrderDetail(1L, + ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "test@gmail.com"); - verify(orderDetailRepository, times(0)).updateExporter(anyInt(), anyLong(), anyLong()); - verify(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); - + verify(bagRepository, times(2)).findCapacityById(1); + verify(orderRepository).getOrderDetails(1L); + verify(bagRepository, times(2)).findById(1); } @Test void testSetOrderDetailNotTakenOut() { - when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusNotTakenOutDto())); + Order order = getOrdersStatusNotTakenOutDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); - doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); - when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); + + when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - ubsManagementService.setOrderDetail(1L, + ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), - UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), - "abc"); + UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "abc"); + + verify(bagRepository, times(2)).findCapacityById(1); + verify(orderRepository).getOrderDetails(1L); + verify(bagRepository, times(2)).findById(1); - verify(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); - verify(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); } @Test void testSetOrderDetailOnTheRoute() { - when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusOnThe_RouteDto())); + Order order = getOrdersStatusOnThe_RouteDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); - when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + + when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - ubsManagementService.setOrderDetail(1L, + ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), - UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), - "abc"); + UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "abc"); - verify(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); - verify(orderDetailRepository, times(0)).updateExporter(anyInt(), anyLong(), anyLong()); + verify(bagRepository, times(2)).findCapacityById(1); + verify(orderRepository).getOrderDetails(1L); + verify(bagRepository, times(2)).findById(1); } @Test void testSetOrderDetailsDone() { - when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusDoneDto())); + Order order = getOrdersStatusDoneDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); - doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); - when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + + when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - ubsManagementService.setOrderDetail(1L, + + ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "abc"); - verify(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); - verify(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); + verify(bagRepository, times(2)).findCapacityById(1); + + verify(orderRepository).getOrderDetails(1L); + verify(bagRepository, times(2)).findById(1); } @Test void testSetOrderBroughtItHimself() { - when(orderRepository.findById(1L)) - .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusBROUGHT_IT_HIMSELFDto())); + Order order = getOrdersStatusBROUGHT_IT_HIMSELFDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); - when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + + when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - ubsManagementService.setOrderDetail(1L, + + ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "abc"); - verify(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); - verify(orderDetailRepository, times(0)).updateExporter(anyInt(), anyLong(), anyLong()); + verify(bagRepository, times(2)).findCapacityById(1); + + verify(orderRepository).getOrderDetails(1L); + verify(bagRepository, times(2)).findById(1); } @Test - void testSetOrderDetailsCanseled() { - when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusCanseledDto())); + void testSetOrderDetailsCanceled() { + Order order = getOrdersStatusCanseledDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); - doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); - when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + + when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - ubsManagementService.setOrderDetail(1L, + ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "abc"); - verify(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); + verify(bagRepository, times(2)).findCapacityById(1); + + verify(orderRepository).getOrderDetails(1L); + verify(bagRepository, times(2)).findById(1); } @Test void setOrderDetailExceptionTest() { + Order order = getOrder(); Map confirm = UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(); Map exported = UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(); assertThrows(NotFoundException.class, - () -> ubsManagementService.setOrderDetail(1L, confirm, exported, "test@gmail.com")); + () -> ubsManagementService.setOrderDetail(order, confirm, exported, "test@gmail.com")); } @Test void testSetOrderDetailThrowsUserNotFoundException() { + Order order = getOrder(); Map confirm = UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(); Map exported = UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(); assertThrows(NotFoundException.class, - () -> ubsManagementService.setOrderDetail(1L, confirm, exported, "test@gmail.com")); + () -> ubsManagementService.setOrderDetail(order, confirm, exported, "test@gmail.com")); } @Test @@ -1519,48 +1526,53 @@ void testSaveAdminToOrder() { TariffsInfo tariffsInfo = getTariffsInfo(); order.setTariffsInfo(tariffsInfo); Employee employee = getEmployee(); + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); - when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); + when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(1L, 1L)).thenReturn(Optional.of(tariffsInfo)); + ubsManagementService.saveAdminCommentToOrder(getAdminCommentDto(), "test@gmail.com"); - verify(orderRepository, times(1)).save(order); - verify(eventService, times(1)).save(any(), any(), any()); - verify(tariffsInfoRepository, atLeastOnce()).findTariffsInfoByIdForEmployee(anyLong(), anyLong()); + + verify(orderRepository).findById(1L); + verify(employeeRepository).findByEmail("test@gmail.com"); + verify(tariffsInfoRepository).findTariffsInfoByIdForEmployee(1L, 1L); } @Test - void testUpdateEcoNumberForOrder() { + void testUpdateEcoNumberForOrderById() { when(orderRepository.findById(1L)).thenReturn(Optional.of(getOrder())); - ubsManagementService.updateEcoNumberForOrder(getEcoNumberDto(), 1L, "abc"); - verify(eventService, times(1)).saveEvent(any(), any(), any()); + ubsManagementService.updateEcoNumberForOrderById(getEcoNumberDto(), 1L, "abc"); + verify(orderRepository).findById(1L); } @Test - void testUpdateEcoNumberThrowOrderNotFoundException() { + void testUpdateEcoNumberForOrderByIdThrowOrderNotFoundException() { EcoNumberDto dto = getEcoNumberDto(); when(orderRepository.findById(1L)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, - () -> ubsManagementService.updateEcoNumberForOrder(dto, 1L, "test@gmail.com")); + () -> ubsManagementService.updateEcoNumberForOrderById(dto, 1L, "test@gmail.com")); + verify(orderRepository).findById(1L); } @Test - void updateEcoNumberTrowsException() { + void testUpdateEcoNumberForOrderByIdTrowsException() { when(orderRepository.findById(1L)).thenReturn(Optional.empty()); EcoNumberDto ecoNumberDto = getEcoNumberDto(); assertThrows(NotFoundException.class, - () -> ubsManagementService.updateEcoNumberForOrder(ecoNumberDto, 1L, "abc")); + () -> ubsManagementService.updateEcoNumberForOrderById(ecoNumberDto, 1L, "abc")); + verify(orderRepository).findById(1L); } @Test - void updateEcoNumberTrowsIncorrectEcoNumberFormatException() { + void testUpdateEcoNumberForOrderByIdTrowsIncorrectEcoNumberFormatException() { when(orderRepository.findById(1L)).thenReturn(Optional.of(getOrder())); EcoNumberDto ecoNumberDto = getEcoNumberDto(); ecoNumberDto.setEcoNumber(new HashSet<>(List.of("1234a"))); assertThrows(BadRequestException.class, - () -> ubsManagementService.updateEcoNumberForOrder(ecoNumberDto, 1L, "abc")); + () -> ubsManagementService.updateEcoNumberForOrderById(ecoNumberDto, 1L, "abc")); + verify(orderRepository).findById(1L); } @Test @@ -1569,6 +1581,7 @@ void saveAdminCommentThrowsException() { AdminCommentDto adminCommentDto = getAdminCommentDto(); assertThrows(NotFoundException.class, () -> ubsManagementService.saveAdminCommentToOrder(adminCommentDto, "abc")); + verify(orderRepository).findById(1L); } @Test @@ -1600,80 +1613,94 @@ void getOrderStatusDataThrowsUnexistingOrderExceptionTest() { @Test void updateOrderAdminPageInfoTest() { - OrderDetailStatusRequestDto orderDetailStatusRequestDto = getTestOrderDetailStatusRequestDto(); Order order = getOrder(); TariffsInfo tariffsInfo = getTariffsInfo(); order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); Employee employee = getEmployee(); - when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); + when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); - when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); - when(paymentRepository.findAllByOrderId(1L)) - .thenReturn(List.of(getPayment())); - lenient().when(ubsManagementServiceMock.updateOrderDetailStatus(1L, orderDetailStatusRequestDto, "abc")) - .thenReturn(ModelUtils.getTestOrderDetailStatusDto()); + when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(1L, 1L)).thenReturn(Optional.of(tariffsInfo)); + when(paymentRepository.findAllByOrderId(1L)).thenReturn(List.of(getPayment())); + when(ubsClientService.updateUbsUserInfoInOrder(ModelUtils.getUbsCustomersDtoUpdate(), "test@gmail.com")).thenReturn(ModelUtils.getUbsCustomersDto()); UpdateOrderPageAdminDto updateOrderPageAdminDto = updateOrderPageAdminDto(); updateOrderPageAdminDto.setUserInfoDto(ModelUtils.getUbsCustomersDtoUpdate()); - when(orderAddressRepository.findById(1L)) - .thenReturn(Optional.of(getOrderAddress())); - when(receivingStationRepository.findAll()) - .thenReturn(List.of(getReceivingStation())); + + when(orderAddressRepository.findById(1L)).thenReturn(Optional.of(getOrderAddress())); + when(receivingStationRepository.findAll()).thenReturn(List.of(getReceivingStation())); + var receivingStation = getReceivingStation(); + when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); - when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, 1L, "en", "test@gmail.com"); + ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, order, "en", "test@gmail.com"); UpdateOrderPageAdminDto emptyDto = new UpdateOrderPageAdminDto(); - ubsManagementService.updateOrderAdminPageInfo(emptyDto, 1L, "en", "test@gmail.com"); + ubsManagementService.updateOrderAdminPageInfo(emptyDto, order, "en", "test@gmail.com"); - verify(ubsClientService, times(1)) - .updateUbsUserInfoInOrder(ModelUtils.getUbsCustomersDtoUpdate(), "test@gmail.com"); - verify(tariffsInfoRepository, atLeastOnce()).findTariffsInfoByIdForEmployee(anyLong(), anyLong()); + verify(ubsClientService).updateUbsUserInfoInOrder(ModelUtils.getUbsCustomersDtoUpdate(), "test@gmail.com"); + + verify(employeeRepository, times(2)).findByEmail("test@gmail.com"); + verify(tariffsInfoRepository, times(2)).findTariffsInfoByIdForEmployee(1L, 1L); + verify(paymentRepository).findAllByOrderId(1L); + + verify(ubsClientService).updateUbsUserInfoInOrder(ModelUtils.getUbsCustomersDtoUpdate(), "test@gmail.com"); + + verify(orderAddressRepository).findById(1L); + verify(receivingStationRepository).findAll(); + + verify(receivingStationRepository).findById(1L); + verify(orderRepository).getOrderDetails(1L); + verify(bagRepository, times(2)).findById(1); } @Test void updateOrderAdminPageInfoWithUbsCourierSumAndWriteOffStationSum() { - OrderDetailStatusRequestDto orderDetailStatusRequestDto = getTestOrderDetailStatusRequestDto(); Order order = getOrder(); TariffsInfo tariffsInfo = getTariffsInfo(); order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); Employee employee = getEmployee(); - when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); - when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); - when(paymentRepository.findAllByOrderId(1L)) - .thenReturn(List.of(getPayment())); - lenient().when(ubsManagementServiceMock.updateOrderDetailStatus(1L, orderDetailStatusRequestDto, "abc")) - .thenReturn(ModelUtils.getTestOrderDetailStatusDto()); + when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(1L, 1L)).thenReturn(Optional.of(tariffsInfo)); + when(paymentRepository.findAllByOrderId(1L)).thenReturn(List.of(getPayment())); + when(ubsClientService.updateUbsUserInfoInOrder(ModelUtils.getUbsCustomersDtoUpdate(), "test@gmail.com")).thenReturn(ModelUtils.getUbsCustomersDto()); + UpdateOrderPageAdminDto updateOrderPageAdminDto = updateOrderPageAdminDto(); updateOrderPageAdminDto.setUserInfoDto(ModelUtils.getUbsCustomersDtoUpdate()); updateOrderPageAdminDto.setUbsCourierSum(50.); updateOrderPageAdminDto.setWriteOffStationSum(100.); - when(orderAddressRepository.findById(1L)) - .thenReturn(Optional.of(getOrderAddress())); - when(receivingStationRepository.findAll()) - .thenReturn(List.of(getReceivingStation())); + + when(orderAddressRepository.findById(1L)).thenReturn(Optional.of(getOrderAddress())); + when(receivingStationRepository.findAll()).thenReturn(List.of(getReceivingStation())); + var receivingStation = getReceivingStation(); + when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); - when(orderRepository.getOrderDetails(anyLong())) - .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, 1L, "en", "test@gmail.com"); + ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, order, "en", "test@gmail.com"); UpdateOrderPageAdminDto emptyDto = new UpdateOrderPageAdminDto(); - ubsManagementService.updateOrderAdminPageInfo(emptyDto, 1L, "en", "test@gmail.com"); + ubsManagementService.updateOrderAdminPageInfo(emptyDto, order, "en", "test@gmail.com"); - verify(ubsClientService, times(1)) - .updateUbsUserInfoInOrder(ModelUtils.getUbsCustomersDtoUpdate(), "test@gmail.com"); - verify(tariffsInfoRepository, atLeastOnce()).findTariffsInfoByIdForEmployee(anyLong(), anyLong()); + verify(ubsClientService).updateUbsUserInfoInOrder(ModelUtils.getUbsCustomersDtoUpdate(), "test@gmail.com"); + + verify(employeeRepository, times(2)).findByEmail("test@gmail.com"); + verify(tariffsInfoRepository, times(2)).findTariffsInfoByIdForEmployee(1L, 1L); + verify(paymentRepository).findAllByOrderId(1L); + + verify(ubsClientService).updateUbsUserInfoInOrder(ModelUtils.getUbsCustomersDtoUpdate(), "test@gmail.com"); + + verify(orderAddressRepository).findById(1L); + verify(receivingStationRepository).findAll(); + + verify(receivingStationRepository).findById(1L); + verify(orderRepository).getOrderDetails(1L); + verify(bagRepository, times(2)).findById(1); } @Test @@ -1686,28 +1713,21 @@ void updateOrderAdminPageInfoWithStatusFormedTest() { Employee employee = getEmployee(); UpdateOrderPageAdminDto updateOrderPageAdminDto = ModelUtils.updateOrderPageAdminDtoWithStatusFormed(); - when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.save(order)).thenReturn(order); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); - when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); + when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(1L, 1L)).thenReturn(Optional.of(tariffsInfo)); when(paymentRepository.findAllByOrderId(1L)).thenReturn(List.of(getPayment())); when(receivingStationRepository.findAll()).thenReturn(List.of(getReceivingStation())); when(employeeOrderPositionRepository.findAllByOrderId(1L)).thenReturn(List.of(employeeOrderPosition)); - ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, 1L, "en", "test@gmail.com"); + ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, order, "en", "test@gmail.com"); - verify(orderRepository, times(4)).findById(1L); verify(orderRepository, times(2)).save(order); - verify(employeeRepository, times(1)).findByEmail("test@gmail.com"); - verify(tariffsInfoRepository).findTariffsInfoByIdForEmployee(anyLong(), anyLong()); + verify(employeeRepository).findByEmail("test@gmail.com"); + verify(tariffsInfoRepository).findTariffsInfoByIdForEmployee(1L, 1L); verify(paymentRepository).findAllByOrderId(1L); verify(receivingStationRepository).findAll(); verify(employeeOrderPositionRepository).findAllByOrderId(1L); - verify(employeeOrderPositionRepository).deleteAll(List.of(employeeOrderPosition)); - verify(tariffsInfoRepository, atLeastOnce()).findTariffsInfoByIdForEmployee(anyLong(), anyLong()); - verifyNoMoreInteractions(orderRepository, employeeRepository, paymentRepository, receivingStationRepository, - employeeOrderPositionRepository, tariffsInfoRepository); } @Test @@ -1718,14 +1738,12 @@ void updateOrderAdminPageInfoWithStatusCanceledTest() { order.setOrderStatus(OrderStatus.CANCELED); UpdateOrderPageAdminDto updateOrderPageAdminDto = ModelUtils.updateOrderPageAdminDtoWithStatusCanceled(); - when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); - - IllegalStateException exception = assertThrows(IllegalStateException.class, - () -> ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, 1L, "en", "test@gmail.com")); + BadRequestException exception = assertThrows(BadRequestException.class, + () -> ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, order, "en", + "test@gmail.com")); assertEquals(String.format(ORDER_CAN_NOT_BE_UPDATED, OrderStatus.CANCELED), exception.getMessage()); - verify(orderRepository).findById(1L); verify(orderRepository, never()).save(any(Order.class)); } @@ -1737,14 +1755,11 @@ void updateOrderAdminPageInfoWithStatusDoneTest() { order.setOrderStatus(OrderStatus.DONE); UpdateOrderPageAdminDto updateOrderPageAdminDto = ModelUtils.updateOrderPageAdminDtoWithStatusCanceled(); - when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); - - IllegalStateException exception = assertThrows(IllegalStateException.class, - () -> ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, 1L, "en", "test@gmail.com")); + BadRequestException exception = assertThrows(BadRequestException.class, + () -> ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, order, "en", + "test@gmail.com")); assertEquals(String.format(ORDER_CAN_NOT_BE_UPDATED, OrderStatus.DONE), exception.getMessage()); - - verify(orderRepository).findById(1L); verify(orderRepository, never()).save(any(Order.class)); } @@ -1765,23 +1780,20 @@ void updateOrderAdminPageInfoWithStatusBroughtItHimselfTest() { UpdateOrderPageAdminDto updateOrderPageAdminDto = ModelUtils.updateOrderPageAdminDtoWithStatusBroughtItHimself(); - when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.save(order)).thenReturn(order); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); - when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); + when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(1L, 1L)).thenReturn(Optional.of(tariffsInfo)); when(paymentRepository.findAllByOrderId(1L)).thenReturn(List.of(getPayment())); - ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, 1L, "en", "test@gmail.com"); + ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, order, "en", "test@gmail.com"); assertEquals(1L, order.getReceivingStation().getId()); assertEquals(deliverFrom.toLocalDate(), order.getDateOfExport()); assertEquals(deliverFrom, order.getDeliverFrom()); assertEquals(deliverTo, order.getDeliverTo()); - verify(orderRepository, times(2)).findById(1L); verify(orderRepository).save(order); verify(employeeRepository).findByEmail("test@gmail.com"); - verify(tariffsInfoRepository).findTariffsInfoByIdForEmployee(anyLong(), anyLong()); + verify(tariffsInfoRepository).findTariffsInfoByIdForEmployee(1L, 1L); verify(paymentRepository).findAllByOrderId(1L); verifyNoMoreInteractions(orderRepository, employeeRepository, paymentRepository); } @@ -1793,28 +1805,21 @@ void updateOrderAdminPageInfoWithNullFieldsTest() { order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); order.setOrderStatus(OrderStatus.ON_THE_ROUTE); Employee employee = getEmployee(); - UpdateOrderPageAdminDto updateOrderPageAdminDto = - ModelUtils.updateOrderPageAdminDtoWithNullFields(); + UpdateOrderPageAdminDto updateOrderPageAdminDto = ModelUtils.updateOrderPageAdminDtoWithNullFields(); - when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.save(order)).thenReturn(order); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); - when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); + when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(1L, 1L)).thenReturn(Optional.of(tariffsInfo)); when(paymentRepository.findAllByOrderId(1L)).thenReturn(List.of(getPayment())); when(receivingStationRepository.findAll()).thenReturn(List.of(getReceivingStation())); - ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, 1L, "en", "test@gmail.com"); + ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, order, "en", "test@gmail.com"); - verify(orderRepository, times(4)).findById(1L); verify(orderRepository, times(3)).save(order); - verify(employeeRepository, times(1)).findByEmail("test@gmail.com"); - verify(tariffsInfoRepository).findTariffsInfoByIdForEmployee(anyLong(), anyLong()); + verify(employeeRepository).findByEmail("test@gmail.com"); + verify(tariffsInfoRepository).findTariffsInfoByIdForEmployee(1L, 1L); verify(paymentRepository).findAllByOrderId(1L); verify(receivingStationRepository).findAll(); - verify(tariffsInfoRepository, atLeastOnce()).findTariffsInfoByIdForEmployee(anyLong(), anyLong()); - verifyNoMoreInteractions(orderRepository, employeeRepository, paymentRepository, receivingStationRepository, - tariffsInfoRepository); } @Test @@ -1824,16 +1829,13 @@ void updateOrderAdminPageInfoTestThrowsException() { Order order = getOrder(); order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); Employee employee = getEmployee(); - when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); - when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) - .thenReturn(Optional.of(tariffsInfo)); + when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(1L, 1L)).thenReturn(Optional.of(tariffsInfo)); assertThrows(BadRequestException.class, () -> ubsManagementService.updateOrderAdminPageInfo( - updateOrderPageAdminDto, 1L, "en", "test@gmail.com")); - verify(orderRepository, atLeastOnce()).findById(1L); + updateOrderPageAdminDto, order, "en", "test@gmail.com")); verify(employeeRepository).findByEmail("test@gmail.com"); - verify(tariffsInfoRepository, atLeastOnce()).findTariffsInfoByIdForEmployee(anyLong(), anyLong()); + verify(tariffsInfoRepository).findTariffsInfoByIdForEmployee(1L, 1L); } @Test @@ -1856,28 +1858,26 @@ void updateOrderAdminPageInfoForOrderWithStatusBroughtItHimselfTest() { Employee employee = getEmployee(); - when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); - when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) + when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(1L, 1L)) .thenReturn(Optional.of(tariffsInfo)); when(paymentRepository.findAllByOrderId(1L)).thenReturn(List.of(getPayment())); - ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, 1L, "en", "test@gmail.com"); + ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, order, "en", "test@gmail.com"); - verify(orderRepository, times(2)).findById(1L); verify(employeeRepository).findByEmail("test@gmail.com"); - verify(orderRepository).save(order); + verify(tariffsInfoRepository).findTariffsInfoByIdForEmployee(1L, 1L); assertEquals(expected, order); } @Test void saveReason() { Order order = ModelUtils.getOrdersDto(); - when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(order)); - - ubsManagementService.saveReason(1L, "uu", new MultipartFile[2]); - - verify(orderRepository).findById(1L); + ReasonNotTakeBagDto dto = new ReasonNotTakeBagDto(); + dto.setDescription("uu"); + ubsManagementService.saveReason(order, "uu", new MultipartFile[2]); + assertEquals(order.getReasonNotTakingBagDescription(), dto.getDescription()); + verify(orderRepository).save(order); } @Test @@ -2232,14 +2232,16 @@ void updateOrderExportDetails() { ExportDetailsDtoUpdate testDetails = getExportDetailsRequestToday(); var receivingStation = getReceivingStation(); when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); - when(orderRepository.findById(anyLong())).thenReturn(Optional.of(order)); + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(receivingStationRepository.findAll()).thenReturn(receivingStations); - ubsManagementService.updateOrderExportDetails(user.getId(), testDetails, "test@gmail.com"); + ubsManagementService.updateOrderExportDetailsById(user.getId(), testDetails, "test@gmail.com"); assertEquals(OrderStatus.ON_THE_ROUTE, order.getOrderStatus()); - verify(orderRepository, times(1)).save(order); + verify(receivingStationRepository).findById(1L); + verify(orderRepository).findById(1L); + verify(receivingStationRepository).findAll(); } @Test @@ -2251,37 +2253,43 @@ void updateOrderExportDetailsEmptyDetailsTest() { ExportDetailsDtoUpdate emptyDetails = ExportDetailsDtoUpdate.builder().receivingStationId(1L).build(); var receivingStation = getReceivingStation(); when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); - when(orderRepository.findById(anyLong())).thenReturn(Optional.of(order)); + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(receivingStationRepository.findAll()).thenReturn(receivingStations); - ubsManagementService.updateOrderExportDetails(user.getId(), emptyDetails, user.getUuid()); - verify(orderRepository, times(1)).save(order); + ubsManagementService.updateOrderExportDetailsById(user.getId(), emptyDetails, user.getUuid()); + + verify(receivingStationRepository).findById(1L); + verify(orderRepository).findById(1L); + verify(receivingStationRepository).findAll(); } @Test void updateOrderExportDetailsUserNotFoundExceptionTest() { ExportDetailsDtoUpdate testDetails = getExportDetailsRequest(); assertThrows(NotFoundException.class, - () -> ubsManagementService.updateOrderExportDetails(1L, testDetails, "test@gmail.com")); + () -> ubsManagementService.updateOrderExportDetailsById(1L, testDetails, "test@gmail.com")); } @Test - void updateOrderExportDetailsUnexistingOrderExceptionTest() { + void updateOrderExportDetailsNotExistingOrderExceptionTest() { ExportDetailsDtoUpdate testDetails = getExportDetailsRequest(); - when(orderRepository.findById(anyLong())).thenReturn(Optional.empty()); + when(orderRepository.findById(1L)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, - () -> ubsManagementService.updateOrderExportDetails(1L, testDetails, "abc")); + () -> ubsManagementService.updateOrderExportDetailsById(1L, testDetails, "abc")); + verify(orderRepository).findById(1L); } @Test void updateOrderExportDetailsReceivingStationNotFoundExceptionTest() { Order order = getOrder(); ExportDetailsDtoUpdate testDetails = getExportDetailsRequest(); - var receivingStation = getReceivingStation(); - when(orderRepository.findById(anyLong())).thenReturn(Optional.of(order)); + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(receivingStationRepository.findAll()).thenReturn(Collections.emptyList()); assertThrows(NotFoundException.class, - () -> ubsManagementService.updateOrderExportDetails(1L, testDetails, "abc")); + () -> ubsManagementService.updateOrderExportDetailsById(1L, testDetails, "abc")); + + verify(orderRepository).findById(1L); + verify(receivingStationRepository).findAll(); } @Test @@ -2465,12 +2473,12 @@ void testAddPointsToUserWhenCurrentPointIsNull() { @Test void saveReasonWhenListElementsAreNotNulls() { Order order = ModelUtils.getOrdersDto(); - when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(order)); - - ubsManagementService.saveReason(1L, "uu", new MultipartFile[] { + ReasonNotTakeBagDto dto = new ReasonNotTakeBagDto(); + dto.setDescription("uu"); + ubsManagementService.saveReason(order, "uu", new MultipartFile[] { new MockMultipartFile("Name", new byte[2]), new MockMultipartFile("Name", new byte[2])}); - - verify(orderRepository).findById(1L); + assertEquals(order.getReasonNotTakingBagDescription(), dto.getDescription()); + verify(orderRepository).save(order); } @Test @@ -2737,12 +2745,13 @@ void updateOrderExportDetailsSettingForDifferentInitialExportDetailsTest(Order o ExportDetailsDtoUpdate testDetails = getExportDetailsRequest(); var receivingStation = getReceivingStation(); when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); - when(orderRepository.findById(anyLong())).thenReturn(Optional.of(order)); + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(receivingStationRepository.findAll()).thenReturn(receivingStations); - ubsManagementService.updateOrderExportDetails(order.getId(), testDetails, employee.getEmail()); - verify(orderRepository, times(1)).save(order); - verify(eventService, times(1)).saveEvent(expectedHistoryEvent, employee.getEmail(), order); + ubsManagementService.updateOrderExportDetailsById(order.getId(), testDetails, employee.getEmail()); + verify(receivingStationRepository).findById(1L); + verify(orderRepository).findById(1L); + verify(receivingStationRepository).findAll(); } private static Stream provideOrdersWithDifferentInitialExportDetailsForUpdateOrderExportDetails() { @@ -2785,19 +2794,15 @@ void updateOrderExportDetailsWhenDeliverFromIsNull() { var receivingStation = getReceivingStation(); order.setDeliverFrom(null); testDetails.setTimeDeliveryFrom(null); - String expectedHistoryEvent = OrderHistory.UPDATE_EXPORT_DETAILS - + String.format(OrderHistory.UPDATE_EXPORT_DATA, - LocalDate.of(1997, 12, 4)) - + - String.format(OrderHistory.UPDATE_RECEIVING_STATION, "Петрівка"); when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); - when(orderRepository.findById(anyLong())).thenReturn(Optional.of(order)); + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(receivingStationRepository.findAll()).thenReturn(receivingStations); - ubsManagementService.updateOrderExportDetails(order.getId(), testDetails, employee.getEmail()); - verify(orderRepository, times(1)).save(order); - verify(eventService, times(1)).saveEvent(expectedHistoryEvent, employee.getEmail(), order); + ubsManagementService.updateOrderExportDetailsById(order.getId(), testDetails, employee.getEmail()); + verify(receivingStationRepository).findById(1L); + verify(orderRepository).findById(1L); + verify(receivingStationRepository).findAll(); } @Test @@ -2809,19 +2814,15 @@ void updateOrderExportDetailsWhenDeliverToIsNull() { var receivingStation = getReceivingStation(); order.setDeliverTo(null); testDetails.setTimeDeliveryTo(null); - String expectedHistoryEvent = OrderHistory.UPDATE_EXPORT_DETAILS - + String.format(OrderHistory.UPDATE_EXPORT_DATA, - LocalDate.of(1997, 12, 4)) - + - String.format(OrderHistory.UPDATE_RECEIVING_STATION, "Петрівка"); when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); - when(orderRepository.findById(anyLong())).thenReturn(Optional.of(order)); + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(receivingStationRepository.findAll()).thenReturn(receivingStations); - ubsManagementService.updateOrderExportDetails(order.getId(), testDetails, employee.getEmail()); - verify(orderRepository, times(1)).save(order); - verify(eventService, times(1)).saveEvent(expectedHistoryEvent, employee.getEmail(), order); + ubsManagementService.updateOrderExportDetailsById(order.getId(), testDetails, employee.getEmail()); + verify(receivingStationRepository).findById(1L); + verify(orderRepository).findById(1L); + verify(receivingStationRepository).findAll(); } @Test @@ -2886,4 +2887,45 @@ void saveOrderIdForRefundThrowsNotFoundExceptionTest() { assertThrows(NotFoundException.class, () -> ubsManagementService.getNotTakenOrderReason(1L)); verify(orderRepository).findById(1L); } -} \ No newline at end of file + + @Test + void updateOrderAdminPageInfoAndSaveReasonTest() { + var dto = updateOrderPageAdminDto(); + MockMultipartFile[] multipartFiles = new MockMultipartFile[0]; + + Order order = getOrder(); + + TariffsInfo tariffsInfo = getTariffsInfo(); + order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); + + Employee employee = getEmployee(); + + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); + when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); + when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(1L, 1L)) + .thenReturn(Optional.of(tariffsInfo)); + when(paymentRepository.findAllByOrderId(1L)).thenReturn(List.of(getPayment())); + + when(orderAddressRepository.findById(1L)).thenReturn(Optional.of(getOrderAddress())); + when(receivingStationRepository.findAll()).thenReturn(List.of(getReceivingStation())); + + var receivingStation = getReceivingStation(); + + when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); + when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + + ubsManagementService.updateOrderAdminPageInfoAndSaveReason(1L, dto, "en", "test@gmail.com", "desc", + multipartFiles); + + verify(orderRepository).findById(1L); + verify(employeeRepository).findByEmail("test@gmail.com"); + verify(tariffsInfoRepository).findTariffsInfoByIdForEmployee(1L, 1L); + verify(paymentRepository).findAllByOrderId(1L); + + verify(orderAddressRepository).findById(1L); + verify(receivingStationRepository).findAll(); + + verify(receivingStationRepository).findById(1L); + verify(orderRepository).getOrderDetails(1L); + } +} From ac2d69ba7d11adfce85a8f8f3541c6ba84166e48 Mon Sep 17 00:00:00 2001 From: Anton Bondar <53192419+ABbondar@users.noreply.github.com> Date: Mon, 14 Aug 2023 11:55:22 +0300 Subject: [PATCH 47/80] [UBS] - Exception occurs when we try to update order page admin info #6128 (#1213) * update order * update order and save reason * formatter * tests * formatting * code refactoring * code smells * suggested changes * required fields * changed required fields for updating order * desc * formatter * tests * formatter * tests * desc --- .../controller/ManagementOrderController.java | 8 +- .../ManagementOrderControllerTest.java | 1 - .../java/greencity/constant/ErrorMessage.java | 1 + .../dto/order/NotTakenOutReasonDto.java | 20 ++++ .../dto/order/UpdateOrderPageAdminDto.java | 8 +- .../service/ubs/UBSManagementService.java | 8 +- .../service/ubs/UBSManagementServiceImpl.java | 22 +++- .../src/test/java/greencity/ModelUtils.java | 5 + .../ubs/UBSManagementServiceImplTest.java | 111 +++++++++++++++++- 9 files changed, 163 insertions(+), 21 deletions(-) create mode 100644 service-api/src/main/java/greencity/dto/order/NotTakenOutReasonDto.java diff --git a/core/src/main/java/greencity/controller/ManagementOrderController.java b/core/src/main/java/greencity/controller/ManagementOrderController.java index 43656c871..777dfbf38 100644 --- a/core/src/main/java/greencity/controller/ManagementOrderController.java +++ b/core/src/main/java/greencity/controller/ManagementOrderController.java @@ -888,8 +888,6 @@ public ResponseEntity updateEcoStoreIdToOrder( * @param updateOrderPageAdminDto {@link UpdateOrderPageAdminDto}. * @param language {@link String}. * @param principal {@link Principal}. - * @param description {@link String}. - * @param images {@link MultipartFile}. * * @author Bahlay Yuriy. * @author Anton Bondar. @@ -909,11 +907,9 @@ public ResponseEntity updateEcoStoreIdToOrder( consumes = {MediaType.MULTIPART_FORM_DATA_VALUE, MediaType.APPLICATION_JSON_UTF8_VALUE}) public ResponseEntity updatePageAdminInfo(@PathVariable(name = "id") Long orderId, @Valid @RequestPart UpdateOrderPageAdminDto updateOrderPageAdminDto, - @RequestParam String language, - @ApiIgnore Principal principal, String description, - @RequestPart(required = false) @Nullable MultipartFile[] images) { + @RequestParam String language, @ApiIgnore Principal principal) { ubsManagementService.updateOrderAdminPageInfoAndSaveReason(orderId, updateOrderPageAdminDto, language, - principal.getName(), description, images); + principal.getName()); return ResponseEntity.status(HttpStatus.CREATED).build(); } diff --git a/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java b/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java index 0d620c303..73617dbfd 100644 --- a/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java +++ b/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java @@ -532,7 +532,6 @@ void updatePageAdminInfoTest() throws Exception { mockMvc.perform( builder.file(jsonFile) .param("language", "en") - .param("description", "false") .principal(principal) .contentType(MediaType.MULTIPART_FORM_DATA)) .andExpect(status().isCreated()); diff --git a/service-api/src/main/java/greencity/constant/ErrorMessage.java b/service-api/src/main/java/greencity/constant/ErrorMessage.java index 5793d2a82..c844f265f 100644 --- a/service-api/src/main/java/greencity/constant/ErrorMessage.java +++ b/service-api/src/main/java/greencity/constant/ErrorMessage.java @@ -163,6 +163,7 @@ public final class ErrorMessage { public static final String INVALID_URL = "Invalid URL: "; public static final String LOCATION_CAN_NOT_BE_DELETED = "Such location cannot be deleted as it is linked to the tariff"; + public static final String REASON_NOT_TAKING_BAG = "Please fill in the reason of not taking bag"; /** * Constructor. diff --git a/service-api/src/main/java/greencity/dto/order/NotTakenOutReasonDto.java b/service-api/src/main/java/greencity/dto/order/NotTakenOutReasonDto.java new file mode 100644 index 000000000..89506ed81 --- /dev/null +++ b/service-api/src/main/java/greencity/dto/order/NotTakenOutReasonDto.java @@ -0,0 +1,20 @@ +package greencity.dto.order; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import org.springframework.web.multipart.MultipartFile; + +@Getter +@Setter +@ToString +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class NotTakenOutReasonDto { + private String description; + private MultipartFile[] images; +} diff --git a/service-api/src/main/java/greencity/dto/order/UpdateOrderPageAdminDto.java b/service-api/src/main/java/greencity/dto/order/UpdateOrderPageAdminDto.java index 99b7ac911..864ce4038 100644 --- a/service-api/src/main/java/greencity/dto/order/UpdateOrderPageAdminDto.java +++ b/service-api/src/main/java/greencity/dto/order/UpdateOrderPageAdminDto.java @@ -2,7 +2,12 @@ import greencity.dto.customer.UbsCustomersDtoUpdate; import greencity.dto.employee.UpdateResponsibleEmployeeDto; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; import java.util.List; @@ -22,4 +27,5 @@ public class UpdateOrderPageAdminDto { private List updateResponsibleEmployeeDto; private Double writeOffStationSum; private Double ubsCourierSum; + private NotTakenOutReasonDto notTakenOutReasonDto; } diff --git a/service-api/src/main/java/greencity/service/ubs/UBSManagementService.java b/service-api/src/main/java/greencity/service/ubs/UBSManagementService.java index cfda1e4eb..70072f04b 100644 --- a/service-api/src/main/java/greencity/service/ubs/UBSManagementService.java +++ b/service-api/src/main/java/greencity/service/ubs/UBSManagementService.java @@ -275,20 +275,18 @@ ManualPaymentResponseDto updateManualPayment(Long paymentId, ManualPaymentReques void updateEcoNumberForOrder(EcoNumberDto ecoNumberDto, Order order, String email); /** - * This is method which is updates admin page info for order and save reason. + * This is method which is updates admin page info for order and save reason if + * needed. * * @param orderId {@link Long}. * @param updateOrderPageAdminDto {@link UpdateOrderPageAdminDto}. * @param language {@link String}. * @param email {@link String}. - * @param description {@link String}. - * @param images {@link MultipartFile}. * * @author Anton Bondar. */ void updateOrderAdminPageInfoAndSaveReason(Long orderId, UpdateOrderPageAdminDto updateOrderPageAdminDto, - String language, - String email, String description, MultipartFile[] images); + String language, String email); /** * This is method which is updates admin page info for order. diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java index c2f220b76..0edea7914 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java @@ -134,6 +134,7 @@ import static greencity.constant.ErrorMessage.ORDER_CAN_NOT_BE_UPDATED; import static greencity.constant.ErrorMessage.ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST; import static greencity.constant.ErrorMessage.PAYMENT_NOT_FOUND; +import static greencity.constant.ErrorMessage.REASON_NOT_TAKING_BAG; import static greencity.constant.ErrorMessage.RECEIVING_STATION_NOT_FOUND; import static greencity.constant.ErrorMessage.RECEIVING_STATION_NOT_FOUND_BY_ID; import static greencity.constant.ErrorMessage.USER_HAS_NO_OVERPAYMENT; @@ -1675,21 +1676,18 @@ private void updateOrderPageFields(UpdateOrderPageAdminDto updateOrderPageDto, O * @param updateOrderPageAdminDto {@link UpdateOrderPageAdminDto}. * @param language {@link String}. * @param email {@link String}. - * @param description {@link String}. - * @param images {@link MultipartFile}. * * @author Anton Bondar. */ @Override @Transactional public void updateOrderAdminPageInfoAndSaveReason(Long orderId, UpdateOrderPageAdminDto updateOrderPageAdminDto, - String language, - String email, String description, MultipartFile[] images) { + String language, String email) { Order order = orderRepository.findById(orderId) .orElseThrow(() -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST + orderId)); + checkOrderStatusAndSaveReason(order, updateOrderPageAdminDto); updateOrderAdminPageInfo(updateOrderPageAdminDto, order, language, email); - saveReason(order, description, images); } /** @@ -1719,6 +1717,20 @@ && nonNull(updateOrderPageDto.getGeneralOrderInfo())) { } } + private void checkOrderStatusAndSaveReason(Order order, UpdateOrderPageAdminDto updateOrderPageAdminDto) { + var status = updateOrderPageAdminDto.getGeneralOrderInfo().getOrderStatus(); + var desc = updateOrderPageAdminDto.getNotTakenOutReasonDto().getDescription(); + var images = updateOrderPageAdminDto.getNotTakenOutReasonDto().getImages(); + + if (status.equalsIgnoreCase(OrderStatus.NOT_TAKEN_OUT.name()) && (desc == null || desc.isEmpty())) { + throw new BadRequestException(REASON_NOT_TAKING_BAG); + } + if (images == null) { + images = new MultipartFile[0]; + } + saveReason(order, desc, images); + } + private void setUbsCourierSumAndWriteOffStationSum(Order order, Double writeOffStationSum, Double ubsCourierSum) { if (writeOffStationSum != null) { order.setWriteOffStationSum(convertBillsIntoCoins(writeOffStationSum)); diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index 9a26a60cc..12e05e8f6 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -69,6 +69,7 @@ import greencity.dto.order.ExportDetailsDtoUpdate; import greencity.dto.order.GroupedOrderDto; import greencity.dto.order.NotTakenOrderReasonDto; +import greencity.dto.order.NotTakenOutReasonDto; import greencity.dto.order.OrderAddressDtoRequest; import greencity.dto.order.OrderAddressDtoResponse; import greencity.dto.order.OrderAddressExportDetailsDtoUpdate; @@ -3274,6 +3275,10 @@ public static UpdateOrderPageAdminDto updateOrderPageAdminDto() { .positionId(2L) .employeeId(2L) .build())) + .notTakenOutReasonDto( + NotTakenOutReasonDto.builder() + .description("") + .build()) .build(); } diff --git a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java index 9934a1ac6..d58967436 100644 --- a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java @@ -2891,9 +2891,115 @@ void saveOrderIdForRefundThrowsNotFoundExceptionTest() { @Test void updateOrderAdminPageInfoAndSaveReasonTest() { var dto = updateOrderPageAdminDto(); - MockMultipartFile[] multipartFiles = new MockMultipartFile[0]; + Order order = getOrder(); + + TariffsInfo tariffsInfo = getTariffsInfo(); + order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); + + Employee employee = getEmployee(); + + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); + when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); + when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(1L, 1L)) + .thenReturn(Optional.of(tariffsInfo)); + when(paymentRepository.findAllByOrderId(1L)).thenReturn(List.of(getPayment())); + when(orderAddressRepository.findById(1L)).thenReturn(Optional.of(getOrderAddress())); + when(receivingStationRepository.findAll()).thenReturn(List.of(getReceivingStation())); + + var receivingStation = getReceivingStation(); + + when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); + when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + + ubsManagementService.updateOrderAdminPageInfoAndSaveReason(1L, dto, "en", "test@gmail.com"); + + verify(orderRepository).findById(1L); + verify(employeeRepository).findByEmail("test@gmail.com"); + verify(tariffsInfoRepository).findTariffsInfoByIdForEmployee(1L, 1L); + verify(paymentRepository).findAllByOrderId(1L); + + verify(orderAddressRepository).findById(1L); + verify(receivingStationRepository).findAll(); + + verify(receivingStationRepository).findById(1L); + verify(orderRepository).getOrderDetails(1L); + } + + @Test + void updateOrderAdminPageInfoAndSaveReasonThrowsBadRequestExceptionWithEmptyDescFieldTest() { + var dto = updateOrderPageAdminDto(); + Order order = getOrder(); + dto.getGeneralOrderInfo().setOrderStatus(OrderStatus.NOT_TAKEN_OUT.name()); + TariffsInfo tariffsInfo = getTariffsInfo(); + order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); + + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); + assertThrows(BadRequestException.class, + () -> ubsManagementService.updateOrderAdminPageInfoAndSaveReason(1L, dto, "en", "test@gmail.com")); + verify(orderRepository).findById(1L); + } + + @Test + void updateOrderAdminPageInfoAndSaveReasonThrowsBadRequestExceptionWithNullDescFieldTest() { + var dto = updateOrderPageAdminDto(); + Order order = getOrder(); + dto.getGeneralOrderInfo().setOrderStatus(OrderStatus.NOT_TAKEN_OUT.name()); + dto.getNotTakenOutReasonDto().setDescription(null); + TariffsInfo tariffsInfo = getTariffsInfo(); + order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); + + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); + assertThrows(BadRequestException.class, + () -> ubsManagementService.updateOrderAdminPageInfoAndSaveReason(1L, dto, "en", "test@gmail.com")); + verify(orderRepository).findById(1L); + } + + @Test + void updateOrderAdminPageInfoAndSaveReasonWithImagesTest() { + var dto = updateOrderPageAdminDto(); + Order order = getOrder(); + dto.getNotTakenOutReasonDto().setImages(new MultipartFile[2]); + + TariffsInfo tariffsInfo = getTariffsInfo(); + order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); + + Employee employee = getEmployee(); + + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); + when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); + when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(1L, 1L)) + .thenReturn(Optional.of(tariffsInfo)); + when(paymentRepository.findAllByOrderId(1L)).thenReturn(List.of(getPayment())); + + when(orderAddressRepository.findById(1L)).thenReturn(Optional.of(getOrderAddress())); + when(receivingStationRepository.findAll()).thenReturn(List.of(getReceivingStation())); + + var receivingStation = getReceivingStation(); + + when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); + when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + + ubsManagementService.updateOrderAdminPageInfoAndSaveReason(1L, dto, "en", "test@gmail.com"); + + verify(orderRepository).findById(1L); + verify(employeeRepository).findByEmail("test@gmail.com"); + verify(tariffsInfoRepository).findTariffsInfoByIdForEmployee(1L, 1L); + verify(paymentRepository).findAllByOrderId(1L); + + verify(orderAddressRepository).findById(1L); + verify(receivingStationRepository).findAll(); + + verify(receivingStationRepository).findById(1L); + verify(orderRepository).getOrderDetails(1L); + } + + @Test + void updateOrderAdminPageInfoAndSaveReasonWithReasonDescTest() { + var dto = updateOrderPageAdminDto(); Order order = getOrder(); + dto.getGeneralOrderInfo().setOrderStatus(OrderStatus.NOT_TAKEN_OUT.name()); + dto.getNotTakenOutReasonDto().setDescription("desc"); TariffsInfo tariffsInfo = getTariffsInfo(); order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); @@ -2914,8 +3020,7 @@ void updateOrderAdminPageInfoAndSaveReasonTest() { when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - ubsManagementService.updateOrderAdminPageInfoAndSaveReason(1L, dto, "en", "test@gmail.com", "desc", - multipartFiles); + ubsManagementService.updateOrderAdminPageInfoAndSaveReason(1L, dto, "en", "test@gmail.com"); verify(orderRepository).findById(1L); verify(employeeRepository).findByEmail("test@gmail.com"); From c2db04426da9a5e9211075ef14b144e4bb7cebd9 Mon Sep 17 00:00:00 2001 From: Anton Bondar <53192419+ABbondar@users.noreply.github.com> Date: Mon, 14 Aug 2023 13:41:49 +0300 Subject: [PATCH 48/80] Revert "[UBS] - Exception occurs when we try to update order page admin info #6128 (#1213)" (#1215) This reverts commit ac2d69ba7d11adfce85a8f8f3541c6ba84166e48. --- .../controller/ManagementOrderController.java | 8 +- .../ManagementOrderControllerTest.java | 1 + .../java/greencity/constant/ErrorMessage.java | 1 - .../dto/order/NotTakenOutReasonDto.java | 20 ---- .../dto/order/UpdateOrderPageAdminDto.java | 8 +- .../service/ubs/UBSManagementService.java | 8 +- .../service/ubs/UBSManagementServiceImpl.java | 22 +--- .../src/test/java/greencity/ModelUtils.java | 5 - .../ubs/UBSManagementServiceImplTest.java | 111 +----------------- 9 files changed, 21 insertions(+), 163 deletions(-) delete mode 100644 service-api/src/main/java/greencity/dto/order/NotTakenOutReasonDto.java diff --git a/core/src/main/java/greencity/controller/ManagementOrderController.java b/core/src/main/java/greencity/controller/ManagementOrderController.java index 777dfbf38..43656c871 100644 --- a/core/src/main/java/greencity/controller/ManagementOrderController.java +++ b/core/src/main/java/greencity/controller/ManagementOrderController.java @@ -888,6 +888,8 @@ public ResponseEntity updateEcoStoreIdToOrder( * @param updateOrderPageAdminDto {@link UpdateOrderPageAdminDto}. * @param language {@link String}. * @param principal {@link Principal}. + * @param description {@link String}. + * @param images {@link MultipartFile}. * * @author Bahlay Yuriy. * @author Anton Bondar. @@ -907,9 +909,11 @@ public ResponseEntity updateEcoStoreIdToOrder( consumes = {MediaType.MULTIPART_FORM_DATA_VALUE, MediaType.APPLICATION_JSON_UTF8_VALUE}) public ResponseEntity updatePageAdminInfo(@PathVariable(name = "id") Long orderId, @Valid @RequestPart UpdateOrderPageAdminDto updateOrderPageAdminDto, - @RequestParam String language, @ApiIgnore Principal principal) { + @RequestParam String language, + @ApiIgnore Principal principal, String description, + @RequestPart(required = false) @Nullable MultipartFile[] images) { ubsManagementService.updateOrderAdminPageInfoAndSaveReason(orderId, updateOrderPageAdminDto, language, - principal.getName()); + principal.getName(), description, images); return ResponseEntity.status(HttpStatus.CREATED).build(); } diff --git a/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java b/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java index 73617dbfd..0d620c303 100644 --- a/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java +++ b/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java @@ -532,6 +532,7 @@ void updatePageAdminInfoTest() throws Exception { mockMvc.perform( builder.file(jsonFile) .param("language", "en") + .param("description", "false") .principal(principal) .contentType(MediaType.MULTIPART_FORM_DATA)) .andExpect(status().isCreated()); diff --git a/service-api/src/main/java/greencity/constant/ErrorMessage.java b/service-api/src/main/java/greencity/constant/ErrorMessage.java index c844f265f..5793d2a82 100644 --- a/service-api/src/main/java/greencity/constant/ErrorMessage.java +++ b/service-api/src/main/java/greencity/constant/ErrorMessage.java @@ -163,7 +163,6 @@ public final class ErrorMessage { public static final String INVALID_URL = "Invalid URL: "; public static final String LOCATION_CAN_NOT_BE_DELETED = "Such location cannot be deleted as it is linked to the tariff"; - public static final String REASON_NOT_TAKING_BAG = "Please fill in the reason of not taking bag"; /** * Constructor. diff --git a/service-api/src/main/java/greencity/dto/order/NotTakenOutReasonDto.java b/service-api/src/main/java/greencity/dto/order/NotTakenOutReasonDto.java deleted file mode 100644 index 89506ed81..000000000 --- a/service-api/src/main/java/greencity/dto/order/NotTakenOutReasonDto.java +++ /dev/null @@ -1,20 +0,0 @@ -package greencity.dto.order; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.ToString; -import org.springframework.web.multipart.MultipartFile; - -@Getter -@Setter -@ToString -@AllArgsConstructor -@NoArgsConstructor -@Builder -public class NotTakenOutReasonDto { - private String description; - private MultipartFile[] images; -} diff --git a/service-api/src/main/java/greencity/dto/order/UpdateOrderPageAdminDto.java b/service-api/src/main/java/greencity/dto/order/UpdateOrderPageAdminDto.java index 864ce4038..99b7ac911 100644 --- a/service-api/src/main/java/greencity/dto/order/UpdateOrderPageAdminDto.java +++ b/service-api/src/main/java/greencity/dto/order/UpdateOrderPageAdminDto.java @@ -2,12 +2,7 @@ import greencity.dto.customer.UbsCustomersDtoUpdate; import greencity.dto.employee.UpdateResponsibleEmployeeDto; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import lombok.ToString; +import lombok.*; import java.util.List; @@ -27,5 +22,4 @@ public class UpdateOrderPageAdminDto { private List updateResponsibleEmployeeDto; private Double writeOffStationSum; private Double ubsCourierSum; - private NotTakenOutReasonDto notTakenOutReasonDto; } diff --git a/service-api/src/main/java/greencity/service/ubs/UBSManagementService.java b/service-api/src/main/java/greencity/service/ubs/UBSManagementService.java index 70072f04b..cfda1e4eb 100644 --- a/service-api/src/main/java/greencity/service/ubs/UBSManagementService.java +++ b/service-api/src/main/java/greencity/service/ubs/UBSManagementService.java @@ -275,18 +275,20 @@ ManualPaymentResponseDto updateManualPayment(Long paymentId, ManualPaymentReques void updateEcoNumberForOrder(EcoNumberDto ecoNumberDto, Order order, String email); /** - * This is method which is updates admin page info for order and save reason if - * needed. + * This is method which is updates admin page info for order and save reason. * * @param orderId {@link Long}. * @param updateOrderPageAdminDto {@link UpdateOrderPageAdminDto}. * @param language {@link String}. * @param email {@link String}. + * @param description {@link String}. + * @param images {@link MultipartFile}. * * @author Anton Bondar. */ void updateOrderAdminPageInfoAndSaveReason(Long orderId, UpdateOrderPageAdminDto updateOrderPageAdminDto, - String language, String email); + String language, + String email, String description, MultipartFile[] images); /** * This is method which is updates admin page info for order. diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java index 0edea7914..c2f220b76 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java @@ -134,7 +134,6 @@ import static greencity.constant.ErrorMessage.ORDER_CAN_NOT_BE_UPDATED; import static greencity.constant.ErrorMessage.ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST; import static greencity.constant.ErrorMessage.PAYMENT_NOT_FOUND; -import static greencity.constant.ErrorMessage.REASON_NOT_TAKING_BAG; import static greencity.constant.ErrorMessage.RECEIVING_STATION_NOT_FOUND; import static greencity.constant.ErrorMessage.RECEIVING_STATION_NOT_FOUND_BY_ID; import static greencity.constant.ErrorMessage.USER_HAS_NO_OVERPAYMENT; @@ -1676,18 +1675,21 @@ private void updateOrderPageFields(UpdateOrderPageAdminDto updateOrderPageDto, O * @param updateOrderPageAdminDto {@link UpdateOrderPageAdminDto}. * @param language {@link String}. * @param email {@link String}. + * @param description {@link String}. + * @param images {@link MultipartFile}. * * @author Anton Bondar. */ @Override @Transactional public void updateOrderAdminPageInfoAndSaveReason(Long orderId, UpdateOrderPageAdminDto updateOrderPageAdminDto, - String language, String email) { + String language, + String email, String description, MultipartFile[] images) { Order order = orderRepository.findById(orderId) .orElseThrow(() -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST + orderId)); - checkOrderStatusAndSaveReason(order, updateOrderPageAdminDto); updateOrderAdminPageInfo(updateOrderPageAdminDto, order, language, email); + saveReason(order, description, images); } /** @@ -1717,20 +1719,6 @@ && nonNull(updateOrderPageDto.getGeneralOrderInfo())) { } } - private void checkOrderStatusAndSaveReason(Order order, UpdateOrderPageAdminDto updateOrderPageAdminDto) { - var status = updateOrderPageAdminDto.getGeneralOrderInfo().getOrderStatus(); - var desc = updateOrderPageAdminDto.getNotTakenOutReasonDto().getDescription(); - var images = updateOrderPageAdminDto.getNotTakenOutReasonDto().getImages(); - - if (status.equalsIgnoreCase(OrderStatus.NOT_TAKEN_OUT.name()) && (desc == null || desc.isEmpty())) { - throw new BadRequestException(REASON_NOT_TAKING_BAG); - } - if (images == null) { - images = new MultipartFile[0]; - } - saveReason(order, desc, images); - } - private void setUbsCourierSumAndWriteOffStationSum(Order order, Double writeOffStationSum, Double ubsCourierSum) { if (writeOffStationSum != null) { order.setWriteOffStationSum(convertBillsIntoCoins(writeOffStationSum)); diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index 12e05e8f6..9a26a60cc 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -69,7 +69,6 @@ import greencity.dto.order.ExportDetailsDtoUpdate; import greencity.dto.order.GroupedOrderDto; import greencity.dto.order.NotTakenOrderReasonDto; -import greencity.dto.order.NotTakenOutReasonDto; import greencity.dto.order.OrderAddressDtoRequest; import greencity.dto.order.OrderAddressDtoResponse; import greencity.dto.order.OrderAddressExportDetailsDtoUpdate; @@ -3275,10 +3274,6 @@ public static UpdateOrderPageAdminDto updateOrderPageAdminDto() { .positionId(2L) .employeeId(2L) .build())) - .notTakenOutReasonDto( - NotTakenOutReasonDto.builder() - .description("") - .build()) .build(); } diff --git a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java index d58967436..9934a1ac6 100644 --- a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java @@ -2891,115 +2891,9 @@ void saveOrderIdForRefundThrowsNotFoundExceptionTest() { @Test void updateOrderAdminPageInfoAndSaveReasonTest() { var dto = updateOrderPageAdminDto(); - Order order = getOrder(); - - TariffsInfo tariffsInfo = getTariffsInfo(); - order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); - - Employee employee = getEmployee(); - - when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); - when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); - when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(1L, 1L)) - .thenReturn(Optional.of(tariffsInfo)); - when(paymentRepository.findAllByOrderId(1L)).thenReturn(List.of(getPayment())); + MockMultipartFile[] multipartFiles = new MockMultipartFile[0]; - when(orderAddressRepository.findById(1L)).thenReturn(Optional.of(getOrderAddress())); - when(receivingStationRepository.findAll()).thenReturn(List.of(getReceivingStation())); - - var receivingStation = getReceivingStation(); - - when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); - when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - - ubsManagementService.updateOrderAdminPageInfoAndSaveReason(1L, dto, "en", "test@gmail.com"); - - verify(orderRepository).findById(1L); - verify(employeeRepository).findByEmail("test@gmail.com"); - verify(tariffsInfoRepository).findTariffsInfoByIdForEmployee(1L, 1L); - verify(paymentRepository).findAllByOrderId(1L); - - verify(orderAddressRepository).findById(1L); - verify(receivingStationRepository).findAll(); - - verify(receivingStationRepository).findById(1L); - verify(orderRepository).getOrderDetails(1L); - } - - @Test - void updateOrderAdminPageInfoAndSaveReasonThrowsBadRequestExceptionWithEmptyDescFieldTest() { - var dto = updateOrderPageAdminDto(); - Order order = getOrder(); - dto.getGeneralOrderInfo().setOrderStatus(OrderStatus.NOT_TAKEN_OUT.name()); - TariffsInfo tariffsInfo = getTariffsInfo(); - order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); - - when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); - assertThrows(BadRequestException.class, - () -> ubsManagementService.updateOrderAdminPageInfoAndSaveReason(1L, dto, "en", "test@gmail.com")); - verify(orderRepository).findById(1L); - } - - @Test - void updateOrderAdminPageInfoAndSaveReasonThrowsBadRequestExceptionWithNullDescFieldTest() { - var dto = updateOrderPageAdminDto(); - Order order = getOrder(); - dto.getGeneralOrderInfo().setOrderStatus(OrderStatus.NOT_TAKEN_OUT.name()); - dto.getNotTakenOutReasonDto().setDescription(null); - TariffsInfo tariffsInfo = getTariffsInfo(); - order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); - - when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); - assertThrows(BadRequestException.class, - () -> ubsManagementService.updateOrderAdminPageInfoAndSaveReason(1L, dto, "en", "test@gmail.com")); - verify(orderRepository).findById(1L); - } - - @Test - void updateOrderAdminPageInfoAndSaveReasonWithImagesTest() { - var dto = updateOrderPageAdminDto(); - Order order = getOrder(); - dto.getNotTakenOutReasonDto().setImages(new MultipartFile[2]); - - TariffsInfo tariffsInfo = getTariffsInfo(); - order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); - - Employee employee = getEmployee(); - - when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); - when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); - when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(1L, 1L)) - .thenReturn(Optional.of(tariffsInfo)); - when(paymentRepository.findAllByOrderId(1L)).thenReturn(List.of(getPayment())); - - when(orderAddressRepository.findById(1L)).thenReturn(Optional.of(getOrderAddress())); - when(receivingStationRepository.findAll()).thenReturn(List.of(getReceivingStation())); - - var receivingStation = getReceivingStation(); - - when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); - when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - - ubsManagementService.updateOrderAdminPageInfoAndSaveReason(1L, dto, "en", "test@gmail.com"); - - verify(orderRepository).findById(1L); - verify(employeeRepository).findByEmail("test@gmail.com"); - verify(tariffsInfoRepository).findTariffsInfoByIdForEmployee(1L, 1L); - verify(paymentRepository).findAllByOrderId(1L); - - verify(orderAddressRepository).findById(1L); - verify(receivingStationRepository).findAll(); - - verify(receivingStationRepository).findById(1L); - verify(orderRepository).getOrderDetails(1L); - } - - @Test - void updateOrderAdminPageInfoAndSaveReasonWithReasonDescTest() { - var dto = updateOrderPageAdminDto(); Order order = getOrder(); - dto.getGeneralOrderInfo().setOrderStatus(OrderStatus.NOT_TAKEN_OUT.name()); - dto.getNotTakenOutReasonDto().setDescription("desc"); TariffsInfo tariffsInfo = getTariffsInfo(); order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); @@ -3020,7 +2914,8 @@ void updateOrderAdminPageInfoAndSaveReasonWithReasonDescTest() { when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - ubsManagementService.updateOrderAdminPageInfoAndSaveReason(1L, dto, "en", "test@gmail.com"); + ubsManagementService.updateOrderAdminPageInfoAndSaveReason(1L, dto, "en", "test@gmail.com", "desc", + multipartFiles); verify(orderRepository).findById(1L); verify(employeeRepository).findByEmail("test@gmail.com"); From 1c35404fdf0bb19f7b31bad06193b5f89fa5d407 Mon Sep 17 00:00:00 2001 From: Anton Bondar <53192419+ABbondar@users.noreply.github.com> Date: Tue, 15 Aug 2023 11:56:42 +0300 Subject: [PATCH 49/80] update order params (#1216) --- .../greencity/controller/ManagementOrderController.java | 5 ++--- core/src/test/java/greencity/ModelUtils.java | 1 + .../greencity/controller/ManagementOrderControllerTest.java | 1 - .../java/greencity/dto/order/UpdateOrderPageAdminDto.java | 1 + .../java/greencity/service/ubs/UBSManagementService.java | 4 +--- .../greencity/service/ubs/UBSManagementServiceImpl.java | 6 ++---- .../greencity/service/ubs/UBSManagementServiceImplTest.java | 3 +-- 7 files changed, 8 insertions(+), 13 deletions(-) diff --git a/core/src/main/java/greencity/controller/ManagementOrderController.java b/core/src/main/java/greencity/controller/ManagementOrderController.java index 43656c871..e30347559 100644 --- a/core/src/main/java/greencity/controller/ManagementOrderController.java +++ b/core/src/main/java/greencity/controller/ManagementOrderController.java @@ -888,7 +888,6 @@ public ResponseEntity updateEcoStoreIdToOrder( * @param updateOrderPageAdminDto {@link UpdateOrderPageAdminDto}. * @param language {@link String}. * @param principal {@link Principal}. - * @param description {@link String}. * @param images {@link MultipartFile}. * * @author Bahlay Yuriy. @@ -910,10 +909,10 @@ public ResponseEntity updateEcoStoreIdToOrder( public ResponseEntity updatePageAdminInfo(@PathVariable(name = "id") Long orderId, @Valid @RequestPart UpdateOrderPageAdminDto updateOrderPageAdminDto, @RequestParam String language, - @ApiIgnore Principal principal, String description, + @ApiIgnore Principal principal, @RequestPart(required = false) @Nullable MultipartFile[] images) { ubsManagementService.updateOrderAdminPageInfoAndSaveReason(orderId, updateOrderPageAdminDto, language, - principal.getName(), description, images); + principal.getName(), images); return ResponseEntity.status(HttpStatus.CREATED).build(); } diff --git a/core/src/test/java/greencity/ModelUtils.java b/core/src/test/java/greencity/ModelUtils.java index 6637796c4..6e108bb3e 100644 --- a/core/src/test/java/greencity/ModelUtils.java +++ b/core/src/test/java/greencity/ModelUtils.java @@ -606,6 +606,7 @@ public static UpdateOrderPageAdminDto getUpdateOrderPageAdminDto() { .builder() .orderStatus("NOT_TAKEN_OUT") .build()) + .notTakenOutReason("not taken out") .build(); } } diff --git a/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java b/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java index 0d620c303..73617dbfd 100644 --- a/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java +++ b/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java @@ -532,7 +532,6 @@ void updatePageAdminInfoTest() throws Exception { mockMvc.perform( builder.file(jsonFile) .param("language", "en") - .param("description", "false") .principal(principal) .contentType(MediaType.MULTIPART_FORM_DATA)) .andExpect(status().isCreated()); diff --git a/service-api/src/main/java/greencity/dto/order/UpdateOrderPageAdminDto.java b/service-api/src/main/java/greencity/dto/order/UpdateOrderPageAdminDto.java index 99b7ac911..d3187406b 100644 --- a/service-api/src/main/java/greencity/dto/order/UpdateOrderPageAdminDto.java +++ b/service-api/src/main/java/greencity/dto/order/UpdateOrderPageAdminDto.java @@ -22,4 +22,5 @@ public class UpdateOrderPageAdminDto { private List updateResponsibleEmployeeDto; private Double writeOffStationSum; private Double ubsCourierSum; + private String notTakenOutReason; } diff --git a/service-api/src/main/java/greencity/service/ubs/UBSManagementService.java b/service-api/src/main/java/greencity/service/ubs/UBSManagementService.java index cfda1e4eb..bee326cf9 100644 --- a/service-api/src/main/java/greencity/service/ubs/UBSManagementService.java +++ b/service-api/src/main/java/greencity/service/ubs/UBSManagementService.java @@ -281,14 +281,12 @@ ManualPaymentResponseDto updateManualPayment(Long paymentId, ManualPaymentReques * @param updateOrderPageAdminDto {@link UpdateOrderPageAdminDto}. * @param language {@link String}. * @param email {@link String}. - * @param description {@link String}. * @param images {@link MultipartFile}. * * @author Anton Bondar. */ void updateOrderAdminPageInfoAndSaveReason(Long orderId, UpdateOrderPageAdminDto updateOrderPageAdminDto, - String language, - String email, String description, MultipartFile[] images); + String language, String email, MultipartFile[] images); /** * This is method which is updates admin page info for order. diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java index c2f220b76..3717bd731 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java @@ -1675,7 +1675,6 @@ private void updateOrderPageFields(UpdateOrderPageAdminDto updateOrderPageDto, O * @param updateOrderPageAdminDto {@link UpdateOrderPageAdminDto}. * @param language {@link String}. * @param email {@link String}. - * @param description {@link String}. * @param images {@link MultipartFile}. * * @author Anton Bondar. @@ -1683,13 +1682,12 @@ private void updateOrderPageFields(UpdateOrderPageAdminDto updateOrderPageDto, O @Override @Transactional public void updateOrderAdminPageInfoAndSaveReason(Long orderId, UpdateOrderPageAdminDto updateOrderPageAdminDto, - String language, - String email, String description, MultipartFile[] images) { + String language, String email, MultipartFile[] images) { Order order = orderRepository.findById(orderId) .orElseThrow(() -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST + orderId)); updateOrderAdminPageInfo(updateOrderPageAdminDto, order, language, email); - saveReason(order, description, images); + saveReason(order, updateOrderPageAdminDto.getNotTakenOutReason(), images); } /** diff --git a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java index 9934a1ac6..162a70aab 100644 --- a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java @@ -2914,8 +2914,7 @@ void updateOrderAdminPageInfoAndSaveReasonTest() { when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - ubsManagementService.updateOrderAdminPageInfoAndSaveReason(1L, dto, "en", "test@gmail.com", "desc", - multipartFiles); + ubsManagementService.updateOrderAdminPageInfoAndSaveReason(1L, dto, "en", "test@gmail.com", multipartFiles); verify(orderRepository).findById(1L); verify(employeeRepository).findByEmail("test@gmail.com"); From 54f14e6e1058add4add694a377d9c9986136700f Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Wed, 16 Aug 2023 17:44:55 +0300 Subject: [PATCH 50/80] [Orders] After changing tariff the price of paid order is not changing (#1214) * OrderBagMapping created * changed bag functionality logic * added bag status active and deleted * #5927 [UBS] endpoint that returns deactivated locations (#1133) * add endpoint, update service and repo methods * upd tests * added formatting * - changed redirect.green-city-client url (#1132) * [UBS] - bug with manual payment #5940 (#1136) * added bag status active and deleted * changed tariff service crud methods and some order methods * Added to tariff when delete status DEACTIVATED * Separated sql from xml; changed to peek * Added tests to cover Bagstatus * Removed codesmell in BagStatusTest * added anotations not * deleted unnesessary anotations not * Fixed code in xml, replaced file in sql folder * Fixed merge conflicts and replaced files * Moved my import to end * Numerated correctly changeset+added ne file in changelog --- .../main/java/greencity/entity/order/Bag.java | 22 +- .../java/greencity/entity/order/Order.java | 42 +- .../java/greencity/entity/order/OrderBag.java | 70 +++ .../main/java/greencity/enums/BagStatus.java | 6 + .../greencity/repository/BagRepository.java | 38 +- .../repository/OrderBagRepository.java | 73 +++ .../greencity/repository/OrderRepository.java | 18 + .../db/changelog/db.changelog-master.xml | 4 + ...olumn-order-bag-mapping-table-Spodaryk.xml | 53 ++ ...dd-column-status-to-bag-table-Spodaryk.xml | 17 + ...pdate-order-bag-mapping-table-Spodaryk.xml | 8 + ...pdate-order-bag-mapping-table-Spodaryk.sql | 7 + .../java/greencity/enums/BagStatusTest.java | 45 ++ .../mapping/bag/BagForUserDtoMapper.java | 8 +- .../notification/NotificationServiceImpl.java | 5 +- .../service/ubs/OrderBagService.java | 91 ++++ .../service/ubs/SuperAdminServiceImpl.java | 105 +++- .../service/ubs/UBSClientServiceImpl.java | 109 ++-- .../service/ubs/UBSManagementServiceImpl.java | 16 +- .../src/test/java/greencity/ModelUtils.java | 179 ++++++- .../mapping/bag/BagForUserDtoMapperTest.java | 6 +- .../NotificationServiceImplTest.java | 17 +- .../service/ubs/OrderBagServiceTest.java | 151 ++++++ .../ubs/SuperAdminServiceImplTest.java | 358 +++++++++---- .../service/ubs/UBSClientServiceImplTest.java | 503 ++++++++++++------ .../ubs/UBSManagementServiceImplTest.java | 265 ++++----- 26 files changed, 1664 insertions(+), 552 deletions(-) create mode 100644 dao/src/main/java/greencity/entity/order/OrderBag.java create mode 100644 dao/src/main/java/greencity/enums/BagStatus.java create mode 100644 dao/src/main/java/greencity/repository/OrderBagRepository.java create mode 100644 dao/src/main/resources/db/changelog/logs/ch-add-column-order-bag-mapping-table-Spodaryk.xml create mode 100644 dao/src/main/resources/db/changelog/logs/ch-add-column-status-to-bag-table-Spodaryk.xml create mode 100644 dao/src/main/resources/db/changelog/logs/ch-update-order-bag-mapping-table-Spodaryk.xml create mode 100644 dao/src/main/resources/db/changelog/sql/ch-update-order-bag-mapping-table-Spodaryk.sql create mode 100644 dao/src/test/java/greencity/enums/BagStatusTest.java create mode 100644 service/src/main/java/greencity/service/ubs/OrderBagService.java create mode 100644 service/src/test/java/greencity/service/ubs/OrderBagServiceTest.java diff --git a/dao/src/main/java/greencity/entity/order/Bag.java b/dao/src/main/java/greencity/entity/order/Bag.java index 85d312524..7cb5286fe 100644 --- a/dao/src/main/java/greencity/entity/order/Bag.java +++ b/dao/src/main/java/greencity/entity/order/Bag.java @@ -1,6 +1,7 @@ package greencity.entity.order; import greencity.entity.user.employee.Employee; +import greencity.enums.BagStatus; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -8,8 +9,18 @@ import lombok.EqualsAndHashCode; import lombok.ToString; import lombok.Builder; - -import javax.persistence.*; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.CascadeType; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import java.time.LocalDate; @@ -76,7 +87,12 @@ public class Bag { @JoinColumn private Employee editedBy; - @ManyToOne + @ManyToOne(cascade = CascadeType.REMOVE, + fetch = FetchType.EAGER) @JoinColumn(nullable = false) private TariffsInfo tariffsInfo; + + @Column(nullable = false) + @Enumerated(EnumType.STRING) + private BagStatus status; } diff --git a/dao/src/main/java/greencity/entity/order/Order.java b/dao/src/main/java/greencity/entity/order/Order.java index 8215634a9..af48dfe0b 100644 --- a/dao/src/main/java/greencity/entity/order/Order.java +++ b/dao/src/main/java/greencity/entity/order/Order.java @@ -1,21 +1,43 @@ package greencity.entity.order; -import greencity.enums.CancellationReason; -import greencity.enums.OrderPaymentStatus; -import greencity.enums.OrderStatus; import greencity.entity.notifications.UserNotification; import greencity.entity.user.User; import greencity.entity.user.employee.Employee; import greencity.entity.user.employee.EmployeeOrderPosition; import greencity.entity.user.employee.ReceivingStation; import greencity.entity.user.ubs.UBSuser; +import greencity.enums.CancellationReason; +import greencity.enums.OrderPaymentStatus; +import greencity.enums.OrderStatus; import greencity.filters.StringListConverter; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; import org.hibernate.annotations.Cascade; -import javax.persistence.*; +import javax.persistence.CascadeType; +import javax.persistence.CollectionTable; +import javax.persistence.Column; +import javax.persistence.Convert; +import javax.persistence.ElementCollection; +import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.MapKeyColumn; +import javax.persistence.OneToMany; +import javax.persistence.Table; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; @@ -28,10 +50,10 @@ @Builder @Table(name = "orders") @EqualsAndHashCode(exclude = {"employeeOrderPositions", "userNotifications", "ubsUser", - "changeOfPointsList", "blockedByEmployee", "certificates", "attachedEmployees", "payment", "employeeOrderPositions", + "changeOfPointsList", "blockedByEmployee", "certificates", "payment", "employeeOrderPositions", "events", "imageReasonNotTakingBags", "additionalOrders"}) @ToString(exclude = {"employeeOrderPositions", "userNotifications", "ubsUser", - "changeOfPointsList", "blockedByEmployee", "certificates", "attachedEmployees", "payment", "employeeOrderPositions", + "changeOfPointsList", "blockedByEmployee", "certificates", "payment", "employeeOrderPositions", "events", "imageReasonNotTakingBags", "additionalOrders"}) public class Order { @Id @@ -160,4 +182,10 @@ public class Order { @Column(name = "write_off_station_sum") private Long writeOffStationSum; + + @OneToMany( + mappedBy = "order", + cascade = CascadeType.ALL, + orphanRemoval = true) + private List orderBags = new ArrayList<>(); } diff --git a/dao/src/main/java/greencity/entity/order/OrderBag.java b/dao/src/main/java/greencity/entity/order/OrderBag.java new file mode 100644 index 000000000..320212b23 --- /dev/null +++ b/dao/src/main/java/greencity/entity/order/OrderBag.java @@ -0,0 +1,70 @@ +package greencity.entity.order; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.Table; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +@Entity +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(exclude = {"order", "bag"}) +@ToString(exclude = {"order", "bag"}) +@Getter +@Setter +@Builder +@Table(name = "order_bag_mapping") +public class OrderBag { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "order_id") + private Order order; + + @ManyToOne(fetch = FetchType.EAGER) + + @JoinColumn(name = "bag_id") + private Bag bag; + + @Column(nullable = false) + private Integer amount; + + @Column(name = "confirmed_quantity") + private Integer confirmedQuantity; + + @Column(name = "exported_quantity") + private Integer exportedQuantity; + + @Column(nullable = false) + private Integer capacity; + + @Column(nullable = false) + private Long price; + + @NotBlank + @Size(min = 1, max = 30) + @Column(nullable = false) + private String name; + + @NotBlank + @Size(min = 1, max = 30) + @Column(nullable = false) + private String nameEng; +} diff --git a/dao/src/main/java/greencity/enums/BagStatus.java b/dao/src/main/java/greencity/enums/BagStatus.java new file mode 100644 index 000000000..f0f3fe1c2 --- /dev/null +++ b/dao/src/main/java/greencity/enums/BagStatus.java @@ -0,0 +1,6 @@ +package greencity.enums; + +public enum BagStatus { + ACTIVE, + DELETED +} diff --git a/dao/src/main/java/greencity/repository/BagRepository.java b/dao/src/main/java/greencity/repository/BagRepository.java index 18d35c029..8746565b7 100644 --- a/dao/src/main/java/greencity/repository/BagRepository.java +++ b/dao/src/main/java/greencity/repository/BagRepository.java @@ -8,21 +8,10 @@ import java.util.List; import java.util.Map; +import java.util.Optional; @Repository public interface BagRepository extends JpaRepository { - /** - * method, that returns {@link List}of{@link Bag} that have bags by order id. - * - * @param id order id - * @return {@link List}of{@link Bag} by it's language and orderId. - * @author Mahdziak Orest - */ - @Query(value = "SELECT * FROM ORDER_BAG_MAPPING as OBM " - + "JOIN BAG AS B ON OBM.ORDER_ID = :orderId and OBM.BAG_ID = B.ID " - + "ORDER BY B.ID", nativeQuery = true) - List findBagsByOrderId(@Param("orderId") Long id); - /** * This is method which find capacity by id. * @@ -79,11 +68,26 @@ public interface BagRepository extends JpaRepository { List findAllByOrder(@Param("orderId") Long orderId); /** - * method, that returns {@link List} of {@link Bag} by tariff id. + * method, that returns {@link List} of {@link Bag} by id. + * + * @param bagId {@link Integer} tariff service id + * @return {@link Optional} of {@link Bag} + * @author Oksana Spodaryk + */ + @Query(nativeQuery = true, + value = "SELECT * FROM bag " + + "WHERE id = :bagId AND status = 'ACTIVE'") + Optional findActiveBagById(Integer bagId); + + /** + * method, that returns {@link List} of active {@link Bag} by tariff id. * - * @param tariffInfoId tariff id {@link Long} - * @return {@link List} of {@link Bag} by tariffInfoId. - * @author Safarov Renat + * @param tariffInfoId {@link Long} tariff id + * @return {@link List} of {@link Bag} + * @author Oksana Spodaryk */ - List findBagsByTariffsInfoId(Long tariffInfoId); + @Query(nativeQuery = true, + value = "SELECT * FROM bag " + + "WHERE tariffs_info_id = :tariffInfoId AND status = 'ACTIVE'") + List findAllActiveBagsByTariffsInfoId(Long tariffInfoId); } \ No newline at end of file diff --git a/dao/src/main/java/greencity/repository/OrderBagRepository.java b/dao/src/main/java/greencity/repository/OrderBagRepository.java new file mode 100644 index 000000000..c50e2ef6c --- /dev/null +++ b/dao/src/main/java/greencity/repository/OrderBagRepository.java @@ -0,0 +1,73 @@ +package greencity.repository; + +import greencity.entity.order.OrderBag; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Repository +public interface OrderBagRepository extends JpaRepository { + /** + * Deletes the OrderBag from the ORDER_BAG_MAPPING table where the bagId and + * orderId match the provided values. + * + * @param bagId The ID of the bag to be deleted. + * @param orderId The ID of the order to which the bag is associated. + */ + @Transactional + @Modifying + @Query(value = "DELETE FROM ORDER_BAG_MAPPING WHERE BAG_ID = :bagId AND ORDER_ID = :orderId", nativeQuery = true) + void deleteOrderBagByBagIdAndOrderId(@Param("bagId") Integer bagId, @Param("orderId") Long orderId); + + /** + * Retrieves a list of order bags based on the given bag ID. + * + * @param id the ID of the order + * @return a list of order bags matching the bag ID + */ + @Query(value = "SELECT * FROM ORDER_BAG_MAPPING as OBM " + + "where OBM.BAG_ID = :bagId", nativeQuery = true) + List findOrderBagsByBagId(@Param("bagId") Integer id); + + /** + * Retrieves a list of order bags based on the given order ID. + * + * @param id the ID of the order + * @return a list of order bags matching the order ID + */ + @Query(value = "SELECT * FROM ORDER_BAG_MAPPING as OBM " + + "where OBM.ORDER_ID = :orderId", nativeQuery = true) + List findOrderBagsByOrderId(@Param("orderId") Long id); + + /** + * method updates the bag data of OrderBag for all unpaid orders. + * + * @param bagId {@link Integer} bag id + * @param capacity {@link Integer} bag capacity + * @param price {@link Long} bag full price in coins + * @param name {@link String} bag name + * @param nameEng {@link String} bag english name + * @author Oksana Spodaryk + */ + @Transactional + @Modifying + @Query(value = "update order_bag_mapping obm " + + "set capacity = :capacity, price = :price, name = :name, name_eng = :nameEng " + + "from orders o " + + "where o.id = obm.order_id and obm.bag_id = :bagId and o.order_payment_status = 'UNPAID'", nativeQuery = true) + void updateAllByBagIdForUnpaidOrders(Integer bagId, Integer capacity, Long price, String name, String nameEng); + + /** + * method returns all OrderBags by bag id. + * + * @param bagId {@link Integer} bag id + * @return {@link List} of {@link OrderBag} + * @author Oksana Spodaryk + */ + List findAllByBagId(Integer bagId); +} diff --git a/dao/src/main/java/greencity/repository/OrderRepository.java b/dao/src/main/java/greencity/repository/OrderRepository.java index 3011eb235..a4616a199 100644 --- a/dao/src/main/java/greencity/repository/OrderRepository.java +++ b/dao/src/main/java/greencity/repository/OrderRepository.java @@ -251,4 +251,22 @@ void changeReceivingStationForAllOrders(@Param("receiving_station") Long station void updateOrderStatusToExpected(@Param("actual_status") String actualStatus, @Param("expected_status") String expectedStatus, @Param("currentDate") LocalDate currentDate); + + /** + * method returns all unpaid orders that contain a bag with id. + */ + @Query(nativeQuery = true, + value = "select * from orders o " + + "left join order_bag_mapping obm on o.id = obm.order_id " + + "where obm.bag_id = :bagId and o.order_payment_status = 'UNPAID'") + List findAllUnpaidOrdersByBagId(Integer bagId); + + /** + * method returns all orders that contain a bag with id. + */ + @Query(nativeQuery = true, + value = "select * from orders o " + + "left join order_bag_mapping obm on o.id = obm.order_id " + + "where obm.bag_id = :bagId") + List findAllByBagId(Integer bagId); } diff --git a/dao/src/main/resources/db/changelog/db.changelog-master.xml b/dao/src/main/resources/db/changelog/db.changelog-master.xml index 028dc5a36..14551131b 100644 --- a/dao/src/main/resources/db/changelog/db.changelog-master.xml +++ b/dao/src/main/resources/db/changelog/db.changelog-master.xml @@ -207,6 +207,7 @@ + @@ -216,4 +217,7 @@ + + + \ No newline at end of file diff --git a/dao/src/main/resources/db/changelog/logs/ch-add-column-order-bag-mapping-table-Spodaryk.xml b/dao/src/main/resources/db/changelog/logs/ch-add-column-order-bag-mapping-table-Spodaryk.xml new file mode 100644 index 000000000..d180e153e --- /dev/null +++ b/dao/src/main/resources/db/changelog/logs/ch-add-column-order-bag-mapping-table-Spodaryk.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dao/src/main/resources/db/changelog/logs/ch-add-column-status-to-bag-table-Spodaryk.xml b/dao/src/main/resources/db/changelog/logs/ch-add-column-status-to-bag-table-Spodaryk.xml new file mode 100644 index 000000000..c256cef1f --- /dev/null +++ b/dao/src/main/resources/db/changelog/logs/ch-add-column-status-to-bag-table-Spodaryk.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + diff --git a/dao/src/main/resources/db/changelog/logs/ch-update-order-bag-mapping-table-Spodaryk.xml b/dao/src/main/resources/db/changelog/logs/ch-update-order-bag-mapping-table-Spodaryk.xml new file mode 100644 index 000000000..0c98f0340 --- /dev/null +++ b/dao/src/main/resources/db/changelog/logs/ch-update-order-bag-mapping-table-Spodaryk.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/dao/src/main/resources/db/changelog/sql/ch-update-order-bag-mapping-table-Spodaryk.sql b/dao/src/main/resources/db/changelog/sql/ch-update-order-bag-mapping-table-Spodaryk.sql new file mode 100644 index 000000000..3880052ab --- /dev/null +++ b/dao/src/main/resources/db/changelog/sql/ch-update-order-bag-mapping-table-Spodaryk.sql @@ -0,0 +1,7 @@ +UPDATE order_bag_mapping +SET capacity = bag.capacity, + price = bag.full_price, + name = bag.name, + name_eng = bag.name_eng + FROM bag +WHERE order_bag_mapping.bag_id = bag.id; diff --git a/dao/src/test/java/greencity/enums/BagStatusTest.java b/dao/src/test/java/greencity/enums/BagStatusTest.java new file mode 100644 index 000000000..2a79b535e --- /dev/null +++ b/dao/src/test/java/greencity/enums/BagStatusTest.java @@ -0,0 +1,45 @@ +package greencity.enums; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; + +class BagStatusTest { + + @Test + void enumValuesExistenceTest() { + assertNotNull(BagStatus.ACTIVE); + assertNotNull(BagStatus.DELETED); + } + + @Test + void enumValuesUniquenessTest() { + assertNotEquals(BagStatus.ACTIVE, BagStatus.DELETED); + } + + @Test + void enumValuesToStringTest() { + assertEquals("ACTIVE", BagStatus.ACTIVE.toString()); + assertEquals("DELETED", BagStatus.DELETED.toString()); + } + + @Test + void valueOfTest() { + assertEquals(BagStatus.ACTIVE, BagStatus.valueOf("ACTIVE")); + assertEquals(BagStatus.DELETED, BagStatus.valueOf("DELETED")); + } + + @Test + void enumOrdinalTest() { + assertEquals(0, BagStatus.ACTIVE.ordinal()); + assertEquals(1, BagStatus.DELETED.ordinal()); + } + + @Test + void enumValuesArrayTest() { + BagStatus[] expectedArray = {BagStatus.ACTIVE, BagStatus.DELETED}; + assertArrayEquals(expectedArray, BagStatus.values()); + } +} diff --git a/service/src/main/java/greencity/mapping/bag/BagForUserDtoMapper.java b/service/src/main/java/greencity/mapping/bag/BagForUserDtoMapper.java index fe66bbe7b..68f4bb7b4 100644 --- a/service/src/main/java/greencity/mapping/bag/BagForUserDtoMapper.java +++ b/service/src/main/java/greencity/mapping/bag/BagForUserDtoMapper.java @@ -2,21 +2,21 @@ import greencity.constant.AppConstant; import greencity.dto.bag.BagForUserDto; -import greencity.entity.order.Bag; +import greencity.entity.order.OrderBag; import org.modelmapper.AbstractConverter; import org.springframework.stereotype.Component; import java.math.BigDecimal; @Component -public class BagForUserDtoMapper extends AbstractConverter { +public class BagForUserDtoMapper extends AbstractConverter { @Override - protected BagForUserDto convert(Bag source) { + protected BagForUserDto convert(OrderBag source) { return BagForUserDto.builder() .service(source.getName()) .serviceEng(source.getNameEng()) .capacity(source.getCapacity()) - .fullPrice(BigDecimal.valueOf(source.getFullPrice()) + .fullPrice(BigDecimal.valueOf(source.getPrice()) .movePointLeft(AppConstant.TWO_DECIMALS_AFTER_POINT_IN_CURRENCY) .doubleValue()) .build(); diff --git a/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java b/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java index 56d7aec6a..8f0cb757f 100644 --- a/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java +++ b/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java @@ -20,6 +20,7 @@ import greencity.exceptions.http.AccessDeniedException; import greencity.repository.*; import greencity.service.ubs.NotificationService; +import greencity.service.ubs.OrderBagService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.MapUtils; @@ -75,6 +76,8 @@ public class NotificationServiceImpl implements NotificationService { private static final String ORDER_NUMBER_KEY = "orderNumber"; private static final String AMOUNT_TO_PAY_KEY = "amountToPay"; private static final String PAY_BUTTON = "payButton"; + @Autowired + private final OrderBagService orderBagService; /** * {@inheritDoc} @@ -239,7 +242,7 @@ private Double getAmountToPay(Order order) { long ubsCourierSumInCoins = order.getUbsCourierSum() == null ? 0L : order.getUbsCourierSum(); long writeStationSumInCoins = order.getWriteOffStationSum() == null ? 0L : order.getWriteOffStationSum(); - List bagsType = bagRepository.findBagsByOrderId(order.getId()); + List bagsType = orderBagService.findAllBagsByOrderId(order.getId()); Map bagsAmount; if (MapUtils.isNotEmpty(order.getExportedQuantity())) { bagsAmount = order.getExportedQuantity(); diff --git a/service/src/main/java/greencity/service/ubs/OrderBagService.java b/service/src/main/java/greencity/service/ubs/OrderBagService.java new file mode 100644 index 000000000..df79b223f --- /dev/null +++ b/service/src/main/java/greencity/service/ubs/OrderBagService.java @@ -0,0 +1,91 @@ +package greencity.service.ubs; + +import greencity.entity.order.Bag; +import greencity.entity.order.OrderBag; +import greencity.exceptions.NotFoundException; +import greencity.repository.OrderBagRepository; +import lombok.Data; + +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static greencity.constant.ErrorMessage.BAG_NOT_FOUND; + +@Service +@Data +public class OrderBagService { + private final OrderBagRepository orderBagRepository; + + private Long getBagPrice(List orderBags, Integer id) { + return orderBags.stream() + .filter(ob -> ob.getBag().getId().equals(id)) + .map(OrderBag::getPrice) + .findFirst() + .orElseThrow(() -> new NotFoundException(BAG_NOT_FOUND + id)); + } + + /** + * Finds all bags belonging to a specific list of OrderBag instances. + * + * @param orderBags A list of OrderBag instances to search within. + * @return A list of Bag instances associated with the provided OrderBag + * instances. + */ + public List findAllBagsInOrderBagsList(List orderBags) { + return orderBags.stream() + .map(OrderBag::getBag) + .peek(b -> b.setFullPrice(getBagPrice(orderBags, b.getId()))) + .collect(Collectors.toList()); + } + + /** + * Finds all bags belonging to a specific OrderBag based on the provided ID. + * + * @param id The ID of the OrderBag to search for. + * @return A list of Bag instances associated with the provided OrderBag ID. + */ + public List findAllBagsByOrderId(Long id) { + List orderBags = orderBagRepository.findOrderBagsByOrderId(id); + return findAllBagsInOrderBagsList(orderBags); + } + + /** + * Calculates the actual bags' amounts for the given list of OrderBags and + * returns the result as a Map. This method checks the OrderBags in the input + * list and calculates the actual amount for each bag based on the availability + * of different quantity attributes in the OrderBag objects. It prioritizes the + * following quantities in descending order: 1. Exported Quantity: If all + * OrderBags have the 'exportedQuantity' attribute set, the method will use it. + * 2. Confirmed Quantity: If 'exportedQuantity' is not available for all + * OrderBags but 'confirmedQuantity' is, the method will use it. 3. Regular + * Amount: If neither 'exportedQuantity' nor 'confirmedQuantity' are available + * for all OrderBags, the method will use the 'amount' attribute. + * + * @param bagsForOrder The list of OrderBag objects for which the actual amounts + * need to be calculated. + * @return A Map containing the bag ID as the key and the corresponding actual + * amount as the value. If any OrderBag in the input list lacks all + * three attributes (exportedQuantity, confirmedQuantity, and amount), + * the corresponding entry will not be included in the result map. + * @throws NullPointerException if 'bagsForOrder' is null. + */ + public Map getActualBagsAmountForOrder(List bagsForOrder) { + if (bagsForOrder.stream().allMatch(orderBag -> orderBag.getExportedQuantity() != null)) { + return bagsForOrder.stream() + .collect(Collectors.toMap(orderBag -> orderBag.getBag().getId(), OrderBag::getExportedQuantity)); + } + if (bagsForOrder.stream().allMatch(orderBag -> orderBag.getConfirmedQuantity() != null)) { + return bagsForOrder.stream() + .collect(Collectors.toMap(orderBag -> orderBag.getBag().getId(), OrderBag::getConfirmedQuantity)); + } + if (bagsForOrder.stream().allMatch(orderBag -> orderBag.getAmount() != null)) { + return bagsForOrder.stream() + .collect(Collectors.toMap(orderBag -> orderBag.getBag().getId(), OrderBag::getAmount)); + } + return new HashMap<>(); + } +} diff --git a/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java b/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java index 9d623c99d..78f3d053f 100644 --- a/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java @@ -24,6 +24,8 @@ import greencity.dto.tariff.GetTariffsInfoDto; import greencity.dto.tariff.SetTariffLimitsDto; import greencity.entity.coords.Coordinates; +import greencity.entity.order.Order; +import greencity.entity.order.OrderBag; import greencity.entity.order.Bag; import greencity.entity.order.Courier; import greencity.entity.order.Service; @@ -33,7 +35,9 @@ import greencity.entity.user.Region; import greencity.entity.user.employee.Employee; import greencity.entity.user.employee.ReceivingStation; +import greencity.enums.BagStatus; import greencity.enums.CourierLimit; +import greencity.enums.OrderPaymentStatus; import greencity.enums.CourierStatus; import greencity.enums.LocationStatus; import greencity.enums.StationStatus; @@ -48,6 +52,8 @@ import greencity.filters.TariffsInfoSpecification; import greencity.repository.BagRepository; import greencity.repository.CourierRepository; +import greencity.repository.OrderBagRepository; +import greencity.repository.OrderRepository; import greencity.repository.DeactivateChosenEntityRepository; import greencity.repository.EmployeeRepository; import greencity.repository.LocationRepository; @@ -71,6 +77,7 @@ import java.util.Comparator; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; @@ -113,6 +120,9 @@ public class SuperAdminServiceImpl implements SuperAdminService { "Current region: %s or cities: %s or receiving stations: %s don't exist."; private static final String REGION_OR_CITIES_OR_RECEIVING_STATIONS_OR_COURIER_NOT_EXIST_MESSAGE = "Current region: %s or cities: %s or receiving stations: %s or courier: %s don't exist."; + private final OrderBagRepository orderBagRepository; + private final OrderRepository orderRepository; + private final OrderBagService orderBagService; @Override public GetTariffServiceDto addTariffService(long tariffId, TariffServiceDto dto, String employeeUuid) { @@ -124,6 +134,7 @@ private Bag createBag(long tariffId, TariffServiceDto dto, String employeeUuid) TariffsInfo tariffsInfo = tryToFindTariffById(tariffId); Employee employee = tryToFindEmployeeByUuid(employeeUuid); Bag bag = modelMapper.map(dto, Bag.class); + bag.setStatus(BagStatus.ACTIVE); bag.setTariffsInfo(tariffsInfo); bag.setCreatedBy(employee); return bag; @@ -132,7 +143,7 @@ private Bag createBag(long tariffId, TariffServiceDto dto, String employeeUuid) @Override public List getTariffService(long tariffId) { if (tariffsInfoRepository.existsById(tariffId)) { - return bagRepository.findBagsByTariffsInfoId(tariffId) + return bagRepository.findAllActiveBagsByTariffsInfoId(tariffId) .stream() .map(it -> modelMapper.map(it, GetTariffServiceDto.class)) .collect(Collectors.toList()); @@ -142,13 +153,41 @@ public List getTariffService(long tariffId) { } @Override + @Transactional public void deleteTariffService(Integer bagId) { Bag bag = tryToFindBagById(bagId); + if (CollectionUtils.isEmpty(orderBagRepository.findOrderBagsByBagId(bagId))) { + bagRepository.delete(bag); + return; + } + bag.setStatus(BagStatus.DELETED); + bagRepository.save(bag); + deleteTariffsInfo(bag); + orderRepository.findAllByBagId(bagId).forEach(order -> deleteBagFromOrder(order, bag)); + } + + private void deleteBagFromOrder(Order order, Bag bag) { + Integer bagId = bag.getId(); + Map amount = orderBagService.getActualBagsAmountForOrder(order.getOrderBags()); + Integer totalBagsAmount = amount.values().stream().reduce(0, Integer::sum); + if (amount.get(bagId).equals(0) || order.getOrderPaymentStatus().equals(OrderPaymentStatus.UNPAID)) { + if (totalBagsAmount.equals(amount.get(bagId))) { + order.setOrderBags(new ArrayList<>()); + orderRepository.delete(order); + return; + } + order.getOrderBags().stream().filter(orderBag -> orderBag.getBag().getId().equals(bagId)) + .findFirst() + .ifPresent(orderBag -> orderBagRepository.deleteOrderBagByBagIdAndOrderId(bagId, order.getId())); + orderRepository.save(order); + } + } + + private void deleteTariffsInfo(Bag bag) { TariffsInfo tariffsInfo = bag.getTariffsInfo(); - bagRepository.delete(bag); - List bags = bagRepository.findBagsByTariffsInfoId(tariffsInfo.getId()); + List bags = bagRepository.findAllActiveBagsByTariffsInfoId(tariffsInfo.getId()); if (bags.isEmpty() || bags.stream().noneMatch(Bag::getLimitIncluded)) { - tariffsInfo.setTariffStatus(TariffStatus.NEW); + tariffsInfo.setTariffStatus(TariffStatus.DEACTIVATED); tariffsInfo.setBags(bags); tariffsInfo.setMax(null); tariffsInfo.setMin(null); @@ -159,9 +198,39 @@ public void deleteTariffService(Integer bagId) { } @Override - public GetTariffServiceDto editTariffService(TariffServiceDto dto, Integer id, String employeeUuid) { - Bag bag = tryToFindBagById(id); + @Transactional + public GetTariffServiceDto editTariffService(TariffServiceDto dto, Integer bagId, String employeeUuid) { + Bag bag = tryToFindBagById(bagId); Employee employee = tryToFindEmployeeByUuid(employeeUuid); + updateTariffService(dto, bag); + bag.setEditedBy(employee); + + orderBagRepository.updateAllByBagIdForUnpaidOrders( + bagId, bag.getCapacity(), bag.getFullPrice(), bag.getName(), bag.getNameEng()); + + List orders = orderRepository.findAllUnpaidOrdersByBagId(bagId); + if (CollectionUtils.isNotEmpty(orders)) { + orders.forEach(it -> updateOrderSumToPay(it, bag)); + orderRepository.saveAll(orders); + } + return modelMapper.map(bagRepository.save(bag), GetTariffServiceDto.class); + } + + private void updateOrderSumToPay(Order order, Bag bag) { + Map amount = orderBagService.getActualBagsAmountForOrder(order.getOrderBags()); + Long sumToPayInCoins = order.getOrderBags().stream() + .map(orderBag -> amount.get(orderBag.getBag().getId()) * getBagPrice(orderBag, bag)) + .reduce(0L, Long::sum); + order.setSumTotalAmountWithoutDiscounts(sumToPayInCoins); + } + + private Long getBagPrice(OrderBag orderBag, Bag bag) { + return bag.getId().equals(orderBag.getBag().getId()) + ? bag.getFullPrice() + : orderBag.getPrice(); + } + + private void updateTariffService(TariffServiceDto dto, Bag bag) { bag.setCapacity(dto.getCapacity()); bag.setPrice(convertBillsIntoCoins(dto.getPrice())); bag.setCommission(convertBillsIntoCoins(dto.getCommission())); @@ -171,8 +240,6 @@ public GetTariffServiceDto editTariffService(TariffServiceDto dto, Integer id, S bag.setDescription(dto.getDescription()); bag.setDescriptionEng(dto.getDescriptionEng()); bag.setEditedAt(LocalDate.now()); - bag.setEditedBy(employee); - return modelMapper.map(bagRepository.save(bag), GetTariffServiceDto.class); } private Long convertBillsIntoCoins(Double bills) { @@ -185,8 +252,8 @@ private Long convertBillsIntoCoins(Double bills) { } private Bag tryToFindBagById(Integer id) { - return bagRepository.findById(id) - .orElseThrow(() -> new NotFoundException(ErrorMessage.BAG_NOT_FOUND + id)); + return bagRepository.findActiveBagById(id).orElseThrow( + () -> new NotFoundException(ErrorMessage.BAG_NOT_FOUND + id)); } private Long getFullPrice(Double price, Double commission) { @@ -200,9 +267,9 @@ public GetServiceDto addService(Long tariffId, ServiceDto dto, String employeeUu } private Service createService(Long tariffId, ServiceDto dto, String employeeUuid) { - if (tryToFindServiceByTariffsInfoId(tariffId).isEmpty()) { + TariffsInfo tariffsInfo = tryToFindTariffById(tariffId); + if (serviceRepository.findServiceByTariffsInfoId(tariffId).isEmpty()) { Employee employee = tryToFindEmployeeByUuid(employeeUuid); - TariffsInfo tariffsInfo = tryToFindTariffById(tariffId); Service service = modelMapper.map(dto, Service.class); service.setCreatedBy(employee); service.setCreatedAt(LocalDate.now()); @@ -215,14 +282,16 @@ private Service createService(Long tariffId, ServiceDto dto, String employeeUuid @Override public GetServiceDto getService(long tariffId) { - return tryToFindServiceByTariffsInfoId(tariffId) + tryToFindTariffById(tariffId); + return serviceRepository.findServiceByTariffsInfoId(tariffId) .map(it -> modelMapper.map(it, GetServiceDto.class)) .orElse(null); } @Override public void deleteService(long id) { - serviceRepository.delete(tryToFindServiceById(id)); + Service service = tryToFindServiceById(id); + serviceRepository.delete(service); } @Override @@ -244,14 +313,6 @@ private Employee tryToFindEmployeeByUuid(String employeeUuid) { .orElseThrow(() -> new NotFoundException(ErrorMessage.EMPLOYEE_WITH_UUID_NOT_FOUND + employeeUuid)); } - private Optional tryToFindServiceByTariffsInfoId(long tariffId) { - if (tariffsInfoRepository.existsById(tariffId)) { - return serviceRepository.findServiceByTariffsInfoId(tariffId); - } else { - throw new NotFoundException(ErrorMessage.TARIFF_NOT_FOUND + tariffId); - } - } - private Service tryToFindServiceById(long id) { return serviceRepository.findById(id) .orElseThrow(() -> new NotFoundException(ErrorMessage.SERVICE_IS_NOT_FOUND_BY_ID + id)); diff --git a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java index 4b18d8f5a..b418b3ce9 100644 --- a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java @@ -59,6 +59,7 @@ import greencity.entity.order.ChangeOfPoints; import greencity.entity.order.Event; import greencity.entity.order.Order; +import greencity.entity.order.OrderBag; import greencity.entity.order.OrderPaymentStatusTranslation; import greencity.entity.order.OrderStatusTranslation; import greencity.entity.order.Payment; @@ -72,6 +73,7 @@ import greencity.entity.user.ubs.UBSuser; import greencity.entity.viber.ViberBot; import greencity.enums.AddressStatus; +import greencity.enums.BagStatus; import greencity.enums.BotType; import greencity.enums.CertificateStatus; import greencity.enums.CourierLimit; @@ -94,6 +96,7 @@ import greencity.repository.EventRepository; import greencity.repository.LocationRepository; import greencity.repository.OrderAddressRepository; +import greencity.repository.OrderBagRepository; import greencity.repository.OrderPaymentStatusTranslationRepository; import greencity.repository.OrderRepository; import greencity.repository.OrderStatusTranslationRepository; @@ -114,7 +117,6 @@ import greencity.util.OrderUtils; import lombok.Data; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.collections4.MapUtils; import org.json.JSONObject; import org.modelmapper.ModelMapper; import org.springframework.beans.factory.annotation.Autowired; @@ -123,7 +125,6 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; - import javax.persistence.EntityNotFoundException; import javax.transaction.Transactional; import java.math.BigDecimal; @@ -136,7 +137,6 @@ import java.util.Collections; import java.util.Comparator; import java.util.EnumSet; -import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Locale; @@ -148,7 +148,6 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.LongStream; - import static greencity.constant.ErrorMessage.ACTUAL_ADDRESS_NOT_FOUND; import static greencity.constant.ErrorMessage.ADDRESS_ALREADY_EXISTS; import static greencity.constant.ErrorMessage.BAD_ORDER_STATUS_REQUEST; @@ -230,6 +229,9 @@ public class UBSClientServiceImpl implements UBSClientService { private final TelegramBotRepository telegramBotRepository; private final ViberBotRepository viberBotRepository; private final LocationApiService locationApiService; + private final OrderBagRepository orderBagRepository; + private final OrderBagService orderBagService; + @Lazy @Autowired private UBSManagementService ubsManagementService; @@ -357,7 +359,7 @@ private boolean isTariffAvailableForCurrentLocation(TariffsInfo tariffsInfo, Loc private UserPointsAndAllBagsDto getUserPointsAndAllBagsDtoByTariffIdAndUserPoints(Long tariffId, Integer userPoints) { - var bagTranslationDtoList = bagRepository.findBagsByTariffsInfoId(tariffId).stream() + var bagTranslationDtoList = bagRepository.findAllActiveBagsByTariffsInfoId(tariffId).stream() .map(bag -> modelMapper.map(bag, BagTranslationDto.class)) .collect(toList()); return new UserPointsAndAllBagsDto(bagTranslationDtoList, userPoints); @@ -378,8 +380,9 @@ private Location getLocationByOrderIdThroughLazyInitialization(Order order) { public PersonalDataDto getSecondPageData(String uuid) { User currentUser = userRepository.findByUuid(uuid); List ubsUser = ubsUserRepository.findUBSuserByUser(currentUser); + if (ubsUser.isEmpty()) { - ubsUser.add(UBSuser.builder().id(null).build()); + ubsUser = Collections.singletonList(UBSuser.builder().id(null).build()); } PersonalDataDto dto = modelMapper.map(currentUser, PersonalDataDto.class); dto.setUbsUserId(ubsUser.get(0).getId()); @@ -422,14 +425,14 @@ private void checkSumIfCourierLimitBySumOfOrder(TariffsInfo tariffsInfo, Long su public FondyOrderResponse saveFullOrderToDB(OrderResponseDto dto, String uuid, Long orderId) { final User currentUser = userRepository.findByUuid(uuid); TariffsInfo tariffsInfo = tryToFindTariffsInfoByBagIds(getBagIds(dto.getBags()), dto.getLocationId()); - Map amountOfBagsOrderedMap = new HashMap<>(); + List bagsOrdered = new ArrayList<>(); if (!dto.isShouldBePaid()) { dto.setCertificates(Collections.emptySet()); dto.setPointsToUse(0); } - long sumToPayWithoutDiscountInCoins = formBagsToBeSavedAndCalculateOrderSum(amountOfBagsOrderedMap, + long sumToPayWithoutDiscountInCoins = formBagsToBeSavedAndCalculateOrderSum(bagsOrdered, dto.getBags(), tariffsInfo); checkIfUserHaveEnoughPoints(currentUser.getCurrentPoints(), dto.getPointsToUse()); long sumToPayInCoins = reduceOrderSumDueToUsedPoints(sumToPayWithoutDiscountInCoins, dto.getPointsToUse()); @@ -442,7 +445,7 @@ public FondyOrderResponse saveFullOrderToDB(OrderResponseDto dto, String uuid, L UBSuser userData = formUserDataToBeSaved(dto.getPersonalData(), dto.getAddressId(), dto.getLocationId(), currentUser); - getOrder(dto, currentUser, amountOfBagsOrderedMap, sumToPayInCoins, order, orderCertificates, userData); + getOrder(dto, currentUser, bagsOrdered, sumToPayInCoins, order, orderCertificates, userData); eventService.save(OrderHistory.ORDER_FORMED, OrderHistory.CLIENT, order); if (sumToPayInCoins <= 0 || !dto.isShouldBePaid()) { @@ -460,8 +463,8 @@ private List getBagIds(List dto) { .collect(Collectors.toList()); } - private Bag tryToGetBagById(Integer id) { - return bagRepository.findById(id) + private Bag findActiveBagById(Integer id) { + return bagRepository.findActiveBagById(id) .orElseThrow(() -> new NotFoundException(BAG_NOT_FOUND + id)); } @@ -939,31 +942,17 @@ private AddressInfoDto addressInfoDtoBuilder(Order order) { } private List bagForUserDtosBuilder(Order order) { - Map actualBagAmounts = getActualBagAmountsForOrder(order); - List bagsForOrder = bagRepository.findBagsByOrderId(order.getId()); - return bagsForOrder.stream() - .filter(bag -> actualBagAmounts.containsKey(bag.getId())) - .map(bag -> buildBagForUserDto(bag, actualBagAmounts.get(bag.getId()))) + List bagsAmountInOrder = order.getOrderBags(); + Map actualBagsAmount = orderBagService.getActualBagsAmountForOrder(bagsAmountInOrder); + return bagsAmountInOrder.stream() + .map(orderBag -> buildBagForUserDto(orderBag, actualBagsAmount.get(orderBag.getBag().getId()))) .collect(toList()); } - private Map getActualBagAmountsForOrder(Order order) { - if (MapUtils.isNotEmpty(order.getExportedQuantity())) { - return order.getExportedQuantity(); - } - if (MapUtils.isNotEmpty(order.getConfirmedQuantity())) { - return order.getConfirmedQuantity(); - } - if (MapUtils.isNotEmpty(order.getAmountOfBagsOrdered())) { - return order.getAmountOfBagsOrdered(); - } - return new HashMap<>(); - } - - private BagForUserDto buildBagForUserDto(Bag bag, int count) { - BagForUserDto bagDto = modelMapper.map(bag, BagForUserDto.class); + private BagForUserDto buildBagForUserDto(OrderBag orderBag, int count) { + BagForUserDto bagDto = modelMapper.map(orderBag, BagForUserDto.class); bagDto.setCount(count); - bagDto.setTotalPrice(convertCoinsIntoBills(count * bag.getFullPrice())); + bagDto.setTotalPrice(convertCoinsIntoBills(count * orderBag.getPrice())); return bagDto; } @@ -1092,15 +1081,15 @@ private UBSuser updateRecipientDataInOrder(UBSuser ubsUser, UbsCustomersDtoUpdat } private Order formAndSaveOrder(Order order, Set orderCertificates, - Map amountOfBagsOrderedMap, UBSuser userData, + List bagsOrdered, UBSuser userData, User currentUser, long sumToPayInCoins) { order.setOrderStatus(OrderStatus.FORMED); order.setCertificates(orderCertificates); - order.setAmountOfBagsOrdered(amountOfBagsOrderedMap); + order.setOrderBags(bagsOrdered); order.setUbsUser(userData); order.setUser(currentUser); order.setSumTotalAmountWithoutDiscounts( - formBagsToBeSavedAndCalculateOrderSumClient(amountOfBagsOrderedMap)); + calculateOrderSumWithoutDiscounts(bagsOrdered)); setOrderPaymentStatus(order, sumToPayInCoins); Payment payment = Payment.builder() @@ -1115,7 +1104,7 @@ private Order formAndSaveOrder(Order order, Set orderCertificates, order.setPayment(new ArrayList<>()); } order.getPayment().add(payment); - + bagsOrdered.forEach(orderBag -> orderBag.setOrder(order)); orderRepository.save(order); return order; } @@ -1256,35 +1245,44 @@ private void checkAmountOfBagsIfCourierLimitByAmountOfBag(TariffsInfo courierLoc } } - private long formBagsToBeSavedAndCalculateOrderSumClient( - Map getOrderBagsAndQuantity) { - long sumToPayInCoins = 0L; - - for (Map.Entry temp : getOrderBagsAndQuantity.entrySet()) { - Integer amount = getOrderBagsAndQuantity.get(temp.getKey()); - Bag bag = bagRepository.findById(temp.getKey()) - .orElseThrow(() -> new NotFoundException(BAG_NOT_FOUND + temp.getKey())); - sumToPayInCoins += bag.getFullPrice() * amount; - } - return sumToPayInCoins; + private long calculateOrderSumWithoutDiscounts(List getOrderBagsAndQuantity) { + return getOrderBagsAndQuantity.stream() + .map(orderBag -> orderBag.getPrice() * orderBag.getAmount()) + .reduce(0L, Long::sum); } - private long formBagsToBeSavedAndCalculateOrderSum( - Map map, List bags, TariffsInfo tariffsInfo) { + private long formBagsToBeSavedAndCalculateOrderSum(List orderBagList, List bags, + TariffsInfo tariffsInfo) { long sumToPayInCoins = 0L; - + List bagIds = bags.stream().map(BagDto::getId).collect(toList()); for (BagDto temp : bags) { - Bag bag = tryToGetBagById(temp.getId()); + Bag bag = findActiveBagById(temp.getId()); if (bag.getLimitIncluded().booleanValue()) { checkAmountOfBagsIfCourierLimitByAmountOfBag(tariffsInfo, temp.getAmount()); checkSumIfCourierLimitBySumOfOrder(tariffsInfo, bag.getFullPrice() * temp.getAmount()); } sumToPayInCoins += bag.getFullPrice() * temp.getAmount(); - map.put(temp.getId(), temp.getAmount()); - } + OrderBag orderBag = createOrderBag(bag); + orderBag.setAmount(temp.getAmount()); + orderBagList.add(orderBag); + } + List notOrderedBags = tariffsInfo.getBags().stream() + .filter(orderBag -> orderBag.getStatus() == BagStatus.ACTIVE && !bagIds.contains(orderBag.getId())) + .map(this::createOrderBag).collect(toList()); + orderBagList.addAll(notOrderedBags.stream().peek(orderBag -> orderBag.setAmount(0)).collect(toList())); return sumToPayInCoins; } + private OrderBag createOrderBag(Bag bag) { + return OrderBag.builder() + .bag(bag) + .capacity(bag.getCapacity()) + .price(bag.getFullPrice()) + .name(bag.getName()) + .nameEng(bag.getNameEng()) + .build(); + } + private void validateCertificate(Certificate certificate) { if (certificate.getCertificateStatus() == CertificateStatus.NEW) { throw new CertificateIsNotActivated(CERTIFICATE_IS_NOT_ACTIVATED + certificate.getCode()); @@ -1438,9 +1436,9 @@ private long reduceOrderSumDueToUsedPoints(long sumToPayInCoins, int pointsToUse return sumToPayInCoins; } - private void getOrder(OrderResponseDto dto, User currentUser, Map amountOfBagsOrderedMap, + private void getOrder(OrderResponseDto dto, User currentUser, List amountOfBagsOrdered, long sumToPayInCoins, Order order, Set orderCertificates, UBSuser userData) { - formAndSaveOrder(order, orderCertificates, amountOfBagsOrderedMap, userData, currentUser, sumToPayInCoins); + formAndSaveOrder(order, orderCertificates, amountOfBagsOrdered, userData, currentUser, sumToPayInCoins); formAndSaveUser(currentUser, dto.getPointsToUse(), order); } @@ -1485,6 +1483,7 @@ public void deleteOrder(String uuid, Long id) { if (order == null) { throw new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST); } + order.setOrderBags(Collections.emptyList()); orderRepository.delete(order); } diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java index 3717bd731..2c0fbe526 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java @@ -73,6 +73,7 @@ import greencity.enums.SortingOrder; import greencity.exceptions.BadRequestException; import greencity.exceptions.NotFoundException; +import greencity.repository.OrderBagRepository; import greencity.repository.BagRepository; import greencity.repository.CertificateRepository; import greencity.repository.EmployeeOrderPositionRepository; @@ -109,7 +110,6 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.server.ResponseStatusException; - import javax.persistence.EntityNotFoundException; import java.math.BigDecimal; import java.math.RoundingMode; @@ -179,6 +179,10 @@ public class UBSManagementServiceImpl implements UBSManagementService { @Lazy @Autowired private UBSClientService ubsClientService; + @Autowired + private final OrderBagService orderBagService; + @Autowired + private final OrderBagRepository orderBagRepository; /** * Method gets all order payments, count paid amount, amount which user should @@ -364,7 +368,7 @@ public OrderStatusPageDto getOrderStatusData(Long orderId, String email) { checkAvailableOrderForEmployee(order, email); CounterOrderDetailsDto prices = getPriceDetails(orderId); - var bagInfoDtoList = bagRepository.findBagsByTariffsInfoId(order.getTariffsInfo().getId()).stream() + var bagInfoDtoList = bagRepository.findAllActiveBagsByTariffsInfoId(order.getTariffsInfo().getId()).stream() .map(bag -> modelMapper.map(bag, BagInfoDto.class)) .collect(Collectors.toList()); @@ -710,7 +714,7 @@ private void collectEventAboutConfirmWaste(Map confirmed, Orde Long orderId, int countOfChanges, StringBuilder values) { for (Map.Entry entry : confirmed.entrySet()) { Integer capacity = bagRepository.findCapacityById(entry.getKey()); - Optional bagOptional = bagRepository.findById(entry.getKey()); + Optional bagOptional = bagRepository.findActiveBagById(entry.getKey()); if (bagOptional.isPresent() && checkOrderStatusAboutConfirmWaste(order)) { Optional confirmWasteWas = Optional.empty(); Optional initialAmount = Optional.empty(); @@ -737,7 +741,7 @@ private void collectEventAboutExportedWaste(Map exported, Orde Long orderId, int countOfChanges, StringBuilder values) { for (Map.Entry entry : exported.entrySet()) { Integer capacity = bagRepository.findCapacityById(entry.getKey()); - Optional bagOptional = bagRepository.findById(entry.getKey()); + Optional bagOptional = bagRepository.findActiveBagById(entry.getKey()); if (bagOptional.isPresent() && checkOrderStatusAboutExportedWaste(order)) { Optional exporterWasteWas = Optional.empty(); Optional confirmWasteWas = Optional.empty(); @@ -822,7 +826,7 @@ private CounterOrderDetailsDto getPriceDetails(Long id) { CounterOrderDetailsDto dto = new CounterOrderDetailsDto(); Order order = orderRepository.getOrderDetails(id) .orElseThrow(() -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST + id)); - List bag = bagRepository.findBagsByOrderId(id); + List bag = orderBagService.findAllBagsInOrderBagsList(orderBagRepository.findOrderBagsByOrderId(id)); final List currentCertificate = certificateRepository.findCertificate(id); long sumAmountInCoins = 0; @@ -1069,7 +1073,7 @@ private void setOrderDetailDto(OrderDetailDto dto, Order order) { dto.setAmount(modelMapper.map(order, new TypeToken>() { }.getType())); - dto.setCapacityAndPrice(bagRepository.findBagsByOrderId(order.getId()) + dto.setCapacityAndPrice(orderBagService.findAllBagsByOrderId(order.getId()) .stream() .map(b -> modelMapper.map(b, BagInfoDto.class)) .collect(Collectors.toList())); diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index 9a26a60cc..bcbcf4d86 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -129,6 +129,7 @@ import greencity.entity.order.Courier; import greencity.entity.order.Event; import greencity.entity.order.Order; +import greencity.entity.order.OrderBag; import greencity.entity.order.OrderPaymentStatusTranslation; import greencity.entity.order.OrderStatusTranslation; import greencity.entity.order.Payment; @@ -153,6 +154,7 @@ import greencity.entity.user.ubs.UBSuser; import greencity.entity.viber.ViberBot; import greencity.enums.AddressStatus; +import greencity.enums.BagStatus; import greencity.enums.CancellationReason; import greencity.enums.CertificateStatus; import greencity.enums.CourierLimit; @@ -171,7 +173,6 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; - import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; @@ -187,7 +188,6 @@ import java.util.Map; import java.util.Optional; import java.util.Set; - import static greencity.enums.NotificationReceiverType.EMAIL; import static greencity.enums.NotificationReceiverType.MOBILE; import static greencity.enums.NotificationReceiverType.SITE; @@ -209,7 +209,8 @@ public class ModelUtils { public static final List TEST_PAYMENT_LIST = createPaymentList(); public static final OrderDetailStatusDto ORDER_DETAIL_STATUS_DTO = createOrderDetailStatusDto(); public static final List TEST_BAG_MAPPING_DTO_LIST = createBagMappingDtoList(); - public static final Bag TEST_BAG = createBag(); + public static final Bag TEST_BAG = createBag(1); + public static final OrderBag TEST_ORDER_BAG = createOrderBag(); public static final BagForUserDto TEST_BAG_FOR_USER_DTO = createBagForUserDto(); public static final BagInfoDto TEST_BAG_INFO_DTO = createBagInfoDto(); public static final List TEST_BAG_LIST = singletonList(TEST_BAG); @@ -259,6 +260,7 @@ public class ModelUtils { public static final NotificationDto TEST_NOTIFICATION_DTO = createNotificationDto(); public static final UpdateOrderPageAdminDto UPDATE_ORDER_PAGE_ADMIN_DTO = updateOrderPageAdminDto(); public static final CourierUpdateDto UPDATE_COURIER_DTO = getUpdateCourierDto(); + public static final List TEST_BAG_LIST2 = Arrays.asList(createBag(1), createBag(2), createBag(3)); public static final String KYIV_REGION_EN = "Kyiv Oblast"; public static final String KYIV_REGION_UA = "Київська область"; @@ -2319,7 +2321,7 @@ private static BagInfoDto createBagInfoDto() { .capacity(20) .name("Name") .nameEng("NameEng") - .price(100.00) + .price(1000.00) .build(); } @@ -2330,9 +2332,10 @@ private static List createBagMappingDtoList() { .build()); } - private static Bag createBag() { - return Bag.builder() - .id(1) + private static Bag createBag(int id) { + Bag bag = Bag.builder() + .status(BagStatus.ACTIVE) + .id(id) .name("Name") .nameEng("NameEng") .capacity(20) @@ -2347,6 +2350,19 @@ private static Bag createBag() { .id(1L) .build()) .build(); + return bag.setFullPrice(100000L); + } + + private static OrderBag createOrderBag() { + return OrderBag.builder() + .id(1L) + .name("Name") + .nameEng("NameEng") + .capacity(20) + .price(100_00L) + .order(createOrder()) + .bag(createBag(1)) + .build(); } private static BagForUserDto createBagForUserDto() { @@ -2727,6 +2743,7 @@ public static GetTariffServiceDto getGetTariffServiceDto() { public static Optional getOptionalBag() { return Optional.of(Bag.builder() + .status(BagStatus.ACTIVE) .id(1) .capacity(120) .commission(50_00L) @@ -2741,7 +2758,94 @@ public static Optional getOptionalBag() { .build()); } + public static OrderBag getOrderBag2() { + return OrderBag.builder() + .id(2L) + .capacity(2200) + .price(22000_00L) + .name("name") + .nameEng("name eng") + .amount(20) + .bag(getBag2()) + .order(getOrder()) + .build(); + } + public static Bag getBag() { + return Bag.builder() + .status(BagStatus.ACTIVE) + .id(1) + .capacity(120) + .commission(50_00L) + .price(120_00L) + .fullPrice(120_00L) + .createdAt(LocalDate.now()) + .createdBy(getEmployee()) + .editedBy(getEmployee()) + .limitIncluded(true) + .tariffsInfo(getTariffInfo()) + .build(); + } + + public static Bag getBag2() { + return Bag.builder() + .status(BagStatus.ACTIVE) + .id(2) + .capacity(120) + .commission(50_00L) + .price(120_00L) + .fullPrice(2200000L) + .createdAt(LocalDate.now()) + .createdBy(getEmployee()) + .editedBy(getEmployee()) + .limitIncluded(true) + .tariffsInfo(getTariffInfo()) + .build(); + } + + public static OrderBag getOrderBag() { + return OrderBag.builder() + .id(1L) + .capacity(120) + .price(120_00L) + .name("name") + .nameEng("name eng") + .amount(1) + .bag(getBag()) + .order(getOrder()) + .build(); + } + + public static OrderBag getOrderBagWithConfirmedAmount() { + return OrderBag.builder() + .id(1L) + .capacity(120) + .price(120_00L) + .name("name") + .nameEng("name eng") + .amount(1) + .confirmedQuantity(2) + .bag(getBag()) + .order(getOrder()) + .build(); + } + + public static OrderBag getOrderBagWithExportedAmount() { + return OrderBag.builder() + .id(1L) + .capacity(120) + .price(120_00L) + .name("name") + .nameEng("name eng") + .amount(1) + .confirmedQuantity(2) + .exportedQuantity(2) + .bag(getBag()) + .order(getOrder()) + .build(); + } + + public static Bag getBagDeleted() { return Bag.builder() .id(1) .capacity(120) @@ -2754,11 +2858,14 @@ public static Bag getBag() { .description("Description") .descriptionEng("DescriptionEng") .limitIncluded(true) + .status(BagStatus.DELETED) + .tariffsInfo(getTariffInfo()) .build(); } public static Bag getBagForOrder() { return Bag.builder() + .status(BagStatus.ACTIVE) .id(3) .capacity(120) .commission(50_00L) @@ -2777,14 +2884,47 @@ public static Bag getBagForOrder() { public static TariffServiceDto getTariffServiceDto() { return TariffServiceDto.builder() .name("Бавовняна сумка") - .capacity(120) - .price(120.0) + .capacity(20) + .price(100.0) .commission(50.0) .description("Description") .build(); } + public static Bag getEditedBag() { + return Bag.builder() + .status(BagStatus.ACTIVE) + .id(1) + .capacity(20) + .price(100_00L) + .fullPrice(150_00L) + .commission(50_00L) + .name("Бавовняна сумка") + .description("Description") + .createdAt(LocalDate.now()) + .createdBy(getEmployee()) + .editedBy(getEmployee()) + .editedAt(LocalDate.now()) + .limitIncluded(true) + .status(BagStatus.ACTIVE) + .tariffsInfo(getTariffInfo()) + .build(); + + } + + public static OrderBag getEditedOrderBag() { + return OrderBag.builder() + .id(1L) + .amount(1) + .price(150_00L) + .capacity(20) + .name("Бавовняна сумка") + .bag(getBag()) + .order(getOrder()) + .build(); + } + public static Location getLocation() { return Location.builder() .id(1L) @@ -2842,6 +2982,7 @@ public static CourierDto getCourierDto() { public static Bag getTariffBag() { return Bag.builder() + .status(BagStatus.ACTIVE) .id(1) .capacity(20) .price(100_00L) @@ -2871,6 +3012,7 @@ public static BagTranslationDto getBagTranslationDto() { public static Bag getNewBag() { return Bag.builder() + .status(BagStatus.ACTIVE) .capacity(20) .price(100_00L) .commission(50_00L) @@ -3012,6 +3154,7 @@ public static Order getOrderUserSecond() { public static List getBag1list() { return List.of(Bag.builder() + .status(BagStatus.ACTIVE) .id(1) .price(100_00L) .capacity(20) @@ -3025,6 +3168,7 @@ public static List getBag1list() { public static List getBaglist() { return List.of(Bag.builder() + .status(BagStatus.ACTIVE) .id(1) .price(100_00L) .capacity(10) @@ -3032,6 +3176,7 @@ public static List getBaglist() { .fullPrice(20_00L) .build(), Bag.builder() + .status(BagStatus.ACTIVE) .id(2) .price(100_00L) .capacity(10) @@ -3042,6 +3187,7 @@ public static List getBaglist() { public static List getBag2list() { return List.of(Bag.builder() + .status(BagStatus.ACTIVE) .id(1) .price(100_00L) .capacity(10) @@ -3052,6 +3198,7 @@ public static List getBag2list() { public static List getBag3list() { return List.of(Bag.builder() + .status(BagStatus.ACTIVE) .id(1) .price(100_00L) .capacity(10) @@ -3059,6 +3206,7 @@ public static List getBag3list() { .fullPrice(2000_00L) .build(), Bag.builder() + .status(BagStatus.ACTIVE) .id(2) .price(100_00L) .capacity(10) @@ -3069,6 +3217,7 @@ public static List getBag3list() { public static List getBag4list() { return List.of(Bag.builder() + .status(BagStatus.ACTIVE) .id(1) .price(100_00L) .capacity(10) @@ -3079,6 +3228,7 @@ public static List getBag4list() { .limitIncluded(false) .build(), Bag.builder() + .status(BagStatus.ACTIVE) .id(2) .price(100_00L) .capacity(10) @@ -3352,6 +3502,7 @@ public static Location getLocationDto() { public static Bag bagDto() { return Bag.builder() + .status(BagStatus.ACTIVE) .id(1) .limitIncluded(false) .description("Description") @@ -3622,12 +3773,20 @@ public static BigOrderTableViews getBigOrderTableViewsByDateNullTest() { .setResponsibleNavigator(null); } + public static Map getAmount() { + Map hashMap = new HashMap<>(); + hashMap.put(1, 1); + hashMap.put(2, 1); + return hashMap; + } + public static Order getOrderForGetOrderStatusData2Test() { Map hashMap = new HashMap<>(); hashMap.put(1, 1); hashMap.put(2, 1); return Order.builder() + .orderBags(Arrays.asList(getOrderBag(), getOrderBag2())) .id(1L) .amountOfBagsOrdered(hashMap) .confirmedQuantity(hashMap) @@ -5016,4 +5175,4 @@ public static PositionWithTranslateDto getPositionWithTranslateDto(Long id) { public static Refund getRefund(Long id) { return Refund.builder().orderId(id).build(); } -} +} \ No newline at end of file diff --git a/service/src/test/java/greencity/mapping/bag/BagForUserDtoMapperTest.java b/service/src/test/java/greencity/mapping/bag/BagForUserDtoMapperTest.java index 1f9fcbcdd..033425d77 100644 --- a/service/src/test/java/greencity/mapping/bag/BagForUserDtoMapperTest.java +++ b/service/src/test/java/greencity/mapping/bag/BagForUserDtoMapperTest.java @@ -2,7 +2,7 @@ import greencity.ModelUtils; import greencity.dto.bag.BagForUserDto; -import greencity.entity.order.Bag; +import greencity.entity.order.OrderBag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -18,8 +18,8 @@ class BagForUserDtoMapperTest { @Test void convert() { BagForUserDto expected = ModelUtils.TEST_BAG_FOR_USER_DTO; - Bag bag = ModelUtils.TEST_BAG; - BagForUserDto actual = bagForUserDtoMapper.convert(bag); + OrderBag orderBag = ModelUtils.TEST_ORDER_BAG; + BagForUserDto actual = bagForUserDtoMapper.convert(orderBag); assertEquals(expected.getService(), actual.getService()); assertEquals(expected.getServiceEng(), actual.getServiceEng()); diff --git a/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java b/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java index bebf741f7..83f4ab80b 100644 --- a/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java +++ b/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java @@ -23,6 +23,7 @@ import greencity.exceptions.NotFoundException; import greencity.exceptions.http.AccessDeniedException; import greencity.repository.*; +import greencity.service.ubs.OrderBagService; import lombok.SneakyThrows; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; @@ -84,6 +85,8 @@ class NotificationServiceImplTest { private Clock fixedClock; ExecutorService mockExecutor = MoreExecutors.newDirectExecutorService(); + @Mock + private OrderBagService orderBagService; @Nested class ClockNotification { @@ -301,7 +304,7 @@ void testNotifyInactiveAccounts() { List.of(abstractNotificationProvider), templateRepository, mockExecutor, - internalUrlConfigProp); + internalUrlConfigProp, orderBagService); User user = User.builder().id(42L).build(); User user1 = User.builder().id(43L).build(); UserNotification notification = new UserNotification(); @@ -409,7 +412,7 @@ void testNotifyAllHalfPaidPackages() { parameters.add(NotificationParameter.builder().key("orderNumber") .value(orders.get(0).getId().toString()).build()); - when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag1list()); + when(orderBagService.findAllBagsByOrderId(any())).thenReturn(getBag1list()); when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); @@ -510,7 +513,7 @@ void testNotifyUnpaidOrderForBroughtByHimself() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); + when(orderBagService.findAllBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyUnpaidOrder(order); @@ -541,7 +544,7 @@ void testNotifyUnpaidOrderForDone() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); + when(orderBagService.findAllBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyUnpaidOrder(order); verify(userNotificationRepository).save(any()); @@ -572,7 +575,7 @@ void testNotifyUnpaidOrderForCancel() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); + when(orderBagService.findAllBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyUnpaidOrder(order); @@ -603,7 +606,7 @@ void testNotifyHalfPaidOrderForDone() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); + when(orderBagService.findAllBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyHalfPaidPackage(order); @@ -630,7 +633,7 @@ void testNotifyHalfPaidOrderForBroughtByHimself() { when(userNotificationRepository.save(any())).thenReturn(notification); when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); - when(bagRepository.findBagsByOrderId(any())).thenReturn(getBag4list()); + when(orderBagService.findAllBagsByOrderId(any())).thenReturn(getBag4list()); notificationService.notifyHalfPaidPackage(order); diff --git a/service/src/test/java/greencity/service/ubs/OrderBagServiceTest.java b/service/src/test/java/greencity/service/ubs/OrderBagServiceTest.java new file mode 100644 index 000000000..00d6a7daf --- /dev/null +++ b/service/src/test/java/greencity/service/ubs/OrderBagServiceTest.java @@ -0,0 +1,151 @@ +package greencity.service.ubs; + +import greencity.entity.order.Bag; +import greencity.entity.order.OrderBag; +import greencity.repository.OrderBagRepository; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.HashMap; +import java.util.ArrayList; +import static greencity.ModelUtils.getOrderBag; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import static greencity.ModelUtils.getBag; +import static greencity.ModelUtils.getBag2; +import static greencity.ModelUtils.getOrderBag2; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +@ExtendWith({MockitoExtension.class}) +class OrderBagServiceTest { + + @InjectMocks + private OrderBagService orderBagService; + @Mock + private OrderBagRepository orderBagRepository; + + @Test + void testfindAllBagsByOrderId() { + when(orderBagRepository.findOrderBagsByOrderId(any())).thenReturn(Arrays.asList(getOrderBag(), getOrderBag2())); + List bags = orderBagService.findAllBagsByOrderId(1L); + assertNotNull(bags); + Bag bag1 = getBag(); + Bag bag2 = getBag2(); + + assertEquals(bag1, bags.get(0)); + assertEquals(bag2, bags.get(1)); + } + + @Test + void testFindBagsByOrdersList() { + List bags = orderBagService.findAllBagsInOrderBagsList(Arrays.asList(getOrderBag(), getOrderBag2())); + Bag bag1 = getBag(); + Bag bag2 = getBag2(); + + assertNotNull(bags); + assertEquals(bag1, bags.get(0)); + assertEquals(bag2, bags.get(1)); + } + + @Test + void testGetActualBagsAmountForOrder_WithExportedQuantity() { + List bagsForOrder = new ArrayList<>(); + OrderBag bag1 = createOrderBagWithExportedQuantity(1, 10); + OrderBag bag2 = createOrderBagWithExportedQuantity(2, 20); + bagsForOrder.add(bag1); + bagsForOrder.add(bag2); + + Map result = orderBagService.getActualBagsAmountForOrder(bagsForOrder); + + Map expected = new HashMap<>(); + expected.put(1, 10); + expected.put(2, 20); + assertEquals(expected, result); + } + + @Test + void testGetActualBagsAmountForOrder_WithConfirmedQuantity() { + List bagsForOrder = new ArrayList<>(); + OrderBag bag1 = createOrderBagWithConfirmedQuantity(1, 5); + OrderBag bag2 = createOrderBagWithConfirmedQuantity(2, 15); + bagsForOrder.add(bag1); + bagsForOrder.add(bag2); + + Map result = orderBagService.getActualBagsAmountForOrder(bagsForOrder); + + Map expected = new HashMap<>(); + expected.put(1, 5); + expected.put(2, 15); + assertEquals(expected, result); + } + + @Test + void testGetActualBagsAmountForOrder_WithAmount() { + List bagsForOrder = new ArrayList<>(); + OrderBag bag1 = createOrderBagWithAmount(1, 3); + OrderBag bag2 = createOrderBagWithAmount(2, 7); + bagsForOrder.add(bag1); + bagsForOrder.add(bag2); + + Map result = orderBagService.getActualBagsAmountForOrder(bagsForOrder); + + Map expected = new HashMap<>(); + expected.put(1, 3); + expected.put(2, 7); + assertEquals(expected, result); + } + + @Test + void testGetActualBagsAmountForOrder_WithNoMatch() { + List bagsForOrder = new ArrayList<>(); + OrderBag bag1 = createOrderBagWithAmount(1, 3); + bag1.setExportedQuantity(null); + bag1.setConfirmedQuantity(null); + bag1.setAmount(null); + + OrderBag bag2 = createOrderBagWithAmount(2, 7); + bag2.setExportedQuantity(null); + bag2.setConfirmedQuantity(null); + bag2.setAmount(null); + bagsForOrder.add(bag1); + bagsForOrder.add(bag2); + + Map result = orderBagService.getActualBagsAmountForOrder(bagsForOrder); + + Map expected = new HashMap<>(); + assertEquals(expected, result); + } + + private OrderBag createOrderBagWithExportedQuantity(int bagId, int exportedQuantity) { + OrderBag orderBag = new OrderBag(); + Bag bag = new Bag(); + bag.setId(bagId); + orderBag.setBag(bag); + orderBag.setExportedQuantity(exportedQuantity); + return orderBag; + } + + private OrderBag createOrderBagWithConfirmedQuantity(int bagId, int confirmedQuantity) { + OrderBag orderBag = new OrderBag(); + Bag bag = new Bag(); + bag.setId(bagId); + orderBag.setBag(bag); + orderBag.setConfirmedQuantity(confirmedQuantity); + return orderBag; + } + + private OrderBag createOrderBagWithAmount(int bagId, int amount) { + OrderBag orderBag = new OrderBag(); + Bag bag = new Bag(); + bag.setId(bagId); + orderBag.setBag(bag); + orderBag.setAmount(amount); + return orderBag; + } +} \ No newline at end of file diff --git a/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java b/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java index 49327a86e..994107bba 100644 --- a/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java @@ -23,6 +23,7 @@ import greencity.dto.tariff.SetTariffLimitsDto; import greencity.entity.order.Bag; import greencity.entity.order.Courier; +import greencity.entity.order.Order; import greencity.entity.order.Service; import greencity.entity.order.TariffLocation; import greencity.entity.order.TariffsInfo; @@ -34,6 +35,7 @@ import greencity.enums.LocationStatus; import greencity.enums.StationStatus; import greencity.enums.TariffStatus; +import greencity.enums.BagStatus; import greencity.exceptions.BadRequestException; import greencity.exceptions.NotFoundException; import greencity.exceptions.UnprocessableEntityException; @@ -47,6 +49,8 @@ import greencity.repository.DeactivateChosenEntityRepository; import greencity.repository.EmployeeRepository; import greencity.repository.LocationRepository; +import greencity.repository.OrderBagRepository; +import greencity.repository.OrderRepository; import greencity.repository.ReceivingStationRepository; import greencity.repository.RegionRepository; import greencity.repository.ServiceRepository; @@ -63,25 +67,18 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.modelmapper.ModelMapper; - import java.time.LocalDate; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Arrays; import java.util.Optional; +import java.util.Map; +import java.util.HashMap; import java.util.Set; import java.util.UUID; import java.util.stream.Stream; - -import static greencity.ModelUtils.TEST_USER; -import static greencity.ModelUtils.getAllTariffsInfoDto; -import static greencity.ModelUtils.getCourier; -import static greencity.ModelUtils.getCourierDto; -import static greencity.ModelUtils.getCourierDtoList; -import static greencity.ModelUtils.getDeactivatedCourier; -import static greencity.ModelUtils.getEmployee; -import static greencity.ModelUtils.getReceivingStation; -import static greencity.ModelUtils.getReceivingStationDto; +import static greencity.ModelUtils.*; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNull; @@ -131,6 +128,12 @@ class SuperAdminServiceImplTest { private TariffLocationRepository tariffsLocationRepository; @Mock private DeactivateChosenEntityRepository deactivateTariffsForChosenParamRepository; + @Mock + private OrderBagRepository orderBagRepository; + @Mock + private OrderRepository orderRepository; + @Mock + private OrderBagService orderBagService; @AfterEach void afterEach() { @@ -146,7 +149,8 @@ void afterEach() { receivingStationRepository, tariffsInfoRepository, tariffsLocationRepository, - deactivateTariffsForChosenParamRepository); + deactivateTariffsForChosenParamRepository, + orderBagRepository); } @Test @@ -205,20 +209,34 @@ void addTariffServiceIfTariffNotFoundExceptionTest() { @Test void getTariffServiceTest() { - List bags = List.of(ModelUtils.getOptionalBag().get()); + List bags = List.of(ModelUtils.getNewBag()); GetTariffServiceDto dto = ModelUtils.getGetTariffServiceDto(); when(tariffsInfoRepository.existsById(1L)).thenReturn(true); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(bags); + when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(bags); when(modelMapper.map(bags.get(0), GetTariffServiceDto.class)).thenReturn(dto); superAdminService.getTariffService(1); verify(tariffsInfoRepository).existsById(1L); - verify(bagRepository).findBagsByTariffsInfoId(1L); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); verify(modelMapper).map(bags.get(0), GetTariffServiceDto.class); } + @Test + void getTariffServiceIfThereAreNoBags() { + List bags = Collections.emptyList(); + + when(tariffsInfoRepository.existsById(1L)).thenReturn(true); + when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(bags); + + List dtos = superAdminService.getTariffService(1); + + assertEquals(Collections.emptyList(), dtos); + verify(tariffsInfoRepository).existsById(1L); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); + } + @Test void getTariffServiceIfTariffNotFoundException() { when(tariffsInfoRepository.existsById(1L)).thenReturn(false); @@ -227,117 +245,251 @@ void getTariffServiceIfTariffNotFoundException() { () -> superAdminService.getTariffService(1)); verify(tariffsInfoRepository).existsById(1L); - verify(bagRepository, never()).findBagsByTariffsInfoId(1L); + verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(1L); } @Test - void deleteTariffServiceWhenTariffBagsWithLimits() { + void deleteTariffServiceWhenThereAreMoreThan1TypeOfBag() { Bag bag = ModelUtils.getBag(); + Bag bagDeleted = ModelUtils.getBagDeleted(); TariffsInfo tariffsInfo = ModelUtils.getTariffInfo(); - bag.setTariffsInfo(tariffsInfo); + Order order = ModelUtils.getOrder(); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag2())); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.save(bag)).thenReturn(bagDeleted); + when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(List.of(bag, getBag2())); + when(orderRepository.findAllByBagId(bag.getId())).thenReturn(Arrays.asList(order)); + when(orderBagService + .getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag2()))) + .thenReturn(ModelUtils.getAmount()); + when(orderBagRepository.findOrderBagsByBagId(any())).thenReturn(Collections.singletonList(getOrderBag())); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); - doNothing().when(bagRepository).delete(bag); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(List.of(bag)); superAdminService.deleteTariffService(1); - assertEquals(TariffStatus.ACTIVE, tariffsInfo.getTariffStatus()); - verify(bagRepository).findById(1); - verify(bagRepository).delete(bag); - verify(bagRepository).findBagsByTariffsInfoId(1L); + + verify(orderBagRepository).deleteOrderBagByBagIdAndOrderId(any(), any()); + verify(bagRepository).findActiveBagById(1); + verify(bagRepository).save(bag); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); verify(tariffsInfoRepository, never()).save(tariffsInfo); } @Test - void deleteTariffServiceWhenTariffBagsListIsEmpty() { + void testBagStatus() { Bag bag = ModelUtils.getBag(); + bag.setStatus(BagStatus.ACTIVE); + assertEquals(BagStatus.ACTIVE, bag.getStatus()); + bag.setStatus(BagStatus.DELETED); + assertEquals(BagStatus.DELETED, bag.getStatus()); + } + + @Test + void deleteTariffServiceWhenTariffBagsWithLimits() { + Bag bag = ModelUtils.getBag(); + Bag bagDeleted = ModelUtils.getBagDeleted(); TariffsInfo tariffsInfo = ModelUtils.getTariffInfo(); - bag.setTariffsInfo(tariffsInfo); - TariffsInfo tariffsInfoNew = ModelUtils.getTariffsInfoWithStatusNew(); - tariffsInfoNew.setBags(Collections.emptyList()); + Order order = ModelUtils.getOrder(); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + Map hashMap = new HashMap<>(); + hashMap.put(1, 1); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.save(bag)).thenReturn(bagDeleted); + when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(List.of(bag)); + when(orderRepository.findAllByBagId(bag.getId())).thenReturn(Arrays.asList(order)); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(hashMap); + when(orderBagRepository.findOrderBagsByBagId(any())).thenReturn(Collections.singletonList(getOrderBag())); + assertEquals(BagStatus.ACTIVE, bag.getStatus()); + superAdminService.deleteTariffService(1); + assertEquals(BagStatus.DELETED, bag.getStatus()); + verify(orderBagRepository).findOrderBagsByBagId(any()); + verify(bagRepository).findActiveBagById(1); + verify(bagRepository).save(bag); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); + verify(tariffsInfoRepository, never()).save(tariffsInfo); + } + + @Test + void deleteTariffServiceWhenTariffBagsListIsEmpty() { + Bag bag = ModelUtils.getBag(); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); - doNothing().when(bagRepository).delete(bag); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(Collections.emptyList()); - when(tariffsInfoRepository.save(tariffsInfo)).thenReturn(tariffsInfo); superAdminService.deleteTariffService(1); - assertEquals(TariffStatus.NEW, tariffsInfoNew.getTariffStatus()); - verify(bagRepository).findById(1); - verify(bagRepository).delete(bag); - verify(bagRepository).findBagsByTariffsInfoId(1L); - verify(tariffsInfoRepository).save(tariffsInfo); + + verify(orderBagRepository).findOrderBagsByBagId(any()); + verify(bagRepository).findActiveBagById(1); + verify(bagRepository).delete(any()); + } @Test void deleteTariffServiceWhenTariffBagsWithoutLimits() { Bag bag = ModelUtils.getBag(); - TariffsInfo tariffsInfo = ModelUtils.getTariffInfo(); bag.setLimitIncluded(false); - bag.setTariffsInfo(tariffsInfo); + Bag bagDeleted = ModelUtils.getBagDeleted(); + bagDeleted.setLimitIncluded(false); TariffsInfo tariffsInfoNew = ModelUtils.getTariffsInfoWithStatusNew(); tariffsInfoNew.setBags(Collections.emptyList()); + tariffsInfoNew.setTariffStatus(TariffStatus.DEACTIVATED); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.save(bag)).thenReturn(bagDeleted); + when(tariffsInfoRepository.save(tariffsInfoNew)).thenReturn(tariffsInfoNew); + when(orderBagRepository.findOrderBagsByBagId(any())).thenReturn(Collections.singletonList(getOrderBag())); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); - doNothing().when(bagRepository).delete(bag); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(List.of(bag)); - when(tariffsInfoRepository.save(tariffsInfo)).thenReturn(tariffsInfoNew); superAdminService.deleteTariffService(1); - assertEquals(TariffStatus.NEW, tariffsInfoNew.getTariffStatus()); - verify(bagRepository).findById(1); - verify(bagRepository).delete(bag); - verify(bagRepository).findBagsByTariffsInfoId(1L); + + verify(bagRepository).findActiveBagById(1); + verify(bagRepository).save(bag); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); verify(tariffsInfoRepository).save(tariffsInfoNew); } @Test - void deleteTariffServiceThrowNotFoundException() { - when(bagRepository.findById(1)).thenReturn(Optional.empty()); + void deleteTariffServiceThrowBagNotFoundException() { + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.deleteTariffService(1)); - verify(bagRepository).findById(1); - verify(bagRepository, never()).delete(any(Bag.class)); + verify(bagRepository).findActiveBagById(1); + verify(bagRepository, never()).save(any(Bag.class)); } @Test - void editTariffService() { + void editTariffServiceWithUnpaidOrder() { Bag bag = ModelUtils.getBag(); + Bag editedBag = ModelUtils.getEditedBag(); Employee employee = ModelUtils.getEmployee(); TariffServiceDto dto = ModelUtils.getTariffServiceDto(); GetTariffServiceDto editedDto = ModelUtils.getGetTariffServiceDto(); + Order order = ModelUtils.getOrder(); String uuid = UUID.randomUUID().toString(); + order.setOrderBags(List.of(ModelUtils.getOrderBag())); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); - when(bagRepository.save(bag)).thenReturn(bag); - when(modelMapper.map(bag, GetTariffServiceDto.class)).thenReturn(editedDto); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); + + when(bagRepository.save(editedBag)).thenReturn(editedBag); + when(modelMapper.map(editedBag, GetTariffServiceDto.class)).thenReturn(editedDto); + doNothing().when(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + when(orderRepository.findAllUnpaidOrdersByBagId(1)).thenReturn(List.of(order)); + when(orderRepository.saveAll(List.of(order))).thenReturn(List.of(order)); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); - superAdminService.editTariffService(dto, 1, uuid); + GetTariffServiceDto actual = superAdminService.editTariffService(dto, 1, uuid); + assertEquals(editedDto, actual); verify(employeeRepository).findByUuid(uuid); - verify(bagRepository).findById(1); - verify(bagRepository).save(bag); - verify(modelMapper).map(bag, GetTariffServiceDto.class); + verify(bagRepository).findActiveBagById(1); + verify(bagRepository).save(editedBag); + verify(modelMapper).map(editedBag, GetTariffServiceDto.class); + verify(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + verify(orderRepository).findAllUnpaidOrdersByBagId(1); + verify(orderRepository).saveAll(anyList()); } @Test - void editTariffServiceIfCommissionIsNull() { + void editTariffServiceWithUnpaidOrderAndBagConfirmedAmount() { Bag bag = ModelUtils.getBag(); + Bag editedBag = ModelUtils.getEditedBag(); Employee employee = ModelUtils.getEmployee(); TariffServiceDto dto = ModelUtils.getTariffServiceDto(); - dto.setCommission(null); GetTariffServiceDto editedDto = ModelUtils.getGetTariffServiceDto(); + Order order = ModelUtils.getOrder(); String uuid = UUID.randomUUID().toString(); + order.setOrderBags(List.of(ModelUtils.getOrderBagWithConfirmedAmount())); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); - when(bagRepository.save(bag)).thenReturn(bag); - when(modelMapper.map(bag, GetTariffServiceDto.class)).thenReturn(editedDto); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.save(editedBag)).thenReturn(editedBag); + when(modelMapper.map(editedBag, GetTariffServiceDto.class)).thenReturn(editedDto); + doNothing().when(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + when(orderRepository.findAllUnpaidOrdersByBagId(1)).thenReturn(List.of(order)); + when(orderRepository.saveAll(List.of(order))).thenReturn(List.of(order)); + when(orderBagService + .getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag().setConfirmedQuantity(2)))) + .thenReturn(ModelUtils.getAmount()); + + GetTariffServiceDto actual = superAdminService.editTariffService(dto, 1, uuid); + + assertEquals(editedDto, actual); + verify(employeeRepository).findByUuid(uuid); + verify(bagRepository).findActiveBagById(1); + verify(bagRepository).save(editedBag); + verify(modelMapper).map(editedBag, GetTariffServiceDto.class); + verify(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + verify(orderRepository).findAllUnpaidOrdersByBagId(1); + verify(orderRepository).saveAll(anyList()); + } + + @Test + void editTariffServiceWithUnpaidOrderAndBagExportedAmount() { + Bag bag = ModelUtils.getBag(); + Bag editedBag = ModelUtils.getEditedBag(); + Employee employee = ModelUtils.getEmployee(); + TariffServiceDto dto = ModelUtils.getTariffServiceDto(); + GetTariffServiceDto editedDto = ModelUtils.getGetTariffServiceDto(); + Order order = ModelUtils.getOrder(); + String uuid = UUID.randomUUID().toString(); + order.setOrderBags(List.of(ModelUtils.getOrderBagWithExportedAmount())); + + when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.save(editedBag)).thenReturn(editedBag); + when(modelMapper.map(editedBag, GetTariffServiceDto.class)).thenReturn(editedDto); + doNothing().when(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + when(orderRepository.findAllUnpaidOrdersByBagId(1)).thenReturn(List.of(order)); + when(orderRepository.saveAll(List.of(order))).thenReturn(List.of(order)); + when(orderBagService.getActualBagsAmountForOrder( + Arrays.asList(ModelUtils.getOrderBag().setExportedQuantity(2).setConfirmedQuantity(2)))) + .thenReturn(ModelUtils.getAmount()); + + GetTariffServiceDto actual = superAdminService.editTariffService(dto, 1, uuid); + + assertEquals(editedDto, actual); + verify(employeeRepository).findByUuid(uuid); + verify(bagRepository).findActiveBagById(1); + verify(bagRepository).findActiveBagById(1); + + verify(bagRepository).save(editedBag); + verify(modelMapper).map(editedBag, GetTariffServiceDto.class); + verify(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + verify(orderRepository).findAllUnpaidOrdersByBagId(1); + verify(orderRepository).saveAll(anyList()); + } + + @Test + void editTariffServiceWithoutUnpaidOrder() { + Bag bag = ModelUtils.getBag(); + Bag editedBag = ModelUtils.getEditedBag(); + Employee employee = ModelUtils.getEmployee(); + TariffServiceDto dto = ModelUtils.getTariffServiceDto(); + GetTariffServiceDto editedDto = ModelUtils.getGetTariffServiceDto(); + String uuid = UUID.randomUUID().toString(); + + when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.save(editedBag)).thenReturn(editedBag); + when(modelMapper.map(editedBag, GetTariffServiceDto.class)).thenReturn(editedDto); + doNothing().when(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + when(orderRepository.findAllUnpaidOrdersByBagId(1)).thenReturn(Collections.emptyList()); - superAdminService.editTariffService(dto, 1, uuid); + GetTariffServiceDto actual = superAdminService.editTariffService(dto, 1, uuid); + assertEquals(editedDto, actual); verify(employeeRepository).findByUuid(uuid); - verify(bagRepository).findById(1); - verify(bagRepository).save(bag); - verify(modelMapper).map(bag, GetTariffServiceDto.class); + verify(bagRepository).findActiveBagById(1); + verify(bagRepository).save(editedBag); + verify(modelMapper).map(editedBag, GetTariffServiceDto.class); + verify(orderBagRepository) + .updateAllByBagIdForUnpaidOrders(1, 20, 150_00L, "Бавовняна сумка", null); + verify(orderRepository).findAllUnpaidOrdersByBagId(1); + verify(orderRepository, never()).saveAll(anyList()); } @Test @@ -346,12 +498,12 @@ void editTariffServiceIfEmployeeNotFoundException() { Optional bag = ModelUtils.getOptionalBag(); String uuid = UUID.randomUUID().toString(); - when(bagRepository.findById(1)).thenReturn(bag); + when(bagRepository.findActiveBagById(1)).thenReturn(bag); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.editTariffService(dto, 1, uuid)); - verify(bagRepository).findById(1); + verify(bagRepository).findActiveBagById(1); verify(bagRepository, never()).save(any(Bag.class)); } @@ -360,11 +512,11 @@ void editTariffServiceIfBagNotFoundException() { TariffServiceDto dto = ModelUtils.getTariffServiceDto(); String uuid = UUID.randomUUID().toString(); - when(bagRepository.findById(1)).thenReturn(Optional.empty()); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.editTariffService(dto, 1, uuid)); - verify(bagRepository).findById(1); + verify(bagRepository).findActiveBagById(1); verify(bagRepository, never()).save(any(Bag.class)); } @@ -409,38 +561,40 @@ void deleteServiceThrowNotFoundException() { void getService() { Service service = ModelUtils.getService(); GetServiceDto getServiceDto = ModelUtils.getGetServiceDto(); + TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); - when(tariffsInfoRepository.existsById(1L)).thenReturn(true); + when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(service)); when(modelMapper.map(service, GetServiceDto.class)).thenReturn(getServiceDto); assertEquals(getServiceDto, superAdminService.getService(1L)); - verify(tariffsInfoRepository).existsById(1L); + verify(tariffsInfoRepository).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); verify(modelMapper).map(service, GetServiceDto.class); } @Test void getServiceIfServiceNotExists() { - when(tariffsInfoRepository.existsById(1L)).thenReturn(true); + TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); + + when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.empty()); assertNull(superAdminService.getService(1L)); - verify(tariffsInfoRepository).existsById(1L); + verify(tariffsInfoRepository).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); - verify(modelMapper, never()).map(any(Service.class), any(GetServiceDto.class)); } @Test void getServiceThrowTariffNotFoundException() { - when(tariffsInfoRepository.existsById(1L)).thenReturn(false); + when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.getService(1L)); - verify(tariffsInfoRepository).existsById(1L); + verify(tariffsInfoRepository).findById(1L); } @Test @@ -507,7 +661,6 @@ void addService() { TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); String uuid = UUID.randomUUID().toString(); - when(tariffsInfoRepository.existsById(1L)).thenReturn(true); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.empty()); when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); @@ -518,7 +671,6 @@ void addService() { assertEquals(getServiceDto, superAdminService.addService(1L, serviceDto, uuid)); verify(employeeRepository).findByUuid(uuid); - verify(tariffsInfoRepository).existsById(1L); verify(tariffsInfoRepository).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); verify(serviceRepository).save(service); @@ -530,31 +682,33 @@ void addService() { void addServiceThrowServiceAlreadyExistsException() { Service createdService = ModelUtils.getService(); ServiceDto serviceDto = ModelUtils.getServiceDto(); + TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); String uuid = UUID.randomUUID().toString(); - when(tariffsInfoRepository.existsById(1L)).thenReturn(true); + when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(createdService)); assertThrows(ServiceAlreadyExistsException.class, () -> superAdminService.addService(1L, serviceDto, uuid)); - verify(tariffsInfoRepository).existsById(1L); + verify(tariffsInfoRepository).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); } @Test void addServiceThrowEmployeeNotFoundException() { ServiceDto serviceDto = ModelUtils.getServiceDto(); + TariffsInfo tariffsInfo = ModelUtils.getTariffsInfo(); String uuid = UUID.randomUUID().toString(); - when(tariffsInfoRepository.existsById(1L)).thenReturn(true); + when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffsInfo)); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.empty()); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.addService(1L, serviceDto, uuid)); - verify(tariffsInfoRepository).existsById(1L); + verify(tariffsInfoRepository).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); verify(employeeRepository).findByUuid(uuid); } @@ -564,12 +718,12 @@ void addServiceThrowTariffNotFoundException() { ServiceDto serviceDto = ModelUtils.getServiceDto(); String uuid = UUID.randomUUID().toString(); - when(tariffsInfoRepository.existsById(1L)).thenReturn(false); + when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.addService(1L, serviceDto, uuid)); - verify(tariffsInfoRepository).existsById(1L); + verify(tariffsInfoRepository).findById(1L); } @Test @@ -1364,14 +1518,14 @@ void setTariffLimitsWithAmountOfBags() { SetTariffLimitsDto dto = ModelUtils.setTariffLimitsWithAmountOfBags(); when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffInfo)); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); when(tariffsInfoRepository.save(tariffInfo)).thenReturn(tariffInfo); when(bagRepository.saveAll(List.of(bag))).thenReturn(List.of(bag)); superAdminService.setTariffLimits(1L, dto); verify(tariffsInfoRepository).findById(1L); - verify(bagRepository).findById(1); + verify(bagRepository).findActiveBagById(1); verify(tariffsInfoRepository).save(any()); verify(bagRepository).saveAll(List.of(bag)); } @@ -1383,14 +1537,14 @@ void setTariffLimitsWithPriceOfOrder() { SetTariffLimitsDto dto = ModelUtils.setTariffLimitsWithPriceOfOrder(); when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffInfo)); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); when(tariffsInfoRepository.save(tariffInfo)).thenReturn(tariffInfo); when(bagRepository.saveAll(List.of(bag))).thenReturn(List.of(bag)); superAdminService.setTariffLimits(1L, dto); verify(tariffsInfoRepository).findById(1L); - verify(bagRepository).findById(1); + verify(bagRepository).findActiveBagById(1); verify(tariffsInfoRepository).save(any()); verify(bagRepository).saveAll(List.of(bag)); } @@ -1402,14 +1556,14 @@ void setTariffLimitsWithNullMinAndMaxAndFalseBagLimitIncluded() { SetTariffLimitsDto dto = ModelUtils.setTariffLimitsWithNullMinAndMaxAndFalseBagLimit(); when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffInfo)); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); when(tariffsInfoRepository.save(tariffInfo)).thenReturn(tariffInfo); when(bagRepository.saveAll(List.of(bag))).thenReturn(List.of(bag)); superAdminService.setTariffLimits(1L, dto); verify(tariffsInfoRepository).findById(1L); - verify(bagRepository).findById(1); + verify(bagRepository).findActiveBagById(1); verify(tariffsInfoRepository).save(any()); verify(bagRepository).saveAll(List.of(bag)); } @@ -1422,13 +1576,13 @@ void setTariffLimitsIfBagNotBelongToTariff() { tariffInfo.setId(2L); when(tariffsInfoRepository.findById(2L)).thenReturn(Optional.of(tariffInfo)); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> superAdminService.setTariffLimits(2L, dto)); verify(tariffsInfoRepository).findById(2L); - verify(bagRepository).findById(1); + verify(bagRepository).findActiveBagById(1); } @Test @@ -1439,14 +1593,14 @@ void setTariffLimitsWithNullMaxAndTrueBagLimitIncluded() { dto.setMax(null); when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffInfo)); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); when(tariffsInfoRepository.save(tariffInfo)).thenReturn(tariffInfo); when(bagRepository.saveAll(List.of(bag))).thenReturn(List.of(bag)); superAdminService.setTariffLimits(1L, dto); verify(tariffsInfoRepository).findById(1L); - verify(bagRepository).findById(1); + verify(bagRepository).findActiveBagById(1); verify(tariffsInfoRepository).save(any()); verify(bagRepository).saveAll(List.of(bag)); } @@ -1459,14 +1613,14 @@ void setTariffLimitsWithNullMinAndTrueBagLimitIncluded() { dto.setMin(null); when(tariffsInfoRepository.findById(1L)).thenReturn(Optional.of(tariffInfo)); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); when(tariffsInfoRepository.save(tariffInfo)).thenReturn(tariffInfo); when(bagRepository.saveAll(List.of(bag))).thenReturn(List.of(bag)); superAdminService.setTariffLimits(1L, dto); verify(tariffsInfoRepository).findById(1L); - verify(bagRepository).findById(1); + verify(bagRepository).findActiveBagById(1); verify(tariffsInfoRepository).save(any()); verify(bagRepository).saveAll(List.of(bag)); } @@ -1572,13 +1726,13 @@ void setTariffLimitsBagThrowBagNotFound() { TariffsInfo tariffInfo = ModelUtils.getTariffInfo(); when(tariffsInfoRepository.findById(anyLong())).thenReturn(Optional.of(tariffInfo)); - when(bagRepository.findById(1)).thenReturn(Optional.empty()); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> superAdminService.setTariffLimits(1L, dto)); verify(tariffsInfoRepository).findById(1L); - verify(bagRepository).findById(1); + verify(bagRepository).findActiveBagById(1); } @Test diff --git a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java index 0e9a92570..85b905a6a 100644 --- a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java @@ -8,6 +8,7 @@ import greencity.dto.OrderCourierPopUpDto; import greencity.dto.TariffsForLocationDto; import greencity.dto.address.AddressDto; + import greencity.dto.bag.BagDto; import greencity.dto.bag.BagForUserDto; import greencity.dto.bag.BagOrderDto; @@ -42,14 +43,7 @@ import greencity.dto.user.UserProfileDto; import greencity.dto.user.UserProfileUpdateDto; import greencity.entity.coords.Coordinates; -import greencity.entity.order.Bag; -import greencity.entity.order.Certificate; -import greencity.entity.order.Event; -import greencity.entity.order.Order; -import greencity.entity.order.OrderPaymentStatusTranslation; -import greencity.entity.order.OrderStatusTranslation; -import greencity.entity.order.Payment; -import greencity.entity.order.TariffsInfo; +import greencity.entity.order.*; import greencity.entity.telegram.TelegramBot; import greencity.entity.user.User; import greencity.entity.user.employee.Employee; @@ -77,6 +71,7 @@ import greencity.repository.EventRepository; import greencity.repository.LocationRepository; import greencity.repository.OrderAddressRepository; +import greencity.repository.OrderBagRepository; import greencity.repository.OrderPaymentStatusTranslationRepository; import greencity.repository.OrderRepository; import greencity.repository.OrderStatusTranslationRepository; @@ -327,6 +322,10 @@ class UBSClientServiceImplTest { @Mock private LocationApiService locationApiService; + @Mock + private OrderBagService orderBagService; + @Mock + private OrderBagRepository orderBagRepository; @Test void testGetAllDistricts() { @@ -407,7 +406,7 @@ void getFirstPageDataByTariffAndLocationIdShouldReturnExpectedData() { when(locationRepository.findById(locationId)).thenReturn(Optional.of(location)); when(tariffLocationRepository.findTariffLocationByTariffsInfoAndLocation(tariffsInfo, location)) .thenReturn(Optional.of(tariffLocation)); - when(bagRepository.findBagsByTariffsInfoId(tariffsInfoId)).thenReturn(bags); + when(bagRepository.findAllActiveBagsByTariffsInfoId(tariffsInfoId)).thenReturn(bags); when(modelMapper.map(bags.get(0), BagTranslationDto.class)).thenReturn(bagTranslationDto); var userPointsAndAllBagsDtoActual = @@ -427,7 +426,7 @@ void getFirstPageDataByTariffAndLocationIdShouldReturnExpectedData() { verify(tariffsInfoRepository).findById(tariffsInfoId); verify(locationRepository).findById(locationId); verify(tariffLocationRepository).findTariffLocationByTariffsInfoAndLocation(tariffsInfo, location); - verify(bagRepository).findBagsByTariffsInfoId(tariffsInfoId); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(tariffsInfoId); verify(modelMapper).map(bags.get(0), BagTranslationDto.class); } @@ -460,7 +459,7 @@ void getFirstPageDataByTariffAndLocationIdShouldThrowExceptionWhenTariffLocation verify(locationRepository).findById(locationId); verify(tariffLocationRepository).findTariffLocationByTariffsInfoAndLocation(tariffsInfo, location); - verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -491,7 +490,7 @@ void getFirstPageDataByTariffAndLocationIdShouldThrowExceptionWhenLocationDoesNo verify(locationRepository).findById(locationId); verify(tariffLocationRepository, never()).findTariffLocationByTariffsInfoAndLocation(any(), any()); - verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -521,7 +520,7 @@ void getFirstPageDataByTariffAndLocationIdShouldThrowExceptionWhenTariffDoesNotE verify(locationRepository, never()).findById(anyLong()); verify(tariffLocationRepository, never()).findTariffLocationByTariffsInfoAndLocation(any(), any()); - verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), anyLong()); } @@ -548,7 +547,7 @@ void getFirstPageDataByTariffAndLocationIdShouldThrowExceptionWhenUserDoesNotExi verify(tariffsInfoRepository, never()).findById(anyLong()); verify(locationRepository, never()).findById(anyLong()); verify(tariffLocationRepository, never()).findTariffLocationByTariffsInfoAndLocation(any(), any()); - verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -578,7 +577,7 @@ void checkIfTariffIsAvailableForCurrentLocationThrowExceptionWhenTariffIsDeactiv verify(locationRepository).findById(locationId); verify(tariffLocationRepository, never()).findTariffLocationByTariffsInfoAndLocation(any(), any()); - verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -608,7 +607,7 @@ void checkIfTariffIsAvailableForCurrentLocationThrowExceptionWhenLocationIsDeact verify(locationRepository).findById(locationId); verify(tariffLocationRepository, never()).findTariffLocationByTariffsInfoAndLocation(any(), any()); - verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -645,7 +644,7 @@ void checkIfTariffIsAvailableForCurrentLocationWhenLocationForTariffIsDeactivate verify(locationRepository).findById(locationId); verify(tariffLocationRepository).findTariffLocationByTariffsInfoAndLocation(tariffsInfo, location); - verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -673,7 +672,7 @@ void getFirstPageDataByOrderIdShouldReturnExpectedData() { when(orderRepository.findById(orderId)).thenReturn(Optional.of(order)); when(tariffLocationRepository.findTariffLocationByTariffsInfoAndLocation(tariffsInfo, location)) .thenReturn(Optional.of(tariffLocation)); - when(bagRepository.findBagsByTariffsInfoId(tariffsInfoId)).thenReturn(bags); + when(bagRepository.findAllActiveBagsByTariffsInfoId(tariffsInfoId)).thenReturn(bags); when(modelMapper.map(bags.get(0), BagTranslationDto.class)).thenReturn(bagTranslationDto); var userPointsAndAllBagsDtoActual = @@ -692,7 +691,7 @@ void getFirstPageDataByOrderIdShouldReturnExpectedData() { verify(userRepository).findUserByUuid(uuid); verify(orderRepository).findById(orderId); verify(tariffLocationRepository).findTariffLocationByTariffsInfoAndLocation(tariffsInfo, location); - verify(bagRepository).findBagsByTariffsInfoId(tariffsInfoId); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(tariffsInfoId); verify(modelMapper).map(bags.get(0), BagTranslationDto.class); } @@ -715,7 +714,7 @@ void getFirstPageDataByOrderIdShouldThrowExceptionWhenUserDoesNotExist() { verify(orderRepository, never()).findById(anyLong()); verify(tariffLocationRepository, never()).findTariffLocationByTariffsInfoAndLocation(any(), any()); - verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -741,7 +740,7 @@ void getFirstPageDataByOrderIdShouldThrowExceptionWhenOrderDoesNotExist() { verify(orderRepository).findById(orderId); verify(tariffLocationRepository, never()).findTariffLocationByTariffsInfoAndLocation(any(), any()); - verify(bagRepository, never()).findBagsByTariffsInfoId(anyLong()); + verify(bagRepository, never()).findAllActiveBagsByTariffsInfoId(anyLong()); verify(modelMapper, never()).map(any(), any()); } @@ -779,23 +778,129 @@ void testSaveToDB() throws IllegalAccessException { f.set(ubsService, "1"); } } - + tariffsInfo.setBags(Arrays.asList(bag)); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); when(orderRepository.findById(any())).thenReturn(Optional.of(order1)); when(encryptionUtil.formRequestSignature(any(), eq(null), eq("1"))).thenReturn("TestValue"); when(fondyClient.getCheckoutResponse(any())).thenReturn(getSuccessfulFondyResponse()); - FondyOrderResponse result = ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null); Assertions.assertNotNull(result); } + @Test + void testSaveToDB_AddressNotEqualsUsers() throws IllegalAccessException { + User user = getUserWithLastLocation(); + user.setAlternateEmail("test@mail.com"); + user.setCurrentPoints(900); + + OrderResponseDto dto = getOrderResponseDto(); + dto.getBags().get(0).setAmount(15); + dto.setAddressId(1L); + dto.setLocationId(1L); + Order order = getOrder(); + user.setOrders(new ArrayList<>()); + user.getOrders().add(order); + user.setChangeOfPointsList(new ArrayList<>()); + + Bag bag = getBagForOrder(); + TariffsInfo tariffsInfo = getTariffInfo(); + + UBSuser ubSuser = getUBSuser(); + + OrderAddress orderAddress = ubSuser.getOrderAddress(); + orderAddress.setAddressStatus(AddressStatus.NEW); + + Order order1 = getOrder(); + order1.setPayment(new ArrayList<>()); + Payment payment1 = getPayment(); + payment1.setId(1L); + order1.getPayment().add(payment1); + + Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); + for (Field f : fields) { + if (f.getName().equals("merchantId")) { + f.setAccessible(true); + f.set(ubsService, "1"); + } + } + tariffsInfo.setBags(Arrays.asList(bag)); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user.setId(null), user); + when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) + .thenReturn(Optional.of(tariffsInfo)); + when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); + when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser.setId(null))); + when(modelMapper.map(dto, Order.class)).thenReturn(order); + when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser.setId(null)); + when(addressRepository.findById(any())).thenReturn(Optional.of(getAddress().setUser(getTestUser()))); + when(locationRepository.findById(any())).thenReturn(Optional.of(getLocation())); + + assertThrows(NotFoundException.class, + () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); + + } + + @Test + void testSaveToDB_AddressStatusDeleted() throws IllegalAccessException { + User user = getUserWithLastLocation(); + user.setAlternateEmail("test@mail.com"); + user.setCurrentPoints(900); + + OrderResponseDto dto = getOrderResponseDto(); + dto.getBags().get(0).setAmount(15); + dto.setAddressId(1L); + dto.setLocationId(1L); + Order order = getOrder(); + user.setOrders(new ArrayList<>()); + user.getOrders().add(order); + user.setChangeOfPointsList(new ArrayList<>()); + + Bag bag = getBagForOrder(); + TariffsInfo tariffsInfo = getTariffInfo(); + + UBSuser ubSuser = getUBSuser(); + + OrderAddress orderAddress = ubSuser.getOrderAddress(); + orderAddress.setAddressStatus(AddressStatus.NEW); + + Order order1 = getOrder(); + order1.setPayment(new ArrayList<>()); + Payment payment1 = getPayment(); + payment1.setId(1L); + order1.getPayment().add(payment1); + + Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); + for (Field f : fields) { + if (f.getName().equals("merchantId")) { + f.setAccessible(true); + f.set(ubsService, "1"); + } + } + tariffsInfo.setBags(Arrays.asList(bag)); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user.setId(null), user); + when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) + .thenReturn(Optional.of(tariffsInfo)); + when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); + when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser.setId(null))); + when(modelMapper.map(dto, Order.class)).thenReturn(order); + when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser.setId(null)); + when(addressRepository.findById(any())) + .thenReturn(Optional.of(getAddress().setAddressStatus(AddressStatus.DELETED))); + when(locationRepository.findById(any())).thenReturn(Optional.of(getLocation())); + assertThrows(NotFoundException.class, + () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); + + } + @Test void testSaveToDBWithTwoBags() throws IllegalAccessException { User user = getUserWithLastLocation(); @@ -813,10 +918,12 @@ void testSaveToDBWithTwoBags() throws IllegalAccessException { Bag bag1 = getBagForOrder(); bag1.setId(1); + bag1.setCapacity(100); bag1.setLimitIncluded(false); Bag bag3 = getBagForOrder(); + bag3.setCapacity(1000); TariffsInfo tariffsInfo = getTariffInfo(); - + tariffsInfo.setBags(Arrays.asList(bag1, bag3)); UBSuser ubSuser = getUBSuser(); OrderAddress orderAddress = ubSuser.getOrderAddress(); @@ -827,7 +934,9 @@ void testSaveToDBWithTwoBags() throws IllegalAccessException { Payment payment1 = getPayment(); payment1.setId(1L); order1.getPayment().add(payment1); - + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag(), ModelUtils.getOrderBag())); + order1 + .setOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag(), ModelUtils.getOrderBag())); Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { if (f.getName().equals("merchantId")) { @@ -839,8 +948,8 @@ void testSaveToDBWithTwoBags() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(1)).thenReturn(Optional.of(bag1)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag3)); + when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag1)); + when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag3)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); @@ -869,6 +978,7 @@ void testSaveToDBWithCertificates() throws IllegalAccessException { Bag bag = getBagForOrder(); TariffsInfo tariffsInfo = getTariffInfo(); + tariffsInfo.setBags(Arrays.asList(bag)); UBSuser ubSuser = getUBSuser(); @@ -892,7 +1002,7 @@ void testSaveToDBWithCertificates() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); when(certificateRepository.findById(anyString())).thenReturn(Optional.of(getCertificate())); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); @@ -921,6 +1031,7 @@ void testSaveToDBWithDontSendLinkToFondy() throws IllegalAccessException { Bag bag = getBagForOrder(); TariffsInfo tariffsInfo = getTariffInfo(); + tariffsInfo.setBags(Arrays.asList(bag)); Certificate certificate = getCertificate(); certificate.setPoints(1000_00); @@ -947,7 +1058,7 @@ void testSaveToDBWithDontSendLinkToFondy() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); when(certificateRepository.findById(anyString())).thenReturn(Optional.of(certificate)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); @@ -974,6 +1085,7 @@ void testSaveToDBWhenSumToPayLessThanPoints() throws IllegalAccessException { Bag bag = getBagForOrder(); TariffsInfo tariffsInfo = getTariffInfo(); + tariffsInfo.setBags(Arrays.asList(bag)); UBSuser ubSuser = getUBSuser(); @@ -997,7 +1109,7 @@ void testSaveToDBWhenSumToPayLessThanPoints() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); @@ -1018,17 +1130,19 @@ void testSaveToDbThrowBadRequestExceptionPriceLowerThanLimit() throws IllegalAcc OrderResponseDto dto = getOrderResponseDto(); dto.getBags().get(0).setAmount(1); + Bag bag = getBagForOrder(); Order order = getOrder(); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + TariffsInfo tariffsInfo = getTariffInfo(); + tariffsInfo.setBags(Arrays.asList(bag)); user.setOrders(new ArrayList<>()); user.getOrders().add(order); user.setChangeOfPointsList(new ArrayList<>()); - Bag bag = getBagForOrder(); - when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(tariffsInfo)); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); @@ -1036,7 +1150,7 @@ void testSaveToDbThrowBadRequestExceptionPriceLowerThanLimit() throws IllegalAcc verify(userRepository, times(1)).findByUuid(anyString()); verify(tariffsInfoRepository, times(1)) .findTariffsInfoByBagIdAndLocationId(anyList(), anyLong()); - verify(bagRepository, times(1)).findById(anyInt()); + verify(bagRepository, times(1)).findActiveBagById(anyInt()); } @Test @@ -1056,7 +1170,7 @@ void testSaveToDbThrowBadRequestExceptionPriceGreaterThanLimit() throws IllegalA when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); @@ -1064,7 +1178,7 @@ void testSaveToDbThrowBadRequestExceptionPriceGreaterThanLimit() throws IllegalA verify(userRepository, times(1)).findByUuid(anyString()); verify(tariffsInfoRepository, times(1)) .findTariffsInfoByBagIdAndLocationId(anyList(), anyLong()); - verify(bagRepository, times(1)).findById(anyInt()); + verify(bagRepository, times(1)).findActiveBagById(anyInt()); } @Test @@ -1095,10 +1209,14 @@ void testSaveToDBWShouldThrowBadRequestException() throws IllegalAccessException payment1.setId(1L); order1.getPayment().add(payment1); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); @@ -1106,7 +1224,6 @@ void testSaveToDBWShouldThrowBadRequestException() throws IllegalAccessException verify(userRepository, times(1)).findByUuid(anyString()); verify(tariffsInfoRepository, times(1)) .findTariffsInfoByBagIdAndLocationId(anyList(), anyLong()); - verify(bagRepository, times(1)).findById(any()); } @Test @@ -1184,7 +1301,7 @@ void testSaveToDBWShouldThrowBagNotFoundExceptionException() throws IllegalAcces when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findById(3)).thenReturn(Optional.empty()); + when(bagRepository.findActiveBagById(3)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); @@ -1192,7 +1309,7 @@ void testSaveToDBWShouldThrowBagNotFoundExceptionException() throws IllegalAcces verify(userRepository, times(1)).findByUuid(anyString()); verify(tariffsInfoRepository, times(1)) .findTariffsInfoByBagIdAndLocationId(anyList(), anyLong()); - verify(bagRepository).findById(3); + verify(bagRepository).findActiveBagById(3); } @@ -1221,11 +1338,14 @@ void testSaveToDBWithoutOrderUnpaid() throws IllegalAccessException { Payment payment1 = getPayment(); payment1.setId(1L); order1.getPayment().add(payment1); - - when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + TariffsInfo tariffsInfo = getTariffsInfo(); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(tariffsInfo)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); when(orderRepository.findById(any())).thenReturn(Optional.of(order1)); @@ -1236,7 +1356,6 @@ void testSaveToDBWithoutOrderUnpaid() throws IllegalAccessException { verify(userRepository, times(1)).findByUuid("35467585763t4sfgchjfuyetf"); verify(tariffsInfoRepository, times(1)) .findTariffsInfoByBagIdAndLocationId(anyList(), anyLong()); - verify(bagRepository, times(2)).findById(any()); verify(ubsUserRepository, times(1)).findById(anyLong()); verify(modelMapper, times(1)).map(dto.getPersonalData(), UBSuser.class); verify(orderRepository, times(1)).findById(anyLong()); @@ -1250,14 +1369,19 @@ void saveToDBFailPaidOrder() { dto.getBags().get(0).setAmount(5); Order order = getOrder(); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); Bag bag = getBagForOrder(); TariffsInfo tariffsInfo = getTariffInfo(); - + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); + when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) + .thenReturn(Optional.of(tariffsInfo)); when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); when(orderRepository.findById(any())).thenReturn(Optional.of(order)); assertThrows(BadRequestException.class, @@ -1302,7 +1426,7 @@ void testSaveToDBThrowsException() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); } @@ -1326,6 +1450,65 @@ void getSecondPageData() { assertEquals(expected, actual); } + @Test + void getSecondPageData_AlternativeEmailIsNull() { + String uuid = "35467585763t4sfgchjfuyetf"; + PersonalDataDto expected = getOrderResponseDto().getPersonalData(); + + User user = getTestUser() + .setUuid(uuid) + .setRecipientEmail("mail@mail.ua") + .setRecipientPhone("067894522"); + List ubsUser = Arrays.asList(getUBSuser()); + when(userRepository.findByUuid(uuid)).thenReturn(user); + when(ubsUserRepository.findUBSuserByUser(user)).thenReturn(ubsUser); + when(modelMapper.map(user, PersonalDataDto.class)).thenReturn(expected); + + PersonalDataDto actual = ubsService.getSecondPageData("35467585763t4sfgchjfuyetf"); + + assertEquals(expected, actual); + } + + @Test + void getSecondPageData_AlternativeEmailIsEmpty() { + String uuid = "35467585763t4sfgchjfuyetf"; + PersonalDataDto expected = getOrderResponseDto().getPersonalData(); + + User user = getTestUser() + .setUuid(uuid) + .setRecipientEmail("mail@mail.ua") + .setRecipientPhone("067894522") + .setAlternateEmail(""); + List ubsUser = Arrays.asList(getUBSuser()); + when(userRepository.findByUuid(uuid)).thenReturn(user); + when(ubsUserRepository.findUBSuserByUser(user)).thenReturn(ubsUser); + when(modelMapper.map(user, PersonalDataDto.class)).thenReturn(expected); + + PersonalDataDto actual = ubsService.getSecondPageData("35467585763t4sfgchjfuyetf"); + + assertEquals(expected, actual); + } + + @Test + void getSecondPageData_ubsUser_isEmpty() { + String uuid = "35467585763t4sfgchjfuyetf"; + PersonalDataDto expected = getOrderResponseDto().getPersonalData(); + + User user = getTestUser() + .setUuid(uuid) + .setRecipientEmail("mail@mail.ua") + .setRecipientPhone("067894522") + .setAlternateEmail("my@email.com"); + List ubsUser = Arrays.asList(getUBSuser()); + when(userRepository.findByUuid(uuid)).thenReturn(user); + when(ubsUserRepository.findUBSuserByUser(user)).thenReturn(Collections.emptyList()); + when(modelMapper.map(user, PersonalDataDto.class)).thenReturn(expected); + + PersonalDataDto actual = ubsService.getSecondPageData("35467585763t4sfgchjfuyetf"); + + assertEquals(expected, actual); + } + @Test void getSecondPageDataWithUserFounded() { @@ -2628,54 +2811,11 @@ void deleteOrderFail() { }); } - @Test - void processOrderFondyClient() throws Exception { - Order order = getOrderCount(); - HashMap value = new HashMap<>(); - value.put(1, 22); - order.setAmountOfBagsOrdered(value); - order.setPointsToUse(100); - order.setSumTotalAmountWithoutDiscounts(1000_00L); - order.setCertificates(Set.of(getCertificate())); - order.setPayment(TEST_PAYMENT_LIST); - User user = getUser(); - user.setCurrentPoints(100); - user.setChangeOfPointsList(new ArrayList<>()); - order.setUser(user); - - OrderFondyClientDto dto = getOrderFondyClientDto(); - Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); - for (Field f : fields) { - if (f.getName().equals("merchantId")) { - f.setAccessible(true); - f.set(ubsService, "1"); - } - } - - Certificate certificate = getCertificate(); - CertificateDto certificateDto = createCertificateDto(); - - when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); - when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); - - when(encryptionUtil.formRequestSignature(any(), eq(null), eq("1"))).thenReturn("TestValue"); - when(fondyClient.getCheckoutResponse(any())).thenReturn(getSuccessfulFondyResponse()); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); - when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); - when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); - - ubsService.processOrderFondyClient(dto, "uuid"); - - verify(encryptionUtil).formRequestSignature(any(), eq(null), eq("1")); - verify(fondyClient).getCheckoutResponse(any()); - - } - @Test void processOrderFondyClient2() throws Exception { Order order = getOrderCount(); Certificate certificate = getCertificate(); - certificate.setPoints(1500); + HashMap value = new HashMap<>(); value.put(1, 22); order.setAmountOfBagsOrdered(value); @@ -2691,6 +2831,9 @@ void processOrderFondyClient2() throws Exception { OrderFondyClientDto dto = getOrderFondyClientDto(); dto.setCertificates(Set.of("1111-1234")); + order.setCertificates(Set.of(getCertificate())); + order.setPayment(TEST_PAYMENT_LIST); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { if (f.getName().equals("merchantId")) { @@ -2699,26 +2842,26 @@ void processOrderFondyClient2() throws Exception { } } + order.setPointsToUse(-10000); CertificateDto certificateDto = createCertificateDto(); - certificateDto.setPoints(1500); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); + when(fondyClient.getCheckoutResponse(any())).thenReturn(getSuccessfulFondyResponse()); + when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); when(certificateRepository.findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE)).thenReturn(Set.of(certificate)); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); - when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); - when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); ubsService.processOrderFondyClient(dto, "uuid"); - verify(orderRepository).findById(1L); verify(userRepository).findUserByUuid("uuid"); verify(certificateRepository).findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE); - verify(bagRepository).findBagsByOrderId(order.getId()); - verify(modelMapper).map(certificate, CertificateDto.class); - verify(modelMapper).map(any(Bag.class), eq(BagForUserDto.class)); + verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); } @Test @@ -2737,7 +2880,6 @@ void processOrderFondyClientCertificeteNotFoundExeption() throws Exception { user.setCurrentPoints(100); user.setChangeOfPointsList(new ArrayList<>()); order.setUser(user); - OrderFondyClientDto dto = getOrderFondyClientDto(); dto.setCertificates(Set.of("1111-1234")); @@ -2751,24 +2893,22 @@ void processOrderFondyClientCertificeteNotFoundExeption() throws Exception { CertificateDto certificateDto = createCertificateDto(); certificateDto.setPoints(1500); - + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); when(certificateRepository.findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE)).thenReturn(Collections.emptySet()); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); - when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); - + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); assertThrows(NotFoundException.class, () -> ubsService.processOrderFondyClient(dto, "uuid")); - verify(orderRepository).findById(1L); verify(userRepository).findUserByUuid("uuid"); verify(certificateRepository).findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE); - verify(bagRepository).findBagsByOrderId(order.getId()); verify(modelMapper).map(certificate, CertificateDto.class); - verify(modelMapper).map(any(Bag.class), eq(BagForUserDto.class)); + verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); } @Test @@ -2801,14 +2941,16 @@ void processOrderFondyClientCertificeteNotFoundExeption2() throws Exception { CertificateDto certificateDto = createCertificateDto(); certificateDto.setPoints(1500); - + order.setPointsToUse(-1000); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); when(certificateRepository.findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE)).thenReturn(Set.of(certificate)); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); - when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); assertThrows(NotFoundException.class, () -> ubsService.processOrderFondyClient(dto, "uuid")); @@ -2816,9 +2958,8 @@ void processOrderFondyClientCertificeteNotFoundExeption2() throws Exception { verify(userRepository).findUserByUuid("uuid"); verify(certificateRepository).findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), CertificateStatus.ACTIVE); - verify(bagRepository).findBagsByOrderId(order.getId()); verify(modelMapper).map(certificate, CertificateDto.class); - verify(modelMapper).map(any(Bag.class), eq(BagForUserDto.class)); + verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); } @Test @@ -2836,7 +2977,8 @@ void processOrderFondyClientIfSumToPayLessThanPoints() throws Exception { user.setCurrentPoints(100); user.setChangeOfPointsList(new ArrayList<>()); order.setUser(user); - + order.setPointsToUse(-10000); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); OrderFondyClientDto dto = getOrderFondyClientDto(); Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { @@ -2851,12 +2993,11 @@ void processOrderFondyClientIfSumToPayLessThanPoints() throws Exception { when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); - - when(encryptionUtil.formRequestSignature(any(), eq(null), eq("1"))).thenReturn("TestValue"); when(fondyClient.getCheckoutResponse(any())).thenReturn(getSuccessfulFondyResponse()); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(TEST_BAG_LIST); when(modelMapper.map(certificate, CertificateDto.class)).thenReturn(certificateDto); - when(modelMapper.map(any(Bag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); ubsService.processOrderFondyClient(dto, "uuid"); @@ -2891,7 +3032,6 @@ void saveFullOrderToDBForIF() throws IllegalAccessException { bag.setFullPrice(400_00L); TariffsInfo tariffsInfo = getTariffsInfo(); bag.setTariffsInfo(tariffsInfo); - UBSuser ubSuser = getUBSuser(); OrderAddress address = ubSuser.getOrderAddress(); @@ -2902,6 +3042,8 @@ void saveFullOrderToDBForIF() throws IllegalAccessException { Payment payment1 = getPayment(); payment1.setId(1L); order1.getPayment().add(payment1); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + order1.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { @@ -2911,10 +3053,13 @@ void saveFullOrderToDBForIF() throws IllegalAccessException { } } - when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(tariffsInfo)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(certificateRepository.findById("1111-1234")).thenReturn(Optional.of(getCertificate())); @@ -2942,7 +3087,7 @@ void saveFullOrderToDBWhenSumToPayeqNull() throws IllegalAccessException { user.setOrders(new ArrayList<>()); user.getOrders().add(order); user.setChangeOfPointsList(new ArrayList<>()); - + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag())); Bag bag = getBagForOrder(); UBSuser ubSuser = getUBSuser().setId(null); @@ -2965,11 +3110,15 @@ void saveFullOrderToDBWhenSumToPayeqNull() throws IllegalAccessException { f.set(ubsService, "1"); } } - - when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + TariffsInfo tariffsInfo = getTariffsInfo(); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(tariffsInfo)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(addressRepository.findById(any())).thenReturn(Optional.of(address)); when(locationRepository.findById(anyLong())).thenReturn(Optional.of(location)); @@ -3017,7 +3166,7 @@ void testSaveToDBfromIForIFThrowsException() throws IllegalAccessException { when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(getTariffInfoWithLimitOfBags())); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> { ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null); }); @@ -3059,7 +3208,7 @@ void testCheckSumIfCourierLimitBySumOfOrderForIF1() throws IllegalAccessExceptio when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> { ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null); @@ -3102,7 +3251,7 @@ void testCheckSumIfCourierLimitBySumOfOrderForIF2() throws InvocationTargetExcep when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + when(bagRepository.findActiveBagById(3)).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> { ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null); @@ -3227,13 +3376,14 @@ void getOrderForUserTest() { order.setAmountOfBagsOrdered(Map.of(1, 10)); bags.add(bag); order.setUser(user); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); orderList.add(order); - + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); when(ordersForUserRepository.getAllByUserUuidAndId(user.getUuid(), order.getId())) .thenReturn(order); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(bags); - when(modelMapper.map(bag, BagForUserDto.class)).thenReturn(bagForUserDto); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); when(orderStatusTranslationRepository .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue())) .thenReturn(Optional.of(orderStatusTranslation)); @@ -3243,8 +3393,7 @@ void getOrderForUserTest() { ubsService.getOrderForUser(user.getUuid(), 1L); - verify(modelMapper, times(bags.size())).map(bag, BagForUserDto.class); - verify(bagRepository).findBagsByOrderId(order.getId()); + verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); verify(orderStatusTranslationRepository, times(orderList.size())) .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue()); verify(orderPaymentStatusTranslationRepository, times(orderList.size())) @@ -3287,30 +3436,30 @@ void getOrdersForUserTest() { orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); Page page = new PageImpl<>(orderList, pageable, 1); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(bags); - when(modelMapper.map(bag, BagForUserDto.class)).thenReturn(bagForUserDto); + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); when(orderStatusTranslationRepository .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue())) .thenReturn(Optional.of(orderStatusTranslation)); when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); assertEquals(dto.getTotalElements(), orderList.size()); assertEquals(dto.getPage().get(0).getId(), order.getId()); - verify(modelMapper, times(bags.size())).map(bag, BagForUserDto.class); - verify(bagRepository).findBagsByOrderId(order.getId()); + verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); verify(orderStatusTranslationRepository, times(orderList.size())) .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue()); verify(orderPaymentStatusTranslationRepository, times(orderList.size())) - .getById( - (long) order.getOrderPaymentStatus().getStatusValue()); + .getById((long) order.getOrderPaymentStatus().getStatusValue()); verify(ordersForUserRepository).getAllByUserUuid(pageable, user.getUuid()); } @@ -3320,6 +3469,7 @@ void testOrdersForUserWithExportedQuantity() { OrderPaymentStatusTranslation orderPaymentStatusTranslation = getOrderPaymentStatusTranslation(); OrdersDataForUserDto ordersDataForUserDto = getOrderStatusDto(); Order order = getOrderTest(); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); User user = getTestUser(); Bag bag = bagDto(); @@ -3339,22 +3489,21 @@ void testOrdersForUserWithExportedQuantity() { when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(bags); - when(modelMapper.map(bag, BagForUserDto.class)).thenReturn(bagForUserDto); when(orderStatusTranslationRepository .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue())) .thenReturn(Optional.of(orderStatusTranslation)); when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); - + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); assertEquals(dto.getTotalElements(), orderList.size()); assertEquals(dto.getPage().get(0).getId(), order.getId()); - verify(modelMapper, times(bags.size())).map(bag, BagForUserDto.class); - verify(bagRepository).findBagsByOrderId(order.getId()); + verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); verify(orderStatusTranslationRepository, times(orderList.size())) .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue()); verify(orderPaymentStatusTranslationRepository, times(orderList.size())) @@ -3381,6 +3530,7 @@ void testOrdersForUserWithConfirmedQuantity() { order.setConfirmedQuantity(Map.of(1, 10)); bags.add(bag); order.setUser(user); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); @@ -3388,22 +3538,21 @@ void testOrdersForUserWithConfirmedQuantity() { when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(bags); - when(modelMapper.map(bag, BagForUserDto.class)).thenReturn(bagForUserDto); + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); when(orderStatusTranslationRepository .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue())) .thenReturn(Optional.of(orderStatusTranslation)); when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); - + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); assertEquals(dto.getTotalElements(), orderList.size()); assertEquals(dto.getPage().get(0).getId(), order.getId()); - verify(modelMapper, times(bags.size())).map(bag, BagForUserDto.class); - verify(bagRepository).findBagsByOrderId(order.getId()); + verify(modelMapper).map(any(OrderBag.class), eq(BagForUserDto.class)); verify(orderStatusTranslationRepository, times(orderList.size())) .getOrderStatusTranslationById((long) order.getOrderStatus().getNumValue()); verify(orderPaymentStatusTranslationRepository, times(orderList.size())) @@ -3423,10 +3572,14 @@ void senderInfoDtoBuilderTest() { order.setAmountOfBagsOrdered(Map.of(1, 10)); order.setUser(user); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); Page page = new PageImpl<>(orderList, pageable, 1); + TariffsInfo tariffsInfo = getTariffsInfo(); + tariffsInfo.setBags(Arrays.asList(getBag())); + order.setTariffsInfo(tariffsInfo); when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); when(orderStatusTranslationRepository @@ -3435,7 +3588,9 @@ void senderInfoDtoBuilderTest() { when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); - + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); assertEquals(dto.getTotalElements(), orderList.size()); assertEquals(dto.getPage().get(0).getId(), order.getId()); @@ -3548,7 +3703,7 @@ void checkIfAddressHasBeenDeletedTest() throws IllegalAccessException { user.setOrders(new ArrayList<>()); user.getOrders().add(order); user.setChangeOfPointsList(new ArrayList<>()); - + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); Bag bag = getBagForOrder(); UBSuser ubSuser = getUBSuser(); @@ -3563,11 +3718,15 @@ void checkIfAddressHasBeenDeletedTest() throws IllegalAccessException { f.set(ubsService, "1"); } } - + TariffsInfo tariffsInfo = getTariffsInfo(); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(tariffsInfo)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); @@ -3607,11 +3766,15 @@ void checkAddressUserTest() throws IllegalAccessException { f.set(ubsService, "1"); } } - + TariffsInfo tariffsInfo = getTariffsInfo(); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(tariffsInfo)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); when(ubsUserRepository.findById(1L)).thenReturn(Optional.of(ubSuser)); when(modelMapper.map(dto, Order.class)).thenReturn(order); when(modelMapper.map(dto.getPersonalData(), UBSuser.class)).thenReturn(ubSuser); @@ -3643,11 +3806,16 @@ void checkIfUserHaveEnoughPointsTest() throws IllegalAccessException { f.set(ubsService, "1"); } } + TariffsInfo tariffsInfo = getTariffsInfo(); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) - .thenReturn(Optional.of(getTariffInfo())); - when(bagRepository.findById(3)).thenReturn(Optional.of(bag)); + .thenReturn(Optional.of(tariffsInfo)); + when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); + when(bagRepository.findActiveBagById(any())).thenReturn(Optional.of(bag)); assertThrows(BadRequestException.class, () -> ubsService.saveFullOrderToDB(dto, "35467585763t4sfgchjfuyetf", null)); @@ -3714,11 +3882,15 @@ void testOrdersForUserWithQuantity() { bag.setFullPrice(1200_00L); bags.add(bag); order.setUser(user); + order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); Page page = new PageImpl<>(orderList, pageable, 1); - + TariffsInfo tariffsInfo = getTariffsInfo(); + bag.setTariffsInfo(tariffsInfo); + tariffsInfo.setBags(Arrays.asList(bag)); + order.setTariffsInfo(tariffsInfo); when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); when(orderStatusTranslationRepository @@ -3727,6 +3899,9 @@ void testOrdersForUserWithQuantity() { when(orderPaymentStatusTranslationRepository.getById( (long) order.getOrderPaymentStatus().getStatusValue())) .thenReturn(orderPaymentStatusTranslation); + when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); + when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) + .thenReturn(ModelUtils.getAmount()); PageableDto dto = ubsService.getOrdersForUser(user.getUuid(), pageable, null); diff --git a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java index 162a70aab..93223f269 100644 --- a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java @@ -69,6 +69,7 @@ import greencity.repository.ServiceRepository; import greencity.repository.TariffsInfoRepository; import greencity.repository.UserRepository; +import greencity.repository.OrderBagRepository; import greencity.service.locations.LocationApiService; import greencity.service.notification.NotificationServiceImpl; import org.junit.jupiter.api.Assertions; @@ -124,9 +125,6 @@ import static greencity.ModelUtils.UPDATE_ORDER_PAGE_ADMIN_DTO; import static greencity.ModelUtils.getAddBonusesToUserDto; import static greencity.ModelUtils.getAdminCommentDto; -import static greencity.ModelUtils.getBag1list; -import static greencity.ModelUtils.getBag2list; -import static greencity.ModelUtils.getBag3list; import static greencity.ModelUtils.getBagInfoDto; import static greencity.ModelUtils.getBaglist; import static greencity.ModelUtils.getCertificateList; @@ -178,6 +176,7 @@ import static java.util.Collections.singletonList; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.anyLong; @@ -272,6 +271,10 @@ class UBSManagementServiceImplTest { @Mock RefundRepository refundRepository; + @Mock + private OrderBagService orderBagService; + @Mock + private OrderBagRepository orderBagRepository; @Test void getAllCertificates() { @@ -427,7 +430,6 @@ void checkUpdateManualPayment() { when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(paymentRepository.findById(1L)).thenReturn(Optional.of(getManualPayment())); when(paymentRepository.save(any())).thenReturn(getManualPayment()); - when(bagRepository.findBagsByOrderId(order.getId())).thenReturn(getBaglist()); doNothing().when(eventService).save(OrderHistory.UPDATE_PAYMENT_MANUALLY + 1, employee.getFirstName() + " " + employee.getLastName(), getOrder()); @@ -436,7 +438,6 @@ void checkUpdateManualPayment() { verify(paymentRepository, times(1)).save(any()); verify(eventService, times(2)).save(any(), any(), any()); verify(fileService, times(0)).delete(null); - verify(bagRepository).findBagsByOrderId(order.getId()); } @Test @@ -492,12 +493,14 @@ void saveNewManualPaymentWithHalfPaidAmount() { when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(paymentRepository.save(any())) .thenReturn(payment); doNothing().when(eventService).save(any(), any(), any()); + when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); + ubsManagementService.saveNewManualPayment(1L, paymentDetails, null, "test@gmail.com"); + verify(employeeRepository, times(2)).findByEmail(anyString()); verify(eventService, times(1)).save(OrderHistory.ADD_PAYMENT_MANUALLY + 1, "Петро Петренко", order); @@ -527,7 +530,6 @@ void saveNewManualPaymentWithPaidAmount() { when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(paymentRepository.save(any())) .thenReturn(payment); @@ -1036,7 +1038,7 @@ void testGetOrderDetails() { when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(TEST_ORDER)); when(modelMapper.map(TEST_ORDER, new TypeToken>() { }.getType())).thenReturn(TEST_BAG_MAPPING_DTO_LIST); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(TEST_BAG_LIST); + when(orderBagService.findAllBagsByOrderId(1L)).thenReturn(TEST_BAG_LIST); when(modelMapper.map(TEST_BAG, BagInfoDto.class)).thenReturn(TEST_BAG_INFO_DTO); when(bagRepository.findAllByOrder(1L)).thenReturn(TEST_BAG_LIST); when(modelMapper.map(any(), eq(new TypeToken>() { @@ -1049,7 +1051,7 @@ void testGetOrderDetails() { verify(orderRepository).getOrderDetails(1L); verify(modelMapper).map(TEST_ORDER, new TypeToken>() { }.getType()); - verify(bagRepository).findBagsByOrderId(1L); + verify(orderBagService).findAllBagsByOrderId(1L); verify(bagRepository, times(1)).findAllByOrder(anyLong()); verify(modelMapper).map(TEST_BAG, BagInfoDto.class); verify(modelMapper).map(any(), eq(new TypeToken>() { @@ -1159,9 +1161,17 @@ void testSetOrderDetail() { Order order = getOrdersStatusDoneDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); +//<<<<<<< HEAD + doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); + doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); + when(orderRepository.getOrderDetails(anyLong())) + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); +//// when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); +//======= +// when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); +// when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); +// when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); +//>>>>>>> dev when(paymentRepository.selectSumPaid(1L)).thenReturn(5000L); ubsManagementService.setOrderDetail(order, @@ -1170,8 +1180,6 @@ void testSetOrderDetail() { verify(bagRepository, times(2)).findCapacityById(1); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository, times(2)).findById(1); - verify(bagRepository).findBagsByOrderId(1L); verify(paymentRepository, times(2)).selectSumPaid(1L); } @@ -1179,21 +1187,29 @@ void testSetOrderDetail() { void testSetOrderDetailNeedToChangeStatusToHalfPaid() { Order order = getOrdersStatusDoneDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - - when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); - when(paymentRepository.selectSumPaid(1L)).thenReturn(5000L); +//<<<<<<< HEAD + doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); + doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); + when(orderRepository.getOrderDetails(anyLong())) + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + when(orderRepository.findSumOfCertificatesByOrderId(1L)).thenReturn(10L); + when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); + + doNothing().when(orderRepository).updateOrderPaymentStatus(1L, OrderPaymentStatus.HALF_PAID.name()); +//======= +// +// when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); +// when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); +// when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); +// when(paymentRepository.selectSumPaid(1L)).thenReturn(5000L); +//>>>>>>> dev ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "abc"); verify(bagRepository, times(2)).findCapacityById(1); - verify(orderRepository).getOrderDetails(1L); - verify(bagRepository, times(2)).findById(1); - verify(bagRepository).findBagsByOrderId(1L); verify(paymentRepository, times(2)).selectSumPaid(1L); } @@ -1201,11 +1217,14 @@ void testSetOrderDetailNeedToChangeStatusToHalfPaid() { void testSetOrderDetailNeedToChangeStatusToUnpaid() { Order order = getOrdersStatusDoneDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - - when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag1list()); + doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); + doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); + when(orderRepository.getOrderDetails(anyLong())) + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); +// when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); when(paymentRepository.selectSumPaid(1L)).thenReturn(null); + doNothing().when(orderRepository).updateOrderPaymentStatus(1L, OrderPaymentStatus.UNPAID.name()); + when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1214,8 +1233,6 @@ void testSetOrderDetailNeedToChangeStatusToUnpaid() { verify(bagRepository, times(2)).findCapacityById(1); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository, times(2)).findById(1); - verify(bagRepository).findBagsByOrderId(1L); verify(paymentRepository).selectSumPaid(1L); } @@ -1223,9 +1240,10 @@ void testSetOrderDetailNeedToChangeStatusToUnpaid() { void testSetOrderDetailWhenSumPaidIsNull() { Order order = getOrdersStatusDoneDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - - when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); + doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); + doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); + when(orderRepository.getOrderDetails(anyLong())) + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(paymentRepository.selectSumPaid(1L)).thenReturn(null); ubsManagementService.setOrderDetail(order, @@ -1233,9 +1251,7 @@ void testSetOrderDetailWhenSumPaidIsNull() { UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "abc"); verify(bagRepository, times(2)).findCapacityById(1); - verify(orderRepository).getOrderDetails(1L); - verify(bagRepository, times(2)).findById(1); verify(paymentRepository).selectSumPaid(1L); } @@ -1246,13 +1262,16 @@ void testSetOrderDetailIfHalfPaid() { Bag tariffBagDto = ModelUtils.getTariffBag(); List bagList = getBaglist(); +//<<<<<<< HEAD +// when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(orderDto)); +//======= when(bagRepository.findCapacityById(1)).thenReturn(1); +//>>>>>>> dev when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(orderDetailDto)); - when(bagRepository.findById(1)).thenReturn(Optional.ofNullable(tariffBagDto)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(bagList); when(paymentRepository.selectSumPaid(1L)).thenReturn(0L); when(orderRepository.findSumOfCertificatesByOrderId(1L)).thenReturn(0L); + when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1260,8 +1279,6 @@ void testSetOrderDetailIfHalfPaid() { verify(bagRepository, times(2)).findCapacityById(1); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository, times(2)).findById(1); - verify(bagRepository).findBagsByOrderId(1L); verify(paymentRepository, times(2)).selectSumPaid(1L); verify(orderRepository).findSumOfCertificatesByOrderId(1L); } @@ -1274,18 +1291,13 @@ void testSetOrderDetailIfPaidAndPriceLessThanDiscount() { when(orderRepository.findSumOfCertificatesByOrderId(order.getId())).thenReturn(600L); when(orderRepository.getOrderDetails(1L)) .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto2())); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "abc"); - - verify(certificateRepository).findCertificate(order.getId()); - verify(orderRepository).findSumOfCertificatesByOrderId(order.getId()); - verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findBagsByOrderId(1L); - verify(bagRepository, times(2)).findById(1); + verify(certificateRepository).save(ModelUtils.getCertificate2().setPoints(0)); + verify(userRepository).updateUserCurrentPoints(1L, 100); + verify(orderRepository).updateOrderPointsToUse(1L, 0); } @Test @@ -1296,8 +1308,7 @@ void testSetOrderDetailIfPaidAndPriceLessThanPaidSum() { when(orderRepository.findSumOfCertificatesByOrderId(order.getId())).thenReturn(600L); when(orderRepository.getOrderDetails(1L)) .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto2())); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); +// when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1307,17 +1318,17 @@ void testSetOrderDetailIfPaidAndPriceLessThanPaidSum() { verify(certificateRepository).findCertificate(order.getId()); verify(orderRepository).findSumOfCertificatesByOrderId(order.getId()); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findBagsByOrderId(1L); - verify(bagRepository, times(2)).findById(1); } @Test void testSetOrderDetailConfirmed() { + when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusConfirmedDto())); + doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); + when(orderRepository.getOrderDetails(anyLong())) + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); Order order = getOrdersStatusConfirmedDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1325,42 +1336,35 @@ void testSetOrderDetailConfirmed() { "test@gmail.com"); verify(bagRepository, times(2)).findCapacityById(1); - verify(orderRepository).getOrderDetails(1L); - verify(bagRepository, times(2)).findById(1); } @Test void testSetOrderDetailConfirmed2() { Order order = getOrdersStatusConfirmedDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); when(orderDetailRepository.ifRecordExist(1L, 1L)).thenReturn(1L); - when(orderDetailRepository.getAmount(1L, 1L)).thenReturn(1L); - ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "test@gmail.com"); verify(bagRepository, times(2)).findCapacityById(1); - - verify(orderRepository).getOrderDetails(1L); - verify(bagRepository, times(2)).findById(1); - verify(orderDetailRepository, times(2)).ifRecordExist(1L, 1L); - verify(orderDetailRepository).getAmount(1L, 1L); + verify(bagRepository, times(2)).findActiveBagById(1); + verify(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); + verify(orderDetailRepository, times(0)).updateExporter(anyInt(), anyLong(), anyLong()); } @Test void testSetOrderDetailWithExportedWaste() { Order order = getOrdersStatusDoneDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - - when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - when(orderDetailRepository.ifRecordExist(1L, 1L)).thenReturn(1L); + doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); + doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); + when(orderRepository.getOrderDetails(anyLong())) + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + when(orderDetailRepository.ifRecordExist(any(), any())).thenReturn(1L); ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1368,28 +1372,26 @@ void testSetOrderDetailWithExportedWaste() { "test@gmail.com"); verify(bagRepository, times(2)).findCapacityById(1); - - verify(orderRepository).getOrderDetails(1L); - verify(bagRepository, times(2)).findById(1); - verify(orderDetailRepository, times(3)).ifRecordExist(1L, 1L); + verify(bagRepository, times(2)).findActiveBagById(1); + verify(orderDetailRepository, times(2)).ifRecordExist(any(), any()); + verify(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); + verify(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); } @Test void testSetOrderDetailFormed() { Order order = getOrdersStatusFormedDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - + doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); + when(orderRepository.getOrderDetails(anyLong())) + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); - ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsExported(), "test@gmail.com"); verify(bagRepository, times(2)).findCapacityById(1); - verify(orderRepository).getOrderDetails(1L); - verify(bagRepository, times(2)).findById(1); } @Test @@ -1397,7 +1399,6 @@ void testSetOrderDetailFormedWithBagNoPresent() { Order order = getOrdersStatusFormedDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.empty()); ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1405,16 +1406,16 @@ void testSetOrderDetailFormedWithBagNoPresent() { verify(bagRepository, times(2)).findCapacityById(1); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository, times(2)).findById(1); } @Test void testSetOrderDetailNotTakenOut() { Order order = getOrdersStatusNotTakenOutDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - - when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); + doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); + doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); + when(orderRepository.getOrderDetails(anyLong())) + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1422,17 +1423,15 @@ void testSetOrderDetailNotTakenOut() { verify(bagRepository, times(2)).findCapacityById(1); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository, times(2)).findById(1); - } @Test void testSetOrderDetailOnTheRoute() { Order order = getOrdersStatusOnThe_RouteDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - - when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); + doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); + when(orderRepository.getOrderDetails(anyLong())) + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1440,16 +1439,16 @@ void testSetOrderDetailOnTheRoute() { verify(bagRepository, times(2)).findCapacityById(1); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository, times(2)).findById(1); } @Test void testSetOrderDetailsDone() { Order order = getOrdersStatusDoneDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - - when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); + doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); + doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); + when(orderRepository.getOrderDetails(anyLong())) + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1457,18 +1456,17 @@ void testSetOrderDetailsDone() { "abc"); verify(bagRepository, times(2)).findCapacityById(1); - verify(orderRepository).getOrderDetails(1L); - verify(bagRepository, times(2)).findById(1); } @Test void testSetOrderBroughtItHimself() { Order order = getOrdersStatusBROUGHT_IT_HIMSELFDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - + doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); + when(orderRepository.getOrderDetails(anyLong())) + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1476,18 +1474,19 @@ void testSetOrderBroughtItHimself() { "abc"); verify(bagRepository, times(2)).findCapacityById(1); - verify(orderRepository).getOrderDetails(1L); - verify(bagRepository, times(2)).findById(1); } @Test void testSetOrderDetailsCanceled() { Order order = getOrdersStatusCanseledDto(); when(bagRepository.findCapacityById(1)).thenReturn(1); - + doNothing().when(orderDetailRepository).updateExporter(anyInt(), anyLong(), anyLong()); + doNothing().when(orderDetailRepository).updateConfirm(anyInt(), anyLong(), anyLong()); + when(orderRepository.getOrderDetails(anyLong())) + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); +// when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1495,9 +1494,7 @@ void testSetOrderDetailsCanceled() { "abc"); verify(bagRepository, times(2)).findCapacityById(1); - verify(orderRepository).getOrderDetails(1L); - verify(bagRepository, times(2)).findById(1); } @Test @@ -1621,20 +1618,19 @@ void updateOrderAdminPageInfoTest() { when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(1L, 1L)).thenReturn(Optional.of(tariffsInfo)); when(paymentRepository.findAllByOrderId(1L)).thenReturn(List.of(getPayment())); - when(ubsClientService.updateUbsUserInfoInOrder(ModelUtils.getUbsCustomersDtoUpdate(), "test@gmail.com")).thenReturn(ModelUtils.getUbsCustomersDto()); UpdateOrderPageAdminDto updateOrderPageAdminDto = updateOrderPageAdminDto(); updateOrderPageAdminDto.setUserInfoDto(ModelUtils.getUbsCustomersDtoUpdate()); - when(orderAddressRepository.findById(1L)).thenReturn(Optional.of(getOrderAddress())); when(receivingStationRepository.findAll()).thenReturn(List.of(getReceivingStation())); var receivingStation = getReceivingStation(); when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); + when(orderRepository.getOrderDetails(anyLong())) + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, order, "en", "test@gmail.com"); UpdateOrderPageAdminDto emptyDto = new UpdateOrderPageAdminDto(); @@ -1650,10 +1646,8 @@ void updateOrderAdminPageInfoTest() { verify(orderAddressRepository).findById(1L); verify(receivingStationRepository).findAll(); - verify(receivingStationRepository).findById(1L); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository, times(2)).findById(1); } @Test @@ -1681,7 +1675,6 @@ void updateOrderAdminPageInfoWithUbsCourierSumAndWriteOffStationSum() { when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); - when(bagRepository.findById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.updateOrderAdminPageInfo(updateOrderPageAdminDto, order, "en", "test@gmail.com"); UpdateOrderPageAdminDto emptyDto = new UpdateOrderPageAdminDto(); @@ -1697,10 +1690,8 @@ void updateOrderAdminPageInfoWithUbsCourierSumAndWriteOffStationSum() { verify(orderAddressRepository).findById(1L); verify(receivingStationRepository).findAll(); - verify(receivingStationRepository).findById(1L); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository, times(2)).findById(1); } @Test @@ -1930,7 +1921,6 @@ void getOrderSumDetailsForCanceledPaidOrderWithBags() { Order order = ModelUtils.getCanceledPaidOrder(); order.setOrderDate(LocalDateTime.now()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag3list()); doNothing().when(notificationService).notifyPaidOrder(order); doNothing().when(notificationService).notifyHalfPaidPackage(order); @@ -1959,7 +1949,6 @@ void getOrderSumDetailsForFormedHalfPaidOrder() { Order order = ModelUtils.getFormedHalfPaidOrder(); order.setOrderDate(LocalDateTime.now()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); doNothing().when(notificationService).notifyPaidOrder(order); doNothing().when(notificationService).notifyHalfPaidPackage(order); @@ -1974,7 +1963,6 @@ void getOrderSumDetailsForFormedHalfPaidOrderWithDiffBags() { Order order = ModelUtils.getFormedHalfPaidOrder(); order.setOrderDate(LocalDateTime.now()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag3list()); doNothing().when(notificationService).notifyPaidOrder(order); doNothing().when(notificationService).notifyHalfPaidPackage(order); @@ -1989,7 +1977,6 @@ void getOrderSumDetailsForCanceledHalfPaidOrder() { Order order = ModelUtils.getCanceledHalfPaidOrder(); order.setOrderDate(LocalDateTime.now()); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); doNothing().when(notificationService).notifyPaidOrder(order); doNothing().when(notificationService).notifyHalfPaidPackage(order); @@ -2015,8 +2002,7 @@ void getOrderStatusDataTest() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); + when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(1L)).thenReturn(getCertificateList()); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(getService())); @@ -2033,9 +2019,7 @@ void getOrderStatusDataTest() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); - verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findBagsByOrderId(1L); - verify(bagRepository).findBagsByTariffsInfoId(1L); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); verify(certificateRepository).findCertificate(1L); verify(orderRepository, times(5)).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); @@ -2092,8 +2076,7 @@ void getOrderStatusDataTestEmptyPriceDetails() { .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag2list()); + when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.empty()); when(modelMapper.map(getBaglist().get(0), BagInfoDto.class)).thenReturn(bagInfoDto); when(orderStatusTranslationRepository.getOrderStatusTranslationById(6L)) @@ -2109,8 +2092,7 @@ void getOrderStatusDataTestEmptyPriceDetails() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findBagsByOrderId(1L); - verify(bagRepository).findBagsByTariffsInfoId(1L); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); verify(certificateRepository).findCertificate(1L); verify(orderRepository, times(5)).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); @@ -2134,8 +2116,7 @@ void getOrderStatusDataWithEmptyCertificateTest() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); + when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(getService())); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); when(modelMapper.map(getBaglist().get(0), BagInfoDto.class)).thenReturn(bagInfoDto); @@ -2150,8 +2131,7 @@ void getOrderStatusDataWithEmptyCertificateTest() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findBagsByOrderId(1L); - verify(bagRepository).findBagsByTariffsInfoId(1L); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); verify(orderRepository, times(5)).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); verify(modelMapper).map(getBaglist().get(0), BagInfoDto.class); @@ -2173,8 +2153,7 @@ void getOrderStatusDataWhenOrderTranslationIsNull() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); + when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(getService())); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); when(modelMapper.map(getBaglist().get(0), BagInfoDto.class)).thenReturn(bagInfoDto); @@ -2187,8 +2166,7 @@ void getOrderStatusDataWhenOrderTranslationIsNull() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findBagsByOrderId(1L); - verify(bagRepository).findBagsByTariffsInfoId(1L); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); verify(orderRepository, times(5)).findById(1L); verify(serviceRepository).findServiceByTariffsInfoId(1L); verify(modelMapper).map(getBaglist().get(0), BagInfoDto.class); @@ -2210,7 +2188,6 @@ void getOrderStatusDataExceptionTest() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(1L)).thenReturn(getCertificateList()); when(serviceRepository.findServiceByTariffsInfoId(1L)).thenReturn(Optional.of(getService())); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); @@ -2494,8 +2471,7 @@ void getOrderStatusDataWithNotEmptyLists() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); + when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(1L)).thenReturn(getCertificateList()); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); when(modelMapper.map(getBaglist().get(0), BagInfoDto.class)).thenReturn(bagInfoDto); @@ -2513,8 +2489,7 @@ void getOrderStatusDataWithNotEmptyLists() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findBagsByTariffsInfoId(1L); - verify(bagRepository).findBagsByOrderId(1L); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); verify(certificateRepository).findCertificate(1L); verify(orderRepository, times(5)).findById(1L); verify(modelMapper).map(getBaglist().get(0), BagInfoDto.class); @@ -2540,8 +2515,7 @@ void getOrderStatusesTranslationTest() { when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(anyLong(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); - when(bagRepository.findBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); + when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(1L)).thenReturn(getCertificateList()); when(orderRepository.findById(1L)).thenReturn(Optional.ofNullable(getOrderForGetOrderStatusData2Test())); when(modelMapper.map(getBaglist().get(0), BagInfoDto.class)).thenReturn(bagInfoDto); @@ -2564,8 +2538,7 @@ void getOrderStatusesTranslationTest() { ubsManagementService.getOrderStatusData(1L, "test@gmail.com"); verify(orderRepository).getOrderDetails(1L); - verify(bagRepository).findBagsByOrderId(1L); - verify(bagRepository).findBagsByTariffsInfoId(1L); + verify(bagRepository).findAllActiveBagsByTariffsInfoId(1L); verify(certificateRepository).findCertificate(1L); verify(orderRepository, times(5)).findById(1L); verify(modelMapper).map(getBaglist().get(0), BagInfoDto.class); @@ -2642,7 +2615,6 @@ void addBonusesToUserTest() { Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); ubsManagementService.addBonusesToUser(getAddBonusesToUserDto(), 1L, employee.getEmail()); @@ -2650,7 +2622,7 @@ void addBonusesToUserTest() { verify(orderRepository).findById(1L); verify(orderRepository).save(order); verify(userRepository).save(user); - verify(notificationService).notifyBonuses(order, 809L); + verify(notificationService).notifyBonuses(order, 900L); verify(eventService).saveEvent(OrderHistory.ADDED_BONUSES, employee.getEmail(), order); } @@ -2662,7 +2634,7 @@ void addBonusesToUserIfOrderStatusIsCanceled() { Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); +// when(orderBagService.findAllBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); ubsManagementService.addBonusesToUser(getAddBonusesToUserDto(), 1L, employee.getEmail()); @@ -2681,7 +2653,6 @@ void addBonusesToUserWithoutExportedBagsTest() { Employee employee = getEmployee(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBaglist()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); ubsManagementService.addBonusesToUser(getAddBonusesToUserDto(), 1L, employee.getEmail()); @@ -2689,26 +2660,18 @@ void addBonusesToUserWithoutExportedBagsTest() { verify(orderRepository).findById(1L); verify(orderRepository).save(order); verify(userRepository).save(user); - verify(notificationService).notifyBonuses(order, 209L); + verify(notificationService).notifyBonuses(order, 300L); verify(eventService).saveEvent(OrderHistory.ADDED_BONUSES, employee.getEmail(), order); } - @Test - void addBonusesToUserWithoutOrderTest() { - when(orderRepository.findById(1L)).thenReturn(Optional.empty()); - AddBonusesToUserDto dto = getAddBonusesToUserDto(); - String email = getEmployee().getEmail(); - assertThrows(NotFoundException.class, () -> ubsManagementService.addBonusesToUser(dto, 1L, email)); - } - @Test void addBonusesToUserWithNoOverpaymentTest() { Order order = getOrderForGetOrderStatusData2Test(); String email = getEmployee().getEmail(); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.of(order)); - when(bagRepository.findBagsByOrderId(1L)).thenReturn(getBag3list()); when(certificateRepository.findCertificate(order.getId())).thenReturn(getCertificateList()); + when(orderBagService.findAllBagsInOrderBagsList(anyList())).thenReturn(ModelUtils.TEST_BAG_LIST2); AddBonusesToUserDto addBonusesToUserDto = getAddBonusesToUserDto(); assertThrows(BadRequestException.class, From f4abcaffb3d45491efaec8e34d45bdd64826d4af Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Fri, 18 Aug 2023 16:52:17 +0300 Subject: [PATCH 51/80] [UBS Address] Fixed edit district (#1218) * Setted disctrict which come from dto * Formatted * Added tests to cover * Removed import * --- .../service/ubs/UBSClientServiceImpl.java | 9 +++ .../src/test/java/greencity/ModelUtils.java | 39 ++++++++--- .../service/ubs/UBSClientServiceImplTest.java | 66 ++++++++++++++++++- 3 files changed, 104 insertions(+), 10 deletions(-) diff --git a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java index b418b3ce9..eb4a358cb 100644 --- a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java @@ -582,6 +582,10 @@ public OrderWithAddressesResponseDto saveCurrentAddressForOrder(CreateAddressReq address.setUser(currentUser); address.setActual(addresses.isEmpty()); address.setAddressStatus(AddressStatus.NEW); + + address.setDistrict(addressRequestDto.getDistrict()); + address.setDistrictEn(addressRequestDto.getDistrictEn()); + addressRepo.save(address); return findAllAddressesForCurrentOrder(uuid); @@ -620,6 +624,10 @@ public OrderWithAddressesResponseDto updateCurrentAddressForOrder(OrderAddressDt newAddress.setUser(address.getUser()); newAddress.setAddressStatus(address.getAddressStatus()); newAddress.setActual(address.getActual()); + + newAddress.setDistrict(addressRequestDto.getDistrict()); + newAddress.setDistrictEn(addressRequestDto.getDistrictEn()); + addressRepo.save(newAddress); return findAllAddressesForCurrentOrder(uuid); @@ -635,6 +643,7 @@ private void saveAddressWithoutPlaceId(List
addresses, CreateAddressReq address.setUser(currentUser); address.setActual(addresses.isEmpty()); address.setAddressStatus(AddressStatus.NEW); + addressRepo.save(address); } diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index bcbcf4d86..be8b5de8b 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -4591,8 +4591,21 @@ public static CreateAddressRequestDto getAddressRequestToSaveDto() { return CreateAddressRequestDto.builder() .addressComment("fdsfs2") .searchAddress("fake street name2, 132, fake street2, 020002") - .district("fdsfds2") - .districtEn("dsadsad2") + .district("Район") + .districtEn("District") + .region("regdsad2") + .regionEn("regdsaden2") + .houseNumber("12") + .houseCorpus("22") + .entranceNumber("32") + .placeId("place_id") + .build(); + } + + public static CreateAddressRequestDto getAddressRequestToSaveDto_WithoutDistricts() { + return CreateAddressRequestDto.builder() + .addressComment("fdsfs2") + .searchAddress("fake street name2, 132, fake street2, 020002") .region("regdsad2") .regionEn("regdsaden2") .houseNumber("12") @@ -4676,7 +4689,8 @@ public static OrderAddressDtoRequest getTestOrderAddressDtoRequest() { .region("fake region") .searchAddress("fake street name, 13, fake street, 02000") .city("fake street") - .district("fake district") + .district("Район") + .districtEn("District") .entranceNumber("1") .houseNumber("13") .houseCorpus("1") @@ -4684,7 +4698,6 @@ public static OrderAddressDtoRequest getTestOrderAddressDtoRequest() { .streetEn("fake street name") .coordinates(new Coordinates(50.5555555d, 50.5555555d)) .cityEn("fake street") - .districtEn("fake district") .regionEn("fake region") .placeId("place_id") .build(); @@ -4720,9 +4733,18 @@ public static User getUserForCreate() { public static User getUserForCreate(AddressStatus addressStatus) { return User.builder() .id(1L) - .addresses(List.of(Address.builder().id(7L).city("fake street").cityEn("fake street") - .district("fake district").districtEn("fake district").region("fake region").regionEn("fake region") - .street("fake street name").streetEn("fake street name").houseNumber("13").addressStatus(addressStatus) + .addresses(List.of(Address.builder() + .id(7L) + .city("fake street") + .cityEn("fake street") + .district("Район") + .districtEn("District") + .region("fake region") + .regionEn("fake region") + .street("fake street name") + .streetEn("fake street name") + .houseNumber("13") + .addressStatus(addressStatus) .coordinates(new Coordinates(50.5555555, 50.5555555)).build())) .recipientEmail("someUser@gmail.com") .recipientPhone("962473289") @@ -4741,7 +4763,8 @@ public static OrderWithAddressesResponseDto getAddressDtoResponse() { AddressDto.builder() .id(1L) .city("City") - .district("Distinct") + .district("Район") + .districtEn("District") .entranceNumber("7a") .houseCorpus("2") .houseNumber("25") diff --git a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java index 85b905a6a..7dc225a97 100644 --- a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java @@ -149,6 +149,7 @@ import static greencity.ModelUtils.getCancellationDto; import static greencity.ModelUtils.getCertificate; import static greencity.ModelUtils.getCourier; +import static greencity.ModelUtils.getAddressRequestToSaveDto_WithoutDistricts; import static greencity.ModelUtils.getCourierDto; import static greencity.ModelUtils.getCourierDtoList; import static greencity.ModelUtils.getEmployee; @@ -203,6 +204,7 @@ import static greencity.ModelUtils.getUserWithBotNotifyTrue; import static greencity.ModelUtils.getUserWithLastLocation; import static greencity.ModelUtils.getViberBotNotifyTrue; + import static greencity.constant.ErrorMessage.ACTUAL_ADDRESS_NOT_FOUND; import static greencity.constant.ErrorMessage.ADDRESS_ALREADY_EXISTS; import static greencity.constant.ErrorMessage.CANNOT_ACCESS_PERSONAL_INFO; @@ -1980,12 +1982,65 @@ void testSaveCurrentAddressForOrder() { when(modelMapper.map(any(), eq(CreateAddressRequestDto.class))).thenReturn(createAddressRequestDto); when(modelMapper.map(any(), eq(OrderAddressDtoRequest.class))).thenReturn(TEST_ORDER_ADDRESS_DTO_REQUEST); when(modelMapper.map(any(), eq(Address.class))).thenReturn(addressToSave); - when(modelMapper.map(addresses.get(0), AddressDto.class)).thenReturn(addressDto()); + var addressDto = addressDto(); + addressDto.setDistrict("Район"); + addressDto.setDistrictEn("District"); + when(modelMapper.map(addresses.get(0), AddressDto.class)).thenReturn(addressDto); OrderWithAddressesResponseDto actualWithSearchAddress = ubsService.saveCurrentAddressForOrder(createAddressRequestToSaveDto, uuid); assertEquals(getAddressDtoResponse(), actualWithSearchAddress); + assertEquals(createAddressRequestToSaveDto.getDistrict(), + actualWithSearchAddress.getAddressList().get(0).getDistrict()); + assertEquals(createAddressRequestToSaveDto.getDistrictEn(), + actualWithSearchAddress.getAddressList().get(0).getDistrictEn()); + + verify(addressRepository).save(addressToSave); + + verify(userRepository, times(2)).findByUuid(user.getUuid()); + verify(addressRepository, times(2)).findAllNonDeletedAddressesByUserId(user.getId()); + verify(googleApiService, times(2)).getResultFromGeoCode(eq(dtoRequest.getPlaceId()), anyInt()); + + verify(modelMapper).map(any(), eq(CreateAddressRequestDto.class)); + verify(modelMapper, times(2)).map(any(), eq(OrderAddressDtoRequest.class)); + verify(modelMapper).map(any(), eq(Address.class)); + verify(modelMapper).map(addresses.get(0), AddressDto.class); + } + + @Test + void testSaveCurrentAddressForOrder_WithoutDistricts() { + User user = getUserForCreate(); + List
addresses = user.getAddresses(); + addresses.get(0).setActual(false); + addresses.get(0).setAddressStatus(AddressStatus.NEW); + + String uuid = user.getUuid(); + OrderAddressDtoRequest dtoRequest = getTestOrderAddressLocationDto(); + CreateAddressRequestDto createAddressRequestDto = getAddressRequestDto(); + CreateAddressRequestDto createAddressRequestToSaveDto = getAddressRequestToSaveDto_WithoutDistricts(); + Address addressToSave = new Address(); + when(userRepository.findByUuid(user.getUuid())).thenReturn(user); + when(addressRepository.findAllNonDeletedAddressesByUserId(user.getId())).thenReturn(addresses); + when(googleApiService.getResultFromGeoCode(eq(dtoRequest.getPlaceId()), anyInt())) + .thenReturn(getGeocodingResult().get(0)); + + when(modelMapper.map(any(), eq(CreateAddressRequestDto.class))).thenReturn(createAddressRequestDto); + when(modelMapper.map(any(), eq(OrderAddressDtoRequest.class))).thenReturn(TEST_ORDER_ADDRESS_DTO_REQUEST); + when(modelMapper.map(any(), eq(Address.class))).thenReturn(addressToSave); + var addressDto = addressDto(); + addressDto.setDistrict(null); + addressDto.setDistrictEn(null); + when(modelMapper.map(addresses.get(0), AddressDto.class)).thenReturn(addressDto); + + OrderWithAddressesResponseDto actualWithSearchAddress = + ubsService.saveCurrentAddressForOrder(createAddressRequestToSaveDto, uuid); + + assertEquals(createAddressRequestToSaveDto.getDistrict(), + actualWithSearchAddress.getAddressList().get(0).getDistrict()); + assertEquals(createAddressRequestToSaveDto.getDistrictEn(), + actualWithSearchAddress.getAddressList().get(0).getDistrictEn()); + verify(addressRepository).save(addressToSave); verify(userRepository, times(2)).findByUuid(user.getUuid()); @@ -2188,9 +2243,12 @@ void testUpdateCurrentAddressForOrder() { eq(Address.class))).thenReturn(addresses.get(0)); when(addressRepository.save(addresses.get(0))).thenReturn(addresses.get(0)); + var addressDto = addressDto(); + addressDto.setDistrict("Район"); + addressDto.setDistrictEn("District"); when(modelMapper.map(addresses.get(0), AddressDto.class)) - .thenReturn(addressDto()); + .thenReturn(addressDto); OrderWithAddressesResponseDto actualWithSearchAddress = ubsService.updateCurrentAddressForOrder(updateAddressRequestDto, uuid); @@ -2198,6 +2256,10 @@ void testUpdateCurrentAddressForOrder() { Assertions.assertNotNull(updateAddressRequestDto.getSearchAddress()); Assertions.assertNull(dtoRequest.getSearchAddress()); assertEquals(getAddressDtoResponse(), actualWithSearchAddress); + assertEquals(updateAddressRequestDto.getDistrict(), + actualWithSearchAddress.getAddressList().get(0).getDistrict()); + assertEquals(updateAddressRequestDto.getDistrictEn(), + actualWithSearchAddress.getAddressList().get(0).getDistrictEn()); verify(googleApiService, times(2)).getResultFromGeoCode(eq(updateAddressRequestDto.getPlaceId()), anyInt()); From 15d5ee4a593fc4f0541e1c4feb6ff4151be7ca71 Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Fri, 18 Aug 2023 23:43:07 +0300 Subject: [PATCH 52/80] Changed authorities (#1217) --- .../controller/SuperAdminController.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/core/src/main/java/greencity/controller/SuperAdminController.java b/core/src/main/java/greencity/controller/SuperAdminController.java index eacd8743b..99f9878bd 100644 --- a/core/src/main/java/greencity/controller/SuperAdminController.java +++ b/core/src/main/java/greencity/controller/SuperAdminController.java @@ -125,7 +125,7 @@ public ResponseEntity> getTariffService( @ApiResponse(code = 403, message = HttpStatuses.FORBIDDEN), @ApiResponse(code = 404, message = HttpStatuses.NOT_FOUND) }) - @PreAuthorize("@preAuthorizer.hasAuthority('EDIT_DELETE_PRICE_CARD', authentication)") + @PreAuthorize("@preAuthorizer.hasAuthority('EDIT_DELETE_DEACTIVATE_PRICING_CARD', authentication)") @DeleteMapping("/deleteTariffService/{id}") public ResponseEntity deleteTariffService( @Valid @PathVariable Integer id) { @@ -151,7 +151,7 @@ public ResponseEntity deleteTariffService( @ApiResponse(code = 403, message = HttpStatuses.FORBIDDEN), @ApiResponse(code = 404, message = HttpStatuses.NOT_FOUND) }) - @PreAuthorize("@preAuthorizer.hasAuthority('EDIT_DELETE_PRICE_CARD', authentication)") + @PreAuthorize("@preAuthorizer.hasAuthority('EDIT_DELETE_DEACTIVATE_PRICING_CARD', authentication)") @PutMapping("/editTariffService/{id}") public ResponseEntity editTariffService( @Valid @RequestBody TariffServiceDto dto, @@ -357,7 +357,7 @@ public ResponseEntity addLocation( @ApiResponse(code = 403, message = HttpStatuses.FORBIDDEN), @ApiResponse(code = 404, message = HttpStatuses.NOT_FOUND) }) - @PreAuthorize("@preAuthorizer.hasAuthority('EDIT_DELETE_LOCATION_CARD', authentication)") + @PreAuthorize("@preAuthorizer.hasAuthority('DELETE_LOCATION', authentication)") @DeleteMapping("/deleteLocation/{id}") public ResponseEntity deleteLocation(@PathVariable Long id) { superAdminService.deleteLocation(id); @@ -377,7 +377,7 @@ public ResponseEntity deleteLocation(@PathVariable Long id) { @ApiResponse(code = 401, message = HttpStatuses.UNAUTHORIZED), @ApiResponse(code = 403, message = HttpStatuses.FORBIDDEN) }) - @PreAuthorize("@preAuthorizer.hasAuthority('EDIT_DELETE_LOCATION_CARD', authentication)") + @PreAuthorize("@preAuthorizer.hasAuthority('DELETE_LOCATION', authentication)") @PatchMapping("/activeLocations/{id}") public ResponseEntity activeLocation( @PathVariable Long id) { @@ -496,7 +496,7 @@ public ResponseEntity createReceivingStation(@Valid AddingR @ApiResponse(code = 404, message = HttpStatuses.NOT_FOUND), @ApiResponse(code = 422, message = HttpStatuses.UNPROCESSABLE_ENTITY) }) - @PreAuthorize("@preAuthorizer.hasAuthority('EDIT_DESTINATION_NAME', authentication)") + @PreAuthorize("@preAuthorizer.hasAuthority('EDIT_STATION', authentication)") @PutMapping("/update-receiving-station") public ResponseEntity updateReceivingStation(@RequestBody @Valid ReceivingStationDto dto) { return ResponseEntity.status(HttpStatus.OK).body(superAdminService.updateReceivingStation(dto)); @@ -530,7 +530,7 @@ public ResponseEntity> getAllReceivingStation() { @ApiResponse(code = 403, message = HttpStatuses.FORBIDDEN), @ApiResponse(code = 404, message = HttpStatuses.NOT_FOUND) }) - @PreAuthorize("@preAuthorizer.hasAuthority('EDIT_DESTINATION_NAME', authentication)") + @PreAuthorize("@preAuthorizer.hasAuthority('EDIT_STATION', authentication)") @DeleteMapping("/delete-receiving-station/{id}") public ResponseEntity deleteReceivingStation(@PathVariable Long id) { superAdminService.deleteReceivingStation(id); @@ -614,7 +614,7 @@ public ResponseEntity checkIfTariffExists( @ApiResponse(code = 404, message = HttpStatuses.NOT_FOUND), @ApiResponse(code = 409, message = HttpStatuses.CONFLICT) }) - @PreAuthorize("@preAuthorizer.hasAuthority('EDIT_DELETE_PRICE_CARD', authentication)") + @PreAuthorize("@preAuthorizer.hasAuthority('EDIT_DELETE_DEACTIVATE_PRICING_CARD', authentication)") @PutMapping("/editTariffInfo/{id}") public ResponseEntity editTariff( @Valid @PathVariable Long id, @Valid @RequestBody EditTariffDto dto) { @@ -632,7 +632,7 @@ public ResponseEntity editTariff( * @author Julia Seti */ @ApiOperation(value = "Set tariff limits") - @PreAuthorize("@preAuthorizer.hasAuthority('EDIT_DELETE_PRICE_CARD', authentication)") + @PreAuthorize("@preAuthorizer.hasAuthority('EDIT_DELETE_DEACTIVATE_PRICING_CARD', authentication)") @ApiResponses(value = { @ApiResponse(code = 200, message = HttpStatuses.OK), @ApiResponse(code = 400, message = HttpStatuses.BAD_REQUEST), @@ -679,7 +679,7 @@ public ResponseEntity getTariffLimits( * @author Julia Seti */ @ApiOperation(value = "Switch tariff activation status by tariff id") - @PreAuthorize("@preAuthorizer.hasAuthority('DEACTIVATE_PRICING_CARD', authentication)") + @PreAuthorize("@preAuthorizer.hasAuthority('EDIT_DELETE_DEACTIVATE_PRICING_CARD', authentication)") @ApiResponses(value = { @ApiResponse(code = 200, message = HttpStatuses.OK), @ApiResponse(code = 400, message = HttpStatuses.BAD_REQUEST), @@ -709,7 +709,7 @@ public ResponseEntity switchTariffStatus( @ApiResponse(code = 401, message = HttpStatuses.UNAUTHORIZED), @ApiResponse(code = 403, message = HttpStatuses.FORBIDDEN) }) - @PreAuthorize("@preAuthorizer.hasAuthority('EDIT_LOCATION_CARD', authentication)") + @PreAuthorize("@preAuthorizer.hasAuthority('EDIT_LOCATION', authentication)") @PutMapping("tariffs/{id}/locations/change-status") public ResponseEntity changeLocationsInTariffStatus(@PathVariable Long id, @Valid @RequestBody ChangeTariffLocationStatusDto dto, @RequestParam String status) { @@ -735,7 +735,7 @@ public ResponseEntity changeLocationsInTariffStatus(@PathVariable Lo @ApiResponse(code = 403, message = HttpStatuses.FORBIDDEN), @ApiResponse(code = 404, message = HttpStatuses.NOT_FOUND) }) - @PreAuthorize("@preAuthorizer.hasAuthority('DEACTIVATE_PRICING_CARD', authentication)") + @PreAuthorize("@preAuthorizer.hasAuthority('EDIT_DELETE_DEACTIVATE_PRICING_CARD', authentication)") @PostMapping("/deactivate") public ResponseEntity switchActivationStatusByChosenParams( @RequestParam(name = "regionsIds", required = false) Optional> regionsIds, From 879b6d40f285ddf3988293ac8a7f3352746317f8 Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Mon, 21 Aug 2023 12:55:56 +0300 Subject: [PATCH 53/80] Deleted concatenation (#1219) * Deleted concat --- .../greencity/service/ubs/UBSManagementEmployeeServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java index 2e87aad93..a637cc54a 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java @@ -89,7 +89,7 @@ public EmployeeWithTariffsDto save(EmployeeWithTariffsIdDto dto, MultipartFile i private void signUpEmployee(Employee employee) { EmployeeSignUpDto signUpDto = EmployeeSignUpDto.builder() .email(employee.getEmail()) - .name(employee.getFirstName() + employee.getLastName()) + .name(employee.getFirstName()) .uuid(employee.getUuid()) .positions(employee.getEmployeePosition().stream() .map(position -> PositionDto.builder() From ceb42947beddd1770aa4c07a2bd977b9ea82e586 Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Tue, 22 Aug 2023 17:45:52 +0300 Subject: [PATCH 54/80] [Employee (Admin cabinet)] Add activate employee (#1220) * Added method to activate employee * Added error message * Added tests to cover new lines of code * fixed exception * Added tests to cover new lines of code * Added new methods to activate * Removed duplicate * fixed error messages * removed bug duplicates * used == for enums * formatted * added security config * added 404 ApiResponse possible * removed never used link * fixed javadoc * used EMPLOYEE_WITH_UUID_NOT_FOUND * Cnahged endpoint --- .../configuration/SecurityConfig.java | 1 + .../ManagementEmployeeController.java | 21 ++++++++ .../ManagementEmployeeControllerTest.java | 10 ++++ .../greencity/client/UserRemoteClient.java | 8 ++++ .../UserRemoteClientFallbackFactory.java | 7 +++ .../java/greencity/constant/ErrorMessage.java | 2 + .../ubs/UBSManagementEmployeeService.java | 10 +++- .../UserRemoteClientFallbackFactoryTest.java | 6 +++ .../ubs/UBSManagementEmployeeServiceImpl.java | 21 +++++++- .../UBSManagementEmployeeServiceImplTest.java | 48 +++++++++++++++++++ 10 files changed, 132 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/greencity/configuration/SecurityConfig.java b/core/src/main/java/greencity/configuration/SecurityConfig.java index 4721adbcc..7ab85619b 100644 --- a/core/src/main/java/greencity/configuration/SecurityConfig.java +++ b/core/src/main/java/greencity/configuration/SecurityConfig.java @@ -144,6 +144,7 @@ protected void configure(HttpSecurity http) throws Exception { SUPER_ADMIN_LINK + "/editService/{id}", SUPER_ADMIN_LINK + "/setTariffLimits/{tariffId}", SUPER_ADMIN_LINK + "/editTariffInfo/{id}", + SUPER_ADMIN_LINK + "/activate-employee/{id}", SUPER_ADMIN_LINK + "/**") .hasAnyRole(ADMIN, UBS_EMPLOYEE) .antMatchers(HttpMethod.DELETE, diff --git a/core/src/main/java/greencity/controller/ManagementEmployeeController.java b/core/src/main/java/greencity/controller/ManagementEmployeeController.java index d64e8b604..cea4b33fe 100644 --- a/core/src/main/java/greencity/controller/ManagementEmployeeController.java +++ b/core/src/main/java/greencity/controller/ManagementEmployeeController.java @@ -138,6 +138,27 @@ public ResponseEntity deleteEmployee(@PathVariable Long id) { return new ResponseEntity<>(HttpStatus.OK); } + /** + * Controller activate employee. + * + * @return {@link HttpStatus} + * @author Oksana Spodaryk. + */ + @ApiOperation(value = "Activate employee") + @ApiResponses(value = { + @ApiResponse(code = 200, message = HttpStatuses.OK), + @ApiResponse(code = 400, message = HttpStatuses.BAD_REQUEST), + @ApiResponse(code = 401, message = HttpStatuses.UNAUTHORIZED), + @ApiResponse(code = 403, message = HttpStatuses.FORBIDDEN), + @ApiResponse(code = 404, message = HttpStatuses.NOT_FOUND) + }) + @PreAuthorize("@preAuthorizer.hasAuthority('DEACTIVATE_EMPLOYEE', authentication)") + @PutMapping("/activate-employee/{id}") + public ResponseEntity activateEmployee(@PathVariable Long id) { + employeeService.activateEmployee(id); + return new ResponseEntity<>(HttpStatus.OK); + } + /** * Controller gets all employee positions. * diff --git a/core/src/test/java/greencity/controller/ManagementEmployeeControllerTest.java b/core/src/test/java/greencity/controller/ManagementEmployeeControllerTest.java index bbab38890..adf97be38 100644 --- a/core/src/test/java/greencity/controller/ManagementEmployeeControllerTest.java +++ b/core/src/test/java/greencity/controller/ManagementEmployeeControllerTest.java @@ -55,6 +55,7 @@ class ManagementEmployeeControllerTest { private final String UPDATE_LINK = "/update-employee"; private final String FIND_ALL_LINK = "/getAll-employees"; private final String DELETE_LINK = "/deactivate-employee"; + private final String ACTIVATE_LINK = "/activate-employee"; private final String GET_ALL_POSITIONS_LINK = "/get-all-positions"; private final String DELETE_IMAGE_LINK = "/delete-employee-image/"; private final String GET_ALL_TARIFFS = "/getTariffs"; @@ -161,6 +162,15 @@ void deleteEmployeeTest() throws Exception { verify(service, times(1)).deactivateEmployee(1L); } + @Test + void activateEmployeeTest() throws Exception { + doNothing().when(service).activateEmployee(1L); + + mockMvc.perform(put(UBS_LINK + ACTIVATE_LINK + "/" + 1) + .principal(principal)).andExpect(status().isOk()); + verify(service, times(1)).activateEmployee(1L); + } + @Test void deleteEmployeeImage() throws Exception { mockMvc.perform(delete(UBS_LINK + DELETE_IMAGE_LINK + 1) diff --git a/service-api/src/main/java/greencity/client/UserRemoteClient.java b/service-api/src/main/java/greencity/client/UserRemoteClient.java index cbdd6fcc7..01ac5cd5d 100644 --- a/service-api/src/main/java/greencity/client/UserRemoteClient.java +++ b/service-api/src/main/java/greencity/client/UserRemoteClient.java @@ -166,4 +166,12 @@ public interface UserRemoteClient { */ @PutMapping("/user/deactivate-employee") void deactivateEmployee(@RequestParam String uuid); + + /** + * Activate employee by uuid. + * + * @param uuid - uuid of employee. + */ + @PutMapping("/user/markUserAsActivated") + void activateEmployee(@RequestParam String uuid); } diff --git a/service-api/src/main/java/greencity/client/config/UserRemoteClientFallbackFactory.java b/service-api/src/main/java/greencity/client/config/UserRemoteClientFallbackFactory.java index 47afebe24..41691c2da 100644 --- a/service-api/src/main/java/greencity/client/config/UserRemoteClientFallbackFactory.java +++ b/service-api/src/main/java/greencity/client/config/UserRemoteClientFallbackFactory.java @@ -111,6 +111,13 @@ public void deactivateEmployee(String uuid) { throw new RemoteServerUnavailableException(ErrorMessage.EMPLOYEE_WITH_CURRENT_UUID_WAS_NOT_DEACTIVATED, throwable); } + + @Override + public void activateEmployee(String uuid) { + log.error(String.format(ErrorMessage.EMPLOYEE_WITH_CURRENT_UUID_WAS_NOT_ACTIVATED, uuid)); + throw new RemoteServerUnavailableException( + String.format(ErrorMessage.EMPLOYEE_WITH_CURRENT_UUID_WAS_NOT_ACTIVATED, uuid)); + } }; } } diff --git a/service-api/src/main/java/greencity/constant/ErrorMessage.java b/service-api/src/main/java/greencity/constant/ErrorMessage.java index 5793d2a82..125894abd 100644 --- a/service-api/src/main/java/greencity/constant/ErrorMessage.java +++ b/service-api/src/main/java/greencity/constant/ErrorMessage.java @@ -137,6 +137,8 @@ public final class ErrorMessage { public static final String MIN_MAX_VALUE_RESTRICTION = "Min and Max fields must have different values"; public static final String EMPLOYEE_WITH_CURRENT_UUID_WAS_NOT_DEACTIVATED = "Employee with current uuid was not " + "deactivated."; + public static final String EMPLOYEE_WITH_CURRENT_UUID_WAS_NOT_ACTIVATED = "Employee with uuid: %s was not " + + "activated."; public static final String BAG_FOR_TARIFF_NOT_EXIST = "Could not find bag with id %d for tariff with id %d"; public static final String TARIFF_ALREADY_HAS_THIS_STATUS = "Tariff with id %d already has status: %s"; public static final String TARIFF_ACTIVATION_RESTRICTION_DUE_TO_UNSPECIFIED_LIMITS = diff --git a/service-api/src/main/java/greencity/service/ubs/UBSManagementEmployeeService.java b/service-api/src/main/java/greencity/service/ubs/UBSManagementEmployeeService.java index f2c792c80..dc9db3837 100644 --- a/service-api/src/main/java/greencity/service/ubs/UBSManagementEmployeeService.java +++ b/service-api/src/main/java/greencity/service/ubs/UBSManagementEmployeeService.java @@ -51,13 +51,21 @@ public interface UBSManagementEmployeeService { PositionDto update(PositionDto dto); /** - * Method deletes employee from database by id. + * Method deletes employee by id. * * @param id {@link Long} * @author Mykola Danylko */ void deactivateEmployee(Long id); + /** + * Method activate employee by id. + * + * @param id {@link Long} + * @author Oksana Spodaryk + */ + void activateEmployee(Long id); + /** * Method creates new employee position. * diff --git a/service-api/src/test/java/greencity/client/config/UserRemoteClientFallbackFactoryTest.java b/service-api/src/test/java/greencity/client/config/UserRemoteClientFallbackFactoryTest.java index b059fab3f..93f1563b7 100644 --- a/service-api/src/test/java/greencity/client/config/UserRemoteClientFallbackFactoryTest.java +++ b/service-api/src/test/java/greencity/client/config/UserRemoteClientFallbackFactoryTest.java @@ -121,4 +121,10 @@ void deactivateEmployee() { String uuid = "87df9ad5-6393-441f-8423-8b2e770b01a8"; assertThrows(RemoteServerUnavailableException.class, () -> client.deactivateEmployee(uuid)); } + + @Test + void activateEmployee() { + String uuid = "87df9ad5-6393-441f-8423-8b2e770b01a8"; + assertThrows(RemoteServerUnavailableException.class, () -> client.activateEmployee(uuid)); + } } \ No newline at end of file diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java index a637cc54a..10368c656 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java @@ -283,7 +283,26 @@ public void deactivateEmployee(Long id) { try { userRemoteClient.deactivateEmployee(employee.getUuid()); } catch (HystrixRuntimeException e) { - throw new BadRequestException("Employee with current uuid doesn't exist: " + employee.getUuid()); + throw new BadRequestException(ErrorMessage.EMPLOYEE_WITH_UUID_NOT_FOUND + employee.getUuid()); + } + employeeRepository.save(employee); + } + } + + /** + * {@inheritDoc} + */ + @Override + @Transactional + public void activateEmployee(Long id) { + Employee employee = employeeRepository.findById(id) + .orElseThrow(() -> new NotFoundException(ErrorMessage.EMPLOYEE_NOT_FOUND + id)); + if (employee.getEmployeeStatus() == EmployeeStatus.INACTIVE) { + employee.setEmployeeStatus(EmployeeStatus.ACTIVE); + try { + userRemoteClient.activateEmployee(employee.getUuid()); + } catch (HystrixRuntimeException e) { + throw new BadRequestException(ErrorMessage.EMPLOYEE_WITH_UUID_NOT_FOUND + employee.getUuid()); } employeeRepository.save(employee); } diff --git a/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java index c538ea98a..3a18a46ec 100644 --- a/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java @@ -310,6 +310,40 @@ void deactivateEmployeeTest() { assertEquals(thrown.getMessage(), ErrorMessage.EMPLOYEE_NOT_FOUND + 2L); } + @Test + void activateEmployeeTestNotFound() { + Employee employee = getEmployee(); + employee.setEmployeeStatus(EmployeeStatus.INACTIVE); + employee.setImagePath("Pass"); + when(repository.findById(1L)).thenReturn(Optional.of(employee)); + employeeService.activateEmployee(1L); + verify(repository).findById(1L); + assertEquals(EmployeeStatus.ACTIVE, employee.getEmployeeStatus()); + Exception thrown = assertThrows(NotFoundException.class, + () -> employeeService.deactivateEmployee(2L)); + assertEquals(thrown.getMessage(), ErrorMessage.EMPLOYEE_NOT_FOUND + 2L); + } + + @Test + void activateEmployeeActiveTest() { + Employee employee = getEmployee(); + employee.setImagePath("Pass"); + employee.setEmployeeStatus(EmployeeStatus.ACTIVE); + when(repository.findById(1L)).thenReturn(Optional.of(employee)); + employeeService.activateEmployee(employee.getId()); + assertEquals(EmployeeStatus.ACTIVE, employee.getEmployeeStatus()); + } + + @Test + void activateEmployeeTest() { + Employee employee = getEmployee(); + employee.setImagePath("Pass"); + employee.setEmployeeStatus(EmployeeStatus.INACTIVE); + when(repository.findById(1L)).thenReturn(Optional.of(employee)); + employeeService.activateEmployee(employee.getId()); + assertEquals(EmployeeStatus.ACTIVE, employee.getEmployeeStatus()); + } + @Test void deactivateEmployeeInactiveTest() { Employee employee = getEmployee(); @@ -331,6 +365,20 @@ void deactivateEmployeeHystrixRuntimeExceptionTest() { verify(repository).findById(1L); } + @Test + void activateEmployeeHystrixRuntimeExceptionTest() { + Employee employee = getEmployee(); + employee.setEmployeeStatus(EmployeeStatus.INACTIVE); + long employeeId = employee.getId(); + employee.setImagePath("Pass"); + when(repository.findById(1L)).thenReturn(Optional.of(employee)); + + doThrow(HystrixRuntimeException.class).when(userRemoteClient).activateEmployee("Test"); + assertThrows(BadRequestException.class, () -> employeeService.activateEmployee(employeeId)); + + verify(repository).findById(1L); + } + @Test void createPositionTest() { AddingPositionDto addingPositionDto = AddingPositionDto.builder().name("Водій").build(); From 3b6e9f9ef24d3269655a45535bc8400ccb8a69b5 Mon Sep 17 00:00:00 2001 From: Anton Bondar <53192419+ABbondar@users.noreply.github.com> Date: Mon, 28 Aug 2023 11:25:26 +0300 Subject: [PATCH 55/80] [UBS User] The user can't make changes in user profile #6152 (#1225) * addresses * imports * code smells * address status --- .../constant/ValidationConstant.java | 5 + .../dto/CreateAddressRequestDto.java | 9 +- .../greencity/dto/address/AddressDto.java | 19 +++- .../dto/order/OrderAddressDtoRequest.java | 28 +++++- .../dto/CreateAddressRequestDtoTest.java | 92 +++++++++++++++++++ .../{courier => }/address/AddressDtoTest.java | 51 +++++----- .../EmployeeWithTariffsIdDtoTest.java | 4 +- .../dto/order/OrderAddressDtoRequestTest.java | 92 +++++++++++++++++++ .../tariff/AddNewTariffDtoTest.java | 3 +- .../service/ubs/UBSClientServiceImpl.java | 7 +- .../src/test/java/greencity/ModelUtils.java | 45 +++++++++ .../service/ubs/UBSClientServiceImplTest.java | 34 +++++-- 12 files changed, 338 insertions(+), 51 deletions(-) create mode 100644 service-api/src/test/java/greencity/dto/CreateAddressRequestDtoTest.java rename service-api/src/test/java/greencity/dto/{courier => }/address/AddressDtoTest.java (53%) rename service-api/src/test/java/greencity/dto/{courier => }/employee/EmployeeWithTariffsIdDtoTest.java (96%) create mode 100644 service-api/src/test/java/greencity/dto/order/OrderAddressDtoRequestTest.java rename service-api/src/test/java/greencity/dto/{courier => }/tariff/AddNewTariffDtoTest.java (97%) diff --git a/service-api/src/main/java/greencity/constant/ValidationConstant.java b/service-api/src/main/java/greencity/constant/ValidationConstant.java index 3e9d52c78..426952546 100644 --- a/service-api/src/main/java/greencity/constant/ValidationConstant.java +++ b/service-api/src/main/java/greencity/constant/ValidationConstant.java @@ -20,6 +20,11 @@ public class ValidationConstant { public static final String NAME_REGEXP = "^(?!\\.)(?!.*\\.$)(?!.*?\\.\\.)(?!.*?\\-\\-)(?!.*?\\'\\')(?!\\s*$)" + "[-'ʼ ґҐіІєЄїЇА-Яа-я+\\w.]{1,30}$"; + public static final String STREET_REGEXP = "^(?![0-9]+$)[-A-Za-zА-Яа-яЇїІіЄєҐґ .,ʼ'`ʹ0-9-]*$"; + public static final String STREET_VALIDATION_MESSAGE = + "Use only English, or Ukrainian letters. Both English or Ukrainian letters valid, " + + "for cases, when user inputs street address by yourself instead of using Google Api, " + + "in that cases sets the same value for both localizations."; /** * Constructor. diff --git a/service-api/src/main/java/greencity/dto/CreateAddressRequestDto.java b/service-api/src/main/java/greencity/dto/CreateAddressRequestDto.java index bc67fb868..fc1bbff9d 100644 --- a/service-api/src/main/java/greencity/dto/CreateAddressRequestDto.java +++ b/service-api/src/main/java/greencity/dto/CreateAddressRequestDto.java @@ -11,6 +11,9 @@ import javax.validation.constraints.NotEmpty; import javax.validation.constraints.Pattern; +import static greencity.constant.ValidationConstant.STREET_REGEXP; +import static greencity.constant.ValidationConstant.STREET_VALIDATION_MESSAGE; + @Getter @AllArgsConstructor @NoArgsConstructor @@ -19,7 +22,7 @@ @Builder public class CreateAddressRequestDto { // CHECKSTYLE:OFF - private static final String validationMessage = "Use only English,or Ukrainian letter"; + private static final String validationMessage = "Use only English, or Ukrainian letter"; private static final String notEmptyValidationMessage = "Name must not be empty"; private static final String houseNumberNotValid = "House number is invalid"; @@ -63,11 +66,11 @@ public class CreateAddressRequestDto { @NotEmpty(message = notEmptyValidationMessage) private String cityEn; - @Pattern(regexp = "[-A-Za-zА-Яа-яЇїІіЄєҐґ .,ʼ'`ʹ]*", message = validationMessage) + @Pattern(regexp = STREET_REGEXP, message = STREET_VALIDATION_MESSAGE) @NotEmpty(message = notEmptyValidationMessage) private String street; - @Pattern(regexp = "[-A-Za-zА-Яа-яЇїІіЄєҐґ .,ʼ'`ʹ]*", message = validationMessage) + @Pattern(regexp = STREET_REGEXP, message = STREET_VALIDATION_MESSAGE) @NotEmpty(message = notEmptyValidationMessage) private String streetEn; } diff --git a/service-api/src/main/java/greencity/dto/address/AddressDto.java b/service-api/src/main/java/greencity/dto/address/AddressDto.java index 72863ca1c..d369bcb7d 100644 --- a/service-api/src/main/java/greencity/dto/address/AddressDto.java +++ b/service-api/src/main/java/greencity/dto/address/AddressDto.java @@ -5,7 +5,6 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; - import lombok.NoArgsConstructor; import org.hibernate.validator.constraints.Length; @@ -20,6 +19,8 @@ import static greencity.constant.ValidationConstant.CH_UA; import static greencity.constant.ValidationConstant.CITY_EN_REGEXP; import static greencity.constant.ValidationConstant.CITY_UK_REGEXP; +import static greencity.constant.ValidationConstant.STREET_REGEXP; +import static greencity.constant.ValidationConstant.STREET_VALIDATION_MESSAGE; @Builder @Data @@ -29,25 +30,32 @@ public class AddressDto implements Serializable { @NotNull @Min(1) private Long id; + @Length(max = 30) @Pattern(regexp = CITY_UK_REGEXP) private String city; + @Length(max = 30) @Pattern(regexp = CH_UA + "{1,30}") private String district; + @Length(max = 30) @Pattern(regexp = CH_UA + "{1,30}") private String region; + @Length(max = 4) @Pattern(regexp = CH_NUM + "{1,4}") private String entranceNumber; + @Length(max = 5) @Pattern(regexp = CH_NUM + "{1,5}") private String houseCorpus; + @Pattern(regexp = CH_NUM + "{1,10}") private String houseNumber; + @Length(max = 50) - @Pattern(regexp = CH_UA + "{1,50}") + @Pattern(regexp = STREET_REGEXP, message = STREET_VALIDATION_MESSAGE) private String street; @Length(max = 255) @@ -56,19 +64,24 @@ public class AddressDto implements Serializable { private Coordinates coordinates; private Boolean actual; + @Length(max = 30) @Pattern(regexp = CITY_EN_REGEXP) private String cityEn; + @Length(max = 30) @Pattern(regexp = CH_EN + "{1,30}") private String regionEn; + @Length(max = 50) - @Pattern(regexp = CH_EN + "{1,50}") + @Pattern(regexp = STREET_REGEXP, message = STREET_VALIDATION_MESSAGE) private String streetEn; + @Length(max = 30) @Pattern(regexp = CH_EN + "{1,30}") private String districtEn; private String placeId; + private List addressRegionDistrictList; } \ No newline at end of file diff --git a/service-api/src/main/java/greencity/dto/order/OrderAddressDtoRequest.java b/service-api/src/main/java/greencity/dto/order/OrderAddressDtoRequest.java index 04204c294..41d8dc36d 100644 --- a/service-api/src/main/java/greencity/dto/order/OrderAddressDtoRequest.java +++ b/service-api/src/main/java/greencity/dto/order/OrderAddressDtoRequest.java @@ -1,15 +1,21 @@ package greencity.dto.order; import greencity.entity.coords.Coordinates; -import lombok.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; import org.hibernate.validator.constraints.Length; import javax.validation.constraints.Max; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Pattern; -import static greencity.constant.ValidationConstant.CH_EN; -import static greencity.constant.ValidationConstant.CH_UA; +import static greencity.constant.ValidationConstant.STREET_REGEXP; +import static greencity.constant.ValidationConstant.STREET_VALIDATION_MESSAGE; @Getter @Setter @@ -21,29 +27,36 @@ public class OrderAddressDtoRequest { @Max(1000000) private Long id; + @NotBlank @Length(max = 30) @Pattern(regexp = "[ЁёІіЇїҐґЄєА-Яа-яA-Za-z-\\s'.]{3,30}") private String region; + @NotBlank @Length(max = 30) @Pattern(regexp = "[ЁёІіЇїҐґЄєА-Яа-яA-Za-z-\\s'.]{3,30}") private String city; + @NotBlank @Length(max = 30) @Pattern(regexp = "[ЁёІіЇїҐґЄєА-Яа-яA-Za-z-\\s'.]{3,30}") private String district; + @Length(max = 4) @Pattern(regexp = "[ЁёІіЇїҐґЄєА-Яа-яA-Z0-9a-z-.]{0,2}") private String entranceNumber; + @Length(max = 5) @Pattern(regexp = "[ЁёІіЇїҐґЄєА-Яа-яA-Z0-9a-z-.]{0,5}") private String houseCorpus; + @Length(max = 10) @Pattern(regexp = "[-A-Za-zА-Яа-яЁёЇїІіЄєҐґ0-9.,ʼ'`ʹ—/\"\\s]" + "{1,10}") private String houseNumber; + @Length(max = 50) - @Pattern(regexp = CH_UA + "{3,40}") + @Pattern(regexp = STREET_REGEXP, message = STREET_VALIDATION_MESSAGE) private String street; @Length(max = 255) @@ -54,17 +67,22 @@ public class OrderAddressDtoRequest { private Coordinates coordinates; private Boolean actual; + @Length(max = 30) @Pattern(regexp = "[a-zA-Z-\\s'.]{3,30}") private String cityEn; + @Length(max = 30) @Pattern(regexp = "[a-zA-Z-\\s'.]{3,30}") private String regionEn; + @Length(max = 50) - @Pattern(regexp = CH_EN + "{3,40}") + @Pattern(regexp = STREET_REGEXP, message = STREET_VALIDATION_MESSAGE) private String streetEn; + @Length(max = 30) @Pattern(regexp = "[a-zA-Z-\\s'.]{3,30}") private String districtEn; + private String placeId; } diff --git a/service-api/src/test/java/greencity/dto/CreateAddressRequestDtoTest.java b/service-api/src/test/java/greencity/dto/CreateAddressRequestDtoTest.java new file mode 100644 index 000000000..570192c6d --- /dev/null +++ b/service-api/src/test/java/greencity/dto/CreateAddressRequestDtoTest.java @@ -0,0 +1,92 @@ +package greencity.dto; + +import lombok.SneakyThrows; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +import javax.validation.ConstraintViolation; +import javax.validation.Validation; +import javax.validation.Validator; +import javax.validation.ValidatorFactory; +import java.util.Set; +import java.util.stream.Stream; + +import static org.assertj.core.api.Assertions.assertThat; + +class CreateAddressRequestDtoTest { + + @SneakyThrows + @ParameterizedTest + @MethodSource("provideFieldsAndValidValues") + void validFieldsInAddressDtoTest(String street) { + var dto = CreateAddressRequestDto.builder() + .region("region") + .regionEn("regionEn") + .district("district") + .districtEn("districtEn") + .houseNumber("1") + .city("city") + .cityEn("cityEn") + .street(street) + .streetEn(street) + .build(); + + ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); + final Validator validator = factory.getValidator(); + + Set> constraintViolations = + validator.validate(dto); + + assertThat(constraintViolations).isEmpty(); + } + + @SneakyThrows + @ParameterizedTest + @MethodSource("provideFieldsAndInvalidValues") + void invalidFieldsInAddressDtoTest(String street) { + var dto = CreateAddressRequestDto.builder() + .region("region") + .regionEn("regionEn") + .district("district") + .districtEn("districtEn") + .houseNumber("1") + .city("city") + .cityEn("cityEn") + .street(street) + .streetEn(street) + .build(); + + ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); + final Validator validator = factory.getValidator(); + + Set> constraintViolations = + validator.validate(dto); + + assertThat(constraintViolations).hasSize(2); + } + + private static Stream provideFieldsAndValidValues() { + return Stream.of( + Arguments.of("Shevchenka"), + Arguments.of("Шевченка"), + Arguments.of("Shevchenka-Khreschatyk"), + Arguments.of("Шевченка-Хрещатик"), + Arguments.of("Street-Вулиця"), + Arguments.of("Sviatoshins'ka"), + Arguments.of("Святошиньска"), + Arguments.of("Незалежності"), + Arguments.of("їҐґЄє"), + Arguments.of("1-ho Travnya"), + Arguments.of("Protasiv Yar"), + Arguments.of("Протасів Яр")); + } + + private static Stream provideFieldsAndInvalidValues() { + return Stream.of( + Arguments.of("Shevchenka+1"), + Arguments.of("~Шевченка"), + Arguments.of("123"), + Arguments.of("!Хрещатик2")); + } +} diff --git a/service-api/src/test/java/greencity/dto/courier/address/AddressDtoTest.java b/service-api/src/test/java/greencity/dto/address/AddressDtoTest.java similarity index 53% rename from service-api/src/test/java/greencity/dto/courier/address/AddressDtoTest.java rename to service-api/src/test/java/greencity/dto/address/AddressDtoTest.java index 9648e8432..034e3e3ea 100644 --- a/service-api/src/test/java/greencity/dto/courier/address/AddressDtoTest.java +++ b/service-api/src/test/java/greencity/dto/address/AddressDtoTest.java @@ -1,6 +1,5 @@ -package greencity.dto.courier.address; +package greencity.dto.address; -import greencity.dto.address.AddressDto; import lombok.SneakyThrows; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; @@ -20,11 +19,13 @@ class AddressDtoTest { @SneakyThrows @ParameterizedTest @MethodSource("provideFieldsAndValidValues") - void validFieldsInAddressDtoTest(String houseNumber, String cityEn) { + void validFieldsInAddressDtoTest(String houseNumber, String cityEn, String street) { var dto = AddressDto.builder() .id(1L) .houseNumber(houseNumber) .cityEn(cityEn) + .street(street) + .streetEn(street) .build(); ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); @@ -39,11 +40,13 @@ void validFieldsInAddressDtoTest(String houseNumber, String cityEn) { @SneakyThrows @ParameterizedTest @MethodSource("provideFieldsAndInvalidValues") - void invalidFieldsInAddressDtoTest(String houseNumber, String cityEn) { + void invalidFieldsInAddressDtoTest(String houseNumber, String cityEn, String street) { var dto = AddressDto.builder() .id(1L) .houseNumber(houseNumber) .cityEn(cityEn) + .street(street) + .streetEn(street) .build(); ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); @@ -52,33 +55,33 @@ void invalidFieldsInAddressDtoTest(String houseNumber, String cityEn) { Set> constraintViolations = validator.validate(dto); - assertThat(constraintViolations).hasSize(2); + assertThat(constraintViolations).hasSize(4); } private static Stream provideFieldsAndValidValues() { return Stream.of( - Arguments.of("1", "Kharkiv"), - Arguments.of("1F", "Kyiv"), - Arguments.of("1B", "Pryp'yat'"), - Arguments.of("1Ї", "Kam'yanets Podilskyi"), - Arguments.of("1-А", "Korsun Shevchenkivskiy"), - Arguments.of("1.Б", "Bila Krynytsya"), - Arguments.of("1 G", "Kam'yanets Podilskyi"), - Arguments.of("ЁёІіЇ", "Bilgorod-Dnistrovskyi"), - Arguments.of("їҐґЄє", "Blagovishchens'k"), - Arguments.of("1/3", "Ternopil'"), - Arguments.of("35/34", "Vinnitsa"), - Arguments.of("35-/34", "Vilnohirs'k"), - Arguments.of("35-/ 34", "Rivne"), - Arguments.of("35-/\"34", "Pereyaslav"), - Arguments.of("14\"o\"", "Zytomyr")); + Arguments.of("1", "Kharkiv", "Shevchenka"), + Arguments.of("1F", "Kyiv", "Шевченка"), + Arguments.of("1B", "Pryp'yat'", "Khreschatyk"), + Arguments.of("1Ї", "Kam'yanets Podilskyi", "Хрещатик"), + Arguments.of("1-А", "Korsun Shevchenkivskiy", "Shevchenka-Khreschatyk"), + Arguments.of("1.Б", "Bila Krynytsya", "Шевченка-Хрещатик"), + Arguments.of("1 G", "Kam'yanets Podilskyi", "Street"), + Arguments.of("ЁёІіЇ", "Bilgorod-Dnistrovskyi", "Вулиця"), + Arguments.of("їҐґЄє", "Blagovishchens'k", "Street-Вулиця"), + Arguments.of("1/3", "Ternopil'", "Sviatoshins'ka"), + Arguments.of("35/34", "Vinnitsa", "Святошиньска"), + Arguments.of("35-/34", "Vilnohirs'k", "Незалежності"), + Arguments.of("35-/ 34", "Rivne", "1-ho Travnya"), + Arguments.of("35-/\"34", "Pereyaslav", "Protasiv Yar"), + Arguments.of("14\"o\"", "Zytomyr", "Протасів Яр")); } private static Stream provideFieldsAndInvalidValues() { return Stream.of( - Arguments.of("", "0Kharkiv"), - Arguments.of("@#$", "kyiv"), - Arguments.of("Testtttttttt", " kharkiv"), - Arguments.of("Тесттттттттт", "-Rivne")); + Arguments.of("", "0Kharkiv", "Shevchenka+1"), + Arguments.of("@#$", "kyiv", "~Шевченка"), + Arguments.of("Testtttttttt", " kharkiv", "+шевченка"), + Arguments.of("Тесттттттттт", "-Rivne", "1234")); } } diff --git a/service-api/src/test/java/greencity/dto/courier/employee/EmployeeWithTariffsIdDtoTest.java b/service-api/src/test/java/greencity/dto/employee/EmployeeWithTariffsIdDtoTest.java similarity index 96% rename from service-api/src/test/java/greencity/dto/courier/employee/EmployeeWithTariffsIdDtoTest.java rename to service-api/src/test/java/greencity/dto/employee/EmployeeWithTariffsIdDtoTest.java index 0f5db2f40..1ecd3d287 100644 --- a/service-api/src/test/java/greencity/dto/courier/employee/EmployeeWithTariffsIdDtoTest.java +++ b/service-api/src/test/java/greencity/dto/employee/EmployeeWithTariffsIdDtoTest.java @@ -1,8 +1,6 @@ -package greencity.dto.courier.employee; +package greencity.dto.employee; import greencity.ModelUtils; -import greencity.dto.employee.EmployeeDto; -import greencity.dto.employee.EmployeeWithTariffsIdDto; import lombok.SneakyThrows; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; diff --git a/service-api/src/test/java/greencity/dto/order/OrderAddressDtoRequestTest.java b/service-api/src/test/java/greencity/dto/order/OrderAddressDtoRequestTest.java new file mode 100644 index 000000000..0cd9b65ed --- /dev/null +++ b/service-api/src/test/java/greencity/dto/order/OrderAddressDtoRequestTest.java @@ -0,0 +1,92 @@ +package greencity.dto.order; + +import lombok.SneakyThrows; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +import javax.validation.ConstraintViolation; +import javax.validation.Validation; +import javax.validation.Validator; +import javax.validation.ValidatorFactory; +import java.util.Set; +import java.util.stream.Stream; + +import static org.assertj.core.api.Assertions.assertThat; + +class OrderAddressDtoRequestTest { + + @SneakyThrows + @ParameterizedTest + @MethodSource("provideFieldsAndValidValues") + void validFieldsInAddressDtoTest(String street) { + var dto = OrderAddressDtoRequest.builder() + .region("region") + .regionEn("regionEn") + .district("district") + .districtEn("districtEn") + .houseNumber("1") + .city("city") + .cityEn("cityEn") + .street(street) + .streetEn(street) + .build(); + + ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); + final Validator validator = factory.getValidator(); + + Set> constraintViolations = + validator.validate(dto); + + assertThat(constraintViolations).isEmpty(); + } + + @SneakyThrows + @ParameterizedTest + @MethodSource("provideFieldsAndInvalidValues") + void invalidFieldsInAddressDtoTest(String street) { + var dto = OrderAddressDtoRequest.builder() + .region("region") + .regionEn("regionEn") + .district("district") + .districtEn("districtEn") + .houseNumber("1") + .city("city") + .cityEn("cityEn") + .street(street) + .streetEn(street) + .build(); + + ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); + final Validator validator = factory.getValidator(); + + Set> constraintViolations = + validator.validate(dto); + + assertThat(constraintViolations).hasSize(2); + } + + private static Stream provideFieldsAndValidValues() { + return Stream.of( + Arguments.of("Shevchenka"), + Arguments.of("Шевченка"), + Arguments.of("Shevchenka-Khreschatyk"), + Arguments.of("Шевченка-Хрещатик"), + Arguments.of("Street-Вулиця"), + Arguments.of("Sviatoshins'ka"), + Arguments.of("Святошиньска"), + Arguments.of("Незалежності"), + Arguments.of("їҐґЄє"), + Arguments.of("1-ho Travnya"), + Arguments.of("Protasiv Yar"), + Arguments.of("Протасів Яр")); + } + + private static Stream provideFieldsAndInvalidValues() { + return Stream.of( + Arguments.of("Shevchenka+1"), + Arguments.of("~Шевченка"), + Arguments.of("123"), + Arguments.of("!Хрещатик2")); + } +} diff --git a/service-api/src/test/java/greencity/dto/courier/tariff/AddNewTariffDtoTest.java b/service-api/src/test/java/greencity/dto/tariff/AddNewTariffDtoTest.java similarity index 97% rename from service-api/src/test/java/greencity/dto/courier/tariff/AddNewTariffDtoTest.java rename to service-api/src/test/java/greencity/dto/tariff/AddNewTariffDtoTest.java index 3a77092f7..669f194da 100644 --- a/service-api/src/test/java/greencity/dto/courier/tariff/AddNewTariffDtoTest.java +++ b/service-api/src/test/java/greencity/dto/tariff/AddNewTariffDtoTest.java @@ -1,4 +1,4 @@ -package greencity.dto.courier.tariff; +package greencity.dto.tariff; import greencity.ModelUtils; import greencity.dto.AddNewTariffDto; @@ -12,7 +12,6 @@ import javax.validation.Validation; import javax.validation.Validator; import javax.validation.ValidatorFactory; -import java.util.Collections; import java.util.List; import java.util.Set; import java.util.stream.Stream; diff --git a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java index eb4a358cb..4079ea044 100644 --- a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java @@ -609,8 +609,10 @@ public OrderWithAddressesResponseDto updateCurrentAddressForOrder(OrderAddressDt List
addresses = addressRepo.findAllNonDeletedAddressesByUserId(currentUser.getId()); if (addressRequestDto.getPlaceId() == null) { - address.setAddressComment(addressRequestDto.getAddressComment()); - addressRepo.save(address); + Address addressWithNullPlaceId = modelMapper.map(addressRequestDto, Address.class); + addressWithNullPlaceId.setUser(currentUser); + addressWithNullPlaceId.setAddressStatus(address.getAddressStatus()); + addressRepo.save(addressWithNullPlaceId); return findAllAddressesForCurrentOrder(uuid); } @@ -1357,7 +1359,6 @@ public UserProfileUpdateDto updateProfileData(String uuid, UserProfileUpdateDto setTelegramAndViberBots(user, userProfileUpdateDto.getTelegramIsNotify(), userProfileUpdateDto.getViberIsNotify()); userProfileUpdateDto.getAddressDto().stream() - .filter(addressDto -> addressDto.getPlaceId() != null) .map(a -> modelMapper.map(a, OrderAddressDtoRequest.class)) .forEach(addressRequestDto -> updateCurrentAddressForOrder(addressRequestDto, uuid)); User savedUser = userRepository.save(user); diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index be8b5de8b..3106a2146 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -1505,6 +1505,32 @@ public static List addressDtoList() { return list; } + public static List addressDtoListWithNullPlaceId() { + List list = new ArrayList<>(); + list.add(AddressDto.builder() + .id(1L) + .entranceNumber("7a") + .houseCorpus("2") + .houseNumber("7") + .street("Gorodotska") + .coordinates(Coordinates.builder().latitude(2.3).longitude(5.6).build()) + .district("Zaliznuchnuy") + .city("Lviv") + .actual(false) + .build()); + list.add(AddressDto.builder().id(2L) + .entranceNumber("9a") + .houseCorpus("2") + .houseNumber("7") + .street("Shevchenka") + .coordinates(Coordinates.builder().latitude(3.3).longitude(6.6).build()) + .district("Zaliznuchnuy") + .city("Lviv") + .actual(false) + .build()); + return list; + } + public static UserProfileDto userProfileDto() { return UserProfileDto.builder() .recipientName("Dima") @@ -4703,6 +4729,25 @@ public static OrderAddressDtoRequest getTestOrderAddressDtoRequest() { .build(); } + public static OrderAddressDtoRequest getTestOrderAddressDtoRequestWithNullPlaceId() { + return OrderAddressDtoRequest.builder() + .id(0L) + .region("fake region") + .searchAddress("fake street name, 13, fake street, 02000") + .city("fake street") + .district("Район") + .districtEn("District") + .entranceNumber("1") + .houseNumber("13") + .houseCorpus("1") + .street("fake street name") + .streetEn("fake street name") + .coordinates(new Coordinates(50.5555555d, 50.5555555d)) + .cityEn("fake street") + .regionEn("fake region") + .build(); + } + public static OrderAddressDtoRequest getTestOrderAddressLocationDto() { return getTestOrderAddressLocationDto(true); } diff --git a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java index 7dc225a97..84d7270b3 100644 --- a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java @@ -8,7 +8,6 @@ import greencity.dto.OrderCourierPopUpDto; import greencity.dto.TariffsForLocationDto; import greencity.dto.address.AddressDto; - import greencity.dto.bag.BagDto; import greencity.dto.bag.BagForUserDto; import greencity.dto.bag.BagOrderDto; @@ -43,7 +42,15 @@ import greencity.dto.user.UserProfileDto; import greencity.dto.user.UserProfileUpdateDto; import greencity.entity.coords.Coordinates; -import greencity.entity.order.*; +import greencity.entity.order.Bag; +import greencity.entity.order.Certificate; +import greencity.entity.order.Event; +import greencity.entity.order.Order; +import greencity.entity.order.OrderBag; +import greencity.entity.order.OrderPaymentStatusTranslation; +import greencity.entity.order.OrderStatusTranslation; +import greencity.entity.order.Payment; +import greencity.entity.order.TariffsInfo; import greencity.entity.telegram.TelegramBot; import greencity.entity.user.User; import greencity.entity.user.employee.Employee; @@ -121,12 +128,12 @@ import static greencity.ModelUtils.KYIV_REGION_EN; import static greencity.ModelUtils.KYIV_REGION_UA; import static greencity.ModelUtils.TEST_BAG_FOR_USER_DTO; -import static greencity.ModelUtils.TEST_BAG_LIST; import static greencity.ModelUtils.TEST_EMAIL; import static greencity.ModelUtils.TEST_ORDER_ADDRESS_DTO_REQUEST; import static greencity.ModelUtils.TEST_PAYMENT_LIST; import static greencity.ModelUtils.addressDto; import static greencity.ModelUtils.addressDtoList; +import static greencity.ModelUtils.addressDtoListWithNullPlaceId; import static greencity.ModelUtils.addressList; import static greencity.ModelUtils.addressWithEmptyPlaceIdDto; import static greencity.ModelUtils.addressWithKyivRegionDto; @@ -137,6 +144,7 @@ import static greencity.ModelUtils.getAddressDtoResponse; import static greencity.ModelUtils.getAddressRequestDto; import static greencity.ModelUtils.getAddressRequestToSaveDto; +import static greencity.ModelUtils.getAddressRequestToSaveDto_WithoutDistricts; import static greencity.ModelUtils.getAddressRequestWithEmptyPlaceIdDto; import static greencity.ModelUtils.getAddressRequestWithEmptyPlaceIdToSaveDto; import static greencity.ModelUtils.getAddressWithKyivRegionRequestDto; @@ -149,7 +157,6 @@ import static greencity.ModelUtils.getCancellationDto; import static greencity.ModelUtils.getCertificate; import static greencity.ModelUtils.getCourier; -import static greencity.ModelUtils.getAddressRequestToSaveDto_WithoutDistricts; import static greencity.ModelUtils.getCourierDto; import static greencity.ModelUtils.getCourierDtoList; import static greencity.ModelUtils.getEmployee; @@ -188,6 +195,7 @@ import static greencity.ModelUtils.getTariffsInfo; import static greencity.ModelUtils.getTelegramBotNotifyTrue; import static greencity.ModelUtils.getTestOrderAddressDtoRequest; +import static greencity.ModelUtils.getTestOrderAddressDtoRequestWithNullPlaceId; import static greencity.ModelUtils.getTestOrderAddressLocationDto; import static greencity.ModelUtils.getTestUser; import static greencity.ModelUtils.getUBSuser; @@ -204,7 +212,6 @@ import static greencity.ModelUtils.getUserWithBotNotifyTrue; import static greencity.ModelUtils.getUserWithLastLocation; import static greencity.ModelUtils.getViberBotNotifyTrue; - import static greencity.constant.ErrorMessage.ACTUAL_ADDRESS_NOT_FOUND; import static greencity.constant.ErrorMessage.ADDRESS_ALREADY_EXISTS; import static greencity.constant.ErrorMessage.CANNOT_ACCESS_PERSONAL_INFO; @@ -1822,14 +1829,22 @@ void updateProfileDataWhenAddressPlaceIdIsNull() { User user = getUserWithBotNotifyTrue(); TelegramBot telegramBot = getTelegramBotNotifyTrue(); ViberBot viberBot = getViberBotNotifyTrue(); + List addressDto = addressDtoListWithNullPlaceId(); + UserProfileUpdateDto userProfileUpdateDto = getUserProfileUpdateDto(); userProfileUpdateDto.getAddressDto().get(0).setPlaceId(null); userProfileUpdateDto.getAddressDto().get(1).setPlaceId(null); + String uuid = UUID.randomUUID().toString(); + OrderAddressDtoRequest updateAddressRequestDto = getTestOrderAddressDtoRequestWithNullPlaceId(); when(userRepository.findUserByUuid(uuid)).thenReturn(Optional.of(user)); when(telegramBotRepository.findByUser(user)).thenReturn(Optional.of(telegramBot)); when(viberBotRepository.findByUser(user)).thenReturn(Optional.of(viberBot)); + when(modelMapper.map(addressDto.get(0), OrderAddressDtoRequest.class)).thenReturn(updateAddressRequestDto); + when(modelMapper.map(addressDto.get(1), OrderAddressDtoRequest.class)).thenReturn(updateAddressRequestDto); + doReturn(new OrderWithAddressesResponseDto()).when(ubsClientService) + .updateCurrentAddressForOrder(updateAddressRequestDto, uuid); when(userRepository.save(user)).thenReturn(user); when(modelMapper.map(user, UserProfileUpdateDto.class)).thenReturn(userProfileUpdateDto); @@ -1838,8 +1853,9 @@ void updateProfileDataWhenAddressPlaceIdIsNull() { verify(userRepository).findUserByUuid(uuid); verify(telegramBotRepository).findByUser(user); verify(viberBotRepository).findByUser(user); - verify(modelMapper, times(0)).map(any(), any(OrderAddressDtoRequest.class)); - verify(ubsClientService, times(0)).updateCurrentAddressForOrder(any(), anyString()); + verify(modelMapper).map(addressDto.get(0), OrderAddressDtoRequest.class); + verify(modelMapper).map(addressDto.get(1), OrderAddressDtoRequest.class); + verify(ubsClientService, times(2)).updateCurrentAddressForOrder(updateAddressRequestDto, uuid); verify(userRepository).save(user); verify(modelMapper).map(user, UserProfileUpdateDto.class); } @@ -2413,6 +2429,7 @@ void testUpdateCurrentAddressForOrderWhenPlaceIdIsNull() { when(userRepository.findByUuid(uuid)).thenReturn(user); when(addressRepository.findById(addressId)).thenReturn(Optional.of(address)); doReturn(new OrderWithAddressesResponseDto()).when(ubsClientService).findAllAddressesForCurrentOrder(uuid); + when(modelMapper.map(dtoRequest, Address.class)).thenReturn(address.setAddressComment(newComment)); ubsClientService.updateCurrentAddressForOrder(dtoRequest, uuid); @@ -2420,8 +2437,9 @@ void testUpdateCurrentAddressForOrderWhenPlaceIdIsNull() { verify(userRepository).findByUuid(uuid); verify(addressRepository).findById(addressId); - verify(addressRepository).save(address); verify(ubsClientService).findAllAddressesForCurrentOrder(uuid); + verify(modelMapper).map(dtoRequest, Address.class); + verify(addressRepository).save(address); } @Test From 538999ba48637fad53a50ece9eaa5a85a417ab6b Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Wed, 30 Aug 2023 13:24:22 +0300 Subject: [PATCH 56/80] Added caching to LocationServiceApi (#1226) * added caching and splitted service to interface and implementations * Moved method to private from service --- .../service/locations/LocationApiService.java | 160 ++++++++++++ ...rvice.java => LocationApiServiceImpl.java} | 238 +++++++----------- .../locations/LocationApiServiceTest.java | 3 +- 3 files changed, 253 insertions(+), 148 deletions(-) create mode 100644 service-api/src/main/java/greencity/service/locations/LocationApiService.java rename service/src/main/java/greencity/service/locations/{LocationApiService.java => LocationApiServiceImpl.java} (63%) diff --git a/service-api/src/main/java/greencity/service/locations/LocationApiService.java b/service-api/src/main/java/greencity/service/locations/LocationApiService.java new file mode 100644 index 000000000..3e1c93589 --- /dev/null +++ b/service-api/src/main/java/greencity/service/locations/LocationApiService.java @@ -0,0 +1,160 @@ +package greencity.service.locations; + +import greencity.dto.location.api.LocationDto; +import greencity.exceptions.NotFoundException; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.stereotype.Service; +import java.net.URI; +import java.util.*; + +@Service +@EnableCaching +public interface LocationApiService { + /** + * Retrieves all districts in a city by the city's name. There's a special case + * for Kyiv, the capital of Ukraine. In the system, due to the API having + * references only to the previous element, the search for districts occurs + * sequentially: region -> district in region -> local community -> city -> + * district. Generally, the city corresponds to level 4 in the hierarchical + * structure. However, Kyiv is unique in that it is at level 1, and its + * districts are at level 5. Therefore, a separate logic is implemented because + * the system can't go through all the steps from level 1 to level 4, and has to + * directly access the districts from level 5 when dealing with Kyiv. + * + * @param regionName The name of the region. + * @param cityName The name of the city. + * @return A list of LocationDto that represent districts in the city. + */ + List getAllDistrictsInCityByNames(String regionName, String cityName); + + /** + * Retrieves a list of cities by name. + * + * @param regionName The name of the region. + * @param cityName The name of the city. + * @return A list of matching city locations. + */ + List getCitiesByName(String regionName, String cityName); + + /** + * Finds a location by its name. + * + * @param locations The list of locations. + * @param locationName The location name. + * @return A LocationDto matching the provided name. + */ + LocationDto findLocationByName(List locations, String locationName); + + /** + * Retrieves a city by name from a specified region. + * + * @param regionName The name of the region. + * @param cityName The name of the city. + * @return The LocationDto that represents the city in the specified region. + * @throws NotFoundException if the city is not found. + */ + LocationDto getCityByNameFromRegionSide(String regionName, String cityName); + + /** + * Retrieves a region by name. + * + * @param regionName The name of the region. + * @return The region matching the provided name. + */ + LocationDto getRegionByName(String regionName); + + /** + * Retrieves the city in a specified region. + * + * @param regionName The name of the region. + * @param cities A list of LocationDto that represent cities. + * @return The LocationDto that represents the city in the specified region. + * @throws NotFoundException if the city is not found in the region. + */ + LocationDto getCityInRegion(String regionName, List cities); + + /** + * Retrieves all regions. + * + * @return A list of LocationDto that represent all regions. + */ + List getAllRegions(); + + /** + * Retrieves all cities by their ID. + * + * @param upperId The ID of the city. + * @return A list of LocationDto that represent the cities. + */ + List getAllCitiesById(String upperId); + + /** + * Retrieves all districts in the region by the region's ID. + * + * @param upperId The ID of the region. + * @return A list of LocationDto that represent districts in the region. + */ + List getAllDistrictInTheRegionsById(String upperId); + + /** + * Retrieves all local communities by their ID. + * + * @param upperId The ID of the local community. + * @return A list of LocationDto that represent local communities. + */ + List getAllLocalCommunitiesById(String upperId); + + /** + * Retrieves all districts in a city by the city's ID. + * + * @param upperId The ID of the city. + * @return A list of LocationDto that represent districts in the city. + */ + List getAllDistrictsInCityByCityID(String upperId); + + /** + * Retrieves location data by level and code. + * + * @param level The hierarchical level of the location. + * @param code The code of the location. + * @return The LocationDto that matches the specified level and code. + * @throws NotFoundException if the location is not found. + */ + LocationDto getLocationDataByCode(int level, String code); + + /** + * Fetches a list of location data by level. + * + * @param level The level of the location. + * @return A list of LocationDto for the specified level. + */ + List getLocationDataByLevel(int level); + + /** + * Retrieves a list of location data by level and name. + * + * @param level The hierarchical level of the location. + * @param name The name of the location. + * @return A list of LocationDto that matches the specified level and name. + * @throws IllegalArgumentException if the name is null. + */ + List getLocationDataByName(int level, String name); + + /** + * Extracts location data from a URL. + * + * @param url The URL to retrieve the data from. + * @return A list of LocationDto. + */ + List getResultFromUrl(URI url); + + /** + * Retrieves location data by its upper Id. + * + * @param level The hierarchical level of the location. + * @param upperId The upperId associated with the location. + * @return A list of LocationDto associated with the specified upperId. + * @throws IllegalArgumentException if the upperId is null. + */ + List getLocationDataByUpperId(int level, String upperId); +} diff --git a/service/src/main/java/greencity/service/locations/LocationApiService.java b/service/src/main/java/greencity/service/locations/LocationApiServiceImpl.java similarity index 63% rename from service/src/main/java/greencity/service/locations/LocationApiService.java rename to service/src/main/java/greencity/service/locations/LocationApiServiceImpl.java index d0beaa163..a26969a5e 100644 --- a/service/src/main/java/greencity/service/locations/LocationApiService.java +++ b/service/src/main/java/greencity/service/locations/LocationApiServiceImpl.java @@ -6,6 +6,7 @@ import greencity.exceptions.NotFoundException; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.EnableCaching; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; @@ -25,8 +26,11 @@ import org.apache.commons.collections4.CollectionUtils; +import org.springframework.cache.annotation.Cacheable; + @Service -public class LocationApiService { +@EnableCaching +public class LocationApiServiceImpl implements LocationApiService { private static final String API_URL = "https://directory.org.ua/api/katottg"; private static final int DEFAULT_PAGE_SIZE = 125; private static final String LEVEL = "level"; @@ -52,25 +56,15 @@ public class LocationApiService { * @param restTemplate An instance of RestTemplate for making HTTP requests. */ @Autowired - public LocationApiService(RestTemplate restTemplate) { + public LocationApiServiceImpl(RestTemplate restTemplate) { this.restTemplate = restTemplate; } /** - * Retrieves all districts in a city by the city's name. There's a special case - * for Kyiv, the capital of Ukraine. In the system, due to the API having - * references only to the previous element, the search for districts occurs - * sequentially: region -> district in region -> local community -> city -> - * district. Generally, the city corresponds to level 4 in the hierarchical - * structure. However, Kyiv is unique in that it is at level 1, and its - * districts are at level 5. Therefore, a separate logic is implemented because - * the system can't go through all the steps from level 1 to level 4, and has to - * directly access the districts from level 5 when dealing with Kyiv. - * - * @param regionName The name of the region. - * @param cityName The name of the city. - * @return A list of LocationDto that represent districts in the city. + * {@inheritDoc} */ + @Override + @Cacheable(value = "districtList", key = "#regionName + '_' + #cityName") public List getAllDistrictsInCityByNames(String regionName, String cityName) { checkIfNotNull(regionName, cityName); regionName = removeWordRegion(regionName); @@ -102,13 +96,11 @@ static String replaceAllQuotes(String input) { } /** - * Retrieves a list of cities by name. - * - * @param regionName The name of the region. - * @param cityName The name of the city. - * @return A list of matching city locations. + * {@inheritDoc} */ - private List getCitiesByName(String regionName, String cityName) { + @Override + @Cacheable(value = "cityList", key = "#regionName + '_' + #cityName ") + public List getCitiesByName(String regionName, String cityName) { List allCities = getLocationDataByName(LocationDivision.CITY.getLevelId(), cityName); if (allCities.isEmpty()) { allCities.add(getCityByNameFromRegionSide(regionName, cityName)); @@ -120,13 +112,11 @@ private List getCitiesByName(String regionName, String cityName) { } /** - * Finds a location by its name. - * - * @param locations The list of locations. - * @param locationName The location name. - * @return A LocationDto matching the provided name. + * {@inheritDoc} */ - private LocationDto findLocationByName(List locations, String locationName) { + @Override + @Cacheable(value = "locationByName", key = "#locations.size() + '_' + #locationName") + public LocationDto findLocationByName(List locations, String locationName) { return locations.stream() .filter(location -> location.getLocationNameMap().containsValue(locationName)) .findFirst() @@ -134,14 +124,11 @@ private LocationDto findLocationByName(List locations, String locat } /** - * Retrieves a city by name from a specified region. - * - * @param regionName The name of the region. - * @param cityName The name of the city. - * @return The LocationDto that represents the city in the specified region. - * @throws NotFoundException if the city is not found. + * {@inheritDoc} */ - private LocationDto getCityByNameFromRegionSide(String regionName, String cityName) { + @Override + @Cacheable(value = "cityByNameFromRegionSide", key = "#regionName + '_' + #cityName ") + public LocationDto getCityByNameFromRegionSide(String regionName, String cityName) { LocationDto region = getRegionByName(regionName); List districts = getAllDistrictInTheRegionsById(region.getId()); List localCommunities = districts.stream() @@ -157,12 +144,11 @@ private LocationDto getCityByNameFromRegionSide(String regionName, String cityNa } /** - * Retrieves a region by name. - * - * @param regionName The name of the region. - * @return The region matching the provided name. + * {@inheritDoc} */ - private LocationDto getRegionByName(String regionName) { + @Override + @Cacheable(value = "regionByName", key = "#regionName") + public LocationDto getRegionByName(String regionName) { List allRegions; try { allRegions = getLocationDataByName(LocationDivision.REGION.getLevelId(), regionName); @@ -180,17 +166,13 @@ private LocationDto getRegionByName(String regionName) { } /** - * Retrieves the city in a specified region. - * - * @param regionName The name of the region. - * @param cities A list of LocationDto that represent cities. - * @return The LocationDto that represents the city in the specified region. - * @throws NotFoundException if the city is not found in the region. + * {@inheritDoc} */ - private LocationDto getCityInRegion(String regionName, List cities) { + @Override + @Cacheable(value = "cityInRegion", key = "#regionName +'_'+#cities.size()") + public LocationDto getCityInRegion(String regionName, List cities) { LocationDto region = getRegionByName(regionName); String regionID = region.getId(); - return cities.stream() .filter(city -> { if (checkIfRegionIdEqualsUpperId(region.getId(), city.getParentId())) { @@ -207,65 +189,56 @@ private LocationDto getCityInRegion(String regionName, List cities) } /** - * Retrieves all regions. - * - * @return A list of LocationDto that represent all regions. + * {@inheritDoc} */ - - private List getAllRegions() { + @Override + @Cacheable(value = "allRegions", key = "allRegions") + public List getAllRegions() { return getLocationDataByLevel(LocationDivision.REGION.getLevelId()); } /** - * Retrieves all cities by their ID. - * - * @param upperId The ID of the city. - * @return A list of LocationDto that represent the cities. + * {@inheritDoc} */ - - private List getAllCitiesById(String upperId) { + @Override + @Cacheable(value = "allCitiesById", key = "#upperId") + public List getAllCitiesById(String upperId) { return getLocationDataByUpperId(LocationDivision.CITY.getLevelId(), upperId); } /** - * Retrieves all districts in the region by the region's ID. - * - * @param upperId The ID of the region. - * @return A list of LocationDto that represent districts in the region. + * {@inheritDoc} */ - private List getAllDistrictInTheRegionsById(String upperId) { + @Override + @Cacheable(value = "allDistrictInTheRegionsById", key = "#upperId") + public List getAllDistrictInTheRegionsById(String upperId) { return getLocationDataByUpperId(LocationDivision.DISTRICT_IN_REGION.getLevelId(), upperId); } /** - * Retrieves all local communities by their ID. - * - * @param upperId The ID of the local community. - * @return A list of LocationDto that represent local communities. + * {@inheritDoc} */ - private List getAllLocalCommunitiesById(String upperId) { + @Override + @Cacheable(value = "allLocalCommunitiesById", key = "#upperId") + public List getAllLocalCommunitiesById(String upperId) { return getLocationDataByUpperId(LocationDivision.LOCAL_COMMUNITY.getLevelId(), upperId); } /** - * Retrieves all districts in a city by the city's ID. - * - * @param upperId The ID of the city. - * @return A list of LocationDto that represent districts in the city. + * {@inheritDoc} */ - private List getAllDistrictsInCityByCityID(String upperId) { + @Override + @Cacheable(value = "allDistrictsInCityByCityID", key = "#upperId") + public List getAllDistrictsInCityByCityID(String upperId) { return getLocationDataByUpperId(LocationDivision.DISTRICT_IN_CITY.getLevelId(), upperId); } /** - * Retrieves location data by level and code. - * - * @param level The hierarchical level of the location. - * @param code The code of the location. - * @return The LocationDto that matches the specified level and code. - * @throws NotFoundException if the location is not found. + * {@inheritDoc} */ - private LocationDto getLocationDataByCode(int level, String code) { + @Override + @Cacheable(value = "locationDataByCode", key = "#level+'_'+#code") + public LocationDto getLocationDataByCode(int level, String code) { UriComponentsBuilder builder = buildUrl() .queryParam(CODE, code) .queryParam(LEVEL, level); @@ -277,29 +250,12 @@ private LocationDto getLocationDataByCode(int level, String code) { return resultFromUrl.get(0); } - private boolean checkIfRegionIdEqualsUpperId(String regionId, String cityUpperId) { - return regionId.equals(cityUpperId); - } - - private static String removeWordRegion(String sentence) { - String withoutSpaces = sentence.replace(" ", ""); - String withoutRegion = withoutSpaces.replaceAll("(?iu)region", ""); - return replaceAllQuotes(withoutRegion.replaceAll("(?iu)область", "")); - } - - private static String removeWordCity(String sentence) { - String withoutSpaces = sentence.replace(" ", ""); - String withoutRegion = withoutSpaces.replaceAll("(?iu)city", ""); - return replaceAllQuotes(withoutRegion.replaceAll("(?iu)місто", "")); - } - /** - * Fetches a list of location data by level. - * - * @param level The level of the location. - * @return A list of LocationDto for the specified level. + * {@inheritDoc} */ - private List getLocationDataByLevel(int level) { + @Override + @Cacheable(value = "locationDataByLevel", key = "#level") + public List getLocationDataByLevel(int level) { UriComponentsBuilder builder = buildUrl().queryParam(LEVEL, level); return getResultFromUrl(builder.build().encode().toUri()); } @@ -312,15 +268,11 @@ private static boolean checkIfNotNull(String... names) { } /** - * Retrieves a list of location data by level and name. - * - * @param level The hierarchical level of the location. - * @param name The name of the location. - * @return A list of LocationDto that matches the specified level and name. - * @throws IllegalArgumentException if the name is null. + * {@inheritDoc} */ - - private List getLocationDataByName(int level, String name) { + @Override + @Cacheable(value = "locationDataByName", key = "#level+'_'+#name") + public List getLocationDataByName(int level, String name) { UriComponentsBuilder builder = buildUrl() .queryParam(NAME, name) .queryParam(LEVEL, level); @@ -328,12 +280,11 @@ private List getLocationDataByName(int level, String name) { } /** - * Extracts location data from a URL. - * - * @param url The URL to retrieve the data from. - * @return A list of LocationDto. + * {@inheritDoc} */ - private List getResultFromUrl(URI url) { + @Override + @Cacheable(value = "resultFromUrl", key = "#url") + public List getResultFromUrl(URI url) { ParameterizedTypeReference> typeRef = new ParameterizedTypeReference>() { }; @@ -348,11 +299,21 @@ private List getResultFromUrl(URI url) { } /** - * Transforms a map into a LocationDto. - * - * @param result The map with location data. - * @return The transformed LocationDto. + * {@inheritDoc} */ + @Override + @Cacheable(value = "locationDataByUpperId", key = "#level+'_'+#upperId") + public List getLocationDataByUpperId(int level, String upperId) { + UriComponentsBuilder builder = buildUrl().queryParam(LEVEL, level) + .queryParam(PARENT, upperId); + return getResultFromUrl(builder.build().encode().toUri()); + } + + private UriComponentsBuilder buildUrl() { + return UriComponentsBuilder.fromHttpUrl(API_URL) + .queryParam(PAGE_SIZE, DEFAULT_PAGE_SIZE); + } + private LocationDto mapToLocationDto(Map result) { Map nameMap = new HashMap<>(); nameMap.put(NAME, getValueFromMap(result, NAME)); @@ -364,40 +325,23 @@ private LocationDto mapToLocationDto(Map result) { .build(); } - /** - * Retrieves a value from a map based on a specified key. - * - * @param The type of the object being returned. - * @param map The map from which to retrieve the value. - * @param key The key associated with the value to retrieve. - * @return The value associated with the specified key. - */ private T getValueFromMap(Map map, String key) { return (T) map.get(key); } - /** - * Retrieves location data by its upper Id. - * - * @param level The hierarchical level of the location. - * @param upperId The upperId associated with the location. - * @return A list of LocationDto associated with the specified upperId. - * @throws IllegalArgumentException if the upperId is null. - */ - private List getLocationDataByUpperId(int level, String upperId) { - UriComponentsBuilder builder = buildUrl().queryParam(LEVEL, level) - .queryParam(PARENT, upperId); - return getResultFromUrl(builder.build().encode().toUri()); + private boolean checkIfRegionIdEqualsUpperId(String regionId, String cityUpperId) { + return regionId.equals(cityUpperId); } - /** - * Constructs a URL using UriComponentsBuilder. - * - * @return A UriComponentsBuilder instance with the API URL, page, and page size - * parameters set. - */ - private UriComponentsBuilder buildUrl() { - return UriComponentsBuilder.fromHttpUrl(API_URL) - .queryParam(PAGE_SIZE, DEFAULT_PAGE_SIZE); + private static String removeWordRegion(String sentence) { + String withoutSpaces = sentence.replace(" ", ""); + String withoutRegion = withoutSpaces.replaceAll("(?iu)region", ""); + return replaceAllQuotes(withoutRegion.replaceAll("(?iu)область", "")); + } + + private static String removeWordCity(String sentence) { + String withoutSpaces = sentence.replace(" ", ""); + String withoutRegion = withoutSpaces.replaceAll("(?iu)city", ""); + return replaceAllQuotes(withoutRegion.replaceAll("(?iu)місто", "")); } } diff --git a/service/src/test/java/greencity/service/locations/LocationApiServiceTest.java b/service/src/test/java/greencity/service/locations/LocationApiServiceTest.java index dec417acd..569bc32da 100644 --- a/service/src/test/java/greencity/service/locations/LocationApiServiceTest.java +++ b/service/src/test/java/greencity/service/locations/LocationApiServiceTest.java @@ -42,8 +42,9 @@ class LocationApiServiceTest { private static final String PARENT = "parent"; private static final String PARENT_ID = "parent_id"; private static final String RESULTS = "results"; + @InjectMocks - LocationApiService locationApiService; + LocationApiServiceImpl locationApiService; @Mock RestTemplate restTemplate; From b1f9d6c5426c4c52790784e84fe53c9dc2f7c8dc Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Fri, 8 Sep 2023 11:34:26 +0300 Subject: [PATCH 57/80] Delete ru (#1228) * Deleted all ru mentioning * Fixed changelog --- .../main/java/greencity/dto/location/RegionTranslationDto.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service-api/src/main/java/greencity/dto/location/RegionTranslationDto.java b/service-api/src/main/java/greencity/dto/location/RegionTranslationDto.java index 43afdedf4..d34ed9a3e 100644 --- a/service-api/src/main/java/greencity/dto/location/RegionTranslationDto.java +++ b/service-api/src/main/java/greencity/dto/location/RegionTranslationDto.java @@ -12,7 +12,7 @@ @ToString @Builder public class RegionTranslationDto { - @Pattern(regexp = "[A-Za-zА-Яа-яЇїІіЄєҐґ '-]*", message = "use only English,Ukrainian or Russian letters") + @Pattern(regexp = "[A-Za-zА-Яа-яЇїІіЄєҐґ '-]*", message = "use only English or Ukrainian letters") @NotEmpty(message = "name must not be empty") private String regionName; @Pattern(regexp = "[A-Za-zА']*", message = "use only English letters") From b92773577909d82b64a3d88dfa4462e2de56cb19 Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Fri, 8 Sep 2023 13:41:00 +0300 Subject: [PATCH 58/80] [UBS Admin History] Fixed edit order (#1229) * Fixed method to work correct * Fixed tests to work correctly --- .../controller/ManagementOrderController.java | 2 + .../service/ubs/UBSManagementServiceImpl.java | 11 +- .../src/test/java/greencity/ModelUtils.java | 15 +++ .../ubs/UBSManagementServiceImplTest.java | 123 +++++++++++++++++- 4 files changed, 146 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/greencity/controller/ManagementOrderController.java b/core/src/main/java/greencity/controller/ManagementOrderController.java index e30347559..5572ef77b 100644 --- a/core/src/main/java/greencity/controller/ManagementOrderController.java +++ b/core/src/main/java/greencity/controller/ManagementOrderController.java @@ -44,6 +44,7 @@ import greencity.filters.CertificatePage; import greencity.filters.OrderPage; import greencity.filters.OrderSearchCriteria; +import greencity.repository.OrderRepository; import greencity.service.ubs.CertificateService; import greencity.service.ubs.CoordinateService; import greencity.service.ubs.UBSClientService; @@ -94,6 +95,7 @@ public class ManagementOrderController { private final CoordinateService coordinateService; private final ViolationService violationService; private final BigOrderTableServiceView bigOrderTableService; + private final OrderRepository orderRepository; /** * Controller getting all certificates with sorting possibility. diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java index 2c0fbe526..455365640 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java @@ -1689,11 +1689,20 @@ public void updateOrderAdminPageInfoAndSaveReason(Long orderId, UpdateOrderPageA String language, String email, MultipartFile[] images) { Order order = orderRepository.findById(orderId) .orElseThrow(() -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST + orderId)); - + PaymentTableInfoDto paymentTableInfoDto = getPaymentTableInfo(orderId); + Double unPaidAmount = paymentTableInfoDto.getUnPaidAmount(); + if (Double.compare(unPaidAmount, 0.0) != 0 && order.getOrderPaymentStatus().equals(OrderPaymentStatus.PAID)) { + order.setOrderPaymentStatus(OrderPaymentStatus.HALF_PAID); + } updateOrderAdminPageInfo(updateOrderPageAdminDto, order, language, email); saveReason(order, updateOrderPageAdminDto.getNotTakenOutReason(), images); } + private PaymentTableInfoDto getPaymentTableInfo(Long orderId) { + CounterOrderDetailsDto prices = getPriceDetails(orderId); + return getPaymentInfo(orderId, setTotalPrice(prices)); + } + /** * This is method which is updates admin page info for order. * diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index 3106a2146..2a429743e 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -1975,6 +1975,21 @@ public static Payment getPayment() { .build(); } + public static Payment getPayment2() { + return Payment.builder() + .id(1L) + .paymentStatus(PaymentStatus.PAID) + .amount(0L) + .currency("UAH") + .orderStatus("approved") + .responseStatus("approved") + .order(getOrder()) + .paymentId("1") + .settlementDate(LocalDate.now().toString()) + .fee(0L) + .build(); + } + public static User getUser() { return User.builder() .id(1L) diff --git a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java index 93223f269..8ba87921f 100644 --- a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java @@ -123,6 +123,7 @@ import static greencity.ModelUtils.TEST_PAYMENT_LIST; import static greencity.ModelUtils.TEST_USER; import static greencity.ModelUtils.UPDATE_ORDER_PAGE_ADMIN_DTO; +import static greencity.ModelUtils.getOrdersStatusFormedDto2; import static greencity.ModelUtils.getAddBonusesToUserDto; import static greencity.ModelUtils.getAdminCommentDto; import static greencity.ModelUtils.getBagInfoDto; @@ -171,11 +172,13 @@ import static greencity.ModelUtils.getTestUser; import static greencity.ModelUtils.updateAllOrderPageDto; import static greencity.ModelUtils.updateOrderPageAdminDto; + import static greencity.constant.ErrorMessage.EMPLOYEE_NOT_FOUND; import static greencity.constant.ErrorMessage.ORDER_CAN_NOT_BE_UPDATED; import static java.util.Collections.singletonList; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.anyDouble; import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyInt; @@ -1290,7 +1293,7 @@ void testSetOrderDetailIfPaidAndPriceLessThanDiscount() { when(certificateRepository.findCertificate(order.getId())).thenReturn(List.of(ModelUtils.getCertificate2())); when(orderRepository.findSumOfCertificatesByOrderId(order.getId())).thenReturn(600L); when(orderRepository.getOrderDetails(1L)) - .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto2())); + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto2())); ubsManagementService.setOrderDetail(order, UPDATE_ORDER_PAGE_ADMIN_DTO.getOrderDetailDto().getAmountOfBagsConfirmed(), @@ -1307,7 +1310,7 @@ void testSetOrderDetailIfPaidAndPriceLessThanPaidSum() { when(certificateRepository.findCertificate(order.getId())).thenReturn(List.of(ModelUtils.getCertificate2())); when(orderRepository.findSumOfCertificatesByOrderId(order.getId())).thenReturn(600L); when(orderRepository.getOrderDetails(1L)) - .thenReturn(Optional.ofNullable(ModelUtils.getOrdersStatusFormedDto2())); + .thenReturn(Optional.ofNullable(getOrdersStatusFormedDto2())); // when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(ModelUtils.getTariffBag())); ubsManagementService.setOrderDetail(order, @@ -2879,7 +2882,6 @@ void updateOrderAdminPageInfoAndSaveReasonTest() { ubsManagementService.updateOrderAdminPageInfoAndSaveReason(1L, dto, "en", "test@gmail.com", multipartFiles); - verify(orderRepository).findById(1L); verify(employeeRepository).findByEmail("test@gmail.com"); verify(tariffsInfoRepository).findTariffsInfoByIdForEmployee(1L, 1L); verify(paymentRepository).findAllByOrderId(1L); @@ -2888,6 +2890,119 @@ void updateOrderAdminPageInfoAndSaveReasonTest() { verify(receivingStationRepository).findAll(); verify(receivingStationRepository).findById(1L); - verify(orderRepository).getOrderDetails(1L); } + + @Test + void updateOrderAdminPageInfoAndSaveReasonTest_OrderPaid() { + var dto = updateOrderPageAdminDto(); + MockMultipartFile[] multipartFiles = new MockMultipartFile[0]; + + Order order = getOrder(); + TariffsInfo tariffsInfo = getTariffsInfo(); + order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); + order.setOrderPaymentStatus(OrderPaymentStatus.UNPAID); + Employee employee = getEmployee(); + + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); + when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); + when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(1L, 1L)) + .thenReturn(Optional.of(tariffsInfo)); + when(paymentRepository.findAllByOrderId(1L)).thenReturn(List.of(getPayment())); + + when(orderAddressRepository.findById(1L)).thenReturn(Optional.of(getOrderAddress())); + when(receivingStationRepository.findAll()).thenReturn(List.of(getReceivingStation())); + + var receivingStation = getReceivingStation(); + + when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); + when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + + ubsManagementService.updateOrderAdminPageInfoAndSaveReason(1L, dto, "en", "test@gmail.com", multipartFiles); + + verify(employeeRepository).findByEmail("test@gmail.com"); + verify(tariffsInfoRepository).findTariffsInfoByIdForEmployee(1L, 1L); + verify(paymentRepository).findAllByOrderId(1L); + + verify(orderAddressRepository).findById(1L); + verify(receivingStationRepository).findAll(); + + verify(receivingStationRepository).findById(1L); + } + + @Test + void updateOrderAdminPageInfoAndSaveReasonTest_OrderPaidAndUpdate() { + var dto = updateOrderPageAdminDto(); + MockMultipartFile[] multipartFiles = new MockMultipartFile[0]; + + Order order = getOrder(); + order.setPointsToUse(-10000); + TariffsInfo tariffsInfo = getTariffsInfo(); + order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); + order.setOrderPaymentStatus(OrderPaymentStatus.PAID); + Employee employee = getEmployee(); + + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); + when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); + when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(1L, 1L)) + .thenReturn(Optional.of(tariffsInfo)); + when(paymentRepository.findAllByOrderId(1L)).thenReturn(List.of(getPayment())); + + when(orderAddressRepository.findById(1L)).thenReturn(Optional.of(getOrderAddress())); + when(receivingStationRepository.findAll()).thenReturn(List.of(getReceivingStation())); + + var receivingStation = getReceivingStation(); + + when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); + when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + + ubsManagementService.updateOrderAdminPageInfoAndSaveReason(1L, dto, "en", "test@gmail.com", multipartFiles); + + verify(employeeRepository).findByEmail("test@gmail.com"); + verify(tariffsInfoRepository).findTariffsInfoByIdForEmployee(1L, 1L); + verify(paymentRepository).findAllByOrderId(1L); + + verify(orderAddressRepository).findById(1L); + verify(receivingStationRepository).findAll(); + + verify(receivingStationRepository).findById(1L); + } + + @Test + void updateOrderAdminPageInfoAndSaveReasonTest_OrderUnPaidAndUpdate() { + var dto = updateOrderPageAdminDto(); + MockMultipartFile[] multipartFiles = new MockMultipartFile[0]; + + Order order = getOrder(); + order.setPointsToUse(-10000); + TariffsInfo tariffsInfo = getTariffsInfo(); + order.setOrderDate(LocalDateTime.now()).setTariffsInfo(tariffsInfo); + order.setOrderPaymentStatus(OrderPaymentStatus.UNPAID); + Employee employee = getEmployee(); + + when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); + when(employeeRepository.findByEmail("test@gmail.com")).thenReturn(Optional.of(employee)); + when(tariffsInfoRepository.findTariffsInfoByIdForEmployee(1L, 1L)) + .thenReturn(Optional.of(tariffsInfo)); + when(paymentRepository.findAllByOrderId(1L)).thenReturn(List.of(getPayment())); + + when(orderAddressRepository.findById(1L)).thenReturn(Optional.of(getOrderAddress())); + when(receivingStationRepository.findAll()).thenReturn(List.of(getReceivingStation())); + + var receivingStation = getReceivingStation(); + + when(receivingStationRepository.findById(1L)).thenReturn(Optional.of(receivingStation)); + when(orderRepository.getOrderDetails(1L)).thenReturn(Optional.ofNullable(getOrdersStatusFormedDto())); + + ubsManagementService.updateOrderAdminPageInfoAndSaveReason(1L, dto, "en", "test@gmail.com", multipartFiles); + + verify(employeeRepository).findByEmail("test@gmail.com"); + verify(tariffsInfoRepository).findTariffsInfoByIdForEmployee(1L, 1L); + verify(paymentRepository).findAllByOrderId(1L); + + verify(orderAddressRepository).findById(1L); + verify(receivingStationRepository).findAll(); + + verify(receivingStationRepository).findById(1L); + } + } From 6a05e6f60577c39df3e514fb7542712588c348b8 Mon Sep 17 00:00:00 2001 From: Anton Bondar <53192419+ABbondar@users.noreply.github.com> Date: Mon, 11 Sep 2023 16:53:15 +0300 Subject: [PATCH 59/80] delete unused endpoint (#1230) --- .../controller/ManagementOrderController.java | 25 -------------- .../ManagementOrderControllerTest.java | 12 ------- .../service/ubs/UBSClientService.java | 12 ------- .../service/ubs/UBSClientServiceImpl.java | 16 --------- .../service/ubs/UBSClientServiceImplTest.java | 33 ------------------- 5 files changed, 98 deletions(-) diff --git a/core/src/main/java/greencity/controller/ManagementOrderController.java b/core/src/main/java/greencity/controller/ManagementOrderController.java index 5572ef77b..4db4a6393 100644 --- a/core/src/main/java/greencity/controller/ManagementOrderController.java +++ b/core/src/main/java/greencity/controller/ManagementOrderController.java @@ -39,7 +39,6 @@ import greencity.dto.violation.ViolationDetailInfoDto; import greencity.dto.violation.ViolationsInfoDto; import greencity.entity.parameters.CustomTableView; -import greencity.entity.user.User; import greencity.filters.CertificateFilterCriteria; import greencity.filters.CertificatePage; import greencity.filters.OrderPage; @@ -1008,30 +1007,6 @@ public ResponseEntity getNotTakenOrderReason( .body(ubsManagementService.getNotTakenOrderReason(orderId)); } - /** - * Controller updates info about order cancellation reason. - * - * @param id {@link Long}. - * @param dto {@link OrderCancellationReasonDto} - * @param uuid current {@link User}'s uuid. - * @return {@link HttpStatus} - http status. - */ - @ApiOperation(value = "updates info about order cancellation reason ") - @ApiResponses(value = { - @ApiResponse(code = 200, message = HttpStatuses.OK, response = OrderCancellationReasonDto.class), - @ApiResponse(code = 400, message = HttpStatuses.BAD_REQUEST), - @ApiResponse(code = 401, message = HttpStatuses.UNAUTHORIZED), - @ApiResponse(code = 403, message = HttpStatuses.FORBIDDEN), - @ApiResponse(code = 404, message = HttpStatuses.NOT_FOUND) - }) - @PostMapping("/order/{id}/cancellation") - public ResponseEntity updateCancellationReason( - @RequestBody final OrderCancellationReasonDto dto, - @PathVariable("id") final Long id, - @ApiIgnore @CurrentUserUuid String uuid) { - return ResponseEntity.status(HttpStatus.OK).body(ubsClientService.updateOrderCancellationReason(id, dto, uuid)); - } - /** * Controller saves order ID of order for which we need to make a refund. * diff --git a/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java b/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java index 73617dbfd..05a8979c1 100644 --- a/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java +++ b/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java @@ -6,7 +6,6 @@ import greencity.dto.order.AdminCommentDto; import greencity.dto.order.EcoNumberDto; import greencity.dto.order.ExportDetailsDto; -import greencity.dto.order.OrderCancellationReasonDto; import greencity.dto.order.OrderDetailStatusDto; import greencity.dto.order.UpdateAllOrderPageDto; import greencity.dto.order.UpdateOrderPageAdminDto; @@ -493,17 +492,6 @@ void getNotTakenOrderReason() throws Exception { verify(ubsManagementService).getNotTakenOrderReason(1L); } - @Test - void updatesCancellationReason() throws Exception { - OrderCancellationReasonDto dto = ModelUtils.getCancellationDto(); - ObjectMapper objectMapper = new ObjectMapper(); - mockMvc.perform(post(ubsLink + "/order/{id}/cancellation", 1L) - .principal(ModelUtils.getPrincipal()) - .contentType(MediaType.APPLICATION_JSON) - .content(objectMapper.writeValueAsString(dto))) - .andExpect(status().isOk()); - } - @Test void saveOrderIdForRefundTest() throws Exception { mockMvc.perform(post(ubsLink + "/save-order-for-refund/{orderId}", 1L) diff --git a/service-api/src/main/java/greencity/service/ubs/UBSClientService.java b/service-api/src/main/java/greencity/service/ubs/UBSClientService.java index 7274ce035..89e09d84a 100644 --- a/service-api/src/main/java/greencity/service/ubs/UBSClientService.java +++ b/service-api/src/main/java/greencity/service/ubs/UBSClientService.java @@ -279,18 +279,6 @@ public interface UBSClientService { */ OrderCancellationReasonDto getOrderCancellationReason(Long orderId, String uuid); - /** - * Method updates cancellation reason and comment. - * - * @param id {@link Long}; - * @param dto {@link OrderCancellationReasonDto}; - * @param uuid current {@link User}'s uuid; - * @return {@link OrderCancellationReasonDto} dto that contains cancellation - * reason and comment; - * @author Oleksandr Khomiakov - */ - OrderCancellationReasonDto updateOrderCancellationReason(long id, OrderCancellationReasonDto dto, String uuid); - /** * Methods for finding all events for Order. * diff --git a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java index 4079ea044..209062745 100644 --- a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java @@ -1423,22 +1423,6 @@ public OrderCancellationReasonDto getOrderCancellationReason(final Long orderId, .build(); } - @Override - public OrderCancellationReasonDto updateOrderCancellationReason( - long id, OrderCancellationReasonDto dto, String uuid) { - Order order = orderRepository.findById(id) - .orElseThrow(() -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST)); - if (!order.getUser().equals(userRepository.findByUuid(uuid))) { - throw new AccessDeniedException(CANNOT_ACCESS_ORDER_CANCELLATION_REASON); - } - eventService.saveEvent(OrderHistory.ORDER_CANCELLED, uuid, order); - order.setCancellationReason(dto.getCancellationReason()); - order.setCancellationComment(dto.getCancellationComment()); - order.setId(id); - orderRepository.save(order); - return dto; - } - private long reduceOrderSumDueToUsedPoints(long sumToPayInCoins, int pointsToUse) { if (sumToPayInCoins >= pointsToUse * 100L) { sumToPayInCoins -= pointsToUse * 100L; diff --git a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java index 84d7270b3..b7b0504fd 100644 --- a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java @@ -2810,39 +2810,6 @@ void getOrderCancellationReasonAccessDeniedException() { () -> ubsService.getOrderCancellationReason(1L, "abc")); } - @Test - void testUpdateOrderCancellationReason() { - OrderCancellationReasonDto dto = getCancellationDto(); - Order orderDto = getOrderTest(); - when(orderRepository.findById(anyLong())).thenReturn(Optional.ofNullable(orderDto)); - assert orderDto != null; - when(userRepository.findByUuid(anyString())).thenReturn(orderDto.getUser()); - when(orderRepository.save(any())).thenReturn(orderDto); - OrderCancellationReasonDto result = ubsService.updateOrderCancellationReason(1L, dto, anyString()); - - verify(eventService, times(1)) - .saveEvent("Статус Замовлення - Скасовано", "", orderDto); - assertEquals(dto.getCancellationReason(), result.getCancellationReason()); - assertEquals(dto.getCancellationComment(), result.getCancellationComment()); - verify(orderRepository).save(orderDto); - verify(orderRepository).findById(1L); - } - - @Test - void updateOrderCancellationReasonOrderNotFoundException() { - when(orderRepository.findById(anyLong())).thenReturn(Optional.empty()); - assertThrows(NotFoundException.class, - () -> ubsService.updateOrderCancellationReason(1L, null, "abc")); - } - - @Test - void updateOrderCancellationReasonAccessDeniedException() { - when(orderRepository.findById(anyLong())).thenReturn(Optional.ofNullable(getOrderTest())); - when(userRepository.findByUuid(anyString())).thenReturn(getTestUser()); - assertThrows(AccessDeniedException.class, - () -> ubsService.updateOrderCancellationReason(1L, null, "abc")); - } - @Test void testGelAllEventsFromOrderByOrderId() { List orderEvents = getListOfEvents(); From 290131dcacd795626a764335a0642b6c1208ad22 Mon Sep 17 00:00:00 2001 From: HelenSotnik <63450632+HelenSotnik@users.noreply.github.com> Date: Tue, 12 Sep 2023 03:29:11 -0700 Subject: [PATCH 60/80] Bug-employee-pagination-after-filtering (#1227) --- .../ManagementEmployeeController.java | 9 +- .../EmployeeCriteriaRepository.java | 60 +++++--- .../ubs/UBSManagementEmployeeService.java | 4 +- .../ubs/UBSManagementEmployeeServiceImpl.java | 138 +++++++----------- .../src/test/java/greencity/ModelUtils.java | 43 ++++++ .../UBSManagementEmployeeServiceImplTest.java | 82 +++-------- 6 files changed, 154 insertions(+), 182 deletions(-) diff --git a/core/src/main/java/greencity/controller/ManagementEmployeeController.java b/core/src/main/java/greencity/controller/ManagementEmployeeController.java index cea4b33fe..d606fbc30 100644 --- a/core/src/main/java/greencity/controller/ManagementEmployeeController.java +++ b/core/src/main/java/greencity/controller/ManagementEmployeeController.java @@ -1,6 +1,5 @@ package greencity.controller; -import greencity.annotations.ApiPageable; import greencity.constants.HttpStatuses; import greencity.constants.SwaggerExampleModel; import greencity.dto.employee.EmployeeWithTariffsIdDto; @@ -8,6 +7,7 @@ import greencity.dto.employee.GetEmployeeDto; import greencity.dto.employee.UserEmployeeAuthorityDto; import greencity.dto.pageble.PageableAdvancedDto; +import greencity.dto.pageble.PageableDto; import greencity.dto.position.PositionAuthoritiesDto; import greencity.dto.position.PositionDto; import greencity.dto.tariff.GetTariffInfoForEmployeeDto; @@ -20,7 +20,6 @@ import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Page; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -75,8 +74,9 @@ public ResponseEntity saveEmployee( /** * Controller gets all employees. * - * @return {@link PageableAdvancedDto} pageable employees. + * @return PageableDto of {@link GetEmployeeDto} employees. * @author Mykola Danylko. + * @author Olena Sotnik. */ @ApiOperation(value = "Get all employees") @ApiResponses(value = { @@ -84,10 +84,9 @@ public ResponseEntity saveEmployee( @ApiResponse(code = 401, message = HttpStatuses.UNAUTHORIZED), @ApiResponse(code = 403, message = HttpStatuses.FORBIDDEN) }) - @ApiPageable @PreAuthorize("@preAuthorizer.hasAuthority('SEE_EMPLOYEES_PAGE', authentication)") @GetMapping("/getAll-employees") - public ResponseEntity> getAllEmployees( + public ResponseEntity> getAllEmployees( EmployeePage employeePage, EmployeeFilterCriteria employeeFilterCriteria) { return ResponseEntity.status(HttpStatus.OK) diff --git a/dao/src/main/java/greencity/repository/EmployeeCriteriaRepository.java b/dao/src/main/java/greencity/repository/EmployeeCriteriaRepository.java index 4c4356a0a..7beca01d5 100644 --- a/dao/src/main/java/greencity/repository/EmployeeCriteriaRepository.java +++ b/dao/src/main/java/greencity/repository/EmployeeCriteriaRepository.java @@ -3,23 +3,32 @@ import greencity.entity.user.employee.EmployeeFilterView; import greencity.filters.EmployeeFilterCriteria; import greencity.filters.EmployeePage; -import org.springframework.data.domain.*; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Repository; import javax.persistence.EntityManager; import javax.persistence.TypedQuery; -import javax.persistence.criteria.*; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.Predicate; +import javax.persistence.criteria.Root; +import javax.persistence.criteria.Order; +import javax.persistence.criteria.Subquery; +import javax.persistence.criteria.Expression; + import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; -import static greencity.enums.EmployeeStatus.*; -import static java.util.Arrays.*; +import static greencity.enums.EmployeeStatus.employeeStatusExist; +import static java.util.Arrays.stream; @Repository public class EmployeeCriteriaRepository { private final EntityManager entityManager; private final CriteriaBuilder criteriaBuilder; + private static final String POSITION_ID = "positionId"; + private static final String EMPLOYEE_ID = "employeeId"; /** * Constructor to initialize EntityManager and CriteriaBuilder. @@ -40,13 +49,8 @@ private List getAllEmployees(EmployeePage employeePage, EmployeeFilterCriteria employeeFilterCriteria) { CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(EmployeeFilterView.class); Root employeeRoot = criteriaQuery.from(EmployeeFilterView.class); - - Predicate predicate = composePredicateForFiltering(employeeFilterCriteria, employeeRoot); - - criteriaQuery.select(employeeRoot).where(predicate); - - setOrderBy(employeePage, criteriaQuery, employeeRoot); - + Predicate predicate = composePredicateForFiltering(employeeFilterCriteria, employeeRoot, criteriaQuery); + criteriaQuery.select(employeeRoot).where(predicate).orderBy(getOrderBy(employeePage, employeeRoot)); return processEmployees(employeePage, criteriaQuery); } @@ -58,26 +62,26 @@ private List processEmployees(EmployeePage employeePage, return employeeTypedQuery.getResultList(); } - private void setOrderBy(EmployeePage employeePage, CriteriaQuery criteriaQuery, - Root employeeRoot) { - String[] split = employeePage.getSortBy().split("\\."); - criteriaQuery.orderBy(stream(split) - .map(x -> employeePage.getSortDirection().equals(Sort.Direction.ASC) - ? criteriaBuilder.asc(employeeRoot.get(x)) - : criteriaBuilder.desc(employeeRoot.get(x))) - .collect(Collectors.toList())); + private Order getOrderBy(EmployeePage employeePage, Root root) { + return employeePage.getSortDirection().equals(Sort.Direction.ASC) + ? criteriaBuilder.asc(root.get(employeePage.getSortBy())) + : criteriaBuilder.desc(root.get(employeePage.getSortBy())); } private Predicate composePredicateForFiltering(EmployeeFilterCriteria employeeFilterCriteria, - Root employeeFilterViewRoot) { - List predicates = collectAllPredicatesToList(employeeFilterCriteria, employeeFilterViewRoot); + Root employeeFilterViewRoot, + CriteriaQuery criteriaQuery) { + List predicates = collectAllPredicatesToList( + employeeFilterCriteria, employeeFilterViewRoot, criteriaQuery); return criteriaBuilder.and(predicates.toArray(Predicate[]::new)); } private List collectAllPredicatesToList(EmployeeFilterCriteria employeeFilterCriteria, - Root employeeFilterViewRoot) { + Root employeeFilterViewRoot, + CriteriaQuery criteriaQuery) { List predicates = new ArrayList<>(); + addPredicateDistinctUniqueEmployeesFromQuery(criteriaQuery, employeeFilterViewRoot, predicates); addSearchLinePredicates(employeeFilterCriteria, employeeFilterViewRoot, predicates); addEmployeeStatusPredicate(employeeFilterCriteria, employeeFilterViewRoot, predicates); addEmployeePositionPredicate(employeeFilterCriteria, employeeFilterViewRoot, predicates); @@ -87,6 +91,16 @@ private List collectAllPredicatesToList(EmployeeFilterCriteria employ return predicates; } + private void addPredicateDistinctUniqueEmployeesFromQuery(CriteriaQuery criteriaQuery, + Root employeeFilterViewRoot, + List predicates) { + Subquery subQuery = criteriaQuery.subquery(Long.class); + Root subQueryRoot = subQuery.from(EmployeeFilterView.class); + subQuery.select(criteriaBuilder.min(subQueryRoot.get(POSITION_ID))) + .where(criteriaBuilder.equal(subQueryRoot.get(EMPLOYEE_ID), employeeFilterViewRoot.get(EMPLOYEE_ID))); + predicates.add(criteriaBuilder.equal(employeeFilterViewRoot.get(POSITION_ID), subQuery)); + } + private void addCourierPredicate(EmployeeFilterCriteria employeeFilterCriteria, Root employeeFilterViewRoot, List predicates) { @@ -118,7 +132,7 @@ private void addEmployeePositionPredicate(EmployeeFilterCriteria employeeFilterC Root employeeFilterViewRoot, List predicates) { if (isListNotNullAndNotEmpty(employeeFilterCriteria.getPositions())) { - predicates.add(employeeFilterViewRoot.get("positionId") + predicates.add(employeeFilterViewRoot.get(POSITION_ID) .in(employeeFilterCriteria.getPositions())); } } diff --git a/service-api/src/main/java/greencity/service/ubs/UBSManagementEmployeeService.java b/service-api/src/main/java/greencity/service/ubs/UBSManagementEmployeeService.java index dc9db3837..6a15e6dc8 100644 --- a/service-api/src/main/java/greencity/service/ubs/UBSManagementEmployeeService.java +++ b/service-api/src/main/java/greencity/service/ubs/UBSManagementEmployeeService.java @@ -3,12 +3,12 @@ import greencity.dto.employee.EmployeeWithTariffsDto; import greencity.dto.employee.GetEmployeeDto; import greencity.dto.employee.EmployeeWithTariffsIdDto; +import greencity.dto.pageble.PageableDto; import greencity.dto.position.AddingPositionDto; import greencity.dto.position.PositionDto; import greencity.dto.tariff.GetTariffInfoForEmployeeDto; import greencity.filters.EmployeeFilterCriteria; import greencity.filters.EmployeePage; -import org.springframework.data.domain.Page; import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -28,7 +28,7 @@ public interface UBSManagementEmployeeService { /** * {@inheritDoc} */ - Page findAll(EmployeePage employeePage, EmployeeFilterCriteria employeeFilterCriteria); + PageableDto findAll(EmployeePage employeePage, EmployeeFilterCriteria employeeFilterCriteria); /** * Method updates information about employee. diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java index 10368c656..2548f5a49 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java @@ -4,13 +4,12 @@ import greencity.client.UserRemoteClient; import greencity.constant.AppConstant; import greencity.constant.ErrorMessage; -import greencity.dto.LocationsDtos; -import greencity.dto.courier.GetReceivingStationDto; import greencity.dto.employee.EmployeeWithTariffsIdDto; import greencity.dto.employee.EmployeeSignUpDto; import greencity.dto.employee.EmployeeWithTariffsDto; import greencity.dto.employee.GetEmployeeDto; import greencity.dto.employee.EmployeePositionsDto; +import greencity.dto.pageble.PageableDto; import greencity.dto.position.AddingPositionDto; import greencity.dto.position.PositionDto; import greencity.dto.tariff.GetTariffInfoForEmployeeDto; @@ -41,7 +40,7 @@ import java.util.List; import java.util.ArrayList; import java.util.Map; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.UUID; import java.util.stream.Collectors; @@ -112,101 +111,55 @@ private void signUpEmployee(Employee employee) { * {@inheritDoc} */ @Override - public Page findAll(EmployeePage employeePage, EmployeeFilterCriteria employeeFilterCriteria) { - List employeeFilterViews = - employeeCriteriaRepository.findAll(employeePage, employeeFilterCriteria); + public PageableDto findAll(EmployeePage employeePage, EmployeeFilterCriteria filterCriteria) { + List employeeFilterViews = employeeCriteriaRepository.findAll(employeePage, filterCriteria); + List resultList = mapEmployeeFilterViewsToGetEmployeeDtos(employeeFilterViews); + Pageable pageable = getPageable(employeePage); + return getAllTranslationDto(new PageImpl<>(resultList, pageable, employeeFilterViews.size())); + } - Map getEmployeeDtoMap = new HashMap<>(); + private List mapEmployeeFilterViewsToGetEmployeeDtos(List employeeFilterViews) { + List employees = employeeRepository.findAll(); + Map getEmployeeDtoMap = new LinkedHashMap<>(); for (var employeeFilterView : employeeFilterViews) { - var getEmployeeDto = getEmployeeDtoMap.computeIfAbsent( - employeeFilterView.getEmployeeId(), id -> modelMapper.map(employeeFilterView, GetEmployeeDto.class)); - + var getEmployeeDto = getEmployeeDtoMap.computeIfAbsent(employeeFilterView.getEmployeeId(), + id -> modelMapper.map(employeeFilterView, GetEmployeeDto.class)); initializeGetEmployeeDtoCollectionsIfNeeded(getEmployeeDto); - - fillGetEmployeeDto(employeeFilterView, getEmployeeDto); - } - - var resultList = new ArrayList<>(getEmployeeDtoMap.values()); - Sort sort = Sort.by(employeePage.getSortDirection(), employeePage.getSortBy()); - Pageable pageable = PageRequest.of(employeePage.getPageNumber(), - employeePage.getPageSize(), sort); - return new PageImpl<>(resultList, pageable, employeeFilterViews.size()); - } - - private void fillGetEmployeeDto(EmployeeFilterView emplView, GetEmployeeDto getEmployeeDto) { - fillGetTariffInfoForEmployeeDto(emplView, getEmployeeDto); - fillPositionDto(emplView, getEmployeeDto); - } - - private void fillPositionDto(EmployeeFilterView emplView, GetEmployeeDto getEmployeeDto) { - if (isPositionIdAbsent(emplView.getPositionId(), getEmployeeDto)) { - var positionDto = modelMapper.map(emplView, PositionDto.class); - getEmployeeDto.getEmployeePositions().add(positionDto); - } - } - - private void fillGetTariffInfoForEmployeeDto(EmployeeFilterView emplView, GetEmployeeDto getEmployeeDto) { - GetTariffInfoForEmployeeDto tariffInfoDto; - if (isMainInfoAboutCurrentTariffAbsent(emplView.getTariffsInfoId(), getEmployeeDto)) { - tariffInfoDto = modelMapper.map(emplView, GetTariffInfoForEmployeeDto.class); - initializeTariffInfoDtoCollections(tariffInfoDto); - fillGetTariffInfoForEmployeeDtoCollections(emplView, tariffInfoDto); - getEmployeeDto.getTariffs().add(tariffInfoDto); - } else { - tariffInfoDto = extractTariffInfoForEmployeeDto(emplView, getEmployeeDto); - fillGetTariffInfoForEmployeeDtoCollections(emplView, tariffInfoDto); - } - } - - private void fillGetTariffInfoForEmployeeDtoCollections(EmployeeFilterView emplView, - GetTariffInfoForEmployeeDto tariffInfoDto) { - if (isLocationIdAbsent(emplView.getLocationId(), tariffInfoDto)) { - tariffInfoDto.getLocationsDtos().add(modelMapper.map(emplView, LocationsDtos.class)); - } - if (isReceivingStationIdAbsent(emplView.getReceivingStationId(), tariffInfoDto)) { - tariffInfoDto.getReceivingStationDtos().add(modelMapper.map(emplView, GetReceivingStationDto.class)); + fillGetEmployeeDto(employeeFilterView, getEmployeeDto, employees); } + return new ArrayList<>(getEmployeeDtoMap.values()); } - private boolean isMainInfoAboutCurrentTariffAbsent(Long tariffInfoId, GetEmployeeDto getEmployeeDto) { - return getEmployeeDto.getTariffs() - .stream() - .noneMatch(tariffInfoDto -> tariffInfoDto.getId().equals(tariffInfoId)); + private Pageable getPageable(EmployeePage employeePage) { + Sort sort = Sort.by(employeePage.getSortDirection(), employeePage.getSortBy()); + return PageRequest.of(employeePage.getPageNumber(), employeePage.getPageSize(), sort); } - private static boolean isReceivingStationIdAbsent(Long receivingStationId, - GetTariffInfoForEmployeeDto tariffInfoDto) { - return tariffInfoDto.getReceivingStationDtos() - .stream() - .noneMatch(dto -> dto.getStationId().equals(receivingStationId)); + private void fillGetEmployeeDto(EmployeeFilterView emplView, GetEmployeeDto getEmployeeDto, + List employees) { + fillGetTariffInfoForEmployeeDto(emplView, getEmployeeDto, employees); + fillPositionDto(emplView, getEmployeeDto, employees); } - private boolean isLocationIdAbsent(Long locationId, GetTariffInfoForEmployeeDto tariffInfoDto) { - return tariffInfoDto.getLocationsDtos() - .stream() - .noneMatch(locationDto -> locationDto.getLocationId().equals(locationId)); - } + private void fillPositionDto(EmployeeFilterView emplView, GetEmployeeDto getEmployeeDto, List employees) { + List positionsDtos = employees.stream() + .filter(employee -> employee.getId().equals(emplView.getEmployeeId())) + .flatMap(employee -> employee.getEmployeePosition().stream() + .map(position -> modelMapper.map(position, PositionDto.class))) + .collect(Collectors.toList()); - private GetTariffInfoForEmployeeDto extractTariffInfoForEmployeeDto(EmployeeFilterView emplView, - GetEmployeeDto getEmployeeDto) { - return getEmployeeDto.getTariffs() - .stream() - .filter(tariffInfoDto -> tariffInfoDto.getId().equals(emplView.getTariffsInfoId())) - .findAny() - .orElseThrow(); + getEmployeeDto.getEmployeePositions().addAll(positionsDtos); } - private void initializeTariffInfoDtoCollections(GetTariffInfoForEmployeeDto tariffInfoDto) { - if (tariffInfoDto.getLocationsDtos() == null || tariffInfoDto.getReceivingStationDtos() == null) { - tariffInfoDto.setLocationsDtos(new ArrayList<>()); - tariffInfoDto.setReceivingStationDtos(new ArrayList<>()); - } - } + private void fillGetTariffInfoForEmployeeDto( + EmployeeFilterView emplView, GetEmployeeDto getEmployeeDto, List employees) { + List tariffsInfoDtos = employees.stream() + .filter(employee -> employee.getId().equals(emplView.getEmployeeId())) + .flatMap(employee -> employee.getTariffInfos().stream() + .map(tariffsInfo -> modelMapper.map(tariffsInfo, GetTariffInfoForEmployeeDto.class))) + .collect(Collectors.toList()); - private boolean isPositionIdAbsent(Long positionId, GetEmployeeDto getEmployeeDto) { - return getEmployeeDto.getEmployeePositions() - .stream() - .noneMatch(dto -> dto.getId().equals(positionId)); + getEmployeeDto.getTariffs().addAll(tariffsInfoDtos); } private void initializeGetEmployeeDtoCollectionsIfNeeded(GetEmployeeDto getEmployeeDto) { @@ -216,6 +169,15 @@ private void initializeGetEmployeeDtoCollectionsIfNeeded(GetEmployeeDto getEmplo } } + private PageableDto getAllTranslationDto(Page pages) { + List getEmployeeDtos = pages.getContent(); + return new PageableDto<>( + getEmployeeDtos, + pages.getTotalElements(), + pages.getPageable().getPageNumber(), + pages.getTotalPages()); + } + /** * {@inheritDoc} */ @@ -225,8 +187,8 @@ public EmployeeWithTariffsDto update(EmployeeWithTariffsIdDto dto, MultipartFile final Employee upEmployee = employeeRepository.findById(dto.getEmployeeDto().getId()).orElseThrow( () -> new NotFoundException(ErrorMessage.EMPLOYEE_NOT_FOUND + dto.getEmployeeDto().getId())); - if (!employeeRepository - .findEmployeesByEmailAndIdNot(dto.getEmployeeDto().getEmail(), dto.getEmployeeDto().getId()).isEmpty()) { + if (!employeeRepository.findEmployeesByEmailAndIdNot( + dto.getEmployeeDto().getEmail(), dto.getEmployeeDto().getId()).isEmpty()) { throw new BadRequestException( "Email already exist in another employee: " + dto.getEmployeeDto().getEmail()); } @@ -369,8 +331,8 @@ public void deletePosition(Long id) { } private void updateEmployeeEmail(EmployeeWithTariffsIdDto dto, String uuid) { - Employee employee = employeeRepository.findById(dto.getEmployeeDto().getId()) - .orElseThrow(() -> new NotFoundException(ErrorMessage.EMPLOYEE_NOT_FOUND + dto.getEmployeeDto().getId())); + Employee employee = employeeRepository.findById(dto.getEmployeeDto().getId()).orElseThrow( + () -> new NotFoundException(ErrorMessage.EMPLOYEE_NOT_FOUND + dto.getEmployeeDto().getId())); String oldEmail = employee.getEmail(); String newEmail = dto.getEmployeeDto().getEmail(); if (!oldEmail.equals(newEmail)) { diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index 2a429743e..dcb0dc965 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -173,6 +173,7 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; + import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; @@ -188,6 +189,7 @@ import java.util.Map; import java.util.Optional; import java.util.Set; + import static greencity.enums.NotificationReceiverType.EMAIL; import static greencity.enums.NotificationReceiverType.MOBILE; import static greencity.enums.NotificationReceiverType.SITE; @@ -305,6 +307,39 @@ public static List getEmployeeFilterViewListForOneEmployeeWi getEmployeeFilterViewWithPassedIds(employeeId, 7L, tariffsInfoId)); } + public static List getEmployeeListForGetAllMethod() { + return List.of( + Employee.builder() + .id(1L) + .firstName("First Name") + .lastName("Last Name") + .phoneNumber("Phone Number") + .email("employee@gmail.com") + .employeeStatus(EmployeeStatus.ACTIVE) + .employeePosition(new HashSet<>()) + .tariffInfos(new HashSet<>()) + .imagePath("path") + .tariffs(List.of(getTariffInfo())) + .build()); + } + + public static GetEmployeeDto getEmployeeDtoWithoutPositionsAndTariffsForGetAllMethod() { + var getEmployeeDto = getEmployeeDto(); + getEmployeeDto.setEmployeePositions(new ArrayList<>()); + getEmployeeDto.setTariffs(new ArrayList<>()); + return getEmployeeDto; + } + + public static GetEmployeeDto getEmployeeDtoWithPositionsForGetAllMethod() { + var getEmployeeDto = getEmployeeDto(); + getEmployeeDto.setEmployeePositions(List.of( + getPositionDto(3L), + getPositionDto(5L), + getPositionDto(7L))); + getEmployeeDto.setTariffs(new ArrayList<>()); + return getEmployeeDto; + } + public static GetEmployeeDto getEmployeeDtoWithPositionsAndTariffs() { var getEmployeeDto = getEmployeeDto(); @@ -1877,6 +1912,14 @@ public static Position getPosition() { .build(); } + public static Position getPosition(Long id) { + return Position.builder() + .id(id) + .name("Водій") + .nameEn("Driver") + .build(); + } + public static PositionDto getPositionDto(Long id) { return PositionDto.builder() .id(id) diff --git a/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java index 3a18a46ec..d281c1e19 100644 --- a/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSManagementEmployeeServiceImplTest.java @@ -4,18 +4,13 @@ import greencity.client.UserRemoteClient; import greencity.constant.AppConstant; import greencity.constant.ErrorMessage; -import greencity.dto.LocationsDtos; -import greencity.dto.courier.GetReceivingStationDto; import greencity.dto.employee.EmployeeWithTariffsIdDto; import greencity.dto.employee.GetEmployeeDto; -import greencity.dto.location.api.DistrictDto; -import greencity.dto.location.api.LocationDto; import greencity.dto.position.AddingPositionDto; import greencity.dto.position.PositionDto; import greencity.dto.tariff.GetTariffInfoForEmployeeDto; import greencity.entity.order.TariffsInfo; import greencity.entity.user.employee.Employee; -import greencity.entity.user.employee.EmployeeFilterView; import greencity.entity.user.employee.Position; import greencity.enums.EmployeeStatus; import greencity.exceptions.BadRequestException; @@ -23,27 +18,24 @@ import greencity.exceptions.UnprocessableEntityException; import greencity.filters.EmployeeFilterCriteria; import greencity.filters.EmployeePage; -import greencity.repository.*; -import greencity.service.locations.LocationApiService; +import greencity.repository.EmployeeRepository; +import greencity.repository.PositionRepository; +import greencity.repository.TariffsInfoRepository; +import greencity.repository.EmployeeCriteriaRepository; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.MockitoAnnotations; import org.mockito.junit.jupiter.MockitoExtension; import org.modelmapper.ModelMapper; import org.springframework.mock.web.MockMultipartFile; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Optional; -import java.util.ArrayList; import java.util.Set; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; import static greencity.ModelUtils.*; import static org.mockito.ArgumentMatchers.any; @@ -52,7 +44,6 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.anyLong; -import static org.mockito.Mockito.never; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.anyString; import static org.mockito.Mockito.eq; @@ -65,8 +56,6 @@ class UBSManagementEmployeeServiceImplTest { @Mock private PositionRepository positionRepository; @Mock - private ReceivingStationRepository stationRepository; - @Mock private TariffsInfoRepository tariffsInfoRepository; @Mock private FileService fileService; @@ -78,10 +67,6 @@ class UBSManagementEmployeeServiceImplTest { private UBSManagementEmployeeServiceImpl employeeService; @Mock private EmployeeCriteriaRepository employeeCriteriaRepository; - @Mock - private LocationApiService locationApiService; - @Mock - private UBSClientServiceImpl ubsClientService; @Test void saveEmployeeTest() { @@ -153,58 +138,28 @@ void findAllTest() { var employeeFilterCriteria = new EmployeeFilterCriteria(); var employeeId = 1L; var tariffsInfoId = 10L; - var employeeFilterViews = getEmployeeFilterViewListForOneEmployeeWithDifferentPositions( - employeeId, tariffsInfoId); - var expectedGetEmployeeDto = getEmployeeDtoWithPositionsAndTariffs(); + var employeeFilterViews = + getEmployeeFilterViewListForOneEmployeeWithDifferentPositions(employeeId, tariffsInfoId); + var expectedGetEmployeeDto = getEmployeeDtoWithoutPositionsAndTariffsForGetAllMethod(); + var expectedEmployeesList = getEmployeeListForGetAllMethod(); + var firstElement = employeeFilterViews.get(0); when(employeeCriteriaRepository.findAll(employeePage, employeeFilterCriteria)) .thenReturn(employeeFilterViews); - mockModelMapperBehaviourForEmployeeFilterViewCollection(employeeFilterViews); + when(repository.findAll()).thenReturn(expectedEmployeesList); + when(modelMapper.map(firstElement, GetEmployeeDto.class)) + .thenReturn(getEmployeeDto()); - var getEmployeeDtoPage = employeeService.findAll(employeePage, employeeFilterCriteria); - var actualGetEmployeeDto = getEmployeeDtoPage.get() - .findAny() - .orElseThrow(); + var getPageableDtoGetEmployeeDto = + employeeService.findAll(employeePage, employeeFilterCriteria); + var actualGetEmployeeDto = getPageableDtoGetEmployeeDto.getPage().get(0); assertEquals(expectedGetEmployeeDto, actualGetEmployeeDto); + assertEquals(expectedGetEmployeeDto.getId(), actualGetEmployeeDto.getId()); + assertEquals(expectedGetEmployeeDto.getEmail(), actualGetEmployeeDto.getEmail()); verify(employeeCriteriaRepository).findAll(employeePage, employeeFilterCriteria); - verifyAllModelMappersWasInvokedForFirstRecordOfEmployeeFilterViewCollection(employeeFilterViews); - verifyOnlyModelMapperToPositionDtoWasInvoked(employeeFilterViews); - } - - private void verifyOnlyModelMapperToPositionDtoWasInvoked(List employeeFilterViews) { - for (int i = 1; i < employeeFilterViews.size(); i++) { - verify(modelMapper, never()).map(employeeFilterViews.get(i), GetEmployeeDto.class); - verify(modelMapper, never()).map(employeeFilterViews.get(i), GetTariffInfoForEmployeeDto.class); - verify(modelMapper, never()).map(employeeFilterViews.get(i), LocationsDtos.class); - verify(modelMapper, never()).map(employeeFilterViews.get(i), GetReceivingStationDto.class); - verify(modelMapper, times(1)).map(employeeFilterViews.get(i), PositionDto.class); - } - } - - private void verifyAllModelMappersWasInvokedForFirstRecordOfEmployeeFilterViewCollection( - List employeeFilterViews) { verify(modelMapper, times(1)).map(employeeFilterViews.get(0), GetEmployeeDto.class); - verify(modelMapper, times(1)).map(employeeFilterViews.get(0), GetTariffInfoForEmployeeDto.class); - verify(modelMapper, times(1)).map(employeeFilterViews.get(0), LocationsDtos.class); - verify(modelMapper, times(1)).map(employeeFilterViews.get(0), GetReceivingStationDto.class); - verify(modelMapper, times(1)).map(employeeFilterViews.get(0), PositionDto.class); - } - - private void mockModelMapperBehaviourForEmployeeFilterViewCollection(List employeeFilterViews) { - var firstElement = employeeFilterViews.get(0); - when(modelMapper.map(firstElement, GetEmployeeDto.class)) - .thenReturn(getEmployeeDto()); - when(modelMapper.map(firstElement, GetTariffInfoForEmployeeDto.class)) - .thenReturn(getTariffInfoForEmployeeDto2()); - when(modelMapper.map(firstElement, LocationsDtos.class)) - .thenReturn(getLocationsDtos(firstElement.getLocationId())); - when(modelMapper.map(firstElement, GetReceivingStationDto.class)) - .thenReturn(getReceivingStationDto2()); - for (var employeeFilterView : employeeFilterViews) { - when(modelMapper.map(employeeFilterView, PositionDto.class)) - .thenReturn(getPositionDto(employeeFilterView.getPositionId())); - } + verify(repository).findAll(); } @Test @@ -498,5 +453,4 @@ void getTariffsForEmployeeTest() { verify(modelMapper, times(1)).map(any(), any()); verify(tariffsInfoRepository).findAll(); } - } From 00134b074feff4fc379225e5d87e43b94680075e Mon Sep 17 00:00:00 2001 From: HelenSotnik <63450632+HelenSotnik@users.noreply.github.com> Date: Wed, 13 Sep 2023 04:38:27 -0700 Subject: [PATCH 61/80] Change in method initializeGetEmployeeDtoCollections (#1232) * Commit with change in method initializeGetEmployeeDtoCollections * Update service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java Co-authored-by: VadymMakitra <84317209+VadymMakitra@users.noreply.github.com> * Commit with added import to UBSManagementEmployeeServiceImpl class --------- Co-authored-by: Lena Sotnik Co-authored-by: VadymMakitra <84317209+VadymMakitra@users.noreply.github.com> --- .../service/ubs/UBSManagementEmployeeServiceImpl.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java index 2548f5a49..a5af4a3e0 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java @@ -43,6 +43,7 @@ import java.util.LinkedHashMap; import java.util.UUID; import java.util.stream.Collectors; +import java.util.Collections; @Service @Data @@ -124,7 +125,7 @@ private List mapEmployeeFilterViewsToGetEmployeeDtos(List modelMapper.map(employeeFilterView, GetEmployeeDto.class)); - initializeGetEmployeeDtoCollectionsIfNeeded(getEmployeeDto); + initializeGetEmployeeDtoCollections(getEmployeeDto); fillGetEmployeeDto(employeeFilterView, getEmployeeDto, employees); } return new ArrayList<>(getEmployeeDtoMap.values()); @@ -162,11 +163,9 @@ private void fillGetTariffInfoForEmployeeDto( getEmployeeDto.getTariffs().addAll(tariffsInfoDtos); } - private void initializeGetEmployeeDtoCollectionsIfNeeded(GetEmployeeDto getEmployeeDto) { - if (getEmployeeDto.getEmployeePositions() == null || getEmployeeDto.getTariffs() == null) { - getEmployeeDto.setEmployeePositions(new ArrayList<>()); - getEmployeeDto.setTariffs(new ArrayList<>()); - } + private void initializeGetEmployeeDtoCollections(GetEmployeeDto getEmployeeDto) { + getEmployeeDto.setEmployeePositions(Collections.emptyList()); + getEmployeeDto.setTariffs(Collections.emptyList()); } private PageableDto getAllTranslationDto(Page pages) { From b36f072df0ee4d0176889e9c72cc659e5aeb0383 Mon Sep 17 00:00:00 2001 From: HelenSotnik <63450632+HelenSotnik@users.noreply.github.com> Date: Wed, 13 Sep 2023 10:18:38 -0700 Subject: [PATCH 62/80] Bug employee positions get all mapping (#1233) * Commit with change in method initializeGetEmployeeDtoCollections * Update service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java Co-authored-by: VadymMakitra <84317209+VadymMakitra@users.noreply.github.com> * Commit with added import to UBSManagementEmployeeServiceImpl class * Commit with change to ArrayList --------- Co-authored-by: Lena Sotnik Co-authored-by: VadymMakitra <84317209+VadymMakitra@users.noreply.github.com> --- .../service/ubs/UBSManagementEmployeeServiceImpl.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java index a5af4a3e0..239ddc34e 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementEmployeeServiceImpl.java @@ -43,7 +43,6 @@ import java.util.LinkedHashMap; import java.util.UUID; import java.util.stream.Collectors; -import java.util.Collections; @Service @Data @@ -164,8 +163,8 @@ private void fillGetTariffInfoForEmployeeDto( } private void initializeGetEmployeeDtoCollections(GetEmployeeDto getEmployeeDto) { - getEmployeeDto.setEmployeePositions(Collections.emptyList()); - getEmployeeDto.setTariffs(Collections.emptyList()); + getEmployeeDto.setEmployeePositions(new ArrayList<>()); + getEmployeeDto.setTariffs(new ArrayList<>()); } private PageableDto getAllTranslationDto(Page pages) { From e42b5a87b12871cefef3174c79c8c41d47a835ec Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Thu, 5 Oct 2023 19:08:51 +0300 Subject: [PATCH 63/80] Deleted unlogic method (#1235) --- .../java/greencity/service/ubs/SuperAdminServiceImpl.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java b/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java index 78f3d053f..b1a0ae456 100644 --- a/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java @@ -767,7 +767,6 @@ public void setTariffLimits(Long tariffId, SetTariffLimitsDto dto) { tariffsInfo.setMax(dto.getMax()); tariffsInfo.setCourierLimit(dto.getCourierLimit()); tariffsInfo.setLimitDescription(dto.getLimitDescription()); - tariffsInfo.setTariffStatus(getChangedTariffStatus(dto.getMin(), dto.getMax())); tariffsInfoRepository.save(tariffsInfo); } @@ -810,12 +809,6 @@ private Bag changeBagLimitIncluded(BagLimitDto dto, Long tariffId) { return bag; } - private TariffStatus getChangedTariffStatus(Long min, Long max) { - return min != null || max != null - ? TariffStatus.ACTIVE - : TariffStatus.DEACTIVATED; - } - @Override @Transactional public void switchTariffStatus(Long tariffId, String tariffStatus) { From 900fa668cd19ca8045da27f3910b69a799a8e2e8 Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Thu, 5 Oct 2023 20:06:03 +0300 Subject: [PATCH 64/80] Added new user to system (#1234) * Added new user to system * Added precondition to user --- .../db/changelog/db.changelog-master.xml | 2 ++ .../logs/ch-insert-into-users-Spodaryk.xml | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 dao/src/main/resources/db/changelog/logs/ch-insert-into-users-Spodaryk.xml diff --git a/dao/src/main/resources/db/changelog/db.changelog-master.xml b/dao/src/main/resources/db/changelog/db.changelog-master.xml index 14551131b..3ebe6af3e 100644 --- a/dao/src/main/resources/db/changelog/db.changelog-master.xml +++ b/dao/src/main/resources/db/changelog/db.changelog-master.xml @@ -220,4 +220,6 @@ + + \ No newline at end of file diff --git a/dao/src/main/resources/db/changelog/logs/ch-insert-into-users-Spodaryk.xml b/dao/src/main/resources/db/changelog/logs/ch-insert-into-users-Spodaryk.xml new file mode 100644 index 000000000..89e53cf58 --- /dev/null +++ b/dao/src/main/resources/db/changelog/logs/ch-insert-into-users-Spodaryk.xml @@ -0,0 +1,29 @@ + + + + + + SELECT COUNT(*) FROM users WHERE recipient_email = 'admin.greencity@starmaker.email'; + + + + + recipient_email = 'admin.greencity@starmaker.email' + + + + + + + + + + + + + + + + \ No newline at end of file From d2f8368b93e7fa6e9f378b3fc01c9bbe7be4aef0 Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Fri, 6 Oct 2023 09:48:41 +0300 Subject: [PATCH 65/80] Revert "Added new user to system (#1234)" (#1238) This reverts commit 900fa668cd19ca8045da27f3910b69a799a8e2e8. --- .../db/changelog/db.changelog-master.xml | 2 -- .../logs/ch-insert-into-users-Spodaryk.xml | 29 ------------------- 2 files changed, 31 deletions(-) delete mode 100644 dao/src/main/resources/db/changelog/logs/ch-insert-into-users-Spodaryk.xml diff --git a/dao/src/main/resources/db/changelog/db.changelog-master.xml b/dao/src/main/resources/db/changelog/db.changelog-master.xml index 3ebe6af3e..14551131b 100644 --- a/dao/src/main/resources/db/changelog/db.changelog-master.xml +++ b/dao/src/main/resources/db/changelog/db.changelog-master.xml @@ -220,6 +220,4 @@ - - \ No newline at end of file diff --git a/dao/src/main/resources/db/changelog/logs/ch-insert-into-users-Spodaryk.xml b/dao/src/main/resources/db/changelog/logs/ch-insert-into-users-Spodaryk.xml deleted file mode 100644 index 89e53cf58..000000000 --- a/dao/src/main/resources/db/changelog/logs/ch-insert-into-users-Spodaryk.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - SELECT COUNT(*) FROM users WHERE recipient_email = 'admin.greencity@starmaker.email'; - - - - - recipient_email = 'admin.greencity@starmaker.email' - - - - - - - - - - - - - - - - \ No newline at end of file From d7111141236d604c3e2c6a02f94f37d9a44f494b Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Fri, 6 Oct 2023 10:01:56 +0300 Subject: [PATCH 66/80] Create greencity admin (#1237) * Added new user to system --- .../db/changelog/db.changelog-master.xml | 2 ++ .../logs/ch-insert-into-users-Spodaryk.xml | 26 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 dao/src/main/resources/db/changelog/logs/ch-insert-into-users-Spodaryk.xml diff --git a/dao/src/main/resources/db/changelog/db.changelog-master.xml b/dao/src/main/resources/db/changelog/db.changelog-master.xml index 14551131b..3ebe6af3e 100644 --- a/dao/src/main/resources/db/changelog/db.changelog-master.xml +++ b/dao/src/main/resources/db/changelog/db.changelog-master.xml @@ -220,4 +220,6 @@ + + \ No newline at end of file diff --git a/dao/src/main/resources/db/changelog/logs/ch-insert-into-users-Spodaryk.xml b/dao/src/main/resources/db/changelog/logs/ch-insert-into-users-Spodaryk.xml new file mode 100644 index 000000000..89ac62999 --- /dev/null +++ b/dao/src/main/resources/db/changelog/logs/ch-insert-into-users-Spodaryk.xml @@ -0,0 +1,26 @@ + + + + + + + SELECT COUNT(*) FROM users WHERE recipient_email = 'admin.greencity@starmaker.email'; + + + + + + + + + + + + + + + + + \ No newline at end of file From 598643372e628ceb2a580718e2b8d63ef624b351 Mon Sep 17 00:00:00 2001 From: Maksym Date: Mon, 9 Oct 2023 14:00:34 +0300 Subject: [PATCH 67/80] #6521 Exception when updating unpaid order (#1236) * updated order entity added tests * added new check to controller updated tests * fixes * formatter * update javadoc added check to Order * updated tests * removed useless code * updated test * fixed test * fixed test * updated issues --- .../greencity/controller/OrderController.java | 5 +- core/src/test/java/greencity/ModelUtils.java | 10 +- .../ManagementOrderControllerTest.java | 2 +- .../controller/OrderControllerTest.java | 71 +++++++++- .../java/greencity/entity/order/Order.java | 60 +++++++- .../greencity/entity/order/OrderTest.java | 130 ++++++++++++++++++ .../service/ubs/SuperAdminServiceImpl.java | 2 +- .../service/ubs/UBSClientServiceImpl.java | 5 +- .../ubs/SuperAdminServiceImplTest.java | 10 +- .../service/ubs/UBSClientServiceImplTest.java | 46 ++++--- 10 files changed, 301 insertions(+), 40 deletions(-) create mode 100644 dao/src/test/java/greencity/entity/order/OrderTest.java diff --git a/core/src/main/java/greencity/controller/OrderController.java b/core/src/main/java/greencity/controller/OrderController.java index 523457ef3..598581ef5 100644 --- a/core/src/main/java/greencity/controller/OrderController.java +++ b/core/src/main/java/greencity/controller/OrderController.java @@ -23,6 +23,8 @@ import greencity.dto.user.UserPointsAndAllBagsDto; import greencity.dto.user.UserVO; import greencity.entity.user.User; +import greencity.enums.OrderStatus; +import greencity.enums.PaymentStatus; import greencity.service.ubs.NotificationService; import greencity.service.ubs.UBSClientService; import greencity.service.ubs.UBSManagementService; @@ -175,7 +177,8 @@ public ResponseEntity processOrder( @Valid @PathVariable("id") Optional id) { if (id.isPresent()) { OrderDetailStatusDto orderDetailStatusDto = ubsManagementService.getOrderDetailStatus(id.get()); - if (orderDetailStatusDto.getPaymentStatus().equals("PAID")) { + if (PaymentStatus.PAID.name().equals(orderDetailStatusDto.getPaymentStatus()) + || !OrderStatus.FORMED.name().equals(orderDetailStatusDto.getOrderStatus())) { return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null); } return ResponseEntity.status(HttpStatus.OK) diff --git a/core/src/test/java/greencity/ModelUtils.java b/core/src/test/java/greencity/ModelUtils.java index 6e108bb3e..a1829bfcf 100644 --- a/core/src/test/java/greencity/ModelUtils.java +++ b/core/src/test/java/greencity/ModelUtils.java @@ -226,11 +226,15 @@ public static UbsCustomersDto getUbsCustomersDto() { .build(); } - public static OrderDetailStatusDto getOrderDetailStatusDto() { - return getOrderDetailStatusDto(PaymentStatus.PAID); + public static OrderDetailStatusDto getPaidOrderDetailStatusDto() { + return getPaidOrderDetailStatusDto(PaymentStatus.PAID); } - public static OrderDetailStatusDto getOrderDetailStatusDto(PaymentStatus paymentStatus) { + public static OrderDetailStatusDto getUnpaidOrderDetailStatusDto() { + return getPaidOrderDetailStatusDto(PaymentStatus.UNPAID); + } + + public static OrderDetailStatusDto getPaidOrderDetailStatusDto(PaymentStatus paymentStatus) { return OrderDetailStatusDto.builder() .paymentStatus(paymentStatus.name()) .orderStatus(OrderStatus.CONFIRMED.name()) diff --git a/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java b/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java index 05a8979c1..5befe61e0 100644 --- a/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java +++ b/core/src/test/java/greencity/controller/ManagementOrderControllerTest.java @@ -207,7 +207,7 @@ void returnsDetailsAboutViolationWithGivenOrderId() throws Exception { @Test void updateOrderStatusesDetail() throws Exception { - OrderDetailStatusDto dto = ModelUtils.getOrderDetailStatusDto(); + OrderDetailStatusDto dto = ModelUtils.getPaidOrderDetailStatusDto(); ObjectMapper objectMapper = new ObjectMapper(); String orderResponceDtoJSON = objectMapper.writeValueAsString(dto); this.mockMvc.perform(put(ubsLink + "/update-order-detail-status" + "/{id}", 1L) diff --git a/core/src/test/java/greencity/controller/OrderControllerTest.java b/core/src/test/java/greencity/controller/OrderControllerTest.java index 9f2c9c312..56e4984f2 100644 --- a/core/src/test/java/greencity/controller/OrderControllerTest.java +++ b/core/src/test/java/greencity/controller/OrderControllerTest.java @@ -8,11 +8,13 @@ import greencity.converters.UserArgumentResolver; import greencity.dto.customer.UbsCustomersDto; import greencity.dto.customer.UbsCustomersDtoUpdate; +import greencity.dto.order.FondyOrderResponse; import greencity.dto.order.OrderCancellationReasonDto; import greencity.dto.order.OrderDetailStatusDto; import greencity.dto.order.OrderResponseDto; import greencity.dto.payment.PaymentResponseDto; import greencity.dto.user.UserInfoDto; +import greencity.enums.OrderStatus; import greencity.exceptions.user.UBSuserNotFoundException; import greencity.repository.OrderRepository; import greencity.repository.UBSuserRepository; @@ -23,6 +25,8 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; @@ -41,6 +45,7 @@ import static greencity.ModelUtils.getUbsCustomersDto; import static greencity.ModelUtils.getUbsCustomersDtoUpdate; import static greencity.ModelUtils.getUserInfoDto; +import static greencity.ModelUtils.getUnpaidOrderDetailStatusDto; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; @@ -50,9 +55,11 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static org.mockito.Mockito.never; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @ExtendWith(MockitoExtension.class) @@ -160,10 +167,45 @@ void processOrder() throws Exception { verify(userRemoteClient).findUuidByEmail("test@gmail.com"); } + @Test + void processOrderId() throws Exception { + Long orderId = 1L; + String uuid = "35467585763t4sfgchjfuyetf"; + ObjectMapper objectMapper = new ObjectMapper(); + OrderResponseDto dto = ModelUtils.getOrderResponseDto(); + String orderResponseDtoJSON = objectMapper.writeValueAsString(dto); + + OrderDetailStatusDto orderDetailStatusDto = getUnpaidOrderDetailStatusDto(); + orderDetailStatusDto.setOrderStatus(OrderStatus.FORMED.name()); + + FondyOrderResponse resultObject = FondyOrderResponse.builder() + .orderId(orderId) + .link("Link") + .build(); + String resultJson = objectMapper.writeValueAsString(resultObject); + + when(userRemoteClient.findUuidByEmail(anyString())).thenReturn(uuid); + when(ubsManagementService.getOrderDetailStatus(orderId)).thenReturn(orderDetailStatusDto); + when(ubsClientService.saveFullOrderToDB(any(OrderResponseDto.class), anyString(), anyLong())) + .thenReturn(resultObject); + + mockMvc.perform(post(ubsLink + "/processOrder/{id}", orderId) + .content(orderResponseDtoJSON) + .principal(principal) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(content().json(resultJson)); + + verify(userRemoteClient).findUuidByEmail(anyString()); + verify(ubsManagementService).getOrderDetailStatus(orderId); + verify(ubsClientService).saveFullOrderToDB(any(OrderResponseDto.class), anyString(), anyLong()); + } + @Test void processPaidOrderId() throws Exception { OrderResponseDto dto = ModelUtils.getOrderResponseDto(); - OrderDetailStatusDto orderDetailStatusDto = ModelUtils.getOrderDetailStatusDto(); + OrderDetailStatusDto orderDetailStatusDto = ModelUtils.getPaidOrderDetailStatusDto(); when(userRemoteClient.findUuidByEmail((anyString()))).thenReturn("35467585763t4sfgchjfuyetf"); when(ubsManagementService.getOrderDetailStatus(anyLong())).thenReturn(orderDetailStatusDto); @@ -178,6 +220,33 @@ void processPaidOrderId() throws Exception { .andExpect(status().isBadRequest()); } + @ParameterizedTest + @EnumSource(value = OrderStatus.class, + names = "FORMED", + mode = EnumSource.Mode.EXCLUDE) + void processPaidOrderIdWithUnacceptableOrderStatusesTest(OrderStatus orderStatus) throws Exception { + Long orderId = 1L; + OrderResponseDto dto = ModelUtils.getOrderResponseDto(); + OrderDetailStatusDto orderDetailStatusDto = ModelUtils.getPaidOrderDetailStatusDto(); + orderDetailStatusDto.setOrderStatus(orderStatus.name()); + + when(userRemoteClient.findUuidByEmail(anyString())).thenReturn("35467585763t4sfgchjfuyetf"); + when(ubsManagementService.getOrderDetailStatus(anyLong())).thenReturn(orderDetailStatusDto); + + ObjectMapper objectMapper = new ObjectMapper(); + String orderResponseDtoJSON = objectMapper.writeValueAsString(dto); + + mockMvc.perform(post(ubsLink + "/processOrder/{id}", orderId) + .content(orderResponseDtoJSON) + .principal(principal) + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isBadRequest()); + + verify(userRemoteClient).findUuidByEmail(anyString()); + verify(ubsManagementService).getOrderDetailStatus(orderId); + verify(ubsClientService, never()).saveFullOrderToDB(any(OrderResponseDto.class), anyString(), anyLong()); + } + @Test void getOrderDetailsByOrderId() throws Exception { UserInfoDto userInfoDto = getUserInfoDto(); diff --git a/dao/src/main/java/greencity/entity/order/Order.java b/dao/src/main/java/greencity/entity/order/Order.java index af48dfe0b..118eb3aba 100644 --- a/dao/src/main/java/greencity/entity/order/Order.java +++ b/dao/src/main/java/greencity/entity/order/Order.java @@ -10,14 +10,16 @@ import greencity.enums.OrderPaymentStatus; import greencity.enums.OrderStatus; import greencity.filters.StringListConverter; +import lombok.NoArgsConstructor; import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.EqualsAndHashCode; import lombok.Getter; -import lombok.NoArgsConstructor; import lombok.Setter; +import lombok.Builder; +import lombok.EqualsAndHashCode; import lombok.ToString; +import lombok.AccessLevel; import org.hibernate.annotations.Cascade; +import org.springframework.util.CollectionUtils; import javax.persistence.CascadeType; import javax.persistence.CollectionTable; @@ -187,5 +189,57 @@ public class Order { mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true) + @Setter(AccessLevel.PRIVATE) + @Builder.Default private List orderBags = new ArrayList<>(); + + /** + * Updates the list of order bags associated with this order. This method + * replaces all current items with new ones. It also sets the order reference + * for each order bag in the new list. This method should be used instead of the + * default setter to prevent exception that occur when the owner entity instance + * no longer references collections with cascade="all-delete-orphan". + * + * @param orderBags The new list of order bags to associate with this order. + * @throws NullPointerException If the provided 'orderBags' argument is null. + */ + public void updateWithNewOrderBags(List orderBags) { + if (!CollectionUtils.isEmpty(this.orderBags)) { + this.orderBags.clear(); + } + initOrderBagsIfNull(); + this.orderBags.addAll(orderBags); + this.orderBags.forEach(ob -> ob.setOrder(this)); + } + + /** + * Adds an ordered bag to the list of order bags associated with this order. + * This method adds the specified order bag to the list and sets the order + * reference for the order bag. + * + * @param orderBag The order bag to add to this order. + */ + public void addOrderedBag(OrderBag orderBag) { + initOrderBagsIfNull(); + this.orderBags.add(orderBag); + orderBag.setOrder(this); + } + + /** + * Removes an ordered bag from the list of order bags associated with this + * order. This method removes the specified order bag from the list. + * + * @param orderBag The order bag to remove from this order. + */ + public void removeOrderBag(OrderBag orderBag) { + if (!CollectionUtils.isEmpty(this.orderBags)) { + orderBags.remove(orderBag); + } + } + + private void initOrderBagsIfNull() { + if (this.orderBags == null) { + this.orderBags = new ArrayList<>(); + } + } } diff --git a/dao/src/test/java/greencity/entity/order/OrderTest.java b/dao/src/test/java/greencity/entity/order/OrderTest.java new file mode 100644 index 000000000..28a6f5b33 --- /dev/null +++ b/dao/src/test/java/greencity/entity/order/OrderTest.java @@ -0,0 +1,130 @@ +package greencity.entity.order; + +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNotSame; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertNull; + +class OrderTest { + @Test + void updateWithNewOrderBagsTest() { + Order order = new Order(); + OrderBag oldBag = OrderBag.builder().id(4L).build(); + order.addOrderedBag(oldBag); + List previous = order.getOrderBags(); + List bags = List.of( + OrderBag.builder().id(1L).build(), + OrderBag.builder().id(2L).build(), + OrderBag.builder().id(3L).build()); + + order.updateWithNewOrderBags(bags); + + assertSame(previous, order.getOrderBags()); + assertNotSame(bags, order.getOrderBags()); + assertTrue(order.getOrderBags().containsAll(bags) && order.getOrderBags().size() == bags.size()); + assertFalse(order.getOrderBags().contains(oldBag)); + } + + @Test + void updateWithNewOrderBagsNullOrderBagsTest() { + Order order = Order.builder() + .orderBags(null) + .build(); + List previous = order.getOrderBags(); + List bags = List.of( + OrderBag.builder().id(1L).build(), + OrderBag.builder().id(2L).build(), + OrderBag.builder().id(3L).build()); + + order.updateWithNewOrderBags(bags); + + assertNotNull(order.getOrderBags()); + assertNull(previous); + assertNotSame(bags, order.getOrderBags()); + assertTrue(order.getOrderBags().containsAll(bags) && order.getOrderBags().size() == bags.size()); + + } + + @Test + void updateWithNewOrderBagsNullArgExceptionTest() { + Order order = Order.builder().build(); + List bags = null; + assertThrows(NullPointerException.class, () -> order.updateWithNewOrderBags(bags)); + } + + @Test + void addOrderedBagTest() { + Order order = new Order(); + List previous = order.getOrderBags(); + List bags = List.of( + OrderBag.builder().id(1L).build(), + OrderBag.builder().id(2L).build(), + OrderBag.builder().id(3L).build()); + + order.addOrderedBag(bags.get(0)); + order.addOrderedBag(bags.get(1)); + order.addOrderedBag(bags.get(2)); + + assertSame(previous, order.getOrderBags()); + assertNotSame(bags, order.getOrderBags()); + assertTrue(order.getOrderBags().containsAll(bags) && order.getOrderBags().size() == bags.size()); + } + + @Test + void addOrderedBagToNullFieldTest() { + Order order = Order.builder() + .orderBags(null) + .build(); + List previous = order.getOrderBags(); + OrderBag orderBag = OrderBag.builder() + .id(1L) + .build(); + + order.addOrderedBag(orderBag); + + assertNull(previous); + assertTrue(order.getOrderBags().contains(orderBag) && order.getOrderBags().size() == 1); + } + + @Test + void removeOrderBagTest() { + Order order = new Order(); + List previous = order.getOrderBags(); + List bags = new ArrayList<>(List.of( + OrderBag.builder().id(1L).build(), + OrderBag.builder().id(2L).build(), + OrderBag.builder().id(3L).build())); + order.updateWithNewOrderBags(bags); + order.removeOrderBag(bags.get(0)); + bags.remove(bags.get(0)); + + assertSame(previous, order.getOrderBags()); + assertNotSame(bags, order.getOrderBags()); + assertTrue(order.getOrderBags().containsAll(bags) && order.getOrderBags().size() == bags.size() + && order.getOrderBags().size() == 2); + } + + @Test + void removeOrderBagNullFieldTest() { + Order order = Order.builder() + .orderBags(null) + .build(); + List previous = order.getOrderBags(); + OrderBag orderBag = OrderBag.builder() + .id(1L) + .build(); + + order.removeOrderBag(orderBag); + + assertNull(previous); + assertNull(order.getOrderBags()); + } +} \ No newline at end of file diff --git a/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java b/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java index b1a0ae456..d98c6e9cc 100644 --- a/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/SuperAdminServiceImpl.java @@ -172,7 +172,7 @@ private void deleteBagFromOrder(Order order, Bag bag) { Integer totalBagsAmount = amount.values().stream().reduce(0, Integer::sum); if (amount.get(bagId).equals(0) || order.getOrderPaymentStatus().equals(OrderPaymentStatus.UNPAID)) { if (totalBagsAmount.equals(amount.get(bagId))) { - order.setOrderBags(new ArrayList<>()); + order.updateWithNewOrderBags(new ArrayList<>()); orderRepository.delete(order); return; } diff --git a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java index 209062745..f2d2d420f 100644 --- a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java @@ -1096,7 +1096,7 @@ private Order formAndSaveOrder(Order order, Set orderCertificates, User currentUser, long sumToPayInCoins) { order.setOrderStatus(OrderStatus.FORMED); order.setCertificates(orderCertificates); - order.setOrderBags(bagsOrdered); + order.updateWithNewOrderBags(bagsOrdered); order.setUbsUser(userData); order.setUser(currentUser); order.setSumTotalAmountWithoutDiscounts( @@ -1115,7 +1115,6 @@ private Order formAndSaveOrder(Order order, Set orderCertificates, order.setPayment(new ArrayList<>()); } order.getPayment().add(payment); - bagsOrdered.forEach(orderBag -> orderBag.setOrder(order)); orderRepository.save(order); return order; } @@ -1477,7 +1476,7 @@ public void deleteOrder(String uuid, Long id) { if (order == null) { throw new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST); } - order.setOrderBags(Collections.emptyList()); + order.updateWithNewOrderBags(Collections.emptyList()); orderRepository.delete(order); } diff --git a/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java b/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java index 994107bba..a856c8256 100644 --- a/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/SuperAdminServiceImplTest.java @@ -254,7 +254,7 @@ void deleteTariffServiceWhenThereAreMoreThan1TypeOfBag() { Bag bagDeleted = ModelUtils.getBagDeleted(); TariffsInfo tariffsInfo = ModelUtils.getTariffInfo(); Order order = ModelUtils.getOrder(); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag2())); + order.updateWithNewOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag2())); when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); when(bagRepository.save(bag)).thenReturn(bagDeleted); when(bagRepository.findAllActiveBagsByTariffsInfoId(1L)).thenReturn(List.of(bag, getBag2())); @@ -288,7 +288,7 @@ void deleteTariffServiceWhenTariffBagsWithLimits() { Bag bagDeleted = ModelUtils.getBagDeleted(); TariffsInfo tariffsInfo = ModelUtils.getTariffInfo(); Order order = ModelUtils.getOrder(); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + order.updateWithNewOrderBags(Arrays.asList(ModelUtils.getOrderBag())); Map hashMap = new HashMap<>(); hashMap.put(1, 1); when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); @@ -361,7 +361,7 @@ void editTariffServiceWithUnpaidOrder() { GetTariffServiceDto editedDto = ModelUtils.getGetTariffServiceDto(); Order order = ModelUtils.getOrder(); String uuid = UUID.randomUUID().toString(); - order.setOrderBags(List.of(ModelUtils.getOrderBag())); + order.updateWithNewOrderBags(List.of(ModelUtils.getOrderBag())); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); @@ -397,7 +397,7 @@ void editTariffServiceWithUnpaidOrderAndBagConfirmedAmount() { GetTariffServiceDto editedDto = ModelUtils.getGetTariffServiceDto(); Order order = ModelUtils.getOrder(); String uuid = UUID.randomUUID().toString(); - order.setOrderBags(List.of(ModelUtils.getOrderBagWithConfirmedAmount())); + order.updateWithNewOrderBags(List.of(ModelUtils.getOrderBagWithConfirmedAmount())); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); @@ -433,7 +433,7 @@ void editTariffServiceWithUnpaidOrderAndBagExportedAmount() { GetTariffServiceDto editedDto = ModelUtils.getGetTariffServiceDto(); Order order = ModelUtils.getOrder(); String uuid = UUID.randomUUID().toString(); - order.setOrderBags(List.of(ModelUtils.getOrderBagWithExportedAmount())); + order.updateWithNewOrderBags(List.of(ModelUtils.getOrderBagWithExportedAmount())); when(employeeRepository.findByUuid(uuid)).thenReturn(Optional.of(employee)); when(bagRepository.findActiveBagById(1)).thenReturn(Optional.of(bag)); diff --git a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java index b7b0504fd..96cbefed1 100644 --- a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java @@ -788,7 +788,7 @@ void testSaveToDB() throws IllegalAccessException { } } tariffsInfo.setBags(Arrays.asList(bag)); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + order.updateWithNewOrderBags(Arrays.asList(ModelUtils.getOrderBag())); when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); @@ -841,7 +841,7 @@ void testSaveToDB_AddressNotEqualsUsers() throws IllegalAccessException { } } tariffsInfo.setBags(Arrays.asList(bag)); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + order.updateWithNewOrderBags(Arrays.asList(ModelUtils.getOrderBag())); when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user.setId(null), user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); @@ -894,7 +894,7 @@ void testSaveToDB_AddressStatusDeleted() throws IllegalAccessException { } } tariffsInfo.setBags(Arrays.asList(bag)); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + order.updateWithNewOrderBags(Arrays.asList(ModelUtils.getOrderBag())); when(userRepository.findByUuid("35467585763t4sfgchjfuyetf")).thenReturn(user.setId(null), user); when(tariffsInfoRepository.findTariffsInfoByBagIdAndLocationId(anyList(), anyLong())) .thenReturn(Optional.of(tariffsInfo)); @@ -943,9 +943,11 @@ void testSaveToDBWithTwoBags() throws IllegalAccessException { Payment payment1 = getPayment(); payment1.setId(1L); order1.getPayment().add(payment1); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag(), ModelUtils.getOrderBag())); + order.updateWithNewOrderBags( + Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag(), ModelUtils.getOrderBag())); order1 - .setOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag(), ModelUtils.getOrderBag())); + .updateWithNewOrderBags( + Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag(), ModelUtils.getOrderBag())); Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { if (f.getName().equals("merchantId")) { @@ -1141,7 +1143,7 @@ void testSaveToDbThrowBadRequestExceptionPriceLowerThanLimit() throws IllegalAcc dto.getBags().get(0).setAmount(1); Bag bag = getBagForOrder(); Order order = getOrder(); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + order.updateWithNewOrderBags(Arrays.asList(ModelUtils.getOrderBag())); TariffsInfo tariffsInfo = getTariffInfo(); tariffsInfo.setBags(Arrays.asList(bag)); user.setOrders(new ArrayList<>()); @@ -1378,7 +1380,7 @@ void saveToDBFailPaidOrder() { dto.getBags().get(0).setAmount(5); Order order = getOrder(); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + order.updateWithNewOrderBags(Arrays.asList(ModelUtils.getOrderBag())); Bag bag = getBagForOrder(); TariffsInfo tariffsInfo = getTariffInfo(); @@ -2880,7 +2882,7 @@ void processOrderFondyClient2() throws Exception { order.setCertificates(Set.of(getCertificate())); order.setPayment(TEST_PAYMENT_LIST); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + order.updateWithNewOrderBags(Arrays.asList(ModelUtils.getOrderBag())); Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { if (f.getName().equals("merchantId")) { @@ -2891,7 +2893,7 @@ void processOrderFondyClient2() throws Exception { order.setPointsToUse(-10000); CertificateDto certificateDto = createCertificateDto(); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + order.updateWithNewOrderBags(Arrays.asList(ModelUtils.getOrderBag())); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); @@ -2940,7 +2942,7 @@ void processOrderFondyClientCertificeteNotFoundExeption() throws Exception { CertificateDto certificateDto = createCertificateDto(); certificateDto.setPoints(1500); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + order.updateWithNewOrderBags(Arrays.asList(ModelUtils.getOrderBag())); when(orderBagService.getActualBagsAmountForOrder(Arrays.asList(ModelUtils.getOrderBag()))) .thenReturn(ModelUtils.getAmount()); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); @@ -2989,7 +2991,7 @@ void processOrderFondyClientCertificeteNotFoundExeption2() throws Exception { CertificateDto certificateDto = createCertificateDto(); certificateDto.setPoints(1500); order.setPointsToUse(-1000); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + order.updateWithNewOrderBags(Arrays.asList(ModelUtils.getOrderBag())); when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); when(userRepository.findUserByUuid("uuid")).thenReturn(Optional.of(user)); when(certificateRepository.findAllByCodeAndCertificateStatus(new ArrayList<>(dto.getCertificates()), @@ -3025,7 +3027,7 @@ void processOrderFondyClientIfSumToPayLessThanPoints() throws Exception { user.setChangeOfPointsList(new ArrayList<>()); order.setUser(user); order.setPointsToUse(-10000); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + order.updateWithNewOrderBags(Arrays.asList(ModelUtils.getOrderBag())); OrderFondyClientDto dto = getOrderFondyClientDto(); Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { @@ -3089,8 +3091,8 @@ void saveFullOrderToDBForIF() throws IllegalAccessException { Payment payment1 = getPayment(); payment1.setId(1L); order1.getPayment().add(payment1); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); - order1.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + order.updateWithNewOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + order1.updateWithNewOrderBags(Arrays.asList(ModelUtils.getOrderBag())); Field[] fields = UBSClientServiceImpl.class.getDeclaredFields(); for (Field f : fields) { @@ -3134,7 +3136,7 @@ void saveFullOrderToDBWhenSumToPayeqNull() throws IllegalAccessException { user.setOrders(new ArrayList<>()); user.getOrders().add(order); user.setChangeOfPointsList(new ArrayList<>()); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag())); + order.updateWithNewOrderBags(Arrays.asList(ModelUtils.getOrderBag(), ModelUtils.getOrderBag())); Bag bag = getBagForOrder(); UBSuser ubSuser = getUBSuser().setId(null); @@ -3423,7 +3425,7 @@ void getOrderForUserTest() { order.setAmountOfBagsOrdered(Map.of(1, 10)); bags.add(bag); order.setUser(user); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + order.updateWithNewOrderBags(Arrays.asList(ModelUtils.getOrderBag())); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); orderList.add(order); when(modelMapper.map(any(OrderBag.class), eq(BagForUserDto.class))).thenReturn(TEST_BAG_FOR_USER_DTO); @@ -3483,7 +3485,7 @@ void getOrdersForUserTest() { orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); Page page = new PageImpl<>(orderList, pageable, 1); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + order.updateWithNewOrderBags(Arrays.asList(ModelUtils.getOrderBag())); when(ordersForUserRepository.getAllByUserUuid(pageable, user.getUuid())) .thenReturn(page); @@ -3516,7 +3518,7 @@ void testOrdersForUserWithExportedQuantity() { OrderPaymentStatusTranslation orderPaymentStatusTranslation = getOrderPaymentStatusTranslation(); OrdersDataForUserDto ordersDataForUserDto = getOrderStatusDto(); Order order = getOrderTest(); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + order.updateWithNewOrderBags(Arrays.asList(ModelUtils.getOrderBag())); User user = getTestUser(); Bag bag = bagDto(); @@ -3577,7 +3579,7 @@ void testOrdersForUserWithConfirmedQuantity() { order.setConfirmedQuantity(Map.of(1, 10)); bags.add(bag); order.setUser(user); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + order.updateWithNewOrderBags(Arrays.asList(ModelUtils.getOrderBag())); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); @@ -3619,7 +3621,7 @@ void senderInfoDtoBuilderTest() { order.setAmountOfBagsOrdered(Map.of(1, 10)); order.setUser(user); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + order.updateWithNewOrderBags(Arrays.asList(ModelUtils.getOrderBag())); orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); Page page = new PageImpl<>(orderList, pageable, 1); @@ -3750,7 +3752,7 @@ void checkIfAddressHasBeenDeletedTest() throws IllegalAccessException { user.setOrders(new ArrayList<>()); user.getOrders().add(order); user.setChangeOfPointsList(new ArrayList<>()); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + order.updateWithNewOrderBags(Arrays.asList(ModelUtils.getOrderBag())); Bag bag = getBagForOrder(); UBSuser ubSuser = getUBSuser(); @@ -3929,7 +3931,7 @@ void testOrdersForUserWithQuantity() { bag.setFullPrice(1200_00L); bags.add(bag); order.setUser(user); - order.setOrderBags(Arrays.asList(ModelUtils.getOrderBag())); + order.updateWithNewOrderBags(Arrays.asList(ModelUtils.getOrderBag())); order.setOrderPaymentStatus(OrderPaymentStatus.PAID); orderList.add(order); Pageable pageable = PageRequest.of(0, 10, Sort.by("order_date").descending()); From 4fd82191af1189d1915d7fe01ef04d9d742e97c6 Mon Sep 17 00:00:00 2001 From: HelenSotnik <63450632+HelenSotnik@users.noreply.github.com> Date: Fri, 13 Oct 2023 15:30:37 +0300 Subject: [PATCH 68/80] Commit with change regex for additionalOrders in OrderResponseDto (#1239) Co-authored-by: Lena Sotnik --- .../src/main/java/greencity/dto/order/OrderResponseDto.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service-api/src/main/java/greencity/dto/order/OrderResponseDto.java b/service-api/src/main/java/greencity/dto/order/OrderResponseDto.java index 9aca45b92..bdebe3c40 100644 --- a/service-api/src/main/java/greencity/dto/order/OrderResponseDto.java +++ b/service-api/src/main/java/greencity/dto/order/OrderResponseDto.java @@ -35,7 +35,7 @@ public class OrderResponseDto implements Serializable { private Set<@Pattern(regexp = "(\\d{4}-\\d{4})|(^$)", message = "This certificate code is not valid") String> certificates; - private Set<@Pattern(regexp = "\\d{0,8}") String> additionalOrders; + private Set<@Pattern(regexp = "\\d{4,10}") String> additionalOrders; @Length(max = 255) private String orderComment; From cdcd88cf957cb6cf17ba0931f8fbf809595445e1 Mon Sep 17 00:00:00 2001 From: Maksym Date: Tue, 17 Oct 2023 16:31:37 +0300 Subject: [PATCH 69/80] #4675 the issue of changing the status of an order from "Confirmed" to "On the route" (#1240) * specified ZoneId * updated test * removed unused imports --- .../config/OrderStatusScheduler.java | 2 +- .../service/ubs/UBSManagementServiceImpl.java | 3 ++- .../ubs/UBSManagementServiceImplTest.java | 20 ++++++++++++++----- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/service/src/main/java/greencity/config/OrderStatusScheduler.java b/service/src/main/java/greencity/config/OrderStatusScheduler.java index bb23cd7cc..899dc094e 100644 --- a/service/src/main/java/greencity/config/OrderStatusScheduler.java +++ b/service/src/main/java/greencity/config/OrderStatusScheduler.java @@ -20,7 +20,7 @@ public class OrderStatusScheduler { * Method auto update the orders status from "CONFIRMED" to "ON_THE_ROUTE" on * the day of export. */ - @Scheduled(cron = "0 0 0 * * *", zone = "Europe/Kiev") + @Scheduled(cron = "0 0 0 * * *", zone = "Europe/Kyiv") public void autoUpdateOrderStatus() { log.info("Update order status from actual status to expected status by the day of export"); ubsManagementService.updateOrderStatusToExpected(); diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java index 455365640..e8da091cb 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java @@ -115,6 +115,7 @@ import java.math.RoundingMode; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collection; @@ -1877,7 +1878,7 @@ private void transferPointsToUser(Order order, User user, long pointsInCoins) { public void updateOrderStatusToExpected() { orderRepository.updateOrderStatusToExpected(OrderStatus.CONFIRMED.name(), OrderStatus.ON_THE_ROUTE.name(), - LocalDate.now()); + LocalDate.now(ZoneId.of("Europe/Kyiv"))); } @Override diff --git a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java index 8ba87921f..b9103f2ce 100644 --- a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java @@ -80,6 +80,7 @@ import org.junit.jupiter.params.provider.MethodSource; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.MockedStatic; import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; import org.modelmapper.ModelMapper; @@ -97,6 +98,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; +import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; @@ -178,7 +180,6 @@ import static java.util.Collections.singletonList; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.ArgumentMatchers.anyDouble; import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyInt; @@ -2697,10 +2698,19 @@ void checkEmployeeForOrderTest() { @Test void updateOrderStatusToExpected() { - ubsManagementService.updateOrderStatusToExpected(); - verify(orderRepository).updateOrderStatusToExpected(OrderStatus.CONFIRMED.name(), - OrderStatus.ON_THE_ROUTE.name(), - LocalDate.now()); + ZoneId expectedZoneId = ZoneId.of("Europe/Kyiv"); + LocalDate expectedLocalDate = LocalDate.of(2019, 1, 2); + + try (MockedStatic localDate = Mockito.mockStatic(LocalDate.class)) { + localDate.when(() -> LocalDate.now(expectedZoneId)) + .thenReturn(expectedLocalDate); + + ubsManagementService.updateOrderStatusToExpected(); + + verify(orderRepository).updateOrderStatusToExpected(OrderStatus.CONFIRMED.name(), + OrderStatus.ON_THE_ROUTE.name(), + expectedLocalDate); + } } @ParameterizedTest From e315cabac3a4aa840173214ee4721e7535187568 Mon Sep 17 00:00:00 2001 From: HelenSotnik <63450632+HelenSotnik@users.noreply.github.com> Date: Tue, 17 Oct 2023 16:55:54 +0300 Subject: [PATCH 70/80] Commit with Orders sort and order cancelation (#1241) Co-authored-by: Lena Sotnik --- .../greencity/repository/OrdersForUserRepository.java | 9 +++++++++ .../java/greencity/service/ubs/UBSClientServiceImpl.java | 3 ++- .../greencity/service/ubs/UBSClientServiceImplTest.java | 3 ++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/dao/src/main/java/greencity/repository/OrdersForUserRepository.java b/dao/src/main/java/greencity/repository/OrdersForUserRepository.java index eefda878c..2fe310c84 100644 --- a/dao/src/main/java/greencity/repository/OrdersForUserRepository.java +++ b/dao/src/main/java/greencity/repository/OrdersForUserRepository.java @@ -5,6 +5,7 @@ import greencity.entity.user.User; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @@ -27,6 +28,9 @@ public interface OrdersForUserRepository extends PagingAndSortingRepository getAllByUserUuid(Pageable pageable, String uuid); /** @@ -38,6 +42,11 @@ public interface OrdersForUserRepository extends PagingAndSortingRepository getAllByUserUuidAndOrderStatusIn(Pageable pageable, String uuid, List statuses); /** diff --git a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java index f2d2d420f..dea634137 100644 --- a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java @@ -1477,7 +1477,8 @@ public void deleteOrder(String uuid, Long id) { throw new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST); } order.updateWithNewOrderBags(Collections.emptyList()); - orderRepository.delete(order); + order.setOrderStatus(OrderStatus.CANCELED); + orderRepository.save(order); } @Override diff --git a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java index 96cbefed1..f62614848 100644 --- a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java @@ -2846,7 +2846,8 @@ void deleteOrder() { ubsService.deleteOrder(order.getUser().getUuid(), 1L); - verify(orderRepository).delete(order); + verify(orderRepository).save(order); + verify(ordersForUserRepository).getAllByUserUuidAndId(order.getUser().getUuid(), order.getId()); } @Test From 74209e3b383f5119a027f1c7854a2047c2a45499 Mon Sep 17 00:00:00 2001 From: Maksym Date: Tue, 17 Oct 2023 21:05:14 +0300 Subject: [PATCH 71/80] fixed time zone (#1242) --- .../src/main/java/greencity/config/OrderStatusScheduler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/src/main/java/greencity/config/OrderStatusScheduler.java b/service/src/main/java/greencity/config/OrderStatusScheduler.java index 899dc094e..bb23cd7cc 100644 --- a/service/src/main/java/greencity/config/OrderStatusScheduler.java +++ b/service/src/main/java/greencity/config/OrderStatusScheduler.java @@ -20,7 +20,7 @@ public class OrderStatusScheduler { * Method auto update the orders status from "CONFIRMED" to "ON_THE_ROUTE" on * the day of export. */ - @Scheduled(cron = "0 0 0 * * *", zone = "Europe/Kyiv") + @Scheduled(cron = "0 0 0 * * *", zone = "Europe/Kiev") public void autoUpdateOrderStatus() { log.info("Update order status from actual status to expected status by the day of export"); ubsManagementService.updateOrderStatusToExpected(); From 37a4933c0cc85e26aff4586d932b08ef0a150f71 Mon Sep 17 00:00:00 2001 From: Maksym Date: Thu, 19 Oct 2023 13:39:30 +0300 Subject: [PATCH 72/80] fixed time zone (#1244) --- .../java/greencity/service/ubs/UBSManagementServiceImpl.java | 2 +- .../greencity/service/ubs/UBSManagementServiceImplTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java index e8da091cb..433f33f23 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java @@ -1878,7 +1878,7 @@ private void transferPointsToUser(Order order, User user, long pointsInCoins) { public void updateOrderStatusToExpected() { orderRepository.updateOrderStatusToExpected(OrderStatus.CONFIRMED.name(), OrderStatus.ON_THE_ROUTE.name(), - LocalDate.now(ZoneId.of("Europe/Kyiv"))); + LocalDate.now(ZoneId.of("Europe/Kiev"))); } @Override diff --git a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java index b9103f2ce..97b564f3b 100644 --- a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java @@ -2698,7 +2698,7 @@ void checkEmployeeForOrderTest() { @Test void updateOrderStatusToExpected() { - ZoneId expectedZoneId = ZoneId.of("Europe/Kyiv"); + ZoneId expectedZoneId = ZoneId.of("Europe/Kiev"); LocalDate expectedLocalDate = LocalDate.of(2019, 1, 2); try (MockedStatic localDate = Mockito.mockStatic(LocalDate.class)) { From f9cc0e6d73ec8276ae9246acb94130fb4ec613da Mon Sep 17 00:00:00 2001 From: HelenSotnik <63450632+HelenSotnik@users.noreply.github.com> Date: Fri, 20 Oct 2023 18:13:13 +0300 Subject: [PATCH 73/80] Commit with change value validation regex (#1243) Co-authored-by: Lena Sotnik --- .../java/greencity/service/ubs/UBSManagementServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java index 433f33f23..cffbc692f 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java @@ -1608,7 +1608,7 @@ public void updateEcoNumberForOrder(EcoNumberDto ecoNumberDto, Order order, Stri && !added.contains("")) { historyChanges.append(collectInfoAboutChangesOfEcoNumber(added, OrderHistory.ADD_NEW_ECO_NUMBER)); added.forEach(newNumber -> { - if (!newNumber.matches("[0-9]+") || newNumber.length() != 10) { + if (!newNumber.matches("\\d{4,10}")) { throw new BadRequestException(INCORRECT_ECO_NUMBER); } order.getAdditionalOrders().add(newNumber); From 0faae69f9efa192aac4868601931b5da6efe83cc Mon Sep 17 00:00:00 2001 From: Oksana Spodaryk <82940222+ospodaryk@users.noreply.github.com> Date: Tue, 24 Oct 2023 14:52:10 +0300 Subject: [PATCH 74/80] Added setting of status (#1246) --- .../greencity/repository/OrderRepository.java | 8 +++--- .../service/ubs/UBSManagementServiceImpl.java | 26 +++++-------------- 2 files changed, 11 insertions(+), 23 deletions(-) diff --git a/dao/src/main/java/greencity/repository/OrderRepository.java b/dao/src/main/java/greencity/repository/OrderRepository.java index a4616a199..7f5b6dfdf 100644 --- a/dao/src/main/java/greencity/repository/OrderRepository.java +++ b/dao/src/main/java/greencity/repository/OrderRepository.java @@ -168,14 +168,14 @@ void changeReceivingStationForAllOrders(@Param("receiving_station") Long station /** * Method sets order status by order's id. * - * @param orderId - order's ID - * @param orderStatus - order status to set + * @param orderId - order's ID + * @param orderPaymentStatus - order status to set */ @Modifying @Transactional @Query(nativeQuery = true, - value = "UPDATE orders SET order_payment_status = :orderStatus WHERE id = :orderId") - void updateOrderPaymentStatus(@Param(value = "orderId") Long orderId, @Param("orderStatus") String orderStatus); + value = "UPDATE orders SET order_payment_status = :orderPaymentStatus WHERE id = :orderId") + void updateOrderPaymentStatus(Long orderId, String orderPaymentStatus); /** * Return sum of discounts by order id. diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java index cffbc692f..a77e04b21 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java @@ -110,6 +110,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.server.ResponseStatusException; + import javax.persistence.EntityNotFoundException; import java.math.BigDecimal; import java.math.RoundingMode; @@ -435,7 +436,6 @@ private Boolean isContainsExportedBags(CounterOrderDetailsDto dto) { * * @param address {@link Address}. * @return {@link AddressExportDetailsDto}. - * * @author Yuriy Bahlay. */ private AddressExportDetailsDto getAddressDtoForAdminPage(OrderAddress address) { @@ -467,7 +467,6 @@ private AddressExportDetailsDto getAddressDtoForAdminPage(OrderAddress address) * * @param order {@link Order}. * @return {@link GeneralOrderInfo}. - * * @author Yuriy Bahlay. */ private GeneralOrderInfo getInfoAboutStatusesAndDateFormed(Optional order) { @@ -507,7 +506,6 @@ private GeneralOrderInfo getInfoAboutStatusesAndDateFormed(Optional order * ua and en. * * @return {@link List}. - * * @author Yuriy Bahlay. */ private List getOrderStatusesTranslation() { @@ -539,7 +537,6 @@ private List getOrderStatusesTranslation() { * * @param orderStatusTranslation {@link OrderStatusTranslation}. * @param orderStatusesTranslationDto {@link OrderStatusesTranslationDto}. - * * @author Yuriy Bahlay. */ private void setValueForOrderStatusIsNotTakenOutOrDoneOrCancelledAsTrue( @@ -555,7 +552,6 @@ private void setValueForOrderStatusIsNotTakenOutOrDoneOrCancelledAsTrue( * This is method which is get order payment statuses translation. * * @return {@link List}. - * * @author Yuriy Bahlay. */ private List getOrderPaymentStatusesTranslation() { @@ -619,7 +615,6 @@ public void setOrderDetail(Order order, orderDetailRepository .updateConfirm(entry.getValue(), orderId, entry.getKey().longValue()); - orderDetailRepository.deleteIfConfirmedQuantityIsZero(orderId, entry.getKey().longValue()); } } @@ -633,7 +628,6 @@ public void setOrderDetail(Order order, orderDetailRepository .updateExporter(entry.getValue(), orderId, entry.getKey().longValue()); - orderDetailRepository.deleteIfExportedQuantityIsZero(orderId, entry.getKey().longValue()); } } @@ -649,25 +643,30 @@ private void updatePaymentStatus(Order order, long wasPaidInCoins, long discount Long orderId = order.getId(); if (needToPayInCoins == 0) { + order.setOrderPaymentStatus(OrderPaymentStatus.PAID); orderRepository.updateOrderPaymentStatus(orderId, OrderPaymentStatus.PAID.name()); return; } if (totalPriceInCoins - wasPaidInCoins >= 0 && needToPayInCoins < 0) { + order.setOrderPaymentStatus(OrderPaymentStatus.PAID); orderRepository.updateOrderPaymentStatus(orderId, OrderPaymentStatus.PAID.name()); recalculateCertificates(totalPriceInCoins - wasPaidInCoins, order); return; } if (totalPriceInCoins < wasPaidInCoins) { + order.setOrderPaymentStatus(OrderPaymentStatus.PAID); orderRepository.updateOrderPaymentStatus(orderId, OrderPaymentStatus.PAID.name()); recalculateCertificates(0L, order); return; } if (needToPayInCoins > 0 && wasPaidInCoins + discountInCoins != 0) { + order.setOrderPaymentStatus(OrderPaymentStatus.HALF_PAID); orderRepository.updateOrderPaymentStatus(orderId, OrderPaymentStatus.HALF_PAID.name()); notificationService.notifyHalfPaidPackage(order); return; } if (wasPaidInCoins + discountInCoins == 0) { + order.setOrderPaymentStatus(OrderPaymentStatus.UNPAID); orderRepository.updateOrderPaymentStatus(orderId, OrderPaymentStatus.UNPAID.name()); } } @@ -827,7 +826,7 @@ private CounterOrderDetailsDto getPriceDetails(Long id) { CounterOrderDetailsDto dto = new CounterOrderDetailsDto(); Order order = orderRepository.getOrderDetails(id) .orElseThrow(() -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST + id)); - List bag = orderBagService.findAllBagsInOrderBagsList(orderBagRepository.findOrderBagsByOrderId(id)); + List bag = orderBagService.findAllBagsInOrderBagsList(order.getOrderBags()); final List currentCertificate = certificateRepository.findCertificate(id); long sumAmountInCoins = 0; @@ -1681,7 +1680,6 @@ private void updateOrderPageFields(UpdateOrderPageAdminDto updateOrderPageDto, O * @param language {@link String}. * @param email {@link String}. * @param images {@link MultipartFile}. - * * @author Anton Bondar. */ @Override @@ -1690,20 +1688,10 @@ public void updateOrderAdminPageInfoAndSaveReason(Long orderId, UpdateOrderPageA String language, String email, MultipartFile[] images) { Order order = orderRepository.findById(orderId) .orElseThrow(() -> new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST + orderId)); - PaymentTableInfoDto paymentTableInfoDto = getPaymentTableInfo(orderId); - Double unPaidAmount = paymentTableInfoDto.getUnPaidAmount(); - if (Double.compare(unPaidAmount, 0.0) != 0 && order.getOrderPaymentStatus().equals(OrderPaymentStatus.PAID)) { - order.setOrderPaymentStatus(OrderPaymentStatus.HALF_PAID); - } updateOrderAdminPageInfo(updateOrderPageAdminDto, order, language, email); saveReason(order, updateOrderPageAdminDto.getNotTakenOutReason(), images); } - private PaymentTableInfoDto getPaymentTableInfo(Long orderId) { - CounterOrderDetailsDto prices = getPriceDetails(orderId); - return getPaymentInfo(orderId, setTotalPrice(prices)); - } - /** * This is method which is updates admin page info for order. * From 0e2c6e29aecab63fd4b564db5b8b5c88c5d331ab Mon Sep 17 00:00:00 2001 From: Maksym Date: Tue, 24 Oct 2023 15:20:11 +0300 Subject: [PATCH 75/80] #5920 notofication for brought by himself orders (#1245) * added notification sending * added tests --- .../notifications/NotificationParameter.java | 1 + .../service/ubs/NotificationService.java | 9 +++++ .../service/ubs/OrdersAdminsPageService.java | 9 ++--- .../notification/NotificationServiceImpl.java | 12 +++++++ .../ubs/OrdersAdminsPageServiceImpl.java | 18 +++++++--- .../service/ubs/UBSManagementServiceImpl.java | 1 + .../src/test/java/greencity/ModelUtils.java | 1 + .../NotificationServiceImplTest.java | 26 +++++++++++++++ .../ubs/OrdersAdminsPageServiceImplTest.java | 33 +++++++++++++++---- .../ubs/UBSManagementServiceImplTest.java | 23 +++++++++++++ 10 files changed, 118 insertions(+), 15 deletions(-) diff --git a/dao/src/main/java/greencity/entity/notifications/NotificationParameter.java b/dao/src/main/java/greencity/entity/notifications/NotificationParameter.java index dc01d7e6d..0c3c51c0d 100644 --- a/dao/src/main/java/greencity/entity/notifications/NotificationParameter.java +++ b/dao/src/main/java/greencity/entity/notifications/NotificationParameter.java @@ -18,6 +18,7 @@ public class NotificationParameter { @ManyToOne @JoinColumn(name = "notification_id", nullable = false) + @ToString.Exclude private UserNotification userNotification; @Column(nullable = false, name = "key", length = 50) diff --git a/service-api/src/main/java/greencity/service/ubs/NotificationService.java b/service-api/src/main/java/greencity/service/ubs/NotificationService.java index 9604cfd08..04ea920c3 100644 --- a/service-api/src/main/java/greencity/service/ubs/NotificationService.java +++ b/service-api/src/main/java/greencity/service/ubs/NotificationService.java @@ -86,6 +86,15 @@ public interface NotificationService { */ void notifyUnpaidOrder(Order order); + /** + * Notifies the customer that the order status has been changed to "Brought by + * himself". + * + * @param order The order {@link Order} which status was changed. + * @author Maksym Lenets + */ + public void notifySelfPickupOrder(Order order); + /** * Method that returns page with notifications for user by UUID. * diff --git a/service-api/src/main/java/greencity/service/ubs/OrdersAdminsPageService.java b/service-api/src/main/java/greencity/service/ubs/OrdersAdminsPageService.java index 625e93336..b3c764725 100644 --- a/service-api/src/main/java/greencity/service/ubs/OrdersAdminsPageService.java +++ b/service-api/src/main/java/greencity/service/ubs/OrdersAdminsPageService.java @@ -5,6 +5,7 @@ import greencity.dto.order.RequestToChangeOrdersDataDto; import greencity.dto.table.ColumnWidthDto; import greencity.dto.table.TableParamsDto; +import greencity.entity.user.employee.Employee; import java.util.List; @@ -48,12 +49,12 @@ ChangeOrderResponseDTO chooseOrdersDataSwitcher(String email, /** * Method changing order's status. * - * @param value of {@link String} - * @param ordersId of {@link List} - * @param employeeId of {@link Long} + * @param value of {@link String} + * @param ordersId of {@link List} + * @param employee of {@link Employee} * @author Liubomyr Pater */ - List orderStatusForDevelopStage(List ordersId, String value, Long employeeId); + List orderStatusForDevelopStage(List ordersId, String value, Employee employee); /** * Method changing order's date of export. diff --git a/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java b/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java index 8f0cb757f..aff2cf162 100644 --- a/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java +++ b/service/src/main/java/greencity/service/notification/NotificationServiceImpl.java @@ -226,6 +226,18 @@ public void notifyUnpaidOrder(Order order) { } } + /** + * {@inheritDoc} + */ + @Override + public void notifySelfPickupOrder(Order order) { + Set parameters = Set.of(NotificationParameter.builder() + .key(ORDER_NUMBER_KEY) + .value(order.getId().toString()) + .build()); + fillAndSendNotification(parameters, order, NotificationType.ORDER_STATUS_CHANGED); + } + private Double getAmountToPay(Order order) { long bonusesInCoins = order.getPointsToUse() == null ? 0L : order.getPointsToUse() * 100L; long certificatesInCoins = order.getCertificates() == null ? 0L diff --git a/service/src/main/java/greencity/service/ubs/OrdersAdminsPageServiceImpl.java b/service/src/main/java/greencity/service/ubs/OrdersAdminsPageServiceImpl.java index 947a66e20..3d95813c4 100644 --- a/service/src/main/java/greencity/service/ubs/OrdersAdminsPageServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/OrdersAdminsPageServiceImpl.java @@ -241,7 +241,7 @@ public ChangeOrderResponseDTO chooseOrdersDataSwitcher(String email, .orElseThrow(() -> new EntityNotFoundException(EMPLOYEE_NOT_FOUND)); switch (columnName) { case ORDER_STATUS: - return createReturnForSwitchChangeOrder(orderStatusForDevelopStage(ordersId, value, employee.getId())); + return createReturnForSwitchChangeOrder(orderStatusForDevelopStage(ordersId, value, employee)); case DATE_OF_EXPORT: return createReturnForSwitchChangeOrder(dateOfExportForDevelopStage(ordersId, value, employee.getId())); case TIME_OF_EXPORT: @@ -454,22 +454,24 @@ private List includeItemsWithoutResponsiblePerson(String nam /* methods for changing order */ @Override - public synchronized List orderStatusForDevelopStage(List ordersId, String value, Long employeeId) { + public synchronized List orderStatusForDevelopStage(List ordersId, String updatedStatusValue, + Employee employee) { List unresolvedGoals = new ArrayList<>(); for (Long orderId : ordersId) { try { Order existedOrder = orderRepository.findById(orderId) .orElseThrow(() -> new EntityNotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST)); - if (isOrderBlockedByAnotherEmployee(existedOrder, employeeId)) { + if (isOrderBlockedByAnotherEmployee(existedOrder, employee.getId())) { throw new IllegalArgumentException(ORDER_IS_BLOCKED + existedOrder.getBlockedByEmployee().getId()); } - if (existedOrder.getOrderStatus().checkPossibleStatus(value)) { - existedOrder.setOrderStatus(OrderStatus.valueOf(value)); + if (existedOrder.getOrderStatus().checkPossibleStatus(updatedStatusValue)) { + existedOrder.setOrderStatus(OrderStatus.valueOf(updatedStatusValue)); removePickUpDetailsAndResponsibleEmployees(existedOrder); } else { throw new BadRequestException( "Such desired status isn't applicable with current status!"); } + if (existedOrder.getOrderStatus() == OrderStatus.CANCELED && (existedOrder.getPointsToUse() != 0 || !existedOrder.getCertificates().isEmpty())) { notificationService.notifyBonusesFromCanceledOrder(existedOrder); @@ -478,6 +480,12 @@ public synchronized List orderStatusForDevelopStage(List ordersId, S existedOrder.setBlocked(false); existedOrder.setBlockedByEmployee(null); orderRepository.save(existedOrder); + + if (OrderStatus.BROUGHT_IT_HIMSELF == OrderStatus.valueOf(updatedStatusValue)) { + eventService.save(OrderHistory.ORDER_BROUGHT_IT_HIMSELF, + employee.getFirstName() + " " + employee.getLastName(), existedOrder); + notificationService.notifySelfPickupOrder(existedOrder); + } } catch (Exception e) { unresolvedGoals.add(orderId); } diff --git a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java index a77e04b21..6fc12c2fc 100644 --- a/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSManagementServiceImpl.java @@ -1030,6 +1030,7 @@ public OrderDetailStatusDto updateOrderDetailStatus(Order order, OrderDetailStat eventService.saveEvent(OrderHistory.ORDER_DONE, email, order); } else if (order.getOrderStatus() == OrderStatus.BROUGHT_IT_HIMSELF) { eventService.saveEvent(OrderHistory.ORDER_BROUGHT_IT_HIMSELF, email, order); + notificationService.notifySelfPickupOrder(order); } else if (order.getOrderStatus() == OrderStatus.ON_THE_ROUTE) { eventService.saveEvent(OrderHistory.ORDER_ON_THE_ROUTE, email, order); } diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index dcb0dc965..f68d51947 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -569,6 +569,7 @@ public static ChangeOfPoints getChangeOfPoints() { public static Order getOrder() { return Order.builder() .id(1L) + .orderDate(LocalDateTime.of(2023, 10, 20, 14, 58)) .payment(Lists.newArrayList(Payment.builder() .id(1L) .paymentId("1") diff --git a/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java b/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java index 83f4ab80b..12466b288 100644 --- a/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java +++ b/service/src/test/java/greencity/service/notification/NotificationServiceImplTest.java @@ -667,4 +667,30 @@ void createNotificationDtoTitleEnLanguageTest() { assertEquals(TEST_NOTIFICATION_TEMPLATE.getTitleEng(), result.getTitle()); } + @Test + void notifySelfPickupOrderTest() { + User user = getUser(); + Long orderId = 2L; + Order order = Order.builder() + .id(orderId) + .user(user) + .build(); + UserNotification notification = new UserNotification(); + notification.setNotificationType(NotificationType.ORDER_STATUS_CHANGED); + notification.setUser(user); + notification.setOrder(order); + Set parameters = Set.of(NotificationParameter.builder() + .key("orderNumber") + .value(orderId.toString()) + .userNotification(notification) + .build()); + + when(userNotificationRepository.save(any())).thenReturn(notification); + when(notificationParameterRepository.saveAll(any())).thenReturn(new ArrayList<>(parameters)); + + notificationService.notifySelfPickupOrder(order); + + verify(userNotificationRepository).save(notification); + verify(notificationParameterRepository).saveAll(parameters); + } } diff --git a/service/src/test/java/greencity/service/ubs/OrdersAdminsPageServiceImplTest.java b/service/src/test/java/greencity/service/ubs/OrdersAdminsPageServiceImplTest.java index ebf8f0dab..df9817d00 100644 --- a/service/src/test/java/greencity/service/ubs/OrdersAdminsPageServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/OrdersAdminsPageServiceImplTest.java @@ -524,7 +524,7 @@ void orderStatusForDevelopStage(String oldStatus, String newStatus) { when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); - ordersAdminsPageService.orderStatusForDevelopStage(List.of(1L), newStatus, 1L); + ordersAdminsPageService.orderStatusForDevelopStage(List.of(1L), newStatus, ModelUtils.getEmployee()); assertNotNull(order.getDateOfExport()); assertNotNull(order.getDeliverFrom()); @@ -535,6 +535,28 @@ void orderStatusForDevelopStage(String oldStatus, String newStatus) { verify(orderRepository).save(order); } + @Test + void orderStatusForDevelopStageChangeStatusToBroughtItHimselfTest() { + String newStatus = "BROUGHT_IT_HIMSELF"; + Order saved = ModelUtils.getOrder(); + saved.setOrderStatus(OrderStatus.FORMED); + + Order expected = ModelUtils.getOrder(); + expected.setOrderStatus(OrderStatus.BROUGHT_IT_HIMSELF); + expected.setDateOfExport(null); + expected.setDeliverFrom(null); + expected.setDeliverTo(null); + expected.setReceivingStation(null); + + when(orderRepository.findById(1L)).thenReturn(Optional.of(saved)); + + ordersAdminsPageService.orderStatusForDevelopStage(List.of(1L), newStatus, ModelUtils.getEmployee()); + + verify(eventService).save(eq(OrderHistory.ORDER_BROUGHT_IT_HIMSELF), anyString(), any(Order.class)); + verify(notificationService).notifySelfPickupOrder(expected); + verify(orderRepository).save(expected); + } + @ParameterizedTest @CsvSource({ "CONFIRMED, FORMED", @@ -556,7 +578,7 @@ void orderStatusForDevelopStageErasedPickUpDetailsAndResponsibleEmployees(String when(orderRepository.findById(1L)).thenReturn(Optional.of(order)); - ordersAdminsPageService.orderStatusForDevelopStage(List.of(1L), newStatus, 1L); + ordersAdminsPageService.orderStatusForDevelopStage(List.of(1L), newStatus, ModelUtils.getEmployee()); verify(orderRepository).save(order); } @@ -565,7 +587,7 @@ void orderStatusForDevelopStageErasedPickUpDetailsAndResponsibleEmployees(String void orderStatusForDevelopStageEntityNotFoundException() { when(orderRepository.findById(1L)).thenReturn(Optional.empty()); assertEquals(List.of(1L), - ordersAdminsPageService.orderStatusForDevelopStage(List.of(1L), "", 1L)); + ordersAdminsPageService.orderStatusForDevelopStage(List.of(1L), "", ModelUtils.getEmployee())); } @Test @@ -573,7 +595,7 @@ void orderStatusForDevelopStageBadOrderStatusRequestException() { when(orderRepository.findById(1L)) .thenReturn(Optional.of(ModelUtils.getOrder().setOrderStatus(OrderStatus.FORMED))); assertEquals(List.of(1L), - ordersAdminsPageService.orderStatusForDevelopStage(List.of(1L), "DONE", 1L)); + ordersAdminsPageService.orderStatusForDevelopStage(List.of(1L), "DONE", ModelUtils.getEmployee())); } @Test @@ -581,7 +603,6 @@ void orderStatusForDevelopStageBlockedByAnotherEmployeeThrowExceptionTest() { var orderId = 1L; var ordersId = List.of(orderId); var newValue = "CONFIRMED"; - var employeeId = 3L; var anotherEmployeeId = 4L; var order = Order.builder() @@ -593,7 +614,7 @@ void orderStatusForDevelopStageBlockedByAnotherEmployeeThrowExceptionTest() { when(orderRepository.findById(orderId)).thenReturn(Optional.of(order)); - var result = ordersAdminsPageService.orderStatusForDevelopStage(ordersId, newValue, employeeId); + var result = ordersAdminsPageService.orderStatusForDevelopStage(ordersId, newValue, ModelUtils.getEmployee()); verify(orderRepository).findById(orderId); verify(orderRepository, never()).save(any(Order.class)); diff --git a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java index 97b564f3b..823b8e99b 100644 --- a/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSManagementServiceImplTest.java @@ -926,6 +926,29 @@ void updateOrderDetailStatusSecond() { verify(orderRepository, times(2)).save(any()); } + @Test + void updateOrderDetailStatusToBroughtItHimselfTest() { + String email = "some@email.com"; + Order saved = getOrder(); + saved.setOrderStatus(OrderStatus.FORMED); + Order updated = getOrder(); + updated.setOrderStatus(OrderStatus.BROUGHT_IT_HIMSELF); + + when(paymentRepository.findAllByOrderId(saved.getId())).thenReturn(saved.getPayment()); + + OrderDetailStatusRequestDto detailStatusDto = OrderDetailStatusRequestDto.builder() + .orderStatus("BROUGHT_IT_HIMSELF") + .build(); + + OrderDetailStatusDto result = ubsManagementService.updateOrderDetailStatus(saved, detailStatusDto, email); + + verify(eventService).saveEvent(OrderHistory.ORDER_BROUGHT_IT_HIMSELF, email, updated); + verify(notificationService).notifySelfPickupOrder(updated); + verify(orderRepository).save(updated); + + assertEquals(OrderStatus.BROUGHT_IT_HIMSELF.name(), result.getOrderStatus()); + } + @Test void getAllEmployeesByPosition() { Order order = getOrder(); From 67b0dc4a6ed49d84d214e49d9819282563e31a26 Mon Sep 17 00:00:00 2001 From: Yurii Midianyi <45738210+Yurii-Midianyi@users.noreply.github.com> Date: Mon, 13 Nov 2023 10:36:06 +0200 Subject: [PATCH 76/80] changed admin email (#1249) --- .../resources/db/changelog/db.changelog-master.xml | 2 +- ...update-employees-set-new-main-email-Midianyi.xml | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 dao/src/main/resources/db/changelog/logs/ch-update-employees-set-new-main-email-Midianyi.xml diff --git a/dao/src/main/resources/db/changelog/db.changelog-master.xml b/dao/src/main/resources/db/changelog/db.changelog-master.xml index 3ebe6af3e..8f49ca15f 100644 --- a/dao/src/main/resources/db/changelog/db.changelog-master.xml +++ b/dao/src/main/resources/db/changelog/db.changelog-master.xml @@ -221,5 +221,5 @@ - + \ No newline at end of file diff --git a/dao/src/main/resources/db/changelog/logs/ch-update-employees-set-new-main-email-Midianyi.xml b/dao/src/main/resources/db/changelog/logs/ch-update-employees-set-new-main-email-Midianyi.xml new file mode 100644 index 000000000..869b1571f --- /dev/null +++ b/dao/src/main/resources/db/changelog/logs/ch-update-employees-set-new-main-email-Midianyi.xml @@ -0,0 +1,13 @@ + + + + + + + email='green.city.ubs@gmail.com' + + + \ No newline at end of file From efe5c21a2bd6d8715e44b0dc59e3b45fe554a1e7 Mon Sep 17 00:00:00 2001 From: Nazar <125138706+2or5@users.noreply.github.com> Date: Wed, 15 Nov 2023 12:21:50 +0200 Subject: [PATCH 77/80] create method save eng event to db (#1248) * create method save eng event to db * create tests * change log * test * test2 * fix code smells * add doc * ref code * ref code2 * ref code3 * ref code4 --- .../greencity/controller/OrderController.java | 10 +++- .../controller/OrderControllerTest.java | 2 +- .../java/greencity/entity/order/Event.java | 8 ++- .../db/changelog/db.changelog-master.xml | 5 +- ...ventEng-and-authorEng-to-Events-Bokalo.xml | 18 ++++++ .../java/greencity/constant/OrderHistory.java | 14 +++++ .../service/ubs/UBSClientService.java | 7 ++- .../service/ubs/EventServiceImpl.java | 35 ++++++++++++ .../service/ubs/UBSClientServiceImpl.java | 15 ++++- .../src/test/java/greencity/ModelUtils.java | 12 ++-- .../service/ubs/EventServiceImplTest.java | 57 +++++++++++++++++++ .../service/ubs/UBSClientServiceImplTest.java | 22 ++++++- 12 files changed, 185 insertions(+), 20 deletions(-) create mode 100644 dao/src/main/resources/db/changelog/logs/ch-add-columns-nameEventEng-and-authorEng-to-Events-Bokalo.xml diff --git a/core/src/main/java/greencity/controller/OrderController.java b/core/src/main/java/greencity/controller/OrderController.java index 598581ef5..8be71a576 100644 --- a/core/src/main/java/greencity/controller/OrderController.java +++ b/core/src/main/java/greencity/controller/OrderController.java @@ -52,6 +52,7 @@ import java.io.IOException; import java.security.Principal; import java.util.List; +import java.util.Locale; import java.util.Optional; @RestController @@ -236,7 +237,8 @@ public ResponseEntity getOrderDetailsByOrderId( /** * Controller gets info about events history from,order by order id. * - * @param id {@link Long}. + * @param id {@link Long}. + * @param locale {@link Locale}. * @return {@link HttpStatus} - http status. * @author Yuriy Bahlay. */ @@ -251,8 +253,10 @@ public ResponseEntity getOrderDetailsByOrderId( @GetMapping("/order_history/{orderId}") public ResponseEntity> getOderHistoryByOrderId( @Valid @PathVariable("orderId") Long id, - Principal principal) { - return ResponseEntity.ok().body(ubsClientService.getAllEventsForOrder(id, principal.getName())); + Principal principal, + @ApiIgnore Locale locale) { + return ResponseEntity.ok() + .body(ubsClientService.getAllEventsForOrder(id, principal.getName(), locale.getLanguage())); } /** diff --git a/core/src/test/java/greencity/controller/OrderControllerTest.java b/core/src/test/java/greencity/controller/OrderControllerTest.java index 56e4984f2..8aeee8c11 100644 --- a/core/src/test/java/greencity/controller/OrderControllerTest.java +++ b/core/src/test/java/greencity/controller/OrderControllerTest.java @@ -314,7 +314,7 @@ void testGetOrderHistoryByOrderId() throws Exception { .andExpect(status().isOk()); verify(ubsClientService, times(1)) - .getAllEventsForOrder(1L, "test@gmail.com"); + .getAllEventsForOrder(1L, "test@gmail.com", "en"); } @Test diff --git a/dao/src/main/java/greencity/entity/order/Event.java b/dao/src/main/java/greencity/entity/order/Event.java index fa80b4649..4a3306ef2 100644 --- a/dao/src/main/java/greencity/entity/order/Event.java +++ b/dao/src/main/java/greencity/entity/order/Event.java @@ -26,6 +26,12 @@ public class Event { @Column(name = "author", nullable = false) private String authorName; + @Column(name = "event_name_eng", nullable = false) + private String eventNameEng; + + @Column(name = "author_eng", nullable = false) + private String authorNameEng; + @ManyToOne private Order order; -} \ No newline at end of file +} diff --git a/dao/src/main/resources/db/changelog/db.changelog-master.xml b/dao/src/main/resources/db/changelog/db.changelog-master.xml index 8f49ca15f..bc2e9c06f 100644 --- a/dao/src/main/resources/db/changelog/db.changelog-master.xml +++ b/dao/src/main/resources/db/changelog/db.changelog-master.xml @@ -221,5 +221,8 @@ + - \ No newline at end of file + + + diff --git a/dao/src/main/resources/db/changelog/logs/ch-add-columns-nameEventEng-and-authorEng-to-Events-Bokalo.xml b/dao/src/main/resources/db/changelog/logs/ch-add-columns-nameEventEng-and-authorEng-to-Events-Bokalo.xml new file mode 100644 index 000000000..34da1dc62 --- /dev/null +++ b/dao/src/main/resources/db/changelog/logs/ch-add-columns-nameEventEng-and-authorEng-to-Events-Bokalo.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + diff --git a/service-api/src/main/java/greencity/constant/OrderHistory.java b/service-api/src/main/java/greencity/constant/OrderHistory.java index 23b6892e9..cde242ac5 100644 --- a/service-api/src/main/java/greencity/constant/OrderHistory.java +++ b/service-api/src/main/java/greencity/constant/OrderHistory.java @@ -4,15 +4,23 @@ public final class OrderHistory { public static final String ORDER_ON_THE_ROUTE = "Статус Замовлення - На маршруті"; public static final String ORDER_DONE = "Статус Замовлення - Виконано"; public static final String ORDER_BROUGHT_IT_HIMSELF = "Статус Замовлення - Привезе сам"; + public static final String ORDER_BROUGHT_IT_HIMSELF_ENG = "Order status - Will bring it myself"; public static final String ORDER_CANCELLED = "Статус Замовлення - Скасовано"; public static final String ORDER_PAID = "Замовлення Оплачено"; + public static final String ORDER_PAID_ENG = "Order Paid"; public static final String ORDER_HALF_PAID = "Замовлення Частково оплачено"; + public static final String ORDER_HALF_PAID_ENG = "Order partially paid"; public static final String SYSTEM = "Система"; + public static final String SYSTEM_ENG = "System"; public static final String ORDER_FORMED = "Статус Замовлення - Сформовано"; + public static final String ORDER_FORMED_ENG = "Order Status - Formed"; public static final String CLIENT = "Клієнт"; + public static final String CLIENT_ENG = "Client"; public static final String CHANGE_ORDER_DETAILS = "Змінено деталі замовлення."; public static final String ORDER_ADJUSTMENT = "Статус Замовлення - Узгодження"; + public static final String ORDER_ADJUSTMENT_ENG = "Order Status - Approval"; public static final String ORDER_CONFIRMED = "Статус Замовлення - Підтверджено"; + public static final String ORDER_CONFIRMED_ENG = "Order Status - Confirmed"; public static final String ORDER_NOT_TAKEN_OUT = "Статус Замовлення - Не вивезли"; public static final String ASSIGN_DRIVER = "Закріплено водія"; public static final String ASSIGN_LOGIEST = "Закріплено логіста"; @@ -25,10 +33,15 @@ public final class OrderHistory { public static final String ADD_VIOLATION = "Додано порушення"; public static final String CHANGES_VIOLATION = "Змінено деталі порушення"; public static final String DELETE_VIOLATION = "Видалено порушення"; + public static final String DELETE_VIOLATION_ENG = "Violation removed"; public static final String ADD_PAYMENT_MANUALLY = "Додано оплату №"; + public static final String ADD_PAYMENT_MANUALLY_ENG = "Added payment"; public static final String UPDATE_PAYMENT_MANUALLY = "Змінено деталі оплати № "; + public static final String UPDATE_PAYMENT_MANUALLY_ENG = "Payment details have been changed"; public static final String DELETE_PAYMENT_MANUALLY = "Видалено оплату №"; + public static final String DELETE_PAYMENT_MANUALLY_ENG = "Payments have been removed"; public static final String ADD_PAYMENT_SYSTEM = "Додано оплату №"; + public static final String ADD_PAYMENT_SYSTEM_ENG = "Added payment"; public static final String UPDATE_EXPORT_DETAILS = "Змінено деталі вивезення."; public static final String UPDATE_EXPORT_DATA = " Дата вивезення: %s."; public static final String UPDATE_DELIVERY_TIME = " Час вивезення: %s - %s."; @@ -39,6 +52,7 @@ public final class OrderHistory { public static final String RETURN_BONUSES_TO_CLIENT = "Невикористані бонуси повернено на бонусний рахунок клієнта"; public static final String WASTE_REMOVAL_ADDRESS_CHANGE = "Змінено адресу вивезення відходів"; public static final String ADD_ADMIN_COMMENT = "Додано коментар"; + public static final String ADD_ADMIN_COMMENT_ENG = "Comment added"; public static final String ADD_NEW_ECO_NUMBER = "Додано номер замовлення з магазину"; public static final String DELETED_ECO_NUMBER = "Видалено номер замовлення з магазину"; public static final String CHANGED_SENDER = "Змінено дані Відправника"; diff --git a/service-api/src/main/java/greencity/service/ubs/UBSClientService.java b/service-api/src/main/java/greencity/service/ubs/UBSClientService.java index 89e09d84a..e1df6f3b6 100644 --- a/service-api/src/main/java/greencity/service/ubs/UBSClientService.java +++ b/service-api/src/main/java/greencity/service/ubs/UBSClientService.java @@ -282,12 +282,13 @@ public interface UBSClientService { /** * Methods for finding all events for Order. * - * @param orderId {@link Long} id. - * @param email {@link String}; + * @param orderId {@link Long} id. + * @param email {@link String}; + * @param language {@link String}; * @return {@link List} that contains list of EventsDTOS. * @author Yuriy Bahlay. */ - List getAllEventsForOrder(Long orderId, String email); + List getAllEventsForOrder(Long orderId, String email, String language); /** * Method that returns order info for surcharge. diff --git a/service/src/main/java/greencity/service/ubs/EventServiceImpl.java b/service/src/main/java/greencity/service/ubs/EventServiceImpl.java index 85a1828d0..17b50473e 100644 --- a/service/src/main/java/greencity/service/ubs/EventServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/EventServiceImpl.java @@ -15,6 +15,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.HashMap; import java.util.Optional; import java.util.function.Function; import java.util.stream.Collectors; @@ -45,6 +46,9 @@ public void save(String eventName, String eventAuthor, Order order) { event.setEventDate(LocalDateTime.now()); event.setEventName(eventName); event.setAuthorName(eventAuthor); + event.setEventNameEng(getEventNameEng(eventName)); + event.setAuthorNameEng(getAuthorNameEng(eventAuthor)); + if (order.getEvents() != null) { List events = new ArrayList<>(order.getEvents()); events.add(event); @@ -54,6 +58,37 @@ public void save(String eventName, String eventAuthor, Order order) { eventRepository.save(event); } + private static final Map eventNameToEngMap = new HashMap<>(); + + static { + eventNameToEngMap.put(OrderHistory.ORDER_FORMED, OrderHistory.ORDER_FORMED_ENG); + eventNameToEngMap.put(OrderHistory.ORDER_PAID, OrderHistory.ORDER_PAID_ENG); + eventNameToEngMap.put(OrderHistory.ADD_PAYMENT_SYSTEM, OrderHistory.ADD_PAYMENT_SYSTEM_ENG); + eventNameToEngMap.put(OrderHistory.ORDER_ADJUSTMENT, OrderHistory.ORDER_ADJUSTMENT_ENG); + eventNameToEngMap.put(OrderHistory.ORDER_BROUGHT_IT_HIMSELF, OrderHistory.ORDER_BROUGHT_IT_HIMSELF_ENG); + eventNameToEngMap.put(OrderHistory.ORDER_CONFIRMED, OrderHistory.ORDER_CONFIRMED_ENG); + eventNameToEngMap.put(OrderHistory.DELETE_PAYMENT_MANUALLY, OrderHistory.DELETE_PAYMENT_MANUALLY_ENG); + eventNameToEngMap.put(OrderHistory.UPDATE_PAYMENT_MANUALLY, OrderHistory.UPDATE_PAYMENT_MANUALLY_ENG); + eventNameToEngMap.put(OrderHistory.ORDER_HALF_PAID, OrderHistory.ORDER_HALF_PAID_ENG); + eventNameToEngMap.put(OrderHistory.ADD_PAYMENT_MANUALLY, OrderHistory.ADD_PAYMENT_MANUALLY_ENG); + eventNameToEngMap.put(OrderHistory.ADD_ADMIN_COMMENT, OrderHistory.ADD_ADMIN_COMMENT_ENG); + eventNameToEngMap.put(OrderHistory.DELETE_VIOLATION, OrderHistory.DELETE_VIOLATION_ENG); + } + + private static String getEventNameEng(String eventName) { + return eventNameToEngMap.getOrDefault(eventName, eventName); + } + + private static String getAuthorNameEng(String eventAuthor) { + if (OrderHistory.SYSTEM.equals(eventAuthor)) { + return OrderHistory.SYSTEM_ENG; + } else if (OrderHistory.CLIENT.equals(eventAuthor)) { + return OrderHistory.CLIENT_ENG; + } else { + return eventAuthor; + } + } + /** * This method return correct status for changes with Responsible employee. * diff --git a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java index dea634137..d61167e5d 100644 --- a/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/UBSClientServiceImpl.java @@ -258,6 +258,7 @@ public class UBSClientServiceImpl implements UBSClientService { private static final String KYIV_REGION_UA = "Київська область"; private static final String KYIV_EN = "Kyiv"; private static final String KYIV_UA = "місто Київ"; + private static final String LANGUAGE_EN = "en"; @Override @Transactional @@ -1331,7 +1332,7 @@ public AllPointsUserDto findAllCurrentPointsForUser(String uuid) { * {@inheritDoc} */ @Override - public List getAllEventsForOrder(Long orderId, String email) { + public List getAllEventsForOrder(Long orderId, String email, String language) { Optional order = orderRepository.findById(orderId); if (order.isEmpty()) { throw new NotFoundException(ORDER_WITH_CURRENT_ID_DOES_NOT_EXIST); @@ -1340,6 +1341,16 @@ public List getAllEventsForOrder(Long orderId, String email) { if (orderEvents.isEmpty()) { throw new NotFoundException(EVENTS_NOT_FOUND_EXCEPTION + orderId); } + if (LANGUAGE_EN.equals(language)) { + return orderEvents + .stream() + .peek(event -> { + event.setEventName(event.getEventNameEng()); + event.setAuthorName(event.getAuthorNameEng()); + }) + .map(event -> modelMapper.map(event, EventDto.class)) + .collect(toList()); + } return orderEvents .stream() .map(event -> modelMapper.map(event, EventDto.class)) @@ -1949,4 +1960,4 @@ public List getAllDistricts(String region, String city) { return locationDtos.stream().map(p -> modelMapper.map(p, DistrictDto.class)) .collect(Collectors.toList()); } -} \ No newline at end of file +} diff --git a/service/src/test/java/greencity/ModelUtils.java b/service/src/test/java/greencity/ModelUtils.java index f68d51947..e998d74fa 100644 --- a/service/src/test/java/greencity/ModelUtils.java +++ b/service/src/test/java/greencity/ModelUtils.java @@ -2176,7 +2176,7 @@ public static Order getFormedOrder() { return Order.builder() .id(1L) .events(List.of(new Event(1L, LocalDateTime.now(), - "Roman", "Roman", new Order()))) + "Roman", "Roman", "Roman", "Roman", new Order()))) .orderStatus(OrderStatus.FORMED) .payment(singletonList(Payment.builder() .id(1L) @@ -2198,7 +2198,7 @@ public static Order getCanceledPaidOrder() { return Order.builder() .id(1L) .events(List.of(new Event(1L, LocalDateTime.now(), - "Roman", "Roman", new Order()))) + "Roman", "Roman", "Roman", "Roman", new Order()))) .orderStatus(OrderStatus.CANCELED) .payment(singletonList(Payment.builder() .id(1L) @@ -2220,7 +2220,7 @@ public static Order getAdjustmentPaidOrder() { return Order.builder() .id(1L) .events(List.of(new Event(1L, LocalDateTime.now(), - "Roman", "Roman", new Order()))) + "Roman", "Roman", "Roman", "Roman", new Order()))) .orderStatus(OrderStatus.ADJUSTMENT) .payment(singletonList(Payment.builder() .id(1L) @@ -2242,7 +2242,7 @@ public static Order getFormedHalfPaidOrder() { return Order.builder() .id(1L) .events(List.of(new Event(1L, LocalDateTime.now(), - "Roman", "Roman", new Order()))) + "Roman", "Roman", "Roman", "Roman", new Order()))) .orderStatus(OrderStatus.FORMED) .payment(singletonList(Payment.builder() .id(1L) @@ -2264,7 +2264,7 @@ public static Order getCanceledHalfPaidOrder() { return Order.builder() .id(1L) .events(List.of(new Event(1L, LocalDateTime.now(), - "Roman", "Roman", new Order()))) + "Roman", "Roman", "Roman", "Roman", new Order()))) .orderStatus(OrderStatus.CANCELED) .payment(singletonList(Payment.builder() .id(1L) @@ -5302,4 +5302,4 @@ public static PositionWithTranslateDto getPositionWithTranslateDto(Long id) { public static Refund getRefund(Long id) { return Refund.builder().orderId(id).build(); } -} \ No newline at end of file +} diff --git a/service/src/test/java/greencity/service/ubs/EventServiceImplTest.java b/service/src/test/java/greencity/service/ubs/EventServiceImplTest.java index 7262fa075..cd1999906 100644 --- a/service/src/test/java/greencity/service/ubs/EventServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/EventServiceImplTest.java @@ -8,12 +8,17 @@ import greencity.service.ubs.EventServiceImpl; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.CsvSource; +import org.junit.jupiter.params.provider.MethodSource; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import java.util.Arrays; import java.util.Optional; +import java.util.stream.Stream; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; @@ -46,6 +51,58 @@ void saveEmptyEventTest() { verify(eventRepository, times(0)).save(any()); } + @Test + void testSaveEventEng() { + String eventAuthorSystem = "Система"; + String eventAuthorClient = "Клієнт"; + Order order = ModelUtils.getOrder(); + order.setEvents(Arrays.asList(ModelUtils.getListOfEvents().get(0), + ModelUtils.getListOfEvents().get(1))); + when(eventRepository.save(any())).thenReturn(ModelUtils.getListOfEvents().get(0)); + + eventService.save(OrderHistory.ORDER_FORMED, eventAuthorSystem, order); + eventService.save(OrderHistory.ORDER_PAID, eventAuthorClient, order); + eventService.save(OrderHistory.ADD_PAYMENT_SYSTEM, eventAuthorSystem, order); + eventService.save(OrderHistory.ORDER_ADJUSTMENT, eventAuthorSystem, order); + eventService.save(OrderHistory.ORDER_CONFIRMED, eventAuthorSystem, order); + + assertEquals("Order Status - Formed", OrderHistory.ORDER_FORMED_ENG); + assertEquals("System", OrderHistory.SYSTEM_ENG); + assertEquals("Client", OrderHistory.CLIENT_ENG); + assertEquals("Order Paid", OrderHistory.ORDER_PAID_ENG); + assertEquals("Added payment", OrderHistory.ADD_PAYMENT_SYSTEM_ENG); + assertEquals("Order Status - Approval", OrderHistory.ORDER_ADJUSTMENT_ENG); + assertEquals("Order Status - Confirmed", OrderHistory.ORDER_CONFIRMED_ENG); + verify(eventRepository, times(5)).save(any()); + } + + @Test + void testSaveEventEngWithUserName() { + String userName = "Test"; + Order order = ModelUtils.getOrder(); + order.setEvents(Arrays.asList(ModelUtils.getListOfEvents().get(0), + ModelUtils.getListOfEvents().get(1))); + when(eventRepository.save(any())).thenReturn(ModelUtils.getListOfEvents().get(0)); + + eventService.save(OrderHistory.DELETE_PAYMENT_MANUALLY, userName, order); + eventService.save(OrderHistory.ORDER_BROUGHT_IT_HIMSELF, userName, order); + eventService.save(OrderHistory.UPDATE_PAYMENT_MANUALLY, userName, order); + eventService.save(OrderHistory.ORDER_HALF_PAID, userName, order); + eventService.save(OrderHistory.ADD_PAYMENT_MANUALLY, userName, order); + eventService.save(OrderHistory.ADD_ADMIN_COMMENT, userName, order); + eventService.save(OrderHistory.DELETE_VIOLATION, userName, order); + + assertEquals("Payments have been removed", OrderHistory.DELETE_PAYMENT_MANUALLY_ENG); + assertEquals("Order status - Will bring it myself", OrderHistory.ORDER_BROUGHT_IT_HIMSELF_ENG); + assertEquals("Payment details have been changed", OrderHistory.UPDATE_PAYMENT_MANUALLY_ENG); + assertEquals("Order partially paid", OrderHistory.ORDER_HALF_PAID_ENG); + assertEquals("Added payment", OrderHistory.ADD_PAYMENT_MANUALLY_ENG); + assertEquals("Comment added", OrderHistory.ADD_ADMIN_COMMENT_ENG); + assertEquals("Violation removed", OrderHistory.DELETE_VIOLATION_ENG); + + verify(eventRepository, times(7)).save(any()); + } + @Test void changesWithResponsibleEmployeeTest() { String existedCallManager = eventService.changesWithResponsibleEmployee(2L, Boolean.TRUE); diff --git a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java index f62614848..e475f2b90 100644 --- a/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/UBSClientServiceImplTest.java @@ -227,6 +227,7 @@ import static greencity.constant.ErrorMessage.TARIFF_NOT_FOUND; import static greencity.constant.ErrorMessage.TARIFF_OR_LOCATION_IS_DEACTIVATED; import static greencity.constant.ErrorMessage.USER_WITH_CURRENT_UUID_DOES_NOT_EXIST; +import static java.util.stream.Collectors.toList; import static org.junit.Assert.assertTrue; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -2820,14 +2821,29 @@ void testGelAllEventsFromOrderByOrderId() { List eventDTOS = orderEvents.stream() .map(event -> modelMapper.map(event, EventDto.class)) .collect(Collectors.toList()); - assertEquals(eventDTOS, ubsService.getAllEventsForOrder(1L, anyString())); + assertEquals(eventDTOS, ubsService.getAllEventsForOrder(1L, anyString(), "ua")); + } + + @Test + void testGelAllEventsFromOrderByOrderIdWithEng() { + List orderEvents = getListOfEvents(); + when(orderRepository.findById(1L)).thenReturn(getOrderWithEvents()); + when(eventRepository.findAllEventsByOrderId(1L)).thenReturn(orderEvents); + List eventDTOS = orderEvents.stream() + .peek(event -> { + event.setEventName(event.getEventNameEng()); + event.setAuthorName(event.getAuthorNameEng()); + }) + .map(event -> modelMapper.map(event, EventDto.class)) + .collect(toList()); + assertEquals(eventDTOS, ubsService.getAllEventsForOrder(1L, anyString(), "en")); } @Test void testGelAllEventsFromOrderByOrderIdWithThrowingOrderNotFindException() { when(orderRepository.findById(1L)).thenReturn(Optional.empty()); assertThrows(NotFoundException.class, - () -> ubsService.getAllEventsForOrder(1L, "abc")); + () -> ubsService.getAllEventsForOrder(1L, "abc", "en")); } @Test @@ -2835,7 +2851,7 @@ void testGelAllEventsFromOrderByOrderIdWithThrowingEventsNotFoundException() { when(orderRepository.findById(1L)).thenReturn(getOrderWithEvents()); when(eventRepository.findAllEventsByOrderId(1L)).thenReturn(Collections.emptyList()); assertThrows(NotFoundException.class, - () -> ubsService.getAllEventsForOrder(1L, "abc")); + () -> ubsService.getAllEventsForOrder(1L, "abc", "en")); } @Test From d52b548a9de1a30060ea7e1a4e3814422b5027d8 Mon Sep 17 00:00:00 2001 From: Nazar <125138706+2or5@users.noreply.github.com> Date: Wed, 15 Nov 2023 12:33:34 +0200 Subject: [PATCH 78/80] create method save eng event to db (#1248) * create method save eng event to db * create tests * change log * test * test2 * fix code smells * add doc * ref code * ref code2 * ref code3 * ref code4 From 7cc72a97cb8fcf3d2f48f874c6174696e4f68d54 Mon Sep 17 00:00:00 2001 From: Skyere <70713060+Skyere@users.noreply.github.com> Date: Fri, 24 Nov 2023 20:24:15 +0200 Subject: [PATCH 79/80] Update liqpay library --- service/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/pom.xml b/service/pom.xml index f3ab0fcf3..f0f4e638c 100644 --- a/service/pom.xml +++ b/service/pom.xml @@ -129,7 +129,7 @@ com.liqpay liqpay-sdk - 0.7-SNAPSHOT + 0.8-SNAPSHOT From 0ef928ff0ddcf7ca715c3d97791ea7c0d7850ca2 Mon Sep 17 00:00:00 2001 From: Nazar <125138706+2or5@users.noreply.github.com> Date: Mon, 27 Nov 2023 18:46:25 +0200 Subject: [PATCH 80/80] fix bug with translate events (#1259) --- .../java/greencity/constant/OrderHistory.java | 8 +++---- .../service/ubs/EventServiceImpl.java | 21 +++++++++++++++---- .../service/ubs/EventServiceImplTest.java | 9 ++++---- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/service-api/src/main/java/greencity/constant/OrderHistory.java b/service-api/src/main/java/greencity/constant/OrderHistory.java index cde242ac5..2f8a61c5f 100644 --- a/service-api/src/main/java/greencity/constant/OrderHistory.java +++ b/service-api/src/main/java/greencity/constant/OrderHistory.java @@ -35,13 +35,13 @@ public final class OrderHistory { public static final String DELETE_VIOLATION = "Видалено порушення"; public static final String DELETE_VIOLATION_ENG = "Violation removed"; public static final String ADD_PAYMENT_MANUALLY = "Додано оплату №"; - public static final String ADD_PAYMENT_MANUALLY_ENG = "Added payment"; + public static final String ADD_PAYMENT_MANUALLY_ENG = "Added payment №"; public static final String UPDATE_PAYMENT_MANUALLY = "Змінено деталі оплати № "; - public static final String UPDATE_PAYMENT_MANUALLY_ENG = "Payment details have been changed"; + public static final String UPDATE_PAYMENT_MANUALLY_ENG = "Payment details changed № "; public static final String DELETE_PAYMENT_MANUALLY = "Видалено оплату №"; - public static final String DELETE_PAYMENT_MANUALLY_ENG = "Payments have been removed"; + public static final String DELETE_PAYMENT_MANUALLY_ENG = "Payment removed №"; public static final String ADD_PAYMENT_SYSTEM = "Додано оплату №"; - public static final String ADD_PAYMENT_SYSTEM_ENG = "Added payment"; + public static final String ADD_PAYMENT_SYSTEM_ENG = "Added payment №"; public static final String UPDATE_EXPORT_DETAILS = "Змінено деталі вивезення."; public static final String UPDATE_EXPORT_DATA = " Дата вивезення: %s."; public static final String UPDATE_DELIVERY_TIME = " Час вивезення: %s - %s."; diff --git a/service/src/main/java/greencity/service/ubs/EventServiceImpl.java b/service/src/main/java/greencity/service/ubs/EventServiceImpl.java index 17b50473e..50535e3a3 100644 --- a/service/src/main/java/greencity/service/ubs/EventServiceImpl.java +++ b/service/src/main/java/greencity/service/ubs/EventServiceImpl.java @@ -48,6 +48,7 @@ public void save(String eventName, String eventAuthor, Order order) { event.setAuthorName(eventAuthor); event.setEventNameEng(getEventNameEng(eventName)); event.setAuthorNameEng(getAuthorNameEng(eventAuthor)); + getEventNameEngWithNumbers(eventName, event); if (order.getEvents() != null) { List events = new ArrayList<>(order.getEvents()); @@ -58,19 +59,31 @@ public void save(String eventName, String eventAuthor, Order order) { eventRepository.save(event); } + private void getEventNameEngWithNumbers(String eventName, Event event) { + if (eventName.startsWith(OrderHistory.ADD_PAYMENT_SYSTEM)) { + event.setEventNameEng( + OrderHistory.ADD_PAYMENT_SYSTEM_ENG + eventName.substring(OrderHistory.ADD_PAYMENT_SYSTEM.length())); + } else if (eventName.startsWith(OrderHistory.DELETE_PAYMENT_MANUALLY)) { + event.setEventNameEng(OrderHistory.DELETE_PAYMENT_MANUALLY_ENG + + eventName.substring(OrderHistory.DELETE_PAYMENT_MANUALLY.length())); + } else if (eventName.startsWith(OrderHistory.UPDATE_PAYMENT_MANUALLY)) { + event.setEventNameEng(OrderHistory.UPDATE_PAYMENT_MANUALLY_ENG + + eventName.substring(OrderHistory.UPDATE_PAYMENT_MANUALLY.length())); + } else if (eventName.startsWith(OrderHistory.ADD_PAYMENT_MANUALLY)) { + event.setEventNameEng(OrderHistory.ADD_PAYMENT_MANUALLY_ENG + + eventName.substring(OrderHistory.ADD_PAYMENT_MANUALLY.length())); + } + } + private static final Map eventNameToEngMap = new HashMap<>(); static { eventNameToEngMap.put(OrderHistory.ORDER_FORMED, OrderHistory.ORDER_FORMED_ENG); eventNameToEngMap.put(OrderHistory.ORDER_PAID, OrderHistory.ORDER_PAID_ENG); - eventNameToEngMap.put(OrderHistory.ADD_PAYMENT_SYSTEM, OrderHistory.ADD_PAYMENT_SYSTEM_ENG); eventNameToEngMap.put(OrderHistory.ORDER_ADJUSTMENT, OrderHistory.ORDER_ADJUSTMENT_ENG); eventNameToEngMap.put(OrderHistory.ORDER_BROUGHT_IT_HIMSELF, OrderHistory.ORDER_BROUGHT_IT_HIMSELF_ENG); eventNameToEngMap.put(OrderHistory.ORDER_CONFIRMED, OrderHistory.ORDER_CONFIRMED_ENG); - eventNameToEngMap.put(OrderHistory.DELETE_PAYMENT_MANUALLY, OrderHistory.DELETE_PAYMENT_MANUALLY_ENG); - eventNameToEngMap.put(OrderHistory.UPDATE_PAYMENT_MANUALLY, OrderHistory.UPDATE_PAYMENT_MANUALLY_ENG); eventNameToEngMap.put(OrderHistory.ORDER_HALF_PAID, OrderHistory.ORDER_HALF_PAID_ENG); - eventNameToEngMap.put(OrderHistory.ADD_PAYMENT_MANUALLY, OrderHistory.ADD_PAYMENT_MANUALLY_ENG); eventNameToEngMap.put(OrderHistory.ADD_ADMIN_COMMENT, OrderHistory.ADD_ADMIN_COMMENT_ENG); eventNameToEngMap.put(OrderHistory.DELETE_VIOLATION, OrderHistory.DELETE_VIOLATION_ENG); } diff --git a/service/src/test/java/greencity/service/ubs/EventServiceImplTest.java b/service/src/test/java/greencity/service/ubs/EventServiceImplTest.java index cd1999906..5c9363e5f 100644 --- a/service/src/test/java/greencity/service/ubs/EventServiceImplTest.java +++ b/service/src/test/java/greencity/service/ubs/EventServiceImplTest.java @@ -70,7 +70,8 @@ void testSaveEventEng() { assertEquals("System", OrderHistory.SYSTEM_ENG); assertEquals("Client", OrderHistory.CLIENT_ENG); assertEquals("Order Paid", OrderHistory.ORDER_PAID_ENG); - assertEquals("Added payment", OrderHistory.ADD_PAYMENT_SYSTEM_ENG); + assertEquals("Added payment №", OrderHistory.ADD_PAYMENT_SYSTEM_ENG); + assertEquals("Added payment №", OrderHistory.ADD_PAYMENT_SYSTEM_ENG); assertEquals("Order Status - Approval", OrderHistory.ORDER_ADJUSTMENT_ENG); assertEquals("Order Status - Confirmed", OrderHistory.ORDER_CONFIRMED_ENG); verify(eventRepository, times(5)).save(any()); @@ -92,11 +93,11 @@ void testSaveEventEngWithUserName() { eventService.save(OrderHistory.ADD_ADMIN_COMMENT, userName, order); eventService.save(OrderHistory.DELETE_VIOLATION, userName, order); - assertEquals("Payments have been removed", OrderHistory.DELETE_PAYMENT_MANUALLY_ENG); + assertEquals("Payment removed №", OrderHistory.DELETE_PAYMENT_MANUALLY_ENG); assertEquals("Order status - Will bring it myself", OrderHistory.ORDER_BROUGHT_IT_HIMSELF_ENG); - assertEquals("Payment details have been changed", OrderHistory.UPDATE_PAYMENT_MANUALLY_ENG); + assertEquals("Payment details changed № ", OrderHistory.UPDATE_PAYMENT_MANUALLY_ENG); assertEquals("Order partially paid", OrderHistory.ORDER_HALF_PAID_ENG); - assertEquals("Added payment", OrderHistory.ADD_PAYMENT_MANUALLY_ENG); + assertEquals("Added payment №", OrderHistory.ADD_PAYMENT_MANUALLY_ENG); assertEquals("Comment added", OrderHistory.ADD_ADMIN_COMMENT_ENG); assertEquals("Violation removed", OrderHistory.DELETE_VIOLATION_ENG);