|
|
@@ -5,7 +5,6 @@ import com.ruoyi.common.exception.ServiceException;
|
|
|
import com.ruoyi.common.utils.MessageUtils;
|
|
|
import com.ruoyi.system.domain.PosOrder;
|
|
|
import com.ruoyi.system.domain.PosStore;
|
|
|
-import com.ruoyi.system.service.IPosOrderService;
|
|
|
import com.ruoyi.system.service.IPosStoreService;
|
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
|
|
@@ -16,9 +15,8 @@ import static org.junit.jupiter.api.Assertions.*;
|
|
|
import static org.mockito.Mockito.*;
|
|
|
|
|
|
class MerchantOrderPrintServiceTest {
|
|
|
- private final IPosOrderService orders = mock(IPosOrderService.class);
|
|
|
private final IPosStoreService stores = mock(IPosStoreService.class);
|
|
|
- private final MerchantOrderPrintService service = new MerchantOrderPrintService(orders, stores);
|
|
|
+ private final MerchantOrderPrintService service = new MerchantOrderPrintService(stores);
|
|
|
|
|
|
private PosOrder order() {
|
|
|
PosOrder order = new PosOrder();
|
|
|
@@ -27,18 +25,31 @@ class MerchantOrderPrintServiceTest {
|
|
|
order.setFood("[{\"id\":9129,\"name\":\"薑蔥焗三鮮\",\"price\":40,\"otherPrice\":5,\"number\":2,\"ask\":[\"小\",\"中辣\"],\"beizhu\":\"少盐\"}]");
|
|
|
order.setFoodAmount(90); order.setAmount(100); order.setFreight(40.0);
|
|
|
order.setShAddress("{\"name\":\"顾客\",\"phone\":\"0900000000\",\"address\":\"台北\",\"addressDetail\":\"二楼\",\"userId\":999}");
|
|
|
- when(orders.getById(123L)).thenReturn(order);
|
|
|
PosStore store = new PosStore(); store.setPosName("新店名"); store.setAddress("门店地址"); store.setTelephone("0200000000");
|
|
|
when(stores.getById(7L)).thenReturn(store);
|
|
|
return order;
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ void returnsTaiwanTraditionalPaymentNameForEachStoredPayType() {
|
|
|
+ PosOrder order = order();
|
|
|
+ String[] names = {"貨到付款", "信用卡", "LINE Pay", "現金", "Apple Pay", "線下轉帳"};
|
|
|
+ for (int type = 1; type <= names.length; type++) {
|
|
|
+ order.setPayType(String.valueOf(type));
|
|
|
+ var view = service.getOrderPrintInfo(order);
|
|
|
+ assertEquals(String.valueOf(type), view.getPayType());
|
|
|
+ assertEquals(names[type - 1], view.getPayTypeName());
|
|
|
+ }
|
|
|
+ order.setPayType("99");
|
|
|
+ assertEquals("未知付款方式", service.getOrderPrintInfo(order).getPayTypeName());
|
|
|
+ }
|
|
|
+
|
|
|
@Test
|
|
|
void freezesProductSpecsAndNotesForBothOrdinaryAndMultiStoreChildOrders() throws Exception {
|
|
|
PosOrder order = order();
|
|
|
for (String parent : List.of("ORDER-123", "BATCH-123")) {
|
|
|
order.setParentDdId(parent);
|
|
|
- var view = service.getOrderPrintInfo(123L);
|
|
|
+ var view = service.getOrderPrintInfo(order);
|
|
|
assertEquals("下单时店名", view.getStoreName());
|
|
|
assertEquals("门店地址", view.getStoreAddress());
|
|
|
assertEquals("ORDER-123", view.getOrderNo());
|
|
|
@@ -63,7 +74,7 @@ class MerchantOrderPrintServiceTest {
|
|
|
order.setMerchantDeliverySubsidy(new BigDecimal("32"));
|
|
|
order.setDiscountAmount(1); order.setMdDiscountAmount(2);
|
|
|
order.setSalesReduction(3); order.setMdSalesReduction(4); order.setPointsReduction(5);
|
|
|
- var view = service.getOrderPrintInfo(123L);
|
|
|
+ var view = service.getOrderPrintInfo(order);
|
|
|
assertEquals(100, view.getAmount());
|
|
|
assertEquals(90, view.getFoodAmount());
|
|
|
assertEquals(0, view.getFreight().compareTo(new BigDecimal("40")));
|
|
|
@@ -80,7 +91,7 @@ class MerchantOrderPrintServiceTest {
|
|
|
order.setReservePhone("0900000000"); order.setPickUpTime("18:30");
|
|
|
for (Long type : List.of(1L, 2L)) {
|
|
|
order.setType(type);
|
|
|
- var view = service.getOrderPrintInfo(123L);
|
|
|
+ var view = service.getOrderPrintInfo(order);
|
|
|
assertNull(view.getRecipient());
|
|
|
assertEquals(8L, view.getPickUpNum());
|
|
|
assertEquals("A3", view.getTableNo());
|
|
|
@@ -91,26 +102,26 @@ class MerchantOrderPrintServiceTest {
|
|
|
assertTrue(view.getItems().getFirst().specifications().isEmpty());
|
|
|
}
|
|
|
order.setShAddress("null");
|
|
|
- assertNull(service.getOrderPrintInfo(123L).getRecipient());
|
|
|
+ assertNull(service.getOrderPrintInfo(order).getRecipient());
|
|
|
}
|
|
|
|
|
|
@Test
|
|
|
void missingStoreUsesStoredNameAndMissingOrderOrCorruptSnapshotFailsExplicitly() {
|
|
|
PosOrder order = order();
|
|
|
when(stores.getById(7L)).thenReturn(null);
|
|
|
- assertEquals("下单时店名", service.getOrderPrintInfo(123L).getStoreName());
|
|
|
- assertNull(service.getOrderPrintInfo(123L).getStoreAddress());
|
|
|
+ assertEquals("下单时店名", service.getOrderPrintInfo(order).getStoreName());
|
|
|
+ assertNull(service.getOrderPrintInfo(order).getStoreAddress());
|
|
|
try (var messages = mockStatic(MessageUtils.class, call -> call.getArgument(0))) {
|
|
|
assertEquals("merchant.order.not.found", assertThrows(ServiceException.class,
|
|
|
- () -> service.getOrderPrintInfo(999L)).getMessage());
|
|
|
+ () -> service.getOrderPrintInfo(null)).getMessage());
|
|
|
for (String data : List.of("bad-json", "[]", "[null]", "[{\"name\":\"商品\",\"number\":0}]")) {
|
|
|
order.setFood(data);
|
|
|
assertEquals("merchant.order.print.invalidSnapshot", assertThrows(ServiceException.class,
|
|
|
- () -> service.getOrderPrintInfo(123L)).getMessage());
|
|
|
+ () -> service.getOrderPrintInfo(order)).getMessage());
|
|
|
}
|
|
|
order.setFood("[{\"name\":\"商品\",\"number\":1}]"); order.setShAddress("bad-address");
|
|
|
assertEquals("merchant.order.print.invalidSnapshot", assertThrows(ServiceException.class,
|
|
|
- () -> service.getOrderPrintInfo(123L)).getMessage());
|
|
|
+ () -> service.getOrderPrintInfo(order)).getMessage());
|
|
|
}
|
|
|
}
|
|
|
}
|