refactor(功能用例): 用例详情增加返回值

This commit is contained in:
WangXu10 2024-01-11 16:59:26 +08:00 committed by 刘瑞斌
parent e7635483dc
commit bca630ecf6
6 changed files with 55 additions and 4 deletions

View File

@ -50,6 +50,9 @@ public class FunctionalCaseDetailDTO implements Serializable {
@Schema(description = "版本") @Schema(description = "版本")
private String versionId; private String versionId;
@Schema(description = "版本名称")
private String versionName;
@Schema(description = "是否是公共用例库") @Schema(description = "是否是公共用例库")
private Boolean publicCase; private Boolean publicCase;
@ -59,6 +62,9 @@ public class FunctionalCaseDetailDTO implements Serializable {
@Schema(description = "创建人") @Schema(description = "创建人")
private String createUser; private String createUser;
@Schema(description = "创建时间")
private Long createTime;
@Schema(description = "用例步骤JSON)step_model 为 Step 时启用") @Schema(description = "用例步骤JSON)step_model 为 Step 时启用")
private String steps; private String steps;
@ -82,4 +88,7 @@ public class FunctionalCaseDetailDTO implements Serializable {
@Schema(description = "关注标识") @Schema(description = "关注标识")
private Boolean followFlag; private Boolean followFlag;
@Schema(description = "用例等级")
private String functionalPriority;
} }

View File

@ -19,6 +19,9 @@ public class ReviewFunctionalCaseDTO implements Serializable {
@Schema(description = "id") @Schema(description = "id")
private String id; private String id;
@Schema(description = "业务id")
private String num;
@Schema(description = "用例名称") @Schema(description = "用例名称")
private String name; private String name;

View File

@ -37,7 +37,8 @@
crfc.create_time as createTime, crfc.create_time as createTime,
functional_case.version_id as versionId, functional_case.version_id as versionId,
functional_case.module_id as moduleId, functional_case.module_id as moduleId,
functional_case.name as name functional_case.name as name,
functional_case.num as num
FROM FROM
case_review_functional_case crfc case_review_functional_case crfc
LEFT JOIN functional_case ON crfc.case_id = functional_case.id LEFT JOIN functional_case ON crfc.case_id = functional_case.id
@ -108,7 +109,7 @@
<foreach collection="${filter}.entrySet()" index="key" item="values"> <foreach collection="${filter}.entrySet()" index="key" item="values">
<if test="values != null and values.size() > 0"> <if test="values != null and values.size() > 0">
<choose> <choose>
<when test="key=='review_status'"> <when test="key=='status'">
case_review_functional_case.review_status in case_review_functional_case.review_status in
<include refid="io.metersphere.system.mapper.BaseMapper.filterInWrapper"/> <include refid="io.metersphere.system.mapper.BaseMapper.filterInWrapper"/>
<include refid="queryType"> <include refid="queryType">

View File

@ -11,6 +11,7 @@ import io.metersphere.functional.mapper.FunctionalCaseMapper;
import io.metersphere.functional.request.*; import io.metersphere.functional.request.*;
import io.metersphere.functional.result.CaseManagementResultCode; import io.metersphere.functional.result.CaseManagementResultCode;
import io.metersphere.project.domain.FileAssociation; import io.metersphere.project.domain.FileAssociation;
import io.metersphere.project.domain.ProjectVersion;
import io.metersphere.project.dto.ModuleCountDTO; import io.metersphere.project.dto.ModuleCountDTO;
import io.metersphere.project.mapper.ExtBaseProjectVersionMapper; import io.metersphere.project.mapper.ExtBaseProjectVersionMapper;
import io.metersphere.project.service.ProjectTemplateService; import io.metersphere.project.service.ProjectTemplateService;
@ -21,6 +22,7 @@ import io.metersphere.sdk.constants.TemplateScene;
import io.metersphere.sdk.exception.MSException; import io.metersphere.sdk.exception.MSException;
import io.metersphere.sdk.util.BeanUtils; import io.metersphere.sdk.util.BeanUtils;
import io.metersphere.sdk.util.JSON; import io.metersphere.sdk.util.JSON;
import io.metersphere.sdk.util.Translator;
import io.metersphere.system.dto.sdk.TemplateCustomFieldDTO; import io.metersphere.system.dto.sdk.TemplateCustomFieldDTO;
import io.metersphere.system.dto.sdk.TemplateDTO; import io.metersphere.system.dto.sdk.TemplateDTO;
import io.metersphere.system.dto.sdk.request.PosRequest; import io.metersphere.system.dto.sdk.request.PosRequest;
@ -220,6 +222,11 @@ public class FunctionalCaseService {
//获取附件信息 //获取附件信息
functionalCaseAttachmentService.getAttachmentInfo(functionalCaseDetailDTO); functionalCaseAttachmentService.getAttachmentInfo(functionalCaseDetailDTO);
List<ProjectVersion> versions = extBaseProjectVersionMapper.getVersionByIds(List.of(functionalCaseDetailDTO.getVersionId()));
if (CollectionUtils.isNotEmpty(versions)) {
functionalCaseDetailDTO.setVersionName(versions.get(0).getName());
}
return functionalCaseDetailDTO; return functionalCaseDetailDTO;
} }
@ -262,8 +269,12 @@ public class FunctionalCaseService {
FunctionalCaseCustomField caseCustomField = functionalCaseCustomFieldService.getCustomField(item.getFieldId(), functionalCase.getId()); FunctionalCaseCustomField caseCustomField = functionalCaseCustomFieldService.getCustomField(item.getFieldId(), functionalCase.getId());
Optional.ofNullable(caseCustomField).ifPresentOrElse(customField -> { Optional.ofNullable(caseCustomField).ifPresentOrElse(customField -> {
item.setDefaultValue(customField.getValue()); item.setDefaultValue(customField.getValue());
if (Translator.get("custom_field.functional_priority").equals(item.getFieldName())) {
functionalCaseDetailDTO.setFunctionalPriority(customField.getValue());
}
}, () -> { }, () -> {
}); });
}); });
functionalCaseDetailDTO.setCustomFields(customFields); functionalCaseDetailDTO.setCustomFields(customFields);
} }

View File

@ -1,21 +1,27 @@
package io.metersphere.functional.controller; package io.metersphere.functional.controller;
import io.metersphere.functional.domain.FunctionalCase; import io.metersphere.functional.domain.FunctionalCase;
import io.metersphere.functional.domain.FunctionalCaseCustomField;
import io.metersphere.functional.dto.CaseCustomFieldDTO; import io.metersphere.functional.dto.CaseCustomFieldDTO;
import io.metersphere.functional.dto.FunctionalCasePageDTO; import io.metersphere.functional.dto.FunctionalCasePageDTO;
import io.metersphere.functional.mapper.FunctionalCaseCustomFieldMapper;
import io.metersphere.functional.request.*; import io.metersphere.functional.request.*;
import io.metersphere.functional.result.CaseManagementResultCode; import io.metersphere.functional.result.CaseManagementResultCode;
import io.metersphere.functional.utils.FileBaseUtils; import io.metersphere.functional.utils.FileBaseUtils;
import io.metersphere.project.domain.Notification; import io.metersphere.project.domain.Notification;
import io.metersphere.project.domain.NotificationExample; import io.metersphere.project.domain.NotificationExample;
import io.metersphere.project.mapper.NotificationMapper; import io.metersphere.project.mapper.NotificationMapper;
import io.metersphere.project.service.ProjectTemplateService;
import io.metersphere.sdk.constants.CustomFieldType; import io.metersphere.sdk.constants.CustomFieldType;
import io.metersphere.sdk.constants.TemplateScene; import io.metersphere.sdk.constants.TemplateScene;
import io.metersphere.sdk.constants.TemplateScopeType; import io.metersphere.sdk.constants.TemplateScopeType;
import io.metersphere.sdk.util.JSON; import io.metersphere.sdk.util.JSON;
import io.metersphere.sdk.util.Translator;
import io.metersphere.system.base.BaseTest; import io.metersphere.system.base.BaseTest;
import io.metersphere.system.controller.handler.ResultHolder; import io.metersphere.system.controller.handler.ResultHolder;
import io.metersphere.system.domain.CustomField; import io.metersphere.system.domain.CustomField;
import io.metersphere.system.dto.sdk.TemplateCustomFieldDTO;
import io.metersphere.system.dto.sdk.TemplateDTO;
import io.metersphere.system.dto.sdk.request.PosRequest; import io.metersphere.system.dto.sdk.request.PosRequest;
import io.metersphere.system.mapper.CustomFieldMapper; import io.metersphere.system.mapper.CustomFieldMapper;
import io.metersphere.system.notice.constants.NoticeConstants; import io.metersphere.system.notice.constants.NoticeConstants;
@ -60,6 +66,10 @@ public class FunctionalCaseControllerTests extends BaseTest {
@Resource @Resource
private CustomFieldMapper customFieldMapper; private CustomFieldMapper customFieldMapper;
@Resource
private ProjectTemplateService projectTemplateService;
@Resource
private FunctionalCaseCustomFieldMapper functionalCaseCustomFieldMapper;
@Test @Test
@Order(1) @Order(1)
@ -132,6 +142,21 @@ public class FunctionalCaseControllerTests extends BaseTest {
ResultHolder resultHolder = JSON.parseObject(returnData, ResultHolder.class); ResultHolder resultHolder = JSON.parseObject(returnData, ResultHolder.class);
// 返回请求正常 // 返回请求正常
Assertions.assertNotNull(resultHolder); Assertions.assertNotNull(resultHolder);
this.requestGetWithOkAndReturn(FUNCTIONAL_CASE_DETAIL_URL + "TEST_FUNCTIONAL_CASE_ID_2");
//增加覆盖率
TemplateDTO templateDTO = projectTemplateService.getTemplateDTOById("21312", "100001100001", TemplateScene.FUNCTIONAL.name());
List<TemplateCustomFieldDTO> customFields = templateDTO.getCustomFields();
customFields.forEach(item ->{
if (Translator.get("custom_field.functional_priority").equals(item.getFieldName())) {
FunctionalCaseCustomField functionalCaseCustomField = new FunctionalCaseCustomField();
functionalCaseCustomField.setCaseId("TEST_FUNCTIONAL_CASE_ID_3");
functionalCaseCustomField.setFieldId(item.getFieldId());
functionalCaseCustomField.setValue("P3");
functionalCaseCustomFieldMapper.insertSelective(functionalCaseCustomField);
}
});
this.requestGetWithOkAndReturn(FUNCTIONAL_CASE_DETAIL_URL + "TEST_FUNCTIONAL_CASE_ID_3");
} }

View File

@ -11,7 +11,7 @@ INSERT INTO functional_case(id, num, module_id, project_id, template_id, name, r
VALUES ('TEST_FUNCTIONAL_CASE_ID_1', 2, 'TEST_MODULE_ID_GYQ', '100001100001', '100001', '测试多版本', 'UN_REVIEWED', '["测试标签_1"]', 'STEP', 5000, 'v1.0.0', 'TEST_REF_ID', 'UN_EXECUTED', b'0', b'0', b'1', 'admin', 'admin', '', 1698058347559, 1698058347559, NULL); VALUES ('TEST_FUNCTIONAL_CASE_ID_1', 2, 'TEST_MODULE_ID_GYQ', '100001100001', '100001', '测试多版本', 'UN_REVIEWED', '["测试标签_1"]', 'STEP', 5000, 'v1.0.0', 'TEST_REF_ID', 'UN_EXECUTED', b'0', b'0', b'1', 'admin', 'admin', '', 1698058347559, 1698058347559, NULL);
INSERT INTO functional_case(id, num, module_id, project_id, template_id, name, review_status, tags, case_edit_type, pos, version_id, ref_id, last_execute_result, deleted, public_case, latest, create_user, update_user, delete_user, create_time, update_time, delete_time) INSERT INTO functional_case(id, num, module_id, project_id, template_id, name, review_status, tags, case_edit_type, pos, version_id, ref_id, last_execute_result, deleted, public_case, latest, create_user, update_user, delete_user, create_time, update_time, delete_time)
VALUES ('TEST_FUNCTIONAL_CASE_ID_2', 3, 'TEST_MODULE_ID_GYQ', '100001100001', '100001', 'copy_测试多版本', 'UN_REVIEWED', NULL, 'STEP', 15000, 'v2.0.0', 'TEST_REF_ID', 'UN_EXECUTED', b'0', b'0', b'1', 'admin', 'admin', '', 1698058347559, 1698058347559, NULL); VALUES ('TEST_FUNCTIONAL_CASE_ID_2', 3, 'TEST_MODULE_ID_GYQ', '100001100001', '100001', 'copy_测试多版本', 'UN_REVIEWED', NULL, 'STEP', 15000, 'v2.0.1', 'TEST_REF_ID', 'UN_EXECUTED', b'0', b'0', b'1', 'admin', 'admin', '', 1698058347559, 1698058347559, NULL);
INSERT INTO functional_case(id, num, module_id, project_id, template_id, name, review_status, tags, case_edit_type, pos, version_id, ref_id, last_execute_result, deleted, public_case, latest, create_user, update_user, delete_user, create_time, update_time, delete_time) INSERT INTO functional_case(id, num, module_id, project_id, template_id, name, review_status, tags, case_edit_type, pos, version_id, ref_id, last_execute_result, deleted, public_case, latest, create_user, update_user, delete_user, create_time, update_time, delete_time)
VALUES ('TEST_FUNCTIONAL_CASE_ID_3', 3, 'TEST_MODULE_ID_GYQ', '100001100001', '100001', 'copy_测试多版本', 'UN_REVIEWED', NULL, 'STEP', 25000, 'v3.0.0', 'TEST_REF_ID', 'UN_EXECUTED', b'0', b'0', b'1', 'admin', 'admin', '', 1698058347559, 1698058347559, NULL); VALUES ('TEST_FUNCTIONAL_CASE_ID_3', 3, 'TEST_MODULE_ID_GYQ', '100001100001', '100001', 'copy_测试多版本', 'UN_REVIEWED', NULL, 'STEP', 25000, 'v3.0.0', 'TEST_REF_ID', 'UN_EXECUTED', b'0', b'0', b'1', 'admin', 'admin', '', 1698058347559, 1698058347559, NULL);
@ -69,4 +69,6 @@ INSERT INTO case_review_functional_case(id, review_id, case_id, status, create_t
INSERT INTO case_review(id, num, name, module_id, project_id, status, review_pass_rule, pos, start_time, end_time, case_count, pass_rate, tags, description, create_time, create_user, update_time, update_user) INSERT INTO case_review(id, num, name, module_id, project_id, status, review_pass_rule, pos, start_time, end_time, case_count, pass_rate, tags, description, create_time, create_user, update_time, update_user)
VALUES ('wx_review_id',10006,'测试重新提审', 'test_module_one', 'TEST_MODULE_ID_GYQ', 'COMPLETED', 'SINGLE', 001, null, null, 1,100.00,null,null,1698058347559,'admin',1698058347559,'admin'); VALUES ('wx_review_id',10006,'测试重新提审', 'test_module_one', 'TEST_MODULE_ID_GYQ', 'COMPLETED', 'SINGLE', 001, null, null, 1,100.00,null,null,1698058347559,'admin',1698058347559,'admin');
INSERT INTO project_version(id, project_id, name, description, status, latest, publish_time, start_time, end_time, create_time, create_user)
VALUES ('v2.0.1', 'wx_relationship', 'v1.0', NULL, 'open', b'1', 1698810592000, 1698810592000, 1698810592000, 1698810592000, 'admin');