feat(测试跟踪): 功能用例批量复制,bug修复

This commit is contained in:
zhangdahai112 2022-01-17 19:46:27 +08:00 committed by fit2-zhao
parent f05bcf006c
commit d1dca152b9
6 changed files with 43 additions and 20 deletions

View File

@ -94,7 +94,7 @@
project_version.id as versionId project_version.id as versionId
from test_case from test_case
left join test_case_review_test_case as T2 on test_case.id=T2.case_id and T2.review_id =#{request.reviewId} left join test_case_review_test_case as T2 on test_case.id=T2.case_id and T2.review_id =#{request.reviewId}
left join project_version on test_case.version_id = project_version.id and test_casel.project_id = project_version.project_id left join project_version on test_case.version_id = project_version.id and test_case.project_id = project_version.project_id
<include refid="notInQueryWhereCondition"/> <include refid="notInQueryWhereCondition"/>
and T2.case_id is null and T2.case_id is null
<include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.orders"/> <include refid="io.metersphere.base.mapper.ext.ExtBaseMapper.orders"/>

View File

@ -34,6 +34,7 @@ import io.metersphere.track.request.testcase.TestCaseMinderEditRequest;
import io.metersphere.track.request.testplan.FileOperationRequest; import io.metersphere.track.request.testplan.FileOperationRequest;
import io.metersphere.track.request.testplan.LoadCaseRequest; import io.metersphere.track.request.testplan.LoadCaseRequest;
import io.metersphere.track.service.TestCaseService; import io.metersphere.track.service.TestCaseService;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
@ -210,6 +211,12 @@ public class TestCaseController {
@SendNotice(taskType = NoticeConstants.TaskType.TRACK_TEST_CASE_TASK, targetClass = TestCaseMapper.class, @SendNotice(taskType = NoticeConstants.TaskType.TRACK_TEST_CASE_TASK, targetClass = TestCaseMapper.class,
event = NoticeConstants.Event.CREATE, mailTemplate = "track/TestCaseCreate", subject = "测试用例通知") event = NoticeConstants.Event.CREATE, mailTemplate = "track/TestCaseCreate", subject = "测试用例通知")
public TestCase addTestCase(@RequestPart("request") EditTestCaseRequest request, @RequestPart(value = "file", required = false) List<MultipartFile> files) { public TestCase addTestCase(@RequestPart("request") EditTestCaseRequest request, @RequestPart(value = "file", required = false) List<MultipartFile> files) {
if(StringUtils.isBlank(request.getId())){
//新增 后端生成 id
request.setId(UUID.randomUUID().toString());
}else{
//复制前端生成 id
}
return testCaseService.save(request, files); return testCaseService.save(request, files);
} }

View File

@ -14,6 +14,7 @@ public class EditTestCaseRequest extends TestCaseWithBLOBs {
private List<FileMetadata> updatedFileList; private List<FileMetadata> updatedFileList;
private List<String> follows; private List<String> follows;
private OtherInfoConfig otherInfoConfig; private OtherInfoConfig otherInfoConfig;
private String oldDataId;
/** /**
* 复制测试用例后要进行复制的文件Id list * 复制测试用例后要进行复制的文件Id list
*/ */
@ -38,5 +39,16 @@ public class EditTestCaseRequest extends TestCaseWithBLOBs {
private boolean archive; private boolean archive;
//是否复制依赖 //是否复制依赖
private boolean dependency; private boolean dependency;
public static OtherInfoConfig createDefault() {
OtherInfoConfig o = new OtherInfoConfig();
o.setArchive(true);
o.setRemark(true);
o.setRelateTest(true);
o.setDependency(true);
o.setRelateDemand(true);
o.setRelateIssue(true);
return o;
}
} }
} }

View File

@ -194,18 +194,11 @@ public class TestCaseService {
request.setCreateUser(SessionUtils.getUserId()); request.setCreateUser(SessionUtils.getUserId());
this.setNode(request); this.setNode(request);
request.setOrder(ServiceUtils.getNextOrder(request.getProjectId(), extTestCaseMapper::getLastOrder)); request.setOrder(ServiceUtils.getNextOrder(request.getProjectId(), extTestCaseMapper::getLastOrder));
//直接点保存 //直接点保存 || 复制走的逻辑
if (StringUtils.isAllBlank(request.getRefId(), request.getVersionId())) { if (StringUtils.isAllBlank(request.getRefId(), request.getVersionId())) {
//新创建测试用例默认使用最新版本 //新创建测试用例默认使用最新版本
request.setRefId(request.getId()); request.setRefId(request.getId());
ProjectVersionRequest pvr = new ProjectVersionRequest(); request.setVersionId(extProjectVersionMapper.getDefaultVersion(request.getProjectId()));
pvr.setProjectId(request.getProjectId());
pvr.setLatest(true);
List<ProjectVersionDTO> pvs = projectVersionService.getVersionList(pvr);
if (pvs.size() == 0) {
MSException.throwException(Translator.get("no_version_exists"));
}
request.setVersionId(pvs.get(0).getId());
} else if (StringUtils.isBlank(request.getRefId()) && StringUtils.isNotBlank(request.getVersionId())) { } else if (StringUtils.isBlank(request.getRefId()) && StringUtils.isNotBlank(request.getVersionId())) {
//从版本选择直接创建 //从版本选择直接创建
request.setRefId(request.getId()); request.setRefId(request.getId());
@ -216,6 +209,14 @@ public class TestCaseService {
return request; return request;
} }
private void dealWithCopyOtherInfo(TestCaseWithBLOBs testCase, String oldTestCaseId) {
EditTestCaseRequest request = new EditTestCaseRequest();
BeanUtils.copyBean(request, testCase);
EditTestCaseRequest.OtherInfoConfig otherInfoConfig = EditTestCaseRequest.OtherInfoConfig.createDefault();
request.setOtherInfoConfig(otherInfoConfig);
DealWithOtherInfo(request, oldTestCaseId);
}
public void saveFollows(String caseId, List<String> follows) { public void saveFollows(String caseId, List<String> follows) {
TestCaseFollowExample example = new TestCaseFollowExample(); TestCaseFollowExample example = new TestCaseFollowExample();
example.createCriteria().andCaseIdEqualTo(caseId); example.createCriteria().andCaseIdEqualTo(caseId);
@ -302,7 +303,7 @@ public class TestCaseService {
testCase.setCreateUser(SessionUtils.getUserId()); testCase.setCreateUser(SessionUtils.getUserId());
testCase.setOrder(oldTestCase.getOrder()); testCase.setOrder(oldTestCase.getOrder());
testCase.setRefId(oldTestCase.getRefId()); testCase.setRefId(oldTestCase.getRefId());
DealWithOtherInfo(testCase, oldTestCase); DealWithOtherInfo(testCase, oldTestCase.getId());
testCaseMapper.insertSelective(testCase); testCaseMapper.insertSelective(testCase);
} }
} }
@ -311,9 +312,9 @@ public class TestCaseService {
* 处理其他信息的复制问题 * 处理其他信息的复制问题
* *
* @param testCase * @param testCase
* @param oldTestCase * @param oldTestCaseId
*/ */
private void DealWithOtherInfo(EditTestCaseRequest testCase, TestCaseWithBLOBs oldTestCase) { private void DealWithOtherInfo(EditTestCaseRequest testCase, String oldTestCaseId) {
EditTestCaseRequest.OtherInfoConfig otherInfoConfig = testCase.getOtherInfoConfig(); EditTestCaseRequest.OtherInfoConfig otherInfoConfig = testCase.getOtherInfoConfig();
if (otherInfoConfig != null) { if (otherInfoConfig != null) {
if (!otherInfoConfig.isRemark()) { if (!otherInfoConfig.isRemark()) {
@ -324,7 +325,7 @@ public class TestCaseService {
testCase.setDemandName(null); testCase.setDemandName(null);
} }
if (otherInfoConfig.isRelateIssue()) { if (otherInfoConfig.isRelateIssue()) {
List<IssuesDao> issuesDaos = issuesService.getIssues(oldTestCase.getId()); List<IssuesDao> issuesDaos = issuesService.getIssues(oldTestCaseId);
if (CollectionUtils.isNotEmpty(issuesDaos)) { if (CollectionUtils.isNotEmpty(issuesDaos)) {
issuesDaos.forEach(issue -> { issuesDaos.forEach(issue -> {
TestCaseIssues t = new TestCaseIssues(); TestCaseIssues t = new TestCaseIssues();
@ -336,7 +337,7 @@ public class TestCaseService {
} }
} }
if (otherInfoConfig.isRelateTest()) { if (otherInfoConfig.isRelateTest()) {
List<TestCaseTestDao> testCaseTestDaos = getRelateTest(oldTestCase.getId()); List<TestCaseTestDao> testCaseTestDaos = getRelateTest(oldTestCaseId);
if (CollectionUtils.isNotEmpty(testCaseTestDaos)) { if (CollectionUtils.isNotEmpty(testCaseTestDaos)) {
testCaseTestDaos.forEach(test -> { testCaseTestDaos.forEach(test -> {
test.setTestCaseId(testCase.getId()); test.setTestCaseId(testCase.getId());
@ -345,7 +346,7 @@ public class TestCaseService {
} }
} }
if (otherInfoConfig.isArchive()) { if (otherInfoConfig.isArchive()) {
List<FileMetadata> files = fileService.getFileMetadataByCaseId(oldTestCase.getId()); List<FileMetadata> files = fileService.getFileMetadataByCaseId(oldTestCaseId);
if (CollectionUtils.isNotEmpty(files)) { if (CollectionUtils.isNotEmpty(files)) {
files.forEach(file -> { files.forEach(file -> {
TestCaseFile testCaseFile = new TestCaseFile(); TestCaseFile testCaseFile = new TestCaseFile();
@ -356,8 +357,8 @@ public class TestCaseService {
} }
} }
if (otherInfoConfig.isDependency()) { if (otherInfoConfig.isDependency()) {
List<RelationshipEdge> preRelations = relationshipEdgeService.getRelationshipEdgeByType(testCase.getId(), "PRE"); List<RelationshipEdge> preRelations = relationshipEdgeService.getRelationshipEdgeByType(oldTestCaseId, "PRE");
List<RelationshipEdge> postRelations = relationshipEdgeService.getRelationshipEdgeByType(testCase.getId(), "POST"); List<RelationshipEdge> postRelations = relationshipEdgeService.getRelationshipEdgeByType(oldTestCaseId, "POST");
if (CollectionUtils.isNotEmpty(preRelations)) { if (CollectionUtils.isNotEmpty(preRelations)) {
preRelations.forEach(relation -> { preRelations.forEach(relation -> {
relation.setSourceId(testCase.getId()); relation.setSourceId(testCase.getId());
@ -2351,6 +2352,7 @@ public class TestCaseService {
for (int i = 0; i < testCases.size(); i++) { for (int i = 0; i < testCases.size(); i++) {
TestCaseWithBLOBs testCase = testCases.get(i); TestCaseWithBLOBs testCase = testCases.get(i);
String id = UUID.randomUUID().toString(); String id = UUID.randomUUID().toString();
String oldTestCaseId = testCase.getId();
testCase.setId(id); testCase.setId(id);
testCase.setName(ServiceUtils.getCopyName(testCase.getName())); testCase.setName(ServiceUtils.getCopyName(testCase.getName()));
testCase.setNodeId(request.getNodeId()); testCase.setNodeId(request.getNodeId());
@ -2361,6 +2363,8 @@ public class TestCaseService {
testCase.setCasePublic(false); testCase.setCasePublic(false);
testCase.setRefId(id); testCase.setRefId(id);
mapper.insert(testCase); mapper.insert(testCase);
dealWithCopyOtherInfo(testCase, oldTestCaseId);
if (i % 50 == 0) if (i % 50 == 0)
sqlSession.flushStatements(); sqlSession.flushStatements();
} }

@ -1 +1 @@
Subproject commit 738eec25a070bbd75ba1bc343756ad62163e89ef Subproject commit b35dfb7f4571ed9e9496ff67339b9118232b4bbd

@ -1 +1 @@
Subproject commit b556a5ad3171ae92050b8f85c50c5a3735ab6efc Subproject commit 8b60bbae9617eed3903ffc847a20ecd9b22c4fe8