Merge branch 'qms/develop' into qms/yf

This commit is contained in:
funny 2026-04-13 18:03:34 +08:00
commit 3dab9dfacd
1 changed files with 378 additions and 0 deletions

View File

@ -0,0 +1,378 @@
package com.nflg.qms.admin;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.TypeReference;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONUtil;
import com.nflg.wms.common.pojo.ApiResult;
import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.qo.QmsQcMaterialAddQO;
import com.nflg.wms.common.pojo.qo.QmsQcMaterialSearchQO;
import com.nflg.wms.common.pojo.qo.QmsQcMaterialUpdateQO;
import com.nflg.wms.common.pojo.vo.QmsQcMaterialVO;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
import java.util.HashMap;
import java.util.Map;
/**
* QMS 质检物料模块接口测试
* <p>
* 测试前提
* 1. qms-admin 服务已启动默认 http://localhost:8105
* 2. 测试账号已登录将有效的 token 填入 TOKEN 常量
* 3. 数据库中已存在物料类别编码修改 MATERIAL_CATEGORY_CODE 为有效的类别编码
* </p>
*/
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class QmsQcMaterialApiTest {
// ===================== 配置区 =====================
/** 服务地址 */
private static final String BASE_URL = "http://localhost:8105";
/** 当前登录用户的 token */
private static final String TOKEN = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOjEsInJuU3RyIjoidVFwSWM2R3RJeUoxcFNSczBadzJzb1hvMUZLZXB3czkiLCJuYW1lIjoi6LaF57qn566h55CG5ZGYIiwiY29kZSI6ImFkbWluIiwicm9sZXMiOlsiU3VwZXJBZG1pbiJdLCJ0eXBlIjoxfQ.FtQ2uVwvuxsjAFbXnB006hV1pODtRhZT0z_9nfuR0So";
/** 物料类别编码(需要根据实际数据库中的有效值修改) */
private static final String MATERIAL_CATEGORY_CODE = "CAT001";
// ===================== 配置区结束 =====================
/** 测试过程中创建的物料编号 */
private static String createdMaterialNo;
// ==================== HTTP 工具方法 ====================
private static <T> ApiResult<T> post(String path, Object body, TypeReference<ApiResult<T>> typeRef) {
String url = BASE_URL + path;
String reqBody = body == null ? "" : JSONUtil.toJsonStr(body);
HttpResponse resp = HttpRequest.post(url)
.header("authorization", TOKEN)
.header("Content-Type", "application/json")
.body(reqBody)
.execute();
String raw = resp.body();
System.out.println("[POST] " + path);
System.out.println(" 请求: " + reqBody);
System.out.println(" 响应: " + raw);
return JSONUtil.toBean(raw, typeRef, false);
}
private static <T> void assertSuccess(ApiResult<T> result, String msg) {
Assert.isTrue(result != null && result.getCode() == 200,
() -> new RuntimeException(msg + " => " + JSONUtil.toJsonStr(result)));
}
private static void assertFailed(ApiResult<?> result, String msg) {
Assert.isTrue(result != null && result.getCode() != 200,
() -> new RuntimeException(msg + " => 预期失败但实际成功"));
}
// ==================== 新增接口测试 ====================
/**
* 新增质检物料正常新增
* 验证点接口返回成功
*/
@Test
@Order(1)
public void test01_addMaterial_Success() {
QmsQcMaterialAddQO request = buildValidAddRequest();
ApiResult<Void> result = post("/qcMaterial/add", request, new TypeReference<>() {});
assertSuccess(result, "新增质检物料失败");
System.out.println(" ✅ 新增质检物料成功");
createdMaterialNo = request.getMaterialNo();
}
/**
* 新增质检物料物料编号为空
* 验证点接口返回参数校验错误
*/
@Test
@Order(2)
public void test02_addMaterial_MaterialNoBlank() {
QmsQcMaterialAddQO request = buildValidAddRequest();
request.setMaterialNo(null);
ApiResult<Void> result = post("/qcMaterial/add", request, new TypeReference<>() {});
assertFailed(result, "物料编号为空应返回失败");
System.out.println(" ✅ 物料编号为空校验通过");
}
/**
* 新增质检物料物料类别编码为空
* 验证点接口返回参数校验错误
*/
@Test
@Order(3)
public void test03_addMaterial_CategoryCodeBlank() {
QmsQcMaterialAddQO request = buildValidAddRequest();
request.setMaterialCategoryCode(null);
ApiResult<Void> result = post("/qcMaterial/add", request, new TypeReference<>() {});
assertFailed(result, "物料类别编码为空应返回失败");
System.out.println(" ✅ 物料类别编码为空校验通过");
}
/**
* 新增质检物料物料类别不存在
* 验证点接口返回业务错误
*/
@Test
@Order(4)
public void test04_addMaterial_CategoryNotExist() {
QmsQcMaterialAddQO request = buildValidAddRequest();
request.setMaterialCategoryCode("INVALID_CATEGORY_999");
ApiResult<Void> result = post("/qcMaterial/add", request, new TypeReference<>() {});
assertFailed(result, "物料类别不存在应返回失败");
System.out.println(" ✅ 物料类别不存在校验通过");
}
/**
* 新增质检物料完整参数场景
* 验证点所有字段都填充时能正常处理
*/
@Test
@Order(5)
public void test05_addMaterial_FullFields() {
QmsQcMaterialAddQO request = buildValidAddRequest();
request.setMaterialNo("TEST_FULL_" + System.currentTimeMillis());
request.setMaterialDesc("完整参数测试物料");
request.setMaterialDescIsUpgrade(true);
request.setDrawingNo("DWG-TEST-001");
request.setDrawingNoVer("V1.0");
request.setMaterialName("测试物料名称");
request.setMaterialTexture("钢材");
request.setMaterialSpecifications("100x50x10");
request.setIsStandardMaintained(false);
ApiResult<Void> result = post("/qcMaterial/add", request, new TypeReference<>() {});
assertSuccess(result, "完整参数新增失败");
System.out.println(" ✅ 完整参数新增成功");
}
// ==================== 编辑接口测试 ====================
/**
* 编辑质检物料正常编辑
* 验证点接口返回成功
*/
@Test
@Order(6)
public void test06_updateMaterial_Success() {
// 先新增一个物料用于编辑
QmsQcMaterialAddQO addRequest = buildValidAddRequest();
addRequest.setMaterialNo("TEST_UPDATE_" + System.currentTimeMillis());
addRequest.setMaterialName("待编辑物料");
post("/qcMaterial/add", addRequest, new TypeReference<>() {});
// 搜索获取新增的物料ID
QmsQcMaterialSearchQO searchRequest = new QmsQcMaterialSearchQO();
searchRequest.setMaterialNo(addRequest.getMaterialNo());
ApiResult<PageData<QmsQcMaterialVO>> searchResult = post("/qcMaterial/search", searchRequest, new TypeReference<>() {});
assertSuccess(searchResult, "搜索物料失败");
Long materialId = searchResult.getResult().getItems().get(0).getId();
// 编辑物料
QmsQcMaterialUpdateQO updateRequest = new QmsQcMaterialUpdateQO();
updateRequest.setId(materialId);
updateRequest.setMaterialName("已编辑物料");
updateRequest.setMaterialDesc("编辑后的描述");
ApiResult<Void> result = post("/qcMaterial/update", updateRequest, new TypeReference<>() {});
assertSuccess(result, "编辑质检物料失败");
System.out.println(" ✅ 编辑质检物料成功");
}
/**
* 编辑质检物料物料ID为空
* 验证点接口返回参数校验错误
*/
@Test
@Order(7)
public void test07_updateMaterial_IdNull() {
QmsQcMaterialUpdateQO request = new QmsQcMaterialUpdateQO();
request.setId(null);
request.setMaterialName("测试");
ApiResult<Void> result = post("/qcMaterial/update", request, new TypeReference<>() {});
assertFailed(result, "物料ID为空应返回失败");
System.out.println(" ✅ 物料ID为空校验通过");
}
/**
* 编辑质检物料物料不存在
* 验证点接口返回业务错误
*/
@Test
@Order(8)
public void test08_updateMaterial_NotExist() {
QmsQcMaterialUpdateQO request = new QmsQcMaterialUpdateQO();
request.setId(999999999L);
request.setMaterialName("测试");
ApiResult<Void> result = post("/qcMaterial/update", request, new TypeReference<>() {});
assertFailed(result, "物料不存在应返回失败");
System.out.println(" ✅ 物料不存在校验通过");
}
// ==================== 删除接口测试 ====================
/**
* 删除质检物料正常删除规则未维护
* 验证点接口返回成功
*/
@Test
@Order(9)
public void test09_deleteMaterial_Success() {
// 先新增一个物料用于删除
QmsQcMaterialAddQO addRequest = buildValidAddRequest();
addRequest.setMaterialNo("TEST_DELETE_" + System.currentTimeMillis());
addRequest.setIsStandardMaintained(false);
post("/qcMaterial/add", addRequest, new TypeReference<>() {});
// 搜索获取新增的物料ID
QmsQcMaterialSearchQO searchRequest = new QmsQcMaterialSearchQO();
searchRequest.setMaterialNo(addRequest.getMaterialNo());
ApiResult<PageData<QmsQcMaterialVO>> searchResult = post("/qcMaterial/search", searchRequest, new TypeReference<>() {});
assertSuccess(searchResult, "搜索物料失败");
Long materialId = searchResult.getResult().getItems().get(0).getId();
// 删除物料
ApiResult<Void> result = post("/qcMaterial/delete?id=" + materialId, null, new TypeReference<>() {});
assertSuccess(result, "删除质检物料失败");
System.out.println(" ✅ 删除质检物料成功");
}
/**
* 删除质检物料规则已维护不允许删除
* 验证点接口返回业务错误
*/
@Test
@Order(10)
public void test10_deleteMaterial_StandardMaintained() {
// 先新增一个规则已维护的物料
QmsQcMaterialAddQO addRequest = buildValidAddRequest();
addRequest.setMaterialNo("TEST_DELETE_MAINTAINED_" + System.currentTimeMillis());
addRequest.setIsStandardMaintained(true);
post("/qcMaterial/add", addRequest, new TypeReference<>() {});
// 搜索获取新增的物料ID
QmsQcMaterialSearchQO searchRequest = new QmsQcMaterialSearchQO();
searchRequest.setMaterialNo(addRequest.getMaterialNo());
ApiResult<PageData<QmsQcMaterialVO>> searchResult = post("/qcMaterial/search", searchRequest, new TypeReference<>() {});
assertSuccess(searchResult, "搜索物料失败");
Long materialId = searchResult.getResult().getItems().get(0).getId();
// 尝试删除
ApiResult<Void> result = post("/qcMaterial/delete?id=" + materialId, null, new TypeReference<>() {});
assertFailed(result, "规则已维护应不允许删除");
System.out.println(" ✅ 规则已维护不允许删除校验通过");
}
/**
* 删除质检物料物料不存在
* 验证点接口返回业务错误
*/
@Test
@Order(11)
public void test11_deleteMaterial_NotExist() {
ApiResult<Void> result = post("/qcMaterial/delete?id=999999999", null, new TypeReference<>() {});
assertFailed(result, "物料不存在应返回失败");
System.out.println(" ✅ 物料不存在校验通过");
}
// ==================== 搜索接口测试 ====================
/**
* 搜索质检物料正常搜索
* 验证点返回分页数据
*/
@Test
@Order(12)
public void test12_searchMaterial_Success() {
QmsQcMaterialSearchQO request = new QmsQcMaterialSearchQO();
request.setPage(1);
request.setPageSize(10);
ApiResult<PageData<QmsQcMaterialVO>> result = post("/qcMaterial/search", request, new TypeReference<>() {});
assertSuccess(result, "搜索质检物料失败");
System.out.println(" ✅ 搜索成功,总数: " + result.getResult().getTotal());
}
/**
* 搜索质检物料按物料编号模糊搜索
* 验证点返回匹配的物料
*/
@Test
@Order(13)
public void test13_searchMaterial_ByMaterialNo() {
QmsQcMaterialSearchQO request = new QmsQcMaterialSearchQO();
request.setPage(1);
request.setPageSize(10);
request.setMaterialNo("TEST");
ApiResult<PageData<QmsQcMaterialVO>> result = post("/qcMaterial/search", request, new TypeReference<>() {});
assertSuccess(result, "按物料编号搜索失败");
System.out.println(" ✅ 按物料编号搜索成功,匹配数: " + result.getResult().getTotal());
}
/**
* 搜索质检物料按物料类别搜索
* 验证点返回指定类别的物料
*/
@Test
@Order(14)
public void test14_searchMaterial_ByCategory() {
QmsQcMaterialSearchQO request = new QmsQcMaterialSearchQO();
request.setPage(1);
request.setPageSize(10);
request.setMaterialCategoryCode(MATERIAL_CATEGORY_CODE);
ApiResult<PageData<QmsQcMaterialVO>> result = post("/qcMaterial/search", request, new TypeReference<>() {});
assertSuccess(result, "按物料类别搜索失败");
System.out.println(" ✅ 按物料类别搜索成功,匹配数: " + result.getResult().getTotal());
}
/**
* 搜索质检物料按物料名称模糊搜索
* 验证点返回匹配的物料
*/
@Test
@Order(15)
public void test15_searchMaterial_ByMaterialName() {
QmsQcMaterialSearchQO request = new QmsQcMaterialSearchQO();
request.setPage(1);
request.setPageSize(10);
request.setMaterialName("测试");
ApiResult<PageData<QmsQcMaterialVO>> result = post("/qcMaterial/search", request, new TypeReference<>() {});
assertSuccess(result, "按物料名称搜索失败");
System.out.println(" ✅ 按物料名称搜索成功,匹配数: " + result.getResult().getTotal());
}
// ==================== 辅助方法 ====================
/**
* 构建一个完整的有效新增请求参数
*/
private QmsQcMaterialAddQO buildValidAddRequest() {
QmsQcMaterialAddQO request = new QmsQcMaterialAddQO();
request.setMaterialNo("TEST_" + System.currentTimeMillis());
request.setMaterialDesc("接口测试物料");
request.setMaterialCategoryCode(MATERIAL_CATEGORY_CODE);
request.setMaterialName("测试物料");
request.setDrawingNo("DWG-" + System.currentTimeMillis());
request.setDrawingNoVer("V1.0");
request.setIsStandardMaintained(false);
return request;
}
}