MultiStoreCheckoutBatchServiceTest.java.hold 4.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package com.ruoyi.app.order;
  2. import com.ruoyi.app.order.dto.MultiStoreBatchCreateRequest;
  3. import com.ruoyi.app.order.dto.MultiStoreQuoteRequest;
  4. import com.ruoyi.app.order.dto.MultiStoreQuoteView;
  5. import com.ruoyi.common.core.redis.RedisCache;
  6. import com.ruoyi.system.domain.InfoAddress;
  7. import com.ruoyi.system.domain.OrderCheckoutBatch;
  8. import com.ruoyi.system.domain.OrderParent;
  9. import com.ruoyi.system.domain.PosFood;
  10. import com.ruoyi.system.domain.PosOrder;
  11. import com.ruoyi.system.domain.PosStore;
  12. import com.ruoyi.system.mapper.FoodSpecsValueMapper;
  13. import com.ruoyi.system.mapper.InfoAddressMapper;
  14. import com.ruoyi.system.mapper.OrderCheckoutMapper;
  15. import com.ruoyi.system.mapper.PosFoodMapper;
  16. import com.ruoyi.system.mapper.PosStoreMapper;
  17. import com.ruoyi.system.service.IOrderParentService;
  18. import com.ruoyi.system.service.IPosOrderService;
  19. import org.junit.jupiter.api.Test;
  20. import java.math.BigDecimal;
  21. import java.util.List;
  22. import static org.junit.jupiter.api.Assertions.assertEquals;
  23. import static org.junit.jupiter.api.Assertions.assertFalse;
  24. import static org.mockito.ArgumentMatchers.any;
  25. import static org.mockito.Mockito.mock;
  26. import static org.mockito.Mockito.never;
  27. import static org.mockito.Mockito.verify;
  28. import static org.mockito.Mockito.when;
  29. class MultiStoreCheckoutBatchServiceTest {
  30. private final MultiStoreCheckoutQuoteService quotes = mock(MultiStoreCheckoutQuoteService.class);
  31. private final OrderCheckoutMapper checkout = mock(OrderCheckoutMapper.class);
  32. private final IOrderParentService parents = mock(IOrderParentService.class);
  33. private final IPosOrderService orders = mock(IPosOrderService.class);
  34. private final InfoAddressMapper addresses = mock(InfoAddressMapper.class);
  35. private final PosStoreMapper stores = mock(PosStoreMapper.class);
  36. private final PosFoodMapper foods = mock(PosFoodMapper.class);
  37. private final FoodSpecsValueMapper values = mock(FoodSpecsValueMapper.class);
  38. private final OrderPromotionHelper promotions = mock(OrderPromotionHelper.class);
  39. private MultiStoreCheckoutBatchService subject() {
  40. return new MultiStoreCheckoutBatchService(quotes, checkout, parents, orders,
  41. addresses, stores, foods, values, promotions);
  42. }
  43. @Test
  44. void createsHiddenUnpaidChildrenWithoutOpeningFulfilment() {
  45. MultiStoreQuoteRequest requested = new MultiStoreQuoteRequest(10L, true, List.of(
  46. new MultiStoreQuoteRequest.Store(1L, null, List.of(new MultiStoreQuoteRequest.Item(11L, 1, List.of())), null, null),
  47. new MultiStoreQuoteRequest.Store(2L, null, List.of(new MultiStoreQuoteRequest.Item(22L, 1, List.of())), null, null)));
  48. when(quotes.loadSnapshot("quote", 42L)).thenReturn(
  49. new MultiStoreCheckoutQuoteService.QuoteSnapshot(42L, requested, "fingerprint", Long.MAX_VALUE));
  50. when(quotes.quote(requested, 42L)).thenReturn(new MultiStoreQuoteView("other", Long.MAX_VALUE,
  51. 7L, 1L, 1000, List.of(1L, 2L), List.of(
  52. new MultiStoreQuoteView.StorePrice(1L, new BigDecimal("50"), new BigDecimal("50"),
  53. new BigDecimal("40"), new BigDecimal("36"), new BigDecimal("86"), List.of("1")),
  54. new MultiStoreQuoteView.StorePrice(2L, new BigDecimal("60"), new BigDecimal("60"),
  55. new BigDecimal("40"), new BigDecimal("36"), new BigDecimal("96"), List.of("1"))),
  56. List.of(), new BigDecimal("0.9"), "fingerprint"));
  57. InfoAddress address = new InfoAddress(); address.setId(10L); address.setUserId(42L);
  58. when(addresses.selectById(10L)).thenReturn(address);
  59. for (int id : List.of(1, 2)) {
  60. PosStore store = new PosStore(); store.setId(id); store.setUserId((long) id);
  61. when(stores.selectById((long) id)).thenReturn(store);
  62. PosFood food = new PosFood(); food.setId(id == 1 ? 11L : 22L);
  63. food.setPrice(new BigDecimal(id == 1 ? "50" : "60")); food.setName("meal");
  64. when(foods.selectById(food.getId())).thenReturn(food);
  65. }
  66. when(checkout.insertOrGetBatch(any(OrderCheckoutBatch.class))).thenAnswer(call -> {
  67. OrderCheckoutBatch row = call.getArgument(0); row.setId(100L); return 1;
  68. });
  69. when(checkout.selectBatchById(100L)).thenAnswer(call -> created);
  70. when(orders.save(any(PosOrder.class))).thenAnswer(call -> {
  71. PosOrder order = call.getArgument(0); order.setId(order.getMdId()); return true;
  72. });
  73. MultiStoreCheckoutBatchService.BatchCreated result = subject().create(
  74. new MultiStoreBatchCreateRequest("request-1", "quote", List.of(1L, 2L)), 42L);
  75. assertEquals(100L, result.batchId());
  76. assertEquals("PENDING", result.status());
  77. assertEquals(2, result.members().size());
  78. assertFalse(result.members().get(0).payType() != null);
  79. verify(parents).save(any(OrderParent.class));
  80. verify(checkout).insertGroup(any());
  81. }
  82. private OrderCheckoutBatch created;
  83. }