refactor(功能用例): 脑图保存用例等级优化以及测试计划脑图分层级校验

This commit is contained in:
guoyuqi 2024-06-18 20:05:53 +08:00 committed by Craftsman
parent afe2687fdb
commit 81484e4272
8 changed files with 50 additions and 29 deletions

View File

@ -37,6 +37,10 @@ public class FunctionalCaseChangeRequest implements Serializable {
@NotBlank(message = "{functional_case.module_id.not_blank}")
private String moduleId;
@Schema(description = "用例等级", requiredMode = Schema.RequiredMode.REQUIRED)
@NotBlank(message = "{functional_case.name.not_blank}")
private int priority = 0;
@Schema(description = "移动方式(节点移动或新增时需要)", requiredMode = Schema.RequiredMode.REQUIRED)
private String moveMode;

View File

@ -130,7 +130,6 @@ public class FunctionalCaseMinderService {
private static final String FUNCTIONAL_CASE = "functional_case";
private static final String FUNCTIONAL_CASE_MODULE = "functional_case_module";
private static final String CHECK_OWNER_CASE = "check_owner_case";
/**
* 功能用例-脑图用例列表查询
*
@ -276,6 +275,8 @@ public class FunctionalCaseMinderService {
FunctionalMinderTreeNodeDTO rootData = new FunctionalMinderTreeNodeDTO();
rootData.setText(text);
rootData.setPos(pos);
//最子节点默认收起
rootData.setExpandState("collapse");
rootData.setResource(List.of(resource));
functionalMinderTreeDTO.setChildren(new ArrayList<>());
functionalMinderTreeDTO.setData(rootData);
@ -620,7 +621,12 @@ public class FunctionalCaseMinderService {
FunctionalCase functionalCase = addCase(request, userId, functionalCaseChangeRequest, caseMapper, sourceIdAndInsertModuleIdMap);
String caseId = functionalCase.getId();
sourceIdAndInsertCaseIdMap.put(functionalCaseChangeRequest.getId(), caseId);
//保存用例等级
FunctionalCaseCustomField customField = new FunctionalCaseCustomField();
customField.setCaseId(caseId);
customField.setFieldId(defaultCustomFieldValueMap.get("priorityFieldId").toString());
customField.setValue("P"+functionalCaseChangeRequest.getPriority());
caseCustomFieldMapper.insertSelective(customField);
//附属表
FunctionalCaseBlob functionalCaseBlob = addCaseBlob(functionalCaseChangeRequest, caseId, caseBlobMapper);
//保存自定义字段
@ -658,6 +664,12 @@ public class FunctionalCaseMinderService {
FunctionalCaseBlob functionalCaseBlob = updateBlob(functionalCaseChangeRequest, caseId, caseBlobMapper);
//更新自定义字段
List<FunctionalCaseCustomField> functionalCaseCustomFields = updateCustomFields(functionalCaseChangeRequest, oldCaseCustomFieldMap, caseId, caseCustomFieldMapper);
//更新用例等级
FunctionalCaseCustomField customField = new FunctionalCaseCustomField();
customField.setCaseId(caseId);
customField.setFieldId(defaultCustomFieldValueMap.get("priorityFieldId").toString());
customField.setValue("P"+functionalCaseChangeRequest.getPriority());
caseCustomFieldMapper.updateByPrimaryKeySelective(customField);
//日志
FunctionalCaseHistoryLogDTO historyLogDTO = new FunctionalCaseHistoryLogDTO(functionalCase, functionalCaseBlob, oldCaseCustomFieldMap.get(caseId), new ArrayList<>(), new ArrayList<>());
FunctionalCaseHistoryLogDTO old = new FunctionalCaseHistoryLogDTO(oldCaseMap.get(caseId), oldBlobMap.get(caseId), new ArrayList<>(), new ArrayList<>(), new ArrayList<>());
@ -692,16 +704,16 @@ public class FunctionalCaseMinderService {
TemplateDTO defaultTemplateDTO = projectTemplateService.getDefaultTemplateDTO(request.getProjectId(), TemplateScene.FUNCTIONAL.toString());
List<TemplateCustomFieldDTO> customFields = defaultTemplateDTO.getCustomFields();
Map<String, Object> defaultValueMap = new HashMap<>();
String priorityFieldId = null;
for (TemplateCustomFieldDTO field : customFields) {
if (StringUtils.equalsIgnoreCase(field.getFieldName(), "functional_priority")) {
if (field.getDefaultValue() == null) {
field.setDefaultValue("P0");
if (StringUtils.equalsIgnoreCase(field.getFieldName(), Translator.get("custom_field.functional_priority"))) {
priorityFieldId = field.getFieldId();
}
}
if (field.getDefaultValue() != null) {
if (field.getDefaultValue() != null && !StringUtils.equalsIgnoreCase(field.getFieldName(), Translator.get("custom_field.functional_priority"))) {
defaultValueMap.put(field.getFieldId(), field.getDefaultValue());
}
}
defaultValueMap.put("priorityFieldId", priorityFieldId);
return defaultValueMap;
}

View File

@ -449,7 +449,7 @@ public class FunctionalCaseService {
long testPlanExecuteComment = testPlanCaseExecuteHistoryMapper.countByExample(testPlanCaseExecuteHistoryExample);
OptionDTO executeOption = new OptionDTO();
executeOption.setId("executiveComment");
executeOption.setName(String.valueOf(reviewComment));
executeOption.setName(String.valueOf(testPlanExecuteComment));
commentList.add(2,executeOption);
functionalCaseDetailDTO.setCommentList(commentList);
long commentCount = caseComment + reviewComment + testPlanExecuteComment;

View File

@ -165,6 +165,7 @@ public class FunctionalCaseMinderControllerTest extends BaseTest {
caseChangeRequest.setName("新增用例");
caseChangeRequest.setModuleId("TEST_MINDER_MODULE_ID_GYQ2");
caseChangeRequest.setMoveMode("AFTER");
caseChangeRequest.setPriority(2);
caseChangeRequest.setTargetId("TEST_FUNCTIONAL_MINDER_CASE_ID_3");
caseChangeRequest.setTemplateId("100001");
caseChangeRequest.setType("ADD");
@ -172,8 +173,8 @@ public class FunctionalCaseMinderControllerTest extends BaseTest {
caseChangeRequest.setCaseEditType("TEXT");
List<CaseCustomFieldDTO> customFields = new ArrayList<>();
CaseCustomFieldDTO customFieldDTO = new CaseCustomFieldDTO();
customFieldDTO.setFieldId("custom_field_minder_gyq_id_3");
customFieldDTO.setValue("P0");
customFieldDTO.setFieldId("custom_field_minder_gyq_id_4");
customFieldDTO.setValue("a");
customFields.add(customFieldDTO);
caseChangeRequest.setCustomFields(customFields);
caseChangeRequests.add(caseChangeRequest);
@ -182,6 +183,7 @@ public class FunctionalCaseMinderControllerTest extends BaseTest {
caseChangeRequest.setName("TEST_MINDER_MODULE_ID_GYQ_更新");
caseChangeRequest.setModuleId("TEST_MINDER_MODULE_ID_GYQ");
caseChangeRequest.setTemplateId("100001");
caseChangeRequest.setPriority(2);
caseChangeRequest.setMoveMode("BEFORE");
caseChangeRequest.setTargetId("TEST_FUNCTIONAL_MINDER_CASE_ID_2");
caseChangeRequest.setType("UPDATE");
@ -189,8 +191,8 @@ public class FunctionalCaseMinderControllerTest extends BaseTest {
caseChangeRequest.setCaseEditType("TEXT");
customFields = new ArrayList<>();
customFieldDTO = new CaseCustomFieldDTO();
customFieldDTO.setFieldId("custom_field_minder_gyq_id_3");
customFieldDTO.setValue("P3");
customFieldDTO.setFieldId("custom_field_minder_gyq_id_4");
customFieldDTO.setValue("b");
customFields.add(customFieldDTO);
caseChangeRequest.setCustomFields(customFields);
caseChangeRequests.add(caseChangeRequest);

View File

@ -30,6 +30,8 @@ INSERT INTO functional_case_custom_field(case_id, field_id, value) VALUES ('TEST
INSERT INTO functional_case_custom_field(case_id, field_id, value) VALUES ('TEST_FUNCTIONAL_MINDER_CASE_ID_2', 'custom_field_minder_gyq_id_3', 'P3');
INSERT INTO functional_case_custom_field(case_id, field_id, value) VALUES ('TEST_FUNCTIONAL_MINDER_CASE_ID_5', 'custom_field_minder_gyq_id_3', 'P3');
INSERT INTO functional_case_custom_field(case_id, field_id, value) VALUES ('TEST_FUNCTIONAL_MINDER_CASE_ID_6', 'custom_field_minder_gyq_id_3', 'P2');
INSERT INTO functional_case_custom_field(case_id, field_id, value) VALUES ('TEST_FUNCTIONAL_MINDER_CASE_ID_6', 'custom_field_minder_gyq_id_4', 'a');
@ -56,7 +58,8 @@ INSERT INTO test_plan_functional_case(id, test_plan_id, functional_case_id, crea
INSERT INTO custom_field (id, name, scene, type, remark, internal, scope_type, create_time, update_time, create_user, scope_id) VALUES
('custom_field_minder_gyq_id_2', 'functional_priority', 'FUNCTIONAL', 'SELECT', '', true, 'ORGANIZATION', UNIX_TIMESTAMP() * 1000, UNIX_TIMESTAMP() * 1000, 'admin', '100001'),
('custom_field_minder_gyq_id_3', 'functional_priority', 'FUNCTIONAL', 'SELECT', '', true, 'PROJECT', UNIX_TIMESTAMP() * 1000, UNIX_TIMESTAMP() * 1000, 'admin', 'project-case-minder-test');
('custom_field_minder_gyq_id_3', 'functional_priority', 'FUNCTIONAL', 'SELECT', '', true, 'PROJECT', UNIX_TIMESTAMP() * 1000, UNIX_TIMESTAMP() * 1000, 'admin', 'project-case-minder-test'),
('custom_field_minder_gyq_id_4', 'fff', 'FUNCTIONAL', 'SELECT', '', true, 'PROJECT', UNIX_TIMESTAMP() * 1000, UNIX_TIMESTAMP() * 1000, 'admin', 'project-case-minder-test');
@ -99,3 +102,4 @@ VALUES ('additional1', 'project-case-minder-test', 'additional1', 'TEST_MINDER_M
INSERT INTO template(id,name,remark,internal,update_time,create_time,create_user,scope_type,scope_id,enable_third_part, scene, ref_id)
VALUES ('100001', 'functional_default', '', 1, UNIX_TIMESTAMP() * 1000, UNIX_TIMESTAMP() * 1000, 'admin', 'PROJECT', 'project-case-minder-test', 0, 'FUNCTIONAL', '100001');
INSERT INTO template_custom_field(id, field_id, template_id, required, pos, api_field_id, default_value) VALUES ('template_custom_field_minder_gyq_id', 'custom_field_minder_gyq_id_3', '100001', b'1', 0, NULL, NULL);

View File

@ -73,6 +73,10 @@ public class TestPlanCollectionMinderEditDTO implements Serializable {
@NotNull(message = "{test_plan_collection.stop_on_fail.not_blank}")
private Boolean stopOnFail;
@Schema(description = "叶子等级", requiredMode = Schema.RequiredMode.REQUIRED)
@NotBlank(message = "{test_plan_collection.num.not_blank}")
private Integer level;
@Schema(description = "关联关系的数据")
private List<TestPlanCollectionAssociateDTO>associateDTOS;

View File

@ -107,7 +107,7 @@ public class TestPlanCollectionMinderService {
} else {
typeTreeNodeDTO.setPriority(2);
}
if (StringUtils.equalsIgnoreCase(CaseType.FUNCTIONAL_CASE.getKey(),testPlanCollection.getType())) {
if (StringUtils.equalsIgnoreCase(CaseType.FUNCTIONAL_CASE.getKey(), testPlanCollection.getType())) {
typeTreeNodeDTO.setPriority(null);
}
return typeTreeNodeDTO;
@ -188,7 +188,7 @@ public class TestPlanCollectionMinderService {
buildChild(countTreeNodeDTO, count + Translator.get("test_plan.mind.strip"), "test_plan.mind.case_count", countTreeDTO, endList);
TestPlanCollectionMinderTreeDTO envTreeDTO = new TestPlanCollectionMinderTreeDTO();
TestPlanCollectionMinderTreeNodeDTO envTreeNodeDTO = new TestPlanCollectionMinderTreeNodeDTO();
buildChild(envTreeNodeDTO, StringUtils.equalsIgnoreCase(planCollection.getEnvironmentId(),ModuleConstants.ROOT_NODE_PARENT_ID) ? Translator.get("api_report_default_env") : planCollection.getEnvName(), "test_plan.mind.environment", envTreeDTO, endList);
buildChild(envTreeNodeDTO, StringUtils.equalsIgnoreCase(planCollection.getEnvironmentId(), ModuleConstants.ROOT_NODE_PARENT_ID) ? Translator.get("api_report_default_env") : planCollection.getEnvName(), "test_plan.mind.environment", envTreeDTO, endList);
TestPlanCollectionMinderTreeDTO poolTreeDTO = new TestPlanCollectionMinderTreeDTO();
TestPlanCollectionMinderTreeNodeDTO poolTreeNodeDTO = new TestPlanCollectionMinderTreeNodeDTO();
buildChild(poolTreeNodeDTO, planCollection.getPoolName(), "test_plan.mind.test_resource_pool", poolTreeDTO, endList);
@ -215,7 +215,7 @@ public class TestPlanCollectionMinderService {
buildChild(countTreeNodeDTO, count + Translator.get("test_plan.mind.strip"), "test_plan.mind.case_count", countTreeDTO, endList);
TestPlanCollectionMinderTreeDTO envTreeDTO = new TestPlanCollectionMinderTreeDTO();
TestPlanCollectionMinderTreeNodeDTO envTreeNodeDTO = new TestPlanCollectionMinderTreeNodeDTO();
buildChild(envTreeNodeDTO, StringUtils.equalsIgnoreCase(planCollection.getEnvironmentId(),ModuleConstants.ROOT_NODE_PARENT_ID) ? Translator.get("api_report_default_env") : planCollection.getEnvName() , "test_plan.mind.environment", envTreeDTO, endList);
buildChild(envTreeNodeDTO, StringUtils.equalsIgnoreCase(planCollection.getEnvironmentId(), ModuleConstants.ROOT_NODE_PARENT_ID) ? Translator.get("api_report_default_env") : planCollection.getEnvName(), "test_plan.mind.environment", envTreeDTO, endList);
TestPlanCollectionMinderTreeDTO poolTreeDTO = new TestPlanCollectionMinderTreeDTO();
TestPlanCollectionMinderTreeNodeDTO poolTreeNodeDTO = new TestPlanCollectionMinderTreeNodeDTO();
buildChild(poolTreeNodeDTO, planCollection.getPoolName(), "test_plan.mind.test_resource_pool", poolTreeDTO, endList);
@ -272,7 +272,7 @@ public class TestPlanCollectionMinderService {
}
private static void checkNameRepeat(Map<String, List<String>> updateTypeNameMap, Map<String, List<String>> addTypeNameMap) {
updateTypeNameMap.forEach((k, v)->{
updateTypeNameMap.forEach((k, v) -> {
List<String> nameList = addTypeNameMap.get(k);
if (CollectionUtils.isNotEmpty(nameList)) {
List<String> repeatList = v.stream().filter(nameList::contains).collect(Collectors.toList());
@ -284,8 +284,8 @@ public class TestPlanCollectionMinderService {
}
private Map<String, List<String>> dealUpdateList(TestPlanCollectionMinderEditRequest request, String userId, Map<String, List<BaseCollectionAssociateRequest>> associateMap, Map<String, List<TestPlanCollection>> parentMap, TestPlanCollectionMapper collectionMapper) {
List<TestPlanCollectionMinderEditDTO> updateList = request.getEditList().stream().filter(t -> StringUtils.isNotBlank(t.getId())).toList();
Map<String, List<String>>typeNamesMap = new HashMap<>();
List<TestPlanCollectionMinderEditDTO> updateList = request.getEditList().stream().filter(t -> StringUtils.isNotBlank(t.getId()) && t.getLevel() == 2).toList();
Map<String, List<String>> typeNamesMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(updateList)) {
//处理删除
deleteCollection(updateList, request.getPlanId());
@ -311,8 +311,8 @@ public class TestPlanCollectionMinderService {
}
private Map<String, List<String>> dealAddList(TestPlanCollectionMinderEditRequest request, String userId, Map<String, List<BaseCollectionAssociateRequest>> associateMap, Map<String, List<TestPlanCollection>> parentMap, TestPlanCollectionMapper collectionMapper) {
Map<String, List<String>>typeNamesMap = new HashMap<>();
List<TestPlanCollectionMinderEditDTO> addList = request.getEditList().stream().filter(t -> StringUtils.isBlank(t.getId())).toList();
Map<String, List<String>> typeNamesMap = new HashMap<>();
List<TestPlanCollectionMinderEditDTO> addList = request.getEditList().stream().filter(t -> StringUtils.isBlank(t.getId()) && t.getLevel() == 2).toList();
if (CollectionUtils.isNotEmpty(addList)) {
for (TestPlanCollectionMinderEditDTO testPlanCollectionMinderEditDTO : addList) {
TestPlanCollection testPlanCollection = addCollection(request, userId, testPlanCollectionMinderEditDTO, parentMap, collectionMapper);
@ -346,14 +346,6 @@ public class TestPlanCollectionMinderService {
return testPlanCollections.stream().collect(Collectors.groupingBy(TestPlanCollection::getType));
}
@NotNull
private Map<String, List<TestPlanCollection>> getChildrenMap(TestPlanCollectionMinderEditRequest request) {
TestPlanCollectionExample testPlanCollectionExample = new TestPlanCollectionExample();
testPlanCollectionExample.createCriteria().andTestPlanIdEqualTo(request.getPlanId()).andParentIdNotEqualTo(ModuleConstants.ROOT_NODE_PARENT_ID);
List<TestPlanCollection> testPlanCollections = testPlanCollectionMapper.selectByExample(testPlanCollectionExample);
return testPlanCollections.stream().collect(Collectors.groupingBy(TestPlanCollection::getType));
}
@NotNull
private static TestPlanCollection updateCollection(TestPlanCollectionMinderEditRequest request, String userId, TestPlanCollectionMinderEditDTO testPlanCollectionMinderEditDTO, Map<String, List<TestPlanCollection>> parentMap, TestPlanCollectionMapper collectionMapper) {
TestPlanCollection testPlanCollection = new TestPlanCollection();

View File

@ -69,6 +69,7 @@ public class TestPlanCollectionMinderControllerTests extends BaseTest {
testPlanCollectionMinderEditDTO.setType("API");
testPlanCollectionMinderEditDTO.setExtended(false);
testPlanCollectionMinderEditDTO.setGrouped(false);
testPlanCollectionMinderEditDTO.setLevel(2);
testPlanCollectionMinderEditDTO.setEnvironmentId("gyq_123");
testPlanCollectionMinderEditDTO.setTestResourcePoolId("gyq_123_pool");
testPlanCollectionMinderEditDTO.setRetryOnFail(true);
@ -94,6 +95,7 @@ public class TestPlanCollectionMinderControllerTests extends BaseTest {
testPlanCollectionMinderEditDTO.setId(null);
testPlanCollectionMinderEditDTO.setText("新建名称");
testPlanCollectionMinderEditDTO.setNum(500L);
testPlanCollectionMinderEditDTO.setLevel(2);
testPlanCollectionMinderEditDTO.setExecuteMethod("PARALLEL");
testPlanCollectionMinderEditDTO.setType("API");
testPlanCollectionMinderEditDTO.setExtended(false);
@ -133,6 +135,7 @@ public class TestPlanCollectionMinderControllerTests extends BaseTest {
testPlanCollectionMinderEditDTO.setNum(500L);
testPlanCollectionMinderEditDTO.setExecuteMethod("PARALLEL");
testPlanCollectionMinderEditDTO.setType("API");
testPlanCollectionMinderEditDTO.setLevel(2);
testPlanCollectionMinderEditDTO.setExtended(false);
testPlanCollectionMinderEditDTO.setGrouped(false);
testPlanCollectionMinderEditDTO.setEnvironmentId("gyq_123");