重构:优化订单通知消息标签,支持动态显示订单类型
- 新增 OrderMessageLabelResolver 用于解析订单场景标签 - 修改微信公众号下单通知,根据下单类型(随机单/指定单/打赏/礼物)显示对应标签 - 更新 WxCustomMpService 接口,传递 placeType 和 rewardType 参数 - 完善相关单元测试和 Mock 配置
This commit is contained in:
@@ -3,6 +3,7 @@ package com.starry.admin.api;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import org.springframework.test.context.TestPropertySource;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
@@ -11,6 +12,7 @@ import org.springframework.test.web.servlet.MockMvc;
|
||||
@AutoConfigureMockMvc
|
||||
@ActiveProfiles("apitest")
|
||||
@TestPropertySource(properties = "spring.task.scheduling.enabled=false")
|
||||
@Import(MockWxMpServiceConfig.class)
|
||||
public abstract class AbstractApiTest {
|
||||
|
||||
protected static final String TENANT_HEADER = "X-Tenant";
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.starry.admin.api;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import me.chanjar.weixin.mp.api.WxMpService;
|
||||
import me.chanjar.weixin.mp.api.WxMpTemplateMsgService;
|
||||
import org.mockito.Mockito;
|
||||
import org.springframework.boot.test.context.TestConfiguration;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
import org.springframework.context.annotation.Profile;
|
||||
|
||||
/**
|
||||
* Provides stubbed WeChat MP services in the apitest profile so integration tests never hit external APIs.
|
||||
*/
|
||||
@TestConfiguration
|
||||
@Profile("apitest")
|
||||
public class MockWxMpServiceConfig {
|
||||
|
||||
@Bean
|
||||
@Primary
|
||||
public WxMpService wxMpService() {
|
||||
WxMpService service = mock(WxMpService.class, Mockito.RETURNS_DEEP_STUBS);
|
||||
WxMpTemplateMsgService templateMsgService = mock(WxMpTemplateMsgService.class);
|
||||
when(service.getTemplateMsgService()).thenReturn(templateMsgService);
|
||||
when(service.switchoverTo(Mockito.anyString())).thenReturn(service);
|
||||
when(service.switchover(Mockito.anyString())).thenReturn(true);
|
||||
return service;
|
||||
}
|
||||
}
|
||||
@@ -397,6 +397,14 @@ class WxCustomRandomOrderApiTest extends WxCustomOrderApiTestSupport {
|
||||
Assertions.assertThat(order.getFinalAmount()).isEqualByComparingTo(expectedNet);
|
||||
Assertions.assertThat(order.getDiscountAmount()).isEqualByComparingTo(discount);
|
||||
|
||||
verify(wxCustomMpService).sendCreateOrderMessageBatch(
|
||||
anyList(),
|
||||
eq(order.getOrderNo()),
|
||||
eq(expectedNet.toString()),
|
||||
eq(order.getCommodityName()),
|
||||
eq(order.getId()),
|
||||
eq(order.getPlaceType()),
|
||||
eq(order.getRewardType()));
|
||||
String orderId = order.getId();
|
||||
|
||||
PlayCouponDetailsEntity detailAfterOrderPlaced = couponDetailsService.getById(couponDetailId);
|
||||
@@ -667,7 +675,9 @@ class WxCustomRandomOrderApiTest extends WxCustomOrderApiTestSupport {
|
||||
eq(order.getOrderNo()),
|
||||
eq(order.getFinalAmount().toString()),
|
||||
eq(order.getCommodityName()),
|
||||
eq(order.getId()));
|
||||
eq(order.getId()),
|
||||
eq(order.getPlaceType()),
|
||||
eq(order.getRewardType()));
|
||||
verify(overdueOrderHandlerTask).enqueue(order.getId() + "_" + ApiTestDataSeeder.DEFAULT_TENANT_ID);
|
||||
|
||||
reset(wxCustomMpService);
|
||||
|
||||
@@ -244,7 +244,9 @@ class WxCustomSpecifiedOrderApiTest extends WxCustomOrderApiTestSupport {
|
||||
anyString(),
|
||||
eq(expectedNet.toString()),
|
||||
eq(order.getCommodityName()),
|
||||
eq(order.getId()));
|
||||
eq(order.getId()),
|
||||
eq(order.getPlaceType()),
|
||||
eq(order.getRewardType()));
|
||||
|
||||
int ratio = order.getEstimatedRevenueRatio();
|
||||
BigDecimal baseRevenue = grossAmount
|
||||
@@ -411,7 +413,9 @@ class WxCustomSpecifiedOrderApiTest extends WxCustomOrderApiTestSupport {
|
||||
anyString(),
|
||||
eq(order.getFinalAmount().toString()),
|
||||
eq(order.getCommodityName()),
|
||||
eq(order.getId()));
|
||||
eq(order.getId()),
|
||||
eq(order.getPlaceType()),
|
||||
eq(order.getRewardType()));
|
||||
|
||||
ensureTenantContext();
|
||||
long afterCount = playOrderInfoService.lambdaQuery()
|
||||
|
||||
@@ -67,7 +67,14 @@ class WxOrderInfoControllerApiTest extends WxCustomOrderApiTestSupport {
|
||||
// Relax notifications to avoid strict verification noise
|
||||
doNothing().when(notificationSender).sendOrderMessageAsync(Mockito.any());
|
||||
doNothing().when(notificationSender).sendOrderFinishMessageAsync(Mockito.any());
|
||||
doNothing().when(wxCustomMpService).sendCreateOrderMessageBatch(anyList(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString());
|
||||
doNothing().when(wxCustomMpService).sendCreateOrderMessageBatch(
|
||||
anyList(),
|
||||
Mockito.anyString(),
|
||||
Mockito.anyString(),
|
||||
Mockito.anyString(),
|
||||
Mockito.anyString(),
|
||||
Mockito.anyString(),
|
||||
Mockito.anyString());
|
||||
doNothing().when(overdueOrderHandlerTask).enqueue(Mockito.anyString());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user