feat(shop): 添加订单取消和退款时的水票撤销功能
- 在ShopOrderController中注入GltTicketRevokeService服务 - 实现订单状态改为已取消时同步撤销相关水票、释放计划和送水订单 - 实现退款成功后自动撤销水票相关数据的功能 - 新增GltTicketRevokeService服务处理水票撤销逻辑 - 添加批量订单取消时的水票撤销支持 - 实现撤销操作的幂等性确保无副作用 - 添加单元测试验证水票撤销功能的正确性
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
package com.gxwebsoft.glt.service;
|
||||
|
||||
import com.gxwebsoft.glt.entity.GltUserTicket;
|
||||
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 java.util.List;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.isNull;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class GltTicketRevokeServiceTest {
|
||||
|
||||
@Mock
|
||||
private GltUserTicketService gltUserTicketService;
|
||||
@Mock
|
||||
private GltUserTicketReleaseService gltUserTicketReleaseService;
|
||||
@Mock
|
||||
private GltTicketOrderService gltTicketOrderService;
|
||||
|
||||
@InjectMocks
|
||||
private GltTicketRevokeService gltTicketRevokeService;
|
||||
|
||||
@Test
|
||||
void revokeByShopOrder_noTenant_noop() {
|
||||
int revoked = gltTicketRevokeService.revokeByShopOrder(null, 1, "O1", "r");
|
||||
assertEquals(0, revoked);
|
||||
verifyNoInteractions(gltUserTicketService, gltUserTicketReleaseService, gltTicketOrderService);
|
||||
}
|
||||
|
||||
@Test
|
||||
void revokeByShopOrder_noTickets_noop() {
|
||||
when(gltUserTicketService.list(any())).thenReturn(List.of());
|
||||
int revoked = gltTicketRevokeService.revokeByShopOrder(10584, 1, "O1", "r");
|
||||
assertEquals(0, revoked);
|
||||
verify(gltUserTicketService, times(1)).list(any());
|
||||
verifyNoMoreInteractions(gltUserTicketService);
|
||||
verifyNoInteractions(gltUserTicketReleaseService, gltTicketOrderService);
|
||||
}
|
||||
|
||||
@Test
|
||||
void revokeByShopOrder_hasTickets_revokesAll() {
|
||||
GltUserTicket t = new GltUserTicket();
|
||||
t.setId(123);
|
||||
t.setTenantId(10584);
|
||||
when(gltUserTicketService.list(any())).thenReturn(List.of(t));
|
||||
when(gltUserTicketService.update(isNull(), any())).thenReturn(true);
|
||||
when(gltTicketOrderService.update(isNull(), any())).thenReturn(true);
|
||||
when(gltUserTicketReleaseService.update(isNull(), any())).thenReturn(true);
|
||||
|
||||
int revoked = gltTicketRevokeService.revokeByShopOrder(10584, 1, "O1", "退款撤销");
|
||||
|
||||
assertEquals(1, revoked);
|
||||
verify(gltTicketOrderService, times(1)).update(isNull(), any());
|
||||
verify(gltUserTicketReleaseService, times(1)).update(isNull(), any());
|
||||
verify(gltUserTicketService, times(1)).update(isNull(), any());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user