test: Add CleanOrderScenarioIT and finalize test coverage
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
package com.viewsh.module.ops.environment.manual;
|
||||
|
||||
import com.viewsh.module.ops.environment.integration.dto.*;
|
||||
import org.apache.rocketmq.spring.core.RocketMQTemplate;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.FilterType;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* 本地全链路集成测试(客户端模式 - 仅发送消息)
|
||||
* <p>
|
||||
* 前置条件:
|
||||
* 1. 本地或远程的 Ops 服务已启动。
|
||||
* 2. application.yml 配置正确连接到 RocketMQ。
|
||||
*/
|
||||
@Disabled("Manual integration test, requires external RocketMQ")
|
||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE, classes = CleanOrderScenarioTest.TestApplication.class)
|
||||
public class CleanOrderScenarioTest {
|
||||
|
||||
@SpringBootApplication(excludeName = {
|
||||
"org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration",
|
||||
"org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration",
|
||||
"com.mzt.logapi.starter.configuration.LogRecordProxyAutoConfiguration"
|
||||
})
|
||||
// 排除 Ops 模块的业务 Bean,防止重复启动或资源冲突
|
||||
@ComponentScan(
|
||||
basePackages = {"com.viewsh.framework"},
|
||||
excludeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = "com.viewsh.module.*")
|
||||
)
|
||||
static class TestApplication {
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private RocketMQTemplate rocketMQTemplate;
|
||||
|
||||
private final Long AREA_ID = 101L;
|
||||
private final Long DEVICE_ID = 5001L;
|
||||
private final String DEVICE_KEY = "badge-01";
|
||||
private final String BEACON_MAC = "F0:C8:60:1D:10:BB";
|
||||
|
||||
private final Long ORDER_ID_FROM_STEP1 = 0L;
|
||||
|
||||
@Test
|
||||
void step1_triggerCreate() {
|
||||
String eventId = UUID.randomUUID().toString();
|
||||
|
||||
CleanOrderCreateEventDTO event = new CleanOrderCreateEventDTO();
|
||||
event.setEventId(eventId);
|
||||
event.setAreaId(AREA_ID);
|
||||
event.setTriggerSource("IOT_TRAFFIC");
|
||||
event.setTriggerDeviceId(8001L);
|
||||
event.setTriggerDeviceKey("traffic-cam-01");
|
||||
|
||||
Map<String, Object> data = new HashMap<>();
|
||||
data.put("actualCount", 150);
|
||||
data.put("baseValue", 100);
|
||||
event.setTriggerData(data);
|
||||
|
||||
System.out.println(">>> 发送创建消息 start...");
|
||||
rocketMQTemplate.convertAndSend("ops-order-create", event);
|
||||
System.out.println(">>> 发送创建消息成功: " + eventId);
|
||||
}
|
||||
|
||||
@Test
|
||||
void step2_confirm() {
|
||||
checkOrderId();
|
||||
CleanOrderConfirmEventDTO event = new CleanOrderConfirmEventDTO();
|
||||
event.setEventId(UUID.randomUUID().toString());
|
||||
event.setOrderId(ORDER_ID_FROM_STEP1);
|
||||
event.setDeviceId(DEVICE_ID);
|
||||
event.setDeviceKey(DEVICE_KEY);
|
||||
|
||||
System.out.println(">>> 发送确认消息...");
|
||||
rocketMQTemplate.convertAndSend("ops-order-confirm", event);
|
||||
System.out.println(">>> 发送确认消息成功");
|
||||
}
|
||||
|
||||
@Test
|
||||
void step3_arrive() {
|
||||
checkOrderId();
|
||||
CleanOrderArriveEventDTO event = new CleanOrderArriveEventDTO();
|
||||
event.setEventId(UUID.randomUUID().toString());
|
||||
event.setOrderId(ORDER_ID_FROM_STEP1);
|
||||
event.setDeviceId(DEVICE_ID);
|
||||
event.setDeviceKey(DEVICE_KEY);
|
||||
event.setAreaId(AREA_ID);
|
||||
event.setTriggerSource("IOT_BEACON");
|
||||
|
||||
Map<String, Object> data = new HashMap<>();
|
||||
data.put("beaconMac", BEACON_MAC);
|
||||
event.setTriggerData(data);
|
||||
|
||||
System.out.println(">>> 发送到岗消息...");
|
||||
rocketMQTemplate.convertAndSend("ops-order-arrive", event);
|
||||
System.out.println(">>> 发送到岗消息成功");
|
||||
}
|
||||
|
||||
@Test
|
||||
void step4_complete() {
|
||||
checkOrderId();
|
||||
CleanOrderCompleteEventDTO event = new CleanOrderCompleteEventDTO();
|
||||
event.setEventId(UUID.randomUUID().toString());
|
||||
event.setOrderId(ORDER_ID_FROM_STEP1);
|
||||
event.setDeviceId(DEVICE_ID);
|
||||
event.setAreaId(AREA_ID);
|
||||
event.setTriggerSource("IOT_SIGNAL_LOSS");
|
||||
|
||||
Map<String, Object> data = new HashMap<>();
|
||||
data.put("durationMs", 1800000); // 30 mins
|
||||
event.setTriggerData(data);
|
||||
|
||||
System.out.println(">>> 发送完成消息...");
|
||||
rocketMQTemplate.convertAndSend("ops-order-complete", event);
|
||||
System.out.println(">>> 发送完成消息成功");
|
||||
}
|
||||
|
||||
private void checkOrderId() {
|
||||
if (ORDER_ID_FROM_STEP1 == 0L) {
|
||||
throw new RuntimeException("请先运行 step1,并将生成的 OrderId 填入 ORDER_ID_FROM_STEP1 常量!");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user