refactor(用例管理): module 控制200
This commit is contained in:
parent
9ba400f2ed
commit
6973108f66
|
@ -37,8 +37,8 @@ public class CaseReviewModuleController {
|
|||
@Operation(summary = "用例管理-用例评审-模块-添加模块")
|
||||
@RequiresPermissions(PermissionConstants.CASE_REVIEW_READ_ADD)
|
||||
@CheckOwner(resourceId = "#request.getProjectId()", resourceType = "project")
|
||||
public void add(@RequestBody @Validated CaseReviewModuleCreateRequest request) {
|
||||
caseReviewModuleService.add(request, SessionUtils.getUserId());
|
||||
public String add(@RequestBody @Validated CaseReviewModuleCreateRequest request) {
|
||||
return caseReviewModuleService.add(request, SessionUtils.getUserId());
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
|
|
|
@ -37,8 +37,8 @@ public class FunctionalCaseModuleController {
|
|||
@Operation(summary = "用例管理-功能用例-模块-添加模块")
|
||||
@RequiresPermissions(PermissionConstants.FUNCTIONAL_CASE_READ_ADD)
|
||||
@CheckOwner(resourceId = "#request.getProjectId()", resourceType = "project")
|
||||
public void add(@RequestBody @Validated FunctionalCaseModuleCreateRequest request) {
|
||||
functionalCaseModuleService.add(request, SessionUtils.getUserId());
|
||||
public String add(@RequestBody @Validated FunctionalCaseModuleCreateRequest request) {
|
||||
return functionalCaseModuleService.add(request, SessionUtils.getUserId());
|
||||
}
|
||||
|
||||
@PostMapping("/update")
|
||||
|
|
|
@ -65,7 +65,7 @@ public class CaseReviewModuleService extends ModuleTreeService {
|
|||
return super.buildTreeAndCountResource(fileModuleList, true, Translator.get("default.module"));
|
||||
}
|
||||
|
||||
public void add(CaseReviewModuleCreateRequest request, String userId) {
|
||||
public String add(CaseReviewModuleCreateRequest request, String userId) {
|
||||
CaseReviewModule caseReviewModule = new CaseReviewModule();
|
||||
caseReviewModule.setId(IDGenerator.nextStr());
|
||||
caseReviewModule.setName(request.getName());
|
||||
|
@ -78,6 +78,7 @@ public class CaseReviewModuleService extends ModuleTreeService {
|
|||
caseReviewModule.setCreateUser(userId);
|
||||
caseReviewModule.setUpdateUser(userId);
|
||||
caseReviewModuleMapper.insert(caseReviewModule);
|
||||
return caseReviewModule.getId();
|
||||
}
|
||||
|
||||
public void update(CaseReviewModuleUpdateRequest request, String userId) {
|
||||
|
@ -199,20 +200,32 @@ public class CaseReviewModuleService extends ModuleTreeService {
|
|||
}
|
||||
example.clear();
|
||||
|
||||
if (StringUtils.isNotBlank(caseReviewModule.getProjectId())) {
|
||||
//检查项目ID是否和父节点ID一致
|
||||
example.createCriteria().andProjectIdEqualTo(caseReviewModule.getProjectId()).andIdEqualTo(caseReviewModule.getParentId());
|
||||
if (caseReviewModuleMapper.countByExample(example) == 0) {
|
||||
throw new MSException(Translator.get("project.cannot.match.parent"));
|
||||
}
|
||||
example.clear();
|
||||
//检查项目ID是否和父节点ID一致
|
||||
example.createCriteria().andProjectIdEqualTo(caseReviewModule.getProjectId()).andIdEqualTo(caseReviewModule.getParentId());
|
||||
if (caseReviewModuleMapper.countByExample(example) == 0) {
|
||||
throw new MSException(Translator.get("project.cannot.match.parent"));
|
||||
}
|
||||
example.clear();
|
||||
}
|
||||
example.createCriteria().andParentIdEqualTo(caseReviewModule.getParentId()).andNameEqualTo(caseReviewModule.getName()).andIdNotEqualTo(caseReviewModule.getId());
|
||||
if (caseReviewModuleMapper.countByExample(example) > 0) {
|
||||
throw new MSException(Translator.get("node.name.repeat"));
|
||||
}
|
||||
example.clear();
|
||||
|
||||
//非默认节点,检查该节点所在分支的总长度,确保不超过阈值
|
||||
if (!StringUtils.equals(caseReviewModule.getId(), ModuleConstants.DEFAULT_NODE_ID)) {
|
||||
this.checkBranchModules(this.getRootNodeId(caseReviewModule), extCaseReviewModuleMapper::selectChildrenIdsByParentIds);
|
||||
}
|
||||
}
|
||||
|
||||
private String getRootNodeId(CaseReviewModule caseReviewModule) {
|
||||
if (StringUtils.equals(caseReviewModule.getParentId(), ModuleConstants.ROOT_NODE_PARENT_ID)) {
|
||||
return caseReviewModule.getId();
|
||||
} else {
|
||||
CaseReviewModule parentModule = caseReviewModuleMapper.selectByPrimaryKey(caseReviewModule.getParentId());
|
||||
return this.getRootNodeId(parentModule);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -69,7 +69,7 @@ public class FunctionalCaseModuleService extends ModuleTreeService {
|
|||
return super.buildTreeAndCountResource(fileModuleList, true, Translator.get("default.module"));
|
||||
}
|
||||
|
||||
public void add(FunctionalCaseModuleCreateRequest request, String userId) {
|
||||
public String add(FunctionalCaseModuleCreateRequest request, String userId) {
|
||||
FunctionalCaseModule functionalCaseModule = new FunctionalCaseModule();
|
||||
functionalCaseModule.setId(IDGenerator.nextStr());
|
||||
functionalCaseModule.setName(request.getName());
|
||||
|
@ -82,6 +82,7 @@ public class FunctionalCaseModuleService extends ModuleTreeService {
|
|||
functionalCaseModule.setCreateUser(userId);
|
||||
functionalCaseModule.setUpdateUser(userId);
|
||||
functionalCaseModuleMapper.insert(functionalCaseModule);
|
||||
return functionalCaseModule.getId();
|
||||
}
|
||||
|
||||
public void update(FunctionalCaseModuleUpdateRequest request, String userId) {
|
||||
|
@ -204,20 +205,32 @@ public class FunctionalCaseModuleService extends ModuleTreeService {
|
|||
}
|
||||
example.clear();
|
||||
|
||||
if (StringUtils.isNotBlank(functionalCaseModule.getProjectId())) {
|
||||
//检查项目ID是否和父节点ID一致
|
||||
example.createCriteria().andProjectIdEqualTo(functionalCaseModule.getProjectId()).andIdEqualTo(functionalCaseModule.getParentId());
|
||||
if (functionalCaseModuleMapper.countByExample(example) == 0) {
|
||||
throw new MSException(Translator.get("project.cannot.match.parent"));
|
||||
}
|
||||
example.clear();
|
||||
//检查项目ID是否和父节点ID一致
|
||||
example.createCriteria().andProjectIdEqualTo(functionalCaseModule.getProjectId()).andIdEqualTo(functionalCaseModule.getParentId());
|
||||
if (functionalCaseModuleMapper.countByExample(example) == 0) {
|
||||
throw new MSException(Translator.get("project.cannot.match.parent"));
|
||||
}
|
||||
example.clear();
|
||||
}
|
||||
example.createCriteria().andParentIdEqualTo(functionalCaseModule.getParentId()).andNameEqualTo(functionalCaseModule.getName()).andIdNotEqualTo(functionalCaseModule.getId());
|
||||
if (functionalCaseModuleMapper.countByExample(example) > 0) {
|
||||
throw new MSException(Translator.get("node.name.repeat"));
|
||||
}
|
||||
example.clear();
|
||||
|
||||
//非默认节点,检查该节点所在分支的总长度,确保不超过阈值
|
||||
if (!StringUtils.equals(functionalCaseModule.getId(), ModuleConstants.DEFAULT_NODE_ID)) {
|
||||
this.checkBranchModules(this.getRootNodeId(functionalCaseModule), extFunctionalCaseModuleMapper::selectChildrenIdsByParentIds);
|
||||
}
|
||||
}
|
||||
|
||||
private String getRootNodeId(FunctionalCaseModule functionalCaseModule) {
|
||||
if (StringUtils.equals(functionalCaseModule.getParentId(), ModuleConstants.ROOT_NODE_PARENT_ID)) {
|
||||
return functionalCaseModule.getId();
|
||||
} else {
|
||||
FunctionalCaseModule parentModule = functionalCaseModuleMapper.selectByPrimaryKey(functionalCaseModule.getParentId());
|
||||
return this.getRootNodeId(parentModule);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -226,6 +226,31 @@ public class CaseReviewModuleControllerTests extends BaseTest {
|
|||
Assertions.assertNotNull(a1b1c1Node);
|
||||
preliminaryTreeNodes = treeNodes;
|
||||
|
||||
/**
|
||||
测试能否正常做200个节点
|
||||
*/
|
||||
String parentId = null;
|
||||
for (int i = 0; i < 210; i++) {
|
||||
CaseReviewModuleCreateRequest perfRequest = new CaseReviewModuleCreateRequest();
|
||||
perfRequest.setProjectId(project.getId());
|
||||
perfRequest.setName("500-test-root-" + i);
|
||||
if (StringUtils.isNotEmpty(parentId)) {
|
||||
perfRequest.setParentId(parentId);
|
||||
}
|
||||
if (i < 200) {
|
||||
MvcResult result = this.requestPostWithOkAndReturn(URL_MODULE_TREE_ADD, perfRequest);
|
||||
ResultHolder holder = JSON.parseObject(result.getResponse().getContentAsString(), ResultHolder.class);
|
||||
if (i % 50 == 0) {
|
||||
//到20换下一层级
|
||||
parentId = holder.getData().toString();
|
||||
}
|
||||
} else {
|
||||
//测试超过500会报错
|
||||
this.requestPost(URL_MODULE_TREE_ADD, perfRequest).andExpect(status().is5xxServerError());
|
||||
}
|
||||
}
|
||||
treeNodes = this.getCaseReviewModuleTreeNode();
|
||||
preliminaryTreeNodes = treeNodes;
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -227,6 +227,32 @@ public class FunctionalCaseModuleControllerTests extends BaseTest {
|
|||
Assertions.assertNotNull(a1b1c1Node);
|
||||
preliminaryTreeNodes = treeNodes;
|
||||
|
||||
|
||||
/**
|
||||
测试能否正常做200个节点
|
||||
*/
|
||||
String parentId = null;
|
||||
for (int i = 0; i < 210; i++) {
|
||||
FunctionalCaseModuleCreateRequest perfRequest = new FunctionalCaseModuleCreateRequest();
|
||||
perfRequest.setProjectId(project.getId());
|
||||
perfRequest.setName("500-test-root-" + i);
|
||||
if (StringUtils.isNotEmpty(parentId)) {
|
||||
perfRequest.setParentId(parentId);
|
||||
}
|
||||
if (i < 200) {
|
||||
MvcResult result = this.requestPostWithOkAndReturn(URL_MODULE_TREE_ADD, perfRequest);
|
||||
ResultHolder holder = JSON.parseObject(result.getResponse().getContentAsString(), ResultHolder.class);
|
||||
if (i % 50 == 0) {
|
||||
//到20换下一层级
|
||||
parentId = holder.getData().toString();
|
||||
}
|
||||
} else {
|
||||
//测试超过500会报错
|
||||
this.requestPost(URL_MODULE_TREE_ADD, perfRequest).andExpect(status().is5xxServerError());
|
||||
}
|
||||
}
|
||||
treeNodes = this.getFunctionalCaseModuleTreeNode();
|
||||
preliminaryTreeNodes = treeNodes;
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -658,7 +684,7 @@ public class FunctionalCaseModuleControllerTests extends BaseTest {
|
|||
// 删除没有用例的节点a1-b1-c1 检查是否级联删除根节点
|
||||
BaseTreeNode a1b1Node = getNodeByName(this.getFunctionalCaseModuleTreeNode(), "a1-b1");
|
||||
assert a1b1Node != null;
|
||||
this.requestGetWithOk(URL_MODULE_TREE_DELETE+a1b1Node.getId());
|
||||
this.requestGetWithOk(URL_MODULE_TREE_DELETE + a1b1Node.getId());
|
||||
this.checkModuleIsEmpty(a1b1Node.getId());
|
||||
|
||||
// 删除有用例的节点 a1-a1 检查是否级联删除根节点
|
||||
|
@ -667,19 +693,19 @@ public class FunctionalCaseModuleControllerTests extends BaseTest {
|
|||
FunctionalCase name = createCase(a1a1Node, false, "name");
|
||||
FunctionalCase functionalCase = functionalCaseMapper.selectByPrimaryKey(name.getId());
|
||||
Assertions.assertNotNull(functionalCase);
|
||||
this.requestGetWithOk(URL_MODULE_TREE_DELETE+a1a1Node.getId());
|
||||
this.requestGetWithOk(URL_MODULE_TREE_DELETE + a1a1Node.getId());
|
||||
this.checkModuleIsEmpty(a1a1Node.getId());
|
||||
FunctionalCase functionalCaseDel = functionalCaseMapper.selectByPrimaryKey(name.getId());
|
||||
Assertions.assertTrue(functionalCaseDel.getDeleted());
|
||||
Assertions.assertTrue(StringUtils.equals(functionalCaseDel.getModuleId(), "root"));
|
||||
|
||||
//删除不存在的节点
|
||||
this.requestGetWithOk(URL_MODULE_TREE_DELETE+IDGenerator.nextNum());
|
||||
this.requestGetWithOk(URL_MODULE_TREE_DELETE + IDGenerator.nextNum());
|
||||
// 测试删除根节点
|
||||
this.requestGetWithOk(URL_MODULE_TREE_DELETE+ModuleConstants.DEFAULT_NODE_ID);
|
||||
this.requestGetWithOk(URL_MODULE_TREE_DELETE + ModuleConstants.DEFAULT_NODE_ID);
|
||||
|
||||
//service层判断:测试删除空集合
|
||||
functionalCaseModuleService.deleteModuleByIds(new ArrayList<>(),new ArrayList<>());
|
||||
functionalCaseModuleService.deleteModuleByIds(new ArrayList<>(), new ArrayList<>());
|
||||
|
||||
checkLog(functionalCase.getId(), OperationLogType.DELETE, URL_MODULE_TREE_DELETE);
|
||||
|
||||
|
@ -712,12 +738,18 @@ public class FunctionalCaseModuleControllerTests extends BaseTest {
|
|||
Assertions.assertNotNull(baseTreeNode.getParentId());
|
||||
}
|
||||
Assertions.assertNotNull(a1Node);
|
||||
createCase(a1Node, true ,"name1");
|
||||
createCase(a1Node, true, "name1");
|
||||
MvcResult mvcResultTrash = this.requestGetAndReturn(URL_MODULE_TREE_TRASH + project.getId());
|
||||
String contentTrash = mvcResultTrash.getResponse().getContentAsString(StandardCharsets.UTF_8);
|
||||
ResultHolder resultHolderTrash = JSON.parseObject(contentTrash, ResultHolder.class);
|
||||
List<BaseTreeNode> baseTreeNodeTrashList = JSON.parseArray(JSON.toJSONString(resultHolderTrash.getData()), BaseTreeNode.class);
|
||||
Assertions.assertTrue(CollectionUtils.isNotEmpty(baseTreeNodeTrashList));
|
||||
// 没case
|
||||
mvcResultTrash = this.requestGetAndReturn(URL_MODULE_TREE_TRASH + "projectIdX");
|
||||
contentTrash = mvcResultTrash.getResponse().getContentAsString(StandardCharsets.UTF_8);
|
||||
resultHolderTrash = JSON.parseObject(contentTrash, ResultHolder.class);
|
||||
baseTreeNodeTrashList = JSON.parseArray(JSON.toJSONString(resultHolderTrash.getData()), BaseTreeNode.class);
|
||||
Assertions.assertTrue(CollectionUtils.isEmpty(baseTreeNodeTrashList));
|
||||
}
|
||||
|
||||
private FunctionalCase createCase(BaseTreeNode a1a1Node, Boolean deleted, String name) {
|
||||
|
@ -752,7 +784,7 @@ public class FunctionalCaseModuleControllerTests extends BaseTest {
|
|||
}
|
||||
|
||||
private List<BaseTreeNode> getFunctionalCaseModuleTreeNode() throws Exception {
|
||||
MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get(URL_MODULE_TREE+"/"+project.getId()).header(SessionConstants.HEADER_TOKEN, sessionId)
|
||||
MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get(URL_MODULE_TREE + "/" + project.getId()).header(SessionConstants.HEADER_TOKEN, sessionId)
|
||||
.header(SessionConstants.CSRF_TOKEN, csrfToken)
|
||||
.header(SessionConstants.CURRENT_PROJECT, project.getId())
|
||||
.contentType(MediaType.APPLICATION_JSON))
|
||||
|
|
Loading…
Reference in New Issue