refactor(功能用例): 增加用例功能相关的检查

This commit is contained in:
guoyuqi 2024-01-09 09:56:38 +08:00 committed by 刘瑞斌
parent 35a95cb40e
commit 581de62928
6 changed files with 56 additions and 6 deletions

View File

@ -1,7 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="io.metersphere.functional.mapper.ExtFunctionalCaseMapper"> <mapper namespace="io.metersphere.functional.mapper.ExtFunctionalCaseMapper">
<resultMap id="BaseResultMap" type="io.metersphere.functional.domain.FunctionalCase">
<id column="id" jdbcType="VARCHAR" property="id" />
<result column="num" jdbcType="BIGINT" property="num" />
<result column="module_id" jdbcType="VARCHAR" property="moduleId" />
<result column="project_id" jdbcType="VARCHAR" property="projectId" />
<result column="template_id" jdbcType="VARCHAR" property="templateId" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="review_status" jdbcType="VARCHAR" property="reviewStatus" />
<result column="tags" jdbcType="VARCHAR" property="tags" typeHandler="io.metersphere.handler.ListTypeHandler" />
<result column="case_edit_type" jdbcType="VARCHAR" property="caseEditType" />
<result column="pos" jdbcType="BIGINT" property="pos" />
<result column="version_id" jdbcType="VARCHAR" property="versionId" />
<result column="ref_id" jdbcType="VARCHAR" property="refId" />
<result column="last_execute_result" jdbcType="VARCHAR" property="lastExecuteResult" />
<result column="deleted" jdbcType="BIT" property="deleted" />
<result column="public_case" jdbcType="BIT" property="publicCase" />
<result column="latest" jdbcType="BIT" property="latest" />
<result column="create_user" jdbcType="VARCHAR" property="createUser" />
<result column="update_user" jdbcType="VARCHAR" property="updateUser" />
<result column="delete_user" jdbcType="VARCHAR" property="deleteUser" />
<result column="create_time" jdbcType="BIGINT" property="createTime" />
<result column="update_time" jdbcType="BIGINT" property="updateTime" />
<result column="delete_time" jdbcType="BIGINT" property="deleteTime" />
</resultMap>
<select id="getPos" resultType="java.lang.Long"> <select id="getPos" resultType="java.lang.Long">
SELECT SELECT
@ -516,7 +539,7 @@
</update> </update>
<select id="getTagsByIds" resultType="io.metersphere.functional.domain.FunctionalCase"> <select id="getTagsByIds" resultMap="BaseResultMap">
select id, tags from functional_case select id, tags from functional_case
where id in where id in
<foreach collection="ids" item="id" open="(" separator="," close=")"> <foreach collection="ids" item="id" open="(" separator="," close=")">

View File

@ -566,6 +566,8 @@ public class CaseReviewService {
} }
public void disassociate(String reviewId, String caseId, String userId) { public void disassociate(String reviewId, String caseId, String userId) {
checkCaseReview(reviewId);
checkCase(caseId);
//1.刪除评审与功能用例关联关系 //1.刪除评审与功能用例关联关系
CaseReviewFunctionalCaseExample caseReviewFunctionalCaseExample = new CaseReviewFunctionalCaseExample(); CaseReviewFunctionalCaseExample caseReviewFunctionalCaseExample = new CaseReviewFunctionalCaseExample();
caseReviewFunctionalCaseExample.createCriteria().andReviewIdEqualTo(reviewId).andCaseIdEqualTo(caseId); caseReviewFunctionalCaseExample.createCriteria().andReviewIdEqualTo(reviewId).andCaseIdEqualTo(caseId);
@ -579,6 +581,13 @@ public class CaseReviewService {
provider.updateCaseReview(param); provider.updateCaseReview(param);
} }
private void checkCase(String caseId) {
FunctionalCase functionalCase = functionalCaseMapper.selectByPrimaryKey(caseId);
if (functionalCase == null) {
throw new MSException(CaseManagementResultCode.FUNCTIONAL_CASE_NOT_FOUND);
}
}
public Map<String, Long> moduleCount(CaseReviewPageRequest request) { public Map<String, Long> moduleCount(CaseReviewPageRequest request) {
//查出每个模块节点下的资源数量 不需要按照模块进行筛选 //查出每个模块节点下的资源数量 不需要按照模块进行筛选
request.setModuleIds(null); request.setModuleIds(null);

View File

@ -22,6 +22,7 @@ import io.metersphere.system.service.NoticeSendService;
import io.metersphere.system.uid.IDGenerator; import io.metersphere.system.uid.IDGenerator;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.apache.commons.beanutils.BeanMap; import org.apache.commons.beanutils.BeanMap;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -221,6 +222,9 @@ public class FunctionalCaseCommentService {
functionalCaseCommentExample.createCriteria().andCaseIdEqualTo(caseId); functionalCaseCommentExample.createCriteria().andCaseIdEqualTo(caseId);
List<FunctionalCaseComment> functionalCaseComments = functionalCaseCommentMapper.selectByExampleWithBLOBs(functionalCaseCommentExample); List<FunctionalCaseComment> functionalCaseComments = functionalCaseCommentMapper.selectByExampleWithBLOBs(functionalCaseCommentExample);
List<String> userIds = getUserIds(functionalCaseComments); List<String> userIds = getUserIds(functionalCaseComments);
if (CollectionUtils.isEmpty(userIds)) {
return new ArrayList<>();
}
Map<String, User> userMap = getUserMap(userIds); Map<String, User> userMap = getUserMap(userIds);
return buildData(functionalCaseComments, userMap); return buildData(functionalCaseComments, userMap);
} }

View File

@ -587,7 +587,6 @@ public class CaseReviewControllerTests extends BaseTest {
.andExpect(content().contentType(MediaType.APPLICATION_JSON)).andReturn(); .andExpect(content().contentType(MediaType.APPLICATION_JSON)).andReturn();
CaseReview caseReview = caseReviewMapper.selectByPrimaryKey(caseReviewId); CaseReview caseReview = caseReviewMapper.selectByPrimaryKey(caseReviewId);
Assertions.assertEquals(0, caseReview.getPassRate().compareTo(BigDecimal.ZERO)); Assertions.assertEquals(0, caseReview.getPassRate().compareTo(BigDecimal.ZERO));
} }
@Test @Test
@ -598,7 +597,7 @@ public class CaseReviewControllerTests extends BaseTest {
.header(SessionConstants.CSRF_TOKEN, csrfToken) .header(SessionConstants.CSRF_TOKEN, csrfToken)
.header(SessionConstants.CURRENT_PROJECT, projectId) .header(SessionConstants.CURRENT_PROJECT, projectId)
.contentType(MediaType.APPLICATION_JSON)) .contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk()) .andExpect(status().is5xxServerError())
.andExpect(content().contentType(MediaType.APPLICATION_JSON)).andReturn(); .andExpect(content().contentType(MediaType.APPLICATION_JSON)).andReturn();
String caseReviewId = caseReviews.get(0).getId(); String caseReviewId = caseReviews.get(0).getId();
@ -606,7 +605,7 @@ public class CaseReviewControllerTests extends BaseTest {
.header(SessionConstants.CSRF_TOKEN, csrfToken) .header(SessionConstants.CSRF_TOKEN, csrfToken)
.header(SessionConstants.CURRENT_PROJECT, projectId) .header(SessionConstants.CURRENT_PROJECT, projectId)
.contentType(MediaType.APPLICATION_JSON)) .contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk()) .andExpect(status().is5xxServerError())
.andExpect(content().contentType(MediaType.APPLICATION_JSON)).andReturn(); .andExpect(content().contentType(MediaType.APPLICATION_JSON)).andReturn();
} }

View File

@ -19,6 +19,7 @@ import io.metersphere.system.domain.CustomField;
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;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.junit.jupiter.api.*; import org.junit.jupiter.api.*;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
@ -397,7 +398,17 @@ public class FunctionalCaseCommentControllerTests {
String contentAsString = mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8); String contentAsString = mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8);
ResultHolder resultHolder = JSON.parseObject(contentAsString, ResultHolder.class); ResultHolder resultHolder = JSON.parseObject(contentAsString, ResultHolder.class);
List<FunctionalCaseCommentDTO> list = JSON.parseArray(JSON.toJSONString(resultHolder.getData()), FunctionalCaseCommentDTO.class); List<FunctionalCaseCommentDTO> list = JSON.parseArray(JSON.toJSONString(resultHolder.getData()), FunctionalCaseCommentDTO.class);
System.out.println(JSON.toJSONString(list)); Assertions.assertTrue(CollectionUtils.isNotEmpty(list));
mvcResult = mockMvc.perform(MockMvcRequestBuilders.get(GET_URL + "xiaomeinvGTestTwo").header(SessionConstants.HEADER_TOKEN, sessionId)
.header(SessionConstants.CSRF_TOKEN, csrfToken)
.header(SessionConstants.CURRENT_PROJECT, projectId)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON)).andReturn();
contentAsString = mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8);
resultHolder = JSON.parseObject(contentAsString, ResultHolder.class);
list = JSON.parseArray(JSON.toJSONString(resultHolder.getData()), FunctionalCaseCommentDTO.class);
Assertions.assertTrue(CollectionUtils.isEmpty(list));
} }
@Test @Test

View File

@ -72,6 +72,10 @@ INSERT INTO functional_case(id, num, module_id, project_id, template_id, name, r
VALUES ('xiaomeinvGTestOne', 1000001, 'test_guo', 'project-case-comment-test', 'test_guo', 'gyqTest1', 'UN_REVIEWED', null, 'text', VALUES ('xiaomeinvGTestOne', 1000001, 'test_guo', 'project-case-comment-test', 'test_guo', 'gyqTest1', 'UN_REVIEWED', null, 'text',
10001, '111', 'xiaomeinvGTestOne', 'success', false, false, true, 'gyq', 'gyq', null, 1698058347559, 10001, '111', 'xiaomeinvGTestOne', 'success', false, false, true, 'gyq', 'gyq', null, 1698058347559,
1698058347559, 1698058347559,
null),
('xiaomeinvGTestTwo', 1000001, 'test_guo', 'project-case-comment-test', 'test_guo', 'gyqTest2', 'UN_REVIEWED', null, 'text',
10001, '111', 'xiaomeinvGTestTwo', 'success', false, false, true, 'gyq', 'gyq', null, 1698058347559,
1698058347559,
null); null);
INSERT INTO user(id, name, email, password, create_time, update_time, language, last_organization_id, phone, source, INSERT INTO user(id, name, email, password, create_time, update_time, language, last_organization_id, phone, source,