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 @@
-
-
+
+
+
+
+
+
+