diff --git a/backend/src/main/java/io/metersphere/api/dto/automation/ScenarioStatus.java b/backend/src/main/java/io/metersphere/api/dto/automation/ScenarioStatus.java index 9697d77940..a3abe8edf8 100644 --- a/backend/src/main/java/io/metersphere/api/dto/automation/ScenarioStatus.java +++ b/backend/src/main/java/io/metersphere/api/dto/automation/ScenarioStatus.java @@ -1,7 +1,5 @@ package io.metersphere.api.dto.automation; -import org.junit.internal.runners.statements.Fail; - public enum ScenarioStatus { Saved, Success, Error, Timeout, Fail, Trash, Underway } diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.java b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.java index 25179a2a1d..82183685f9 100644 --- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.java +++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.java @@ -134,4 +134,6 @@ public interface ExtTestCaseMapper { String getLastExecStatusById(String id); int countByWorkSpaceId(String workSpaceId); + + long trashCount(@Param("projectId") String projectId); } diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.xml b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.xml index dc30a59536..1bcf671e9a 100644 --- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.xml +++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtTestCaseMapper.xml @@ -865,7 +865,7 @@ status = original_status, delete_user_id = null, delete_time = null - where id in + where ref_id in #{v} @@ -898,4 +898,14 @@ and status != 'Trash' + + diff --git a/backend/src/main/java/io/metersphere/track/controller/TestCaseController.java b/backend/src/main/java/io/metersphere/track/controller/TestCaseController.java index dab4f58ed3..ff068f90d1 100644 --- a/backend/src/main/java/io/metersphere/track/controller/TestCaseController.java +++ b/backend/src/main/java/io/metersphere/track/controller/TestCaseController.java @@ -244,7 +244,7 @@ public class TestCaseController { @MsAuditLog(module = "track_test_case", type = OperLogConstants.DELETE, beforeEvent = "#msClass.getLogDetails(#testCaseId)", msClass = TestCaseService.class) public int deleteTestCase(@PathVariable String testCaseId) { checkPermissionService.checkTestCaseOwner(testCaseId); - return testCaseService.deleteTestCase(testCaseId); + return testCaseService.deleteTestCaseBySameVersion(testCaseId); } @PostMapping("/deleteToGc/{testCaseId}") diff --git a/backend/src/main/java/io/metersphere/track/service/TestCaseNodeService.java b/backend/src/main/java/io/metersphere/track/service/TestCaseNodeService.java index 79f47aeda7..44e4195a9e 100644 --- a/backend/src/main/java/io/metersphere/track/service/TestCaseNodeService.java +++ b/backend/src/main/java/io/metersphere/track/service/TestCaseNodeService.java @@ -774,9 +774,7 @@ public class TestCaseNodeService extends NodeTreeService { } public long trashCount(String projectId) { - TestCaseExample testCaseExample = new TestCaseExample(); - testCaseExample.createCriteria().andProjectIdEqualTo(projectId).andStatusEqualTo("Trash"); - return testCaseMapper.countByExample(testCaseExample); + return extTestCaseMapper.trashCount(projectId); } public void minderEdit(TestCaseMinderEditRequest request) { diff --git a/backend/src/main/java/io/metersphere/track/service/TestCaseService.java b/backend/src/main/java/io/metersphere/track/service/TestCaseService.java index 721a685ab9..d6d2a2e6a1 100644 --- a/backend/src/main/java/io/metersphere/track/service/TestCaseService.java +++ b/backend/src/main/java/io/metersphere/track/service/TestCaseService.java @@ -9,6 +9,7 @@ import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import io.metersphere.api.dto.automation.ApiScenarioDTO; import io.metersphere.api.dto.automation.ApiScenarioRequest; +import io.metersphere.api.dto.automation.ScenarioStatus; import io.metersphere.api.dto.definition.ApiTestCaseDTO; import io.metersphere.api.dto.definition.ApiTestCaseRequest; import io.metersphere.api.service.ApiAutomationService; @@ -491,6 +492,24 @@ public class TestCaseService { return testCaseMapper.deleteByPrimaryKey(testCaseId); } + public int deleteTestCaseBySameVersion(String testCaseId) { + TestCase testCase = testCaseMapper.selectByPrimaryKey(testCaseId); + if (testCase == null) { + return 0; + } + if (StringUtils.isNotBlank(testCase.getRefId())) { + TestCaseExample testCaseExample = new TestCaseExample(); + testCaseExample.createCriteria().andRefIdEqualTo(testCase.getRefId()); + // 因为删除 + List sameVersionIds = testCaseMapper.selectByExample(testCaseExample).stream().map(TestCase::getId).collect(Collectors.toList()); + AtomicInteger integer = new AtomicInteger(0); + sameVersionIds.forEach(id -> integer.getAndAdd(deleteTestCase(id))); + return integer.get(); + } else { + return deleteTestCase(testCaseId); + } + } + private void deleteFollows(String testCaseId) { TestCaseFollowExample example = new TestCaseFollowExample(); example.createCriteria().andCaseIdEqualTo(testCaseId); @@ -2082,8 +2101,14 @@ public class TestCaseService { //检查原来模块是否还在 example = new TestCaseExample(); + // 关联版本之后,必须查询每一个数据的所有版本,依次还原 example.createCriteria().andIdIn(request.getIds()); List reductionCaseList = testCaseMapper.selectByExample(example); + List refIds = reductionCaseList.stream().map(TestCase::getRefId).collect(Collectors.toList()); + example.clear(); + example.createCriteria().andRefIdIn(refIds); + reductionCaseList = testCaseMapper.selectByExample(example); + request.setIds(reductionCaseList.stream().map(TestCase::getId).collect(Collectors.toList())); Map> nodeMap = reductionCaseList.stream().collect(Collectors.groupingBy(TestCase::getNodeId)); for (Map.Entry> entry : nodeMap.entrySet()) { String nodeId = entry.getKey(); @@ -2383,6 +2408,13 @@ public class TestCaseService { } QueryTestCaseRequest request = new QueryTestCaseRequest(); request.setRefId(testCase.getRefId()); + if (ScenarioStatus.Trash.name().equalsIgnoreCase(testCase.getStatus())) { + request.setFilters(new HashMap>() {{ + put("status", new ArrayList() {{ + add(ScenarioStatus.Trash.name()); + }}); + }}); + } return this.listTestCase(request); } diff --git a/frontend/src/business/components/track/case/TestCase.vue b/frontend/src/business/components/track/case/TestCase.vue index 6ab8789ac2..ae70f15072 100644 --- a/frontend/src/business/components/track/case/TestCase.vue +++ b/frontend/src/business/components/track/case/TestCase.vue @@ -24,22 +24,29 @@ - - + + + + +