diff --git a/backend/framework/domain/src/main/java/io/metersphere/functional/domain/FunctionalCaseDemand.java b/backend/framework/domain/src/main/java/io/metersphere/functional/domain/FunctionalCaseDemand.java index 28fc72417d..f435863a0d 100644 --- a/backend/framework/domain/src/main/java/io/metersphere/functional/domain/FunctionalCaseDemand.java +++ b/backend/framework/domain/src/main/java/io/metersphere/functional/domain/FunctionalCaseDemand.java @@ -20,6 +20,11 @@ public class FunctionalCaseDemand implements Serializable { @Size(min = 1, max = 50, message = "{functional_case_demand.case_id.length_range}", groups = {Created.class, Updated.class}) private String caseId; + @Schema(description = "父需求id", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{functional_case_demand.parent.not_blank}", groups = {Created.class}) + @Size(min = 1, max = 50, message = "{functional_case_demand.parent.length_range}", groups = {Created.class, Updated.class}) + private String parent; + @Schema(description = "需求ID") private String demandId; @@ -53,6 +58,7 @@ public class FunctionalCaseDemand implements Serializable { public enum Column { id("id", "id", "VARCHAR", false), caseId("case_id", "caseId", "VARCHAR", false), + parent("parent", "parent", "VARCHAR", false), demandId("demand_id", "demandId", "VARCHAR", false), demandName("demand_name", "demandName", "VARCHAR", false), demandUrl("demand_url", "demandUrl", "VARCHAR", false), diff --git a/backend/framework/domain/src/main/java/io/metersphere/functional/domain/FunctionalCaseDemandExample.java b/backend/framework/domain/src/main/java/io/metersphere/functional/domain/FunctionalCaseDemandExample.java index c01d3de58d..dc09c95aa6 100644 --- a/backend/framework/domain/src/main/java/io/metersphere/functional/domain/FunctionalCaseDemandExample.java +++ b/backend/framework/domain/src/main/java/io/metersphere/functional/domain/FunctionalCaseDemandExample.java @@ -244,6 +244,76 @@ public class FunctionalCaseDemandExample { return (Criteria) this; } + public Criteria andParentIsNull() { + addCriterion("parent is null"); + return (Criteria) this; + } + + public Criteria andParentIsNotNull() { + addCriterion("parent is not null"); + return (Criteria) this; + } + + public Criteria andParentEqualTo(String value) { + addCriterion("parent =", value, "parent"); + return (Criteria) this; + } + + public Criteria andParentNotEqualTo(String value) { + addCriterion("parent <>", value, "parent"); + return (Criteria) this; + } + + public Criteria andParentGreaterThan(String value) { + addCriterion("parent >", value, "parent"); + return (Criteria) this; + } + + public Criteria andParentGreaterThanOrEqualTo(String value) { + addCriterion("parent >=", value, "parent"); + return (Criteria) this; + } + + public Criteria andParentLessThan(String value) { + addCriterion("parent <", value, "parent"); + return (Criteria) this; + } + + public Criteria andParentLessThanOrEqualTo(String value) { + addCriterion("parent <=", value, "parent"); + return (Criteria) this; + } + + public Criteria andParentLike(String value) { + addCriterion("parent like", value, "parent"); + return (Criteria) this; + } + + public Criteria andParentNotLike(String value) { + addCriterion("parent not like", value, "parent"); + return (Criteria) this; + } + + public Criteria andParentIn(List values) { + addCriterion("parent in", values, "parent"); + return (Criteria) this; + } + + public Criteria andParentNotIn(List values) { + addCriterion("parent not in", values, "parent"); + return (Criteria) this; + } + + public Criteria andParentBetween(String value1, String value2) { + addCriterion("parent between", value1, value2, "parent"); + return (Criteria) this; + } + + public Criteria andParentNotBetween(String value1, String value2) { + addCriterion("parent not between", value1, value2, "parent"); + return (Criteria) this; + } + public Criteria andDemandIdIsNull() { addCriterion("demand_id is null"); return (Criteria) this; diff --git a/backend/framework/domain/src/main/java/io/metersphere/functional/mapper/FunctionalCaseDemandMapper.xml b/backend/framework/domain/src/main/java/io/metersphere/functional/mapper/FunctionalCaseDemandMapper.xml index 1230dc2cee..7343534bd1 100644 --- a/backend/framework/domain/src/main/java/io/metersphere/functional/mapper/FunctionalCaseDemandMapper.xml +++ b/backend/framework/domain/src/main/java/io/metersphere/functional/mapper/FunctionalCaseDemandMapper.xml @@ -4,6 +4,7 @@ + @@ -72,8 +73,8 @@ - id, case_id, demand_id, demand_name, demand_url, demand_platform, create_time, update_time, - create_user, update_user + id, case_id, parent, demand_id, demand_name, demand_url, demand_platform, create_time, + update_time, create_user, update_user + diff --git a/backend/services/case-management/src/main/java/io/metersphere/functional/request/FunctionalCaseDemandRequest.java b/backend/services/case-management/src/main/java/io/metersphere/functional/request/FunctionalCaseDemandRequest.java index f47d834321..fa95a7b59d 100644 --- a/backend/services/case-management/src/main/java/io/metersphere/functional/request/FunctionalCaseDemandRequest.java +++ b/backend/services/case-management/src/main/java/io/metersphere/functional/request/FunctionalCaseDemandRequest.java @@ -22,7 +22,7 @@ public class FunctionalCaseDemandRequest { @NotBlank(message = "{functional_case_demand.case_id.not_blank}") private String caseId; - @Schema(description = "需求所属平台(默认是LOCAL)") + @Schema(description = "需求所属平台(本地创建为系统平台名称)") @NotBlank(message = "{functional_case_demand.demand_platform.not_blank}") private String demandPlatform; diff --git a/backend/services/case-management/src/main/java/io/metersphere/functional/service/FunctionalCaseDemandService.java b/backend/services/case-management/src/main/java/io/metersphere/functional/service/FunctionalCaseDemandService.java index d0350540f6..9faf8e6a53 100644 --- a/backend/services/case-management/src/main/java/io/metersphere/functional/service/FunctionalCaseDemandService.java +++ b/backend/services/case-management/src/main/java/io/metersphere/functional/service/FunctionalCaseDemandService.java @@ -1,6 +1,7 @@ package io.metersphere.functional.service; import io.metersphere.functional.domain.FunctionalCaseDemand; +import io.metersphere.functional.domain.FunctionalCaseDemandExample; import io.metersphere.functional.dto.DemandDTO; import io.metersphere.functional.dto.FunctionalDemandDTO; import io.metersphere.functional.mapper.ExtFunctionalCaseDemandMapper; @@ -10,6 +11,8 @@ import io.metersphere.functional.request.QueryDemandListRequest; import io.metersphere.sdk.exception.MSException; import io.metersphere.sdk.util.BeanUtils; import io.metersphere.sdk.util.Translator; +import io.metersphere.system.domain.SystemParameter; +import io.metersphere.system.mapper.SystemParameterMapper; import io.metersphere.system.uid.IDGenerator; import jakarta.annotation.Resource; import org.apache.commons.collections.CollectionUtils; @@ -39,45 +42,59 @@ public class FunctionalCaseDemandService { private ExtFunctionalCaseDemandMapper extFunctionalCaseDemandMapper; @Resource private SqlSessionFactory sqlSessionFactory; + @Resource + private SystemParameterMapper systemParameterMapper; /** * 获取需求列表 + * * @param request QueryDemandListRequest * @return List */ public List listFunctionalCaseDemands(QueryDemandListRequest request) { - List functionalCaseDemands = extFunctionalCaseDemandMapper.selectGroupByKeyword(request.getKeyword(), request.getCaseId()); - List platforms = functionalCaseDemands.stream().map(FunctionalCaseDemand::getDemandPlatform).distinct().toList(); - List ids = functionalCaseDemands.stream().map(FunctionalCaseDemand::getId).distinct().toList(); - List functionalCaseDemandChildList = extFunctionalCaseDemandMapper.selectByKeyword(request.getKeyword(), request.getCaseId(), platforms, ids); - Map> platformDemandMap = functionalCaseDemandChildList.stream().collect(Collectors.groupingBy(FunctionalCaseDemand::getDemandPlatform)); - List list = new ArrayList<>(); - for (FunctionalCaseDemand functionalCaseDemand : functionalCaseDemands) { - FunctionalDemandDTO functionalDemandDTO = new FunctionalDemandDTO(); - BeanUtils.copyBean(functionalDemandDTO,functionalCaseDemand); - List childrenDemands= platformDemandMap.get(functionalCaseDemand.getDemandPlatform()); - if (CollectionUtils.isNotEmpty(childrenDemands)) { - functionalDemandDTO.setChildren(childrenDemands); - } else { - functionalDemandDTO.setChildren(new ArrayList<>()); - } - list.add(functionalDemandDTO); + List parentDemands = extFunctionalCaseDemandMapper.selectGroupByKeyword(request.getKeyword(), request.getCaseId()); + if (CollectionUtils.isEmpty(parentDemands)) { + return new ArrayList<>(); } - return list; + List ids = parentDemands.stream().map(FunctionalCaseDemand::getId).toList(); + FunctionalCaseDemandExample functionalCaseDemandExample = new FunctionalCaseDemandExample(); + functionalCaseDemandExample.createCriteria().andIdNotIn(ids); + Map functionalCaseDemandMap = parentDemands.stream().filter(t -> StringUtils.isNotBlank(t.getDemandId())).collect(Collectors.toMap(FunctionalCaseDemand::getDemandId, t -> t)); + List functionalCaseDemands = functionalCaseDemandMapper.selectByExample(functionalCaseDemandExample); + int lastSize = 0; + while (CollectionUtils.isNotEmpty(functionalCaseDemands) && functionalCaseDemands.size() != lastSize) { + lastSize = functionalCaseDemands.size(); + List notMatchedList = new ArrayList<>(); + for (FunctionalCaseDemand demand : functionalCaseDemands) { + if (functionalCaseDemandMap.containsKey(demand.getParent())) { + FunctionalDemandDTO functionalDemandDTO = new FunctionalDemandDTO(); + BeanUtils.copyBean(functionalDemandDTO, demand); + functionalCaseDemandMap.get(demand.getParent()).addChild(functionalDemandDTO); + functionalCaseDemandMap.put(demand.getDemandId(), functionalDemandDTO); + } else { + notMatchedList.add(demand); + } + } + functionalCaseDemands = notMatchedList; + } + return parentDemands; } /** * 新增本地需求 + * * @param request 页面参数 - * @param userId 当前操作人 + * @param userId 当前操作人 */ public void addDemand(FunctionalCaseDemandRequest request, String userId) { if (checkDemandList(request)) return; - FunctionalCaseDemand functionalCaseDemand = buildFunctionalCaseDemand(request, userId, request.getDemandList().get(0)); - functionalCaseDemandMapper.insert(functionalCaseDemand); + FunctionalCaseDemand functionalCaseDemand = buildFunctionalCaseDemand(request, userId, request.getDemandList().get(0), new ArrayList<>()); + if (functionalCaseDemand != null) { + functionalCaseDemandMapper.insertSelective(functionalCaseDemand); + } } - private static FunctionalCaseDemand buildFunctionalCaseDemand(FunctionalCaseDemandRequest request, String userId, DemandDTO demandDTO) { + private FunctionalCaseDemand buildFunctionalCaseDemand(FunctionalCaseDemandRequest request, String userId, DemandDTO demandDTO, List existDemandIds) { FunctionalCaseDemand functionalCaseDemand = new FunctionalCaseDemand(); functionalCaseDemand.setId(IDGenerator.nextStr()); functionalCaseDemand.setCaseId(request.getCaseId()); @@ -86,6 +103,9 @@ public class FunctionalCaseDemandService { functionalCaseDemand.setCreateUser(userId); functionalCaseDemand.setUpdateTime(System.currentTimeMillis()); functionalCaseDemand.setUpdateUser(userId); + if (existDemandIds.contains(demandDTO.getDemandId())) { + return null; + } dealWithDemand(demandDTO, functionalCaseDemand); return functionalCaseDemand; } @@ -96,12 +116,33 @@ public class FunctionalCaseDemandService { /** * 处理单个需求 - * @param demandDTO 需求参数 + * + * @param demandDTO 需求参数 * @param functionalCaseDemand functionalCaseDemand */ - private static void dealWithDemand(DemandDTO demandDTO, FunctionalCaseDemand functionalCaseDemand) { - if (StringUtils.isNotBlank(demandDTO.getDemandId())) { + private void dealWithDemand(DemandDTO demandDTO, FunctionalCaseDemand functionalCaseDemand) { + SystemParameter systemParameter = systemParameterMapper.selectByPrimaryKey("ui.platformName"); + String paramValue; + if (systemParameter == null || StringUtils.isBlank(systemParameter.getParamValue())) { + paramValue = "MeterSphere"; + } else { + paramValue = systemParameter.getParamValue(); + } + if (StringUtils.equalsIgnoreCase(functionalCaseDemand.getDemandPlatform(), paramValue)) { + if (StringUtils.isNotBlank(demandDTO.getDemandId())) { + functionalCaseDemand.setDemandId(demandDTO.getDemandId()); + } + functionalCaseDemand.setParent("NONE"); + } else { + if (StringUtils.isBlank(demandDTO.getDemandId())) { + throw new MSException(Translator.get("case.demand.id.not.exist")); + } functionalCaseDemand.setDemandId(demandDTO.getDemandId()); + if (StringUtils.isBlank(demandDTO.getParent())) { + functionalCaseDemand.setParent("NONE"); + } else { + functionalCaseDemand.setParent(demandDTO.getParent()); + } } if (StringUtils.isBlank(demandDTO.getDemandName())) { throw new MSException(Translator.get("case.demand.name.not.exist")); @@ -114,8 +155,9 @@ public class FunctionalCaseDemandService { /** * 更新本地需求 + * * @param request 页面参数 - * @param userId 当前操作人 + * @param userId 当前操作人 */ public void updateDemand(FunctionalCaseDemandRequest request, String userId) { if (checkDemandList(request)) return; @@ -133,6 +175,7 @@ public class FunctionalCaseDemandService { /** * 取消关联需求 就是将该需求关系删除 + * * @param id 需求关系ID */ public void deleteDemand(String id) { @@ -141,16 +184,24 @@ public class FunctionalCaseDemandService { /** * 批量关联第三方需求 需要带有所属平台 + * * @param request 页面参数 - * @param userId 当前操作人 + * @param userId 当前操作人 */ public void batchRelevance(FunctionalCaseDemandRequest request, String userId) { if (checkDemandList(request)) return; SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH); FunctionalCaseDemandMapper functionalCaseDemandMapper = sqlSession.getMapper(FunctionalCaseDemandMapper.class); + List demandIds = request.getDemandList().stream().map(DemandDTO::getDemandId).toList(); + FunctionalCaseDemandExample functionalCaseDemandExample = new FunctionalCaseDemandExample(); + functionalCaseDemandExample.createCriteria().andCaseIdEqualTo(request.getCaseId()).andDemandPlatformEqualTo(request.getDemandPlatform()).andDemandIdIn(demandIds); + List existDemands = functionalCaseDemandMapper.selectByExample(functionalCaseDemandExample); + List existDemandIds = existDemands.stream().map(FunctionalCaseDemand::getDemandId).toList(); for (DemandDTO demandDTO : request.getDemandList()) { - FunctionalCaseDemand functionalCaseDemand = buildFunctionalCaseDemand(request, userId, demandDTO); - functionalCaseDemandMapper.insert(functionalCaseDemand); + FunctionalCaseDemand functionalCaseDemand = buildFunctionalCaseDemand(request, userId, demandDTO, existDemandIds); + if (functionalCaseDemand != null) { + functionalCaseDemandMapper.insert(functionalCaseDemand); + } } sqlSession.flushStatements(); SqlSessionUtils.closeSqlSession(sqlSession, sqlSessionFactory); diff --git a/backend/services/case-management/src/test/java/io/metersphere/functional/controller/FunctionalCaseDemandControllerTests.java b/backend/services/case-management/src/test/java/io/metersphere/functional/controller/FunctionalCaseDemandControllerTests.java index 54d0415f3a..f139ab020a 100644 --- a/backend/services/case-management/src/test/java/io/metersphere/functional/controller/FunctionalCaseDemandControllerTests.java +++ b/backend/services/case-management/src/test/java/io/metersphere/functional/controller/FunctionalCaseDemandControllerTests.java @@ -14,10 +14,13 @@ import io.metersphere.sdk.mapper.OperationLogMapper; import io.metersphere.sdk.util.JSON; import io.metersphere.system.base.BaseTest; import io.metersphere.system.controller.handler.ResultHolder; +import io.metersphere.system.domain.SystemParameter; import io.metersphere.system.log.constants.OperationLogType; +import io.metersphere.system.mapper.SystemParameterMapper; import io.metersphere.system.utils.Pager; import jakarta.annotation.Resource; import org.apache.commons.collections4.CollectionUtils; +import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.*; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; @@ -43,6 +46,8 @@ public class FunctionalCaseDemandControllerTests extends BaseTest { private FunctionalCaseDemandMapper functionalCaseDemandMapper; @Resource private OperationLogMapper operationLogMapper; + @Resource + private SystemParameterMapper systemParameterMapper; private static final String URL_DEMAND_PAGE = "/functional/case/demand/page"; private static final String URL_DEMAND_ADD = "/functional/case/demand/add"; @@ -57,7 +62,7 @@ public class FunctionalCaseDemandControllerTests extends BaseTest { public void addDemandSuccess() throws Exception { FunctionalCaseDemandRequest functionalCaseDemandRequest = new FunctionalCaseDemandRequest(); functionalCaseDemandRequest.setCaseId("DEMAND_TEST_FUNCTIONAL_CASE_ID"); - functionalCaseDemandRequest.setDemandPlatform("LOCAL"); + functionalCaseDemandRequest.setDemandPlatform("Metersphere"); List demandList = new ArrayList<>(); DemandDTO demandDTO = new DemandDTO(); demandDTO.setDemandName("手动加入1"); @@ -71,7 +76,7 @@ public class FunctionalCaseDemandControllerTests extends BaseTest { functionalCaseDemandRequest = new FunctionalCaseDemandRequest(); functionalCaseDemandRequest.setCaseId("DEMAND_TEST_FUNCTIONAL_CASE_ID"); - functionalCaseDemandRequest.setDemandPlatform("LOCAL"); + functionalCaseDemandRequest.setDemandPlatform("Metersphere"); demandList = new ArrayList<>(); demandDTO = new DemandDTO(); demandDTO.setDemandName("手动加入孩子"); @@ -89,7 +94,7 @@ public class FunctionalCaseDemandControllerTests extends BaseTest { public void addDemandEmpty() throws Exception { FunctionalCaseDemandRequest functionalCaseDemandRequest = new FunctionalCaseDemandRequest(); functionalCaseDemandRequest.setCaseId("DEMAND_TEST_FUNCTIONAL_CASE_ID2"); - functionalCaseDemandRequest.setDemandPlatform("LOCAL"); + functionalCaseDemandRequest.setDemandPlatform("Metersphere"); List demandList = new ArrayList<>(); functionalCaseDemandRequest.setDemandList(demandList); this.requestPostWithOkAndReturn(URL_DEMAND_ADD, functionalCaseDemandRequest); @@ -100,7 +105,7 @@ public class FunctionalCaseDemandControllerTests extends BaseTest { functionalCaseDemandRequest = new FunctionalCaseDemandRequest(); functionalCaseDemandRequest.setCaseId("DEMAND_TEST_FUNCTIONAL_CASE_ID3"); - functionalCaseDemandRequest.setDemandPlatform("LOCAL"); + functionalCaseDemandRequest.setDemandPlatform("Metersphere"); demandList = new ArrayList<>(); DemandDTO demandDTO = new DemandDTO(); demandDTO.setDemandName("手动加入3"); @@ -118,7 +123,7 @@ public class FunctionalCaseDemandControllerTests extends BaseTest { public void addDemandFalse() throws Exception { FunctionalCaseDemandRequest functionalCaseDemandRequest = new FunctionalCaseDemandRequest(); functionalCaseDemandRequest.setCaseId("DEMAND_TEST_FUNCTIONAL_CASE_ID2"); - functionalCaseDemandRequest.setDemandPlatform("LOCAL"); + functionalCaseDemandRequest.setDemandPlatform("Metersphere"); List demandList = new ArrayList<>(); DemandDTO demandDTO = new DemandDTO(); demandDTO.setDemandId("111"); @@ -131,7 +136,7 @@ public class FunctionalCaseDemandControllerTests extends BaseTest { Assertions.assertTrue(functionalCaseDemands.isEmpty()); functionalCaseDemandRequest = new FunctionalCaseDemandRequest(); - functionalCaseDemandRequest.setDemandPlatform("LOCAL"); + functionalCaseDemandRequest.setDemandPlatform("Metersphere"); demandList = new ArrayList<>(); demandDTO = new DemandDTO(); demandDTO.setDemandId("111"); @@ -143,13 +148,18 @@ public class FunctionalCaseDemandControllerTests extends BaseTest { @Test @Order(4) public void updateDemandSuccess() throws Exception { + SystemParameter systemParameter = new SystemParameter(); + systemParameter.setParamKey("ui.platformName"); + systemParameter.setParamValue("Metersphere"); + systemParameter.setType("text"); + systemParameterMapper.insertSelective(systemParameter); String id = getId("DEMAND_TEST_FUNCTIONAL_CASE_ID"); FunctionalCaseDemandExample functionalCaseDemandExample; List functionalCaseDemands; FunctionalCaseDemandRequest functionalCaseDemandRequest = new FunctionalCaseDemandRequest(); functionalCaseDemandRequest.setId(id); functionalCaseDemandRequest.setCaseId("DEMAND_TEST_FUNCTIONAL_CASE_ID"); - functionalCaseDemandRequest.setDemandPlatform("LOCAL"); + functionalCaseDemandRequest.setDemandPlatform("Metersphere"); List demandList = new ArrayList<>(); DemandDTO demandDTO = new DemandDTO(); demandDTO.setDemandName("手动加入2"); @@ -171,7 +181,7 @@ public class FunctionalCaseDemandControllerTests extends BaseTest { FunctionalCaseDemandRequest functionalCaseDemandRequest = new FunctionalCaseDemandRequest(); functionalCaseDemandRequest.setId(id); functionalCaseDemandRequest.setCaseId("DEMAND_TEST_FUNCTIONAL_CASE_ID"); - functionalCaseDemandRequest.setDemandPlatform("LOCAL"); + functionalCaseDemandRequest.setDemandPlatform("Metersphere"); List demandList = new ArrayList<>(); functionalCaseDemandRequest.setDemandList(demandList); this.requestPostWithOkAndReturn(URL_DEMAND_UPDATE, functionalCaseDemandRequest); @@ -190,7 +200,7 @@ public class FunctionalCaseDemandControllerTests extends BaseTest { FunctionalCaseDemandRequest functionalCaseDemandRequest = new FunctionalCaseDemandRequest(); functionalCaseDemandRequest.setId(id); functionalCaseDemandRequest.setCaseId("DEMAND_TEST_FUNCTIONAL_CASE_ID"); - functionalCaseDemandRequest.setDemandPlatform("LOCAL"); + functionalCaseDemandRequest.setDemandPlatform("Metersphere"); List demandList = new ArrayList<>(); DemandDTO demandDTO = new DemandDTO(); demandDTO.setDemandId("111"); @@ -205,7 +215,7 @@ public class FunctionalCaseDemandControllerTests extends BaseTest { functionalCaseDemandRequest = new FunctionalCaseDemandRequest(); functionalCaseDemandRequest.setId("hehe"); functionalCaseDemandRequest.setCaseId("DEMAND_TEST_FUNCTIONAL_CASE_ID"); - functionalCaseDemandRequest.setDemandPlatform("LOCAL"); + functionalCaseDemandRequest.setDemandPlatform("Metersphere"); demandList = new ArrayList<>(); demandDTO = new DemandDTO(); demandDTO.setDemandId("111"); @@ -216,7 +226,7 @@ public class FunctionalCaseDemandControllerTests extends BaseTest { functionalCaseDemandRequest = new FunctionalCaseDemandRequest(); functionalCaseDemandRequest.setCaseId("DEMAND_TEST_FUNCTIONAL_CASE_ID"); - functionalCaseDemandRequest.setDemandPlatform("LOCAL"); + functionalCaseDemandRequest.setDemandPlatform("Metersphere"); demandList = new ArrayList<>(); demandDTO = new DemandDTO(); demandDTO.setDemandId("111"); @@ -236,26 +246,17 @@ public class FunctionalCaseDemandControllerTests extends BaseTest { @Test @Order(7) public void getDemandList() throws Exception { - QueryDemandListRequest queryDemandListRequest = new QueryDemandListRequest(); - queryDemandListRequest.setCurrent(1); - queryDemandListRequest.setPageSize(5); - queryDemandListRequest.setCaseId("DEMAND_TEST_FUNCTIONAL_CASE_ID"); + QueryDemandListRequest queryDemandListRequest = getQueryDemandListRequest("DEMAND_TEST_FUNCTIONAL_CASE_ID"); MvcResult mvcResult = this.requestPostWithOkAndReturn(URL_DEMAND_PAGE, queryDemandListRequest); Pager> tableData = JSON.parseObject(JSON.toJSONString( JSON.parseObject(mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8), ResultHolder.class).getData()), Pager.class); //返回值的页码和当前页码相同 Assertions.assertEquals(tableData.getCurrent(), queryDemandListRequest.getCurrent()); - List list = JSON.parseArray(JSON.toJSONString(tableData.getList()), FunctionalDemandDTO.class); - for (FunctionalDemandDTO functionalDemandDTO : list) { - Assertions.assertTrue(CollectionUtils.isNotEmpty(functionalDemandDTO.getChildren())); - } + //返回的数据量不超过规定要返回的数据量相同 Assertions.assertTrue(JSON.parseArray(JSON.toJSONString(tableData.getList())).size() <= queryDemandListRequest.getPageSize()); - queryDemandListRequest = new QueryDemandListRequest(); - queryDemandListRequest.setCaseId("DEMAND_TEST_FUNCTIONAL_CASE_ID2"); - queryDemandListRequest.setCurrent(1); - queryDemandListRequest.setPageSize(5); + queryDemandListRequest = getQueryDemandListRequest("DEMAND_TEST_FUNCTIONAL_CASE_ID2"); mvcResult = this.requestPostWithOkAndReturn(URL_DEMAND_PAGE, queryDemandListRequest); tableData = JSON.parseObject(JSON.toJSONString( JSON.parseObject(mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8), ResultHolder.class).getData()), @@ -265,10 +266,7 @@ public class FunctionalCaseDemandControllerTests extends BaseTest { //返回的数据量为空 Assertions.assertTrue(CollectionUtils.isEmpty(tableData.getList())); - queryDemandListRequest = new QueryDemandListRequest(); - queryDemandListRequest.setCurrent(1); - queryDemandListRequest.setPageSize(5); - queryDemandListRequest.setCaseId("DEMAND_TEST_FUNCTIONAL_CASE_ID3"); + queryDemandListRequest = getQueryDemandListRequest("DEMAND_TEST_FUNCTIONAL_CASE_ID3"); mvcResult = this.requestPostWithOkAndReturn(URL_DEMAND_PAGE, queryDemandListRequest); tableData = JSON.parseObject(JSON.toJSONString( JSON.parseObject(mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8), ResultHolder.class).getData()), @@ -277,10 +275,15 @@ public class FunctionalCaseDemandControllerTests extends BaseTest { Assertions.assertEquals(tableData.getCurrent(), queryDemandListRequest.getCurrent()); //返回的数据量不超过规定要返回的数据量相同 Assertions.assertTrue(JSON.parseArray(JSON.toJSONString(tableData.getList())).size() <= queryDemandListRequest.getPageSize()); - List list1 = JSON.parseArray(JSON.toJSONString(tableData.getList()), FunctionalDemandDTO.class); - for (FunctionalDemandDTO functionalDemandDTO : list1) { - Assertions.assertTrue(CollectionUtils.isEmpty(functionalDemandDTO.getChildren())); - } + } + + @NotNull + private static QueryDemandListRequest getQueryDemandListRequest(String caseId) { + QueryDemandListRequest queryDemandListRequest = new QueryDemandListRequest(); + queryDemandListRequest.setCurrent(1); + queryDemandListRequest.setPageSize(5); + queryDemandListRequest.setCaseId(caseId); + return queryDemandListRequest; } @Test @@ -314,11 +317,13 @@ public class FunctionalCaseDemandControllerTests extends BaseTest { demandList.add(demandDTO); DemandDTO demandDTO2 = new DemandDTO(); demandDTO2.setDemandId("100002"); + demandDTO2.setParent("100001"); demandDTO2.setDemandName("手动加入Tapd1"); demandDTO2.setDemandUrl("https://www.tapd.cn/55049933/prong/stories/view/1155049933001012783"); demandList.add(demandDTO2); DemandDTO demandDTO3 = new DemandDTO(); demandDTO3.setDemandId("100003"); + demandDTO3.setParent("100002"); demandDTO3.setDemandName("手动加入Tapd2"); demandList.add(demandDTO3); functionalCaseDemandRequest.setDemandList(demandList); @@ -327,6 +332,16 @@ public class FunctionalCaseDemandControllerTests extends BaseTest { functionalCaseDemandExample.createCriteria().andCaseIdEqualTo("DEMAND_TEST_FUNCTIONAL_CASE_ID2"); List functionalCaseDemands = functionalCaseDemandMapper.selectByExample(functionalCaseDemandExample); Assertions.assertEquals(functionalCaseDemands.size(), demandList.size()); + + QueryDemandListRequest queryDemandListRequest = getQueryDemandListRequest("DEMAND_TEST_FUNCTIONAL_CASE_ID2"); + MvcResult mvcResult = this.requestPostWithOkAndReturn(URL_DEMAND_PAGE, queryDemandListRequest); + Pager> tableData = JSON.parseObject(JSON.toJSONString( + JSON.parseObject(mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8), ResultHolder.class).getData()), + Pager.class); + List list1 = JSON.parseArray(JSON.toJSONString(tableData.getList()), FunctionalDemandDTO.class); + for (FunctionalDemandDTO functionalDemandDTO : list1) { + Assertions.assertTrue(CollectionUtils.isNotEmpty(functionalDemandDTO.getChildren())); + } } @Test @@ -342,6 +357,29 @@ public class FunctionalCaseDemandControllerTests extends BaseTest { functionalCaseDemandExample.createCriteria().andCaseIdEqualTo("DEMAND_TEST_FUNCTIONAL_CASE_ID2").andDemandPlatformEqualTo("ZanDao"); List functionalCaseDemands = functionalCaseDemandMapper.selectByExample(functionalCaseDemandExample); Assertions.assertTrue(CollectionUtils.isEmpty(functionalCaseDemands)); + + functionalCaseDemandExample = new FunctionalCaseDemandExample(); + functionalCaseDemandExample.createCriteria().andCaseIdEqualTo("DEMAND_TEST_FUNCTIONAL_CASE_ID2").andDemandPlatformEqualTo("TAPD"); + List functionalCaseDemandOld = functionalCaseDemandMapper.selectByExample(functionalCaseDemandExample); + + + functionalCaseDemandRequest = new FunctionalCaseDemandRequest(); + functionalCaseDemandRequest.setCaseId("DEMAND_TEST_FUNCTIONAL_CASE_ID2"); + functionalCaseDemandRequest.setDemandPlatform("TAPD"); + demandList = new ArrayList<>(); + DemandDTO demandDTO3 = new DemandDTO(); + demandDTO3.setDemandId("100003"); + demandDTO3.setParent("100002"); + demandDTO3.setDemandName("手动加入Tapd2"); + demandList.add(demandDTO3); + functionalCaseDemandRequest.setDemandList(demandList); + this.requestPostWithOkAndReturn(URL_DEMAND_BATCH_RELEVANCE, functionalCaseDemandRequest); + + functionalCaseDemandExample = new FunctionalCaseDemandExample(); + functionalCaseDemandExample.createCriteria().andCaseIdEqualTo("DEMAND_TEST_FUNCTIONAL_CASE_ID2").andDemandPlatformEqualTo("TAPD"); + List functionalCaseDemandNew = functionalCaseDemandMapper.selectByExample(functionalCaseDemandExample); + + Assertions.assertEquals(functionalCaseDemandOld.size(), functionalCaseDemandNew.size()); } @Test @@ -358,16 +396,26 @@ public class FunctionalCaseDemandControllerTests extends BaseTest { DemandDTO demandDTO2 = new DemandDTO(); demandDTO2.setDemandId("100006"); demandList.add(demandDTO2); - DemandDTO demandDTO3 = new DemandDTO(); - demandDTO3.setDemandId("100007"); - demandDTO3.setDemandName("手动加入jira2"); - demandList.add(demandDTO3); functionalCaseDemandRequest.setDemandList(demandList); this.requestPost(URL_DEMAND_BATCH_RELEVANCE, functionalCaseDemandRequest).andExpect(status().is5xxServerError()); FunctionalCaseDemandExample functionalCaseDemandExample = new FunctionalCaseDemandExample(); functionalCaseDemandExample.createCriteria().andCaseIdEqualTo("DEMAND_TEST_FUNCTIONAL_CASE_ID2").andDemandPlatformEqualTo("jira"); List functionalCaseDemands = functionalCaseDemandMapper.selectByExample(functionalCaseDemandExample); Assertions.assertTrue(CollectionUtils.isEmpty(functionalCaseDemands)); + + functionalCaseDemandRequest = new FunctionalCaseDemandRequest(); + functionalCaseDemandRequest.setCaseId("DEMAND_TEST_FUNCTIONAL_CASE_ID2"); + functionalCaseDemandRequest.setDemandPlatform("jira"); + demandList = new ArrayList<>(); + demandDTO = new DemandDTO(); + demandDTO.setDemandId("100007"); + demandDTO.setDemandName("手动加入jira"); + demandList.add(demandDTO); + demandDTO2 = new DemandDTO(); + demandDTO2.setDemandName("手动加入jira2"); + demandList.add(demandDTO2); + functionalCaseDemandRequest.setDemandList(demandList); + this.requestPost(URL_DEMAND_BATCH_RELEVANCE, functionalCaseDemandRequest).andExpect(status().is5xxServerError()); } @Test