From e55d654bb2a52fde8fb5d79db0e4e4bc5a97dd31 Mon Sep 17 00:00:00 2001 From: guoyuqi Date: Tue, 30 Apr 2024 11:53:12 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E7=94=A8=E4=BE=8B=E7=AE=A1=E7=90=86):?= =?UTF-8?q?=20=E8=84=91=E5=9B=BE=E8=8E=B7=E5=8F=96=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E4=B8=8B=E7=94=A8=E4=BE=8B=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FunctionalCaseManageInterceptor.java | 26 ++++++++++++ .../functional/constants/MinderLabel.java | 6 +++ .../functional/dto/FunctionalCaseMindDTO.java | 8 ++++ .../dto/FunctionalCaseReviewMindDTO.java | 12 ++++++ .../functional/dto/FunctionalCaseStepDTO.java | 2 + .../dto/FunctionalMinderTreeNodeDTO.java | 3 ++ .../mapper/ExtFunctionalCaseMapper.java | 7 ++++ .../mapper/ExtFunctionalCaseMapper.xml | 42 ++++++++++++++++++- .../FunctionalCaseReviewMindRequest.java | 20 +++++++++ .../service/FunctionalCaseMinderService.java | 38 ++++++++++++----- .../FunctionalCaseMinderControllerTest.java | 34 +++++++++++++++ .../resources/dml/init_file_minder_test.sql | 1 - 12 files changed, 186 insertions(+), 13 deletions(-) create mode 100644 backend/services/case-management/src/main/java/io/metersphere/functional/config/FunctionalCaseManageInterceptor.java create mode 100644 backend/services/case-management/src/main/java/io/metersphere/functional/dto/FunctionalCaseReviewMindDTO.java create mode 100644 backend/services/case-management/src/main/java/io/metersphere/functional/request/FunctionalCaseReviewMindRequest.java diff --git a/backend/services/case-management/src/main/java/io/metersphere/functional/config/FunctionalCaseManageInterceptor.java b/backend/services/case-management/src/main/java/io/metersphere/functional/config/FunctionalCaseManageInterceptor.java new file mode 100644 index 0000000000..dfb8e23f29 --- /dev/null +++ b/backend/services/case-management/src/main/java/io/metersphere/functional/config/FunctionalCaseManageInterceptor.java @@ -0,0 +1,26 @@ +package io.metersphere.functional.config; + +import io.metersphere.functional.dto.FunctionalCaseMindDTO; +import io.metersphere.sdk.util.CompressUtils; +import io.metersphere.system.utils.MybatisInterceptorConfig; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.ArrayList; +import java.util.List; + +@Configuration +public class FunctionalCaseManageInterceptor { + @Bean + public List functionalCaseManageCompressConfigs() { + List configList = new ArrayList<>(); + + configList.add(new MybatisInterceptorConfig(FunctionalCaseMindDTO.class, "steps", CompressUtils.class, "zip", "unzip")); + configList.add(new MybatisInterceptorConfig(FunctionalCaseMindDTO.class, "textDescription", CompressUtils.class, "zip", "unzip")); + configList.add(new MybatisInterceptorConfig(FunctionalCaseMindDTO.class, "expectedResult", CompressUtils.class, "zip", "unzip")); + configList.add(new MybatisInterceptorConfig(FunctionalCaseMindDTO.class, "prerequisite", CompressUtils.class, "zip", "unzip")); + configList.add(new MybatisInterceptorConfig(FunctionalCaseMindDTO.class, "description", CompressUtils.class, "zip", "unzip")); + + return configList; + } +} diff --git a/backend/services/case-management/src/main/java/io/metersphere/functional/constants/MinderLabel.java b/backend/services/case-management/src/main/java/io/metersphere/functional/constants/MinderLabel.java index 63febcb4b5..40e07e99dc 100644 --- a/backend/services/case-management/src/main/java/io/metersphere/functional/constants/MinderLabel.java +++ b/backend/services/case-management/src/main/java/io/metersphere/functional/constants/MinderLabel.java @@ -13,9 +13,15 @@ public enum MinderLabel { * 前置条件标签 */ PREREQUISITE, + /** * 步骤描述标签 */ + STEPS, + + /** + * 文本描述标签 + */ TEXT_DESCRIPTION, /** * 预期结果标签 diff --git a/backend/services/case-management/src/main/java/io/metersphere/functional/dto/FunctionalCaseMindDTO.java b/backend/services/case-management/src/main/java/io/metersphere/functional/dto/FunctionalCaseMindDTO.java index 38ea775d9c..39d46e605b 100644 --- a/backend/services/case-management/src/main/java/io/metersphere/functional/dto/FunctionalCaseMindDTO.java +++ b/backend/services/case-management/src/main/java/io/metersphere/functional/dto/FunctionalCaseMindDTO.java @@ -4,6 +4,7 @@ import io.metersphere.validation.groups.Created; import io.metersphere.validation.groups.Updated; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; import lombok.Data; import lombok.NoArgsConstructor; @@ -45,9 +46,16 @@ public class FunctionalCaseMindDTO { @Schema(description = "用例等级") private String priority; + @Schema(description = "自定义排序,间隔5000", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "{functional_case.pos.not_blank}", groups = {Created.class}) + private Long pos; + @Schema(description = "用例步骤(JSON),step_model 为 Step 时启用") private byte[] steps; + @Schema(description = "步骤描述,step_model 为 Text 时启用") + private byte[] textDescription; + @Schema(description = "预期结果,step_model 为 Text 时启用") private byte[] expectedResult; diff --git a/backend/services/case-management/src/main/java/io/metersphere/functional/dto/FunctionalCaseReviewMindDTO.java b/backend/services/case-management/src/main/java/io/metersphere/functional/dto/FunctionalCaseReviewMindDTO.java new file mode 100644 index 0000000000..6978d5b5e4 --- /dev/null +++ b/backend/services/case-management/src/main/java/io/metersphere/functional/dto/FunctionalCaseReviewMindDTO.java @@ -0,0 +1,12 @@ +package io.metersphere.functional.dto; + +import io.swagger.v3.oas.annotations.media.Schema; + +public class FunctionalCaseReviewMindDTO extends FunctionalCaseMindDTO{ + + @Schema(description = "用例评审ID--用例评审脑图") + private String reviewId; + + @Schema(description = "功能用例ID--用例评审脑图") + private String caseId; +} diff --git a/backend/services/case-management/src/main/java/io/metersphere/functional/dto/FunctionalCaseStepDTO.java b/backend/services/case-management/src/main/java/io/metersphere/functional/dto/FunctionalCaseStepDTO.java index ad6eef386f..3e056b6ea0 100644 --- a/backend/services/case-management/src/main/java/io/metersphere/functional/dto/FunctionalCaseStepDTO.java +++ b/backend/services/case-management/src/main/java/io/metersphere/functional/dto/FunctionalCaseStepDTO.java @@ -5,6 +5,8 @@ import lombok.Data; @Data public class FunctionalCaseStepDTO { + private String id; + private Integer num; private String desc; diff --git a/backend/services/case-management/src/main/java/io/metersphere/functional/dto/FunctionalMinderTreeNodeDTO.java b/backend/services/case-management/src/main/java/io/metersphere/functional/dto/FunctionalMinderTreeNodeDTO.java index 00983a4083..178e66f7ae 100644 --- a/backend/services/case-management/src/main/java/io/metersphere/functional/dto/FunctionalMinderTreeNodeDTO.java +++ b/backend/services/case-management/src/main/java/io/metersphere/functional/dto/FunctionalMinderTreeNodeDTO.java @@ -13,6 +13,9 @@ public class FunctionalMinderTreeNodeDTO { @Schema(description = "节点ID") private String id; + @Schema(description = "节点顺序") + private Long pos; + @Schema(description = "节点名称") private String text; diff --git a/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtFunctionalCaseMapper.java b/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtFunctionalCaseMapper.java index 950dd03ce4..f2534e470f 100644 --- a/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtFunctionalCaseMapper.java +++ b/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtFunctionalCaseMapper.java @@ -9,6 +9,7 @@ import io.metersphere.functional.dto.FunctionalCaseVersionDTO; import io.metersphere.functional.request.FunctionalCaseBatchMoveRequest; import io.metersphere.functional.request.FunctionalCaseMindRequest; import io.metersphere.functional.request.FunctionalCasePageRequest; +import io.metersphere.functional.request.FunctionalCaseReviewMindRequest; import io.metersphere.project.dto.ModuleCountDTO; import io.metersphere.request.AssociateOtherCaseRequest; import io.metersphere.request.TestCasePageProviderRequest; @@ -86,4 +87,10 @@ public interface ExtFunctionalCaseMapper { * 根据模块ID获取脑图展示数据 */ List getMinderCaseList(@Param("request") FunctionalCaseMindRequest request, @Param("deleted") boolean deleted); + + /** + * 根据模块ID获取用例评审脑图展示数据 + */ + List getMinderCaseReviewList(@Param("request") FunctionalCaseReviewMindRequest request, @Param("deleted") boolean delete, @Param("userId") String userId, @Param("viewStatusUserId") boolean viewStatusUserId); + } diff --git a/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtFunctionalCaseMapper.xml b/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtFunctionalCaseMapper.xml index bf9908ec9c..e83be1e844 100644 --- a/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtFunctionalCaseMapper.xml +++ b/backend/services/case-management/src/main/java/io/metersphere/functional/mapper/ExtFunctionalCaseMapper.xml @@ -782,8 +782,8 @@ + + \ No newline at end of file diff --git a/backend/services/case-management/src/main/java/io/metersphere/functional/request/FunctionalCaseReviewMindRequest.java b/backend/services/case-management/src/main/java/io/metersphere/functional/request/FunctionalCaseReviewMindRequest.java new file mode 100644 index 0000000000..a25dfd1685 --- /dev/null +++ b/backend/services/case-management/src/main/java/io/metersphere/functional/request/FunctionalCaseReviewMindRequest.java @@ -0,0 +1,20 @@ +package io.metersphere.functional.request; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +@Data +public class FunctionalCaseReviewMindRequest extends FunctionalCaseMindRequest { + + @Schema(description = "评审id", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "{case_review.case_review_id.not_blank}") + private String reviewId; + + @Schema(description = "是否只看我的", requiredMode = Schema.RequiredMode.REQUIRED) + private boolean viewFlag; + + @Schema(description = "我的评审结果", requiredMode = Schema.RequiredMode.REQUIRED) + private boolean viewStatusFlag; + +} diff --git a/backend/services/case-management/src/main/java/io/metersphere/functional/service/FunctionalCaseMinderService.java b/backend/services/case-management/src/main/java/io/metersphere/functional/service/FunctionalCaseMinderService.java index a0e0dcf7a0..2f9438c129 100644 --- a/backend/services/case-management/src/main/java/io/metersphere/functional/service/FunctionalCaseMinderService.java +++ b/backend/services/case-management/src/main/java/io/metersphere/functional/service/FunctionalCaseMinderService.java @@ -2,10 +2,12 @@ package io.metersphere.functional.service; import io.metersphere.functional.constants.MinderLabel; import io.metersphere.functional.dto.FunctionalCaseMindDTO; +import io.metersphere.functional.dto.FunctionalCaseStepDTO; import io.metersphere.functional.dto.FunctionalMinderTreeDTO; import io.metersphere.functional.dto.FunctionalMinderTreeNodeDTO; import io.metersphere.functional.mapper.ExtFunctionalCaseMapper; import io.metersphere.functional.request.FunctionalCaseMindRequest; +import io.metersphere.sdk.util.JSON; import jakarta.annotation.Resource; import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Service; @@ -43,6 +45,7 @@ public class FunctionalCaseMinderService { FunctionalMinderTreeDTO root = new FunctionalMinderTreeDTO(); FunctionalMinderTreeNodeDTO rootData = new FunctionalMinderTreeNodeDTO(); rootData.setId(functionalCaseMindDTO.getId()); + rootData.setPos(functionalCaseMindDTO.getPos()); rootData.setText(functionalCaseMindDTO.getName()); rootData.setPriority(functionalCaseMindDTO.getPriority()); rootData.setStatus(functionalCaseMindDTO.getReviewStatus()); @@ -57,34 +60,49 @@ public class FunctionalCaseMinderService { private List buildChildren(FunctionalCaseMindDTO functionalCaseMindDTO) { List children = new ArrayList<>(); - if (functionalCaseMindDTO.getSteps() != null) { - String stepText = new String(functionalCaseMindDTO.getSteps(), StandardCharsets.UTF_8); - FunctionalMinderTreeDTO stepFunctionalMinderTreeDTO = getFunctionalMinderTreeDTO(stepText, MinderLabel.TEXT_DESCRIPTION.toString()); + if (functionalCaseMindDTO.getTextDescription() != null) { + String textDescription = new String(functionalCaseMindDTO.getTextDescription(), StandardCharsets.UTF_8); + FunctionalMinderTreeDTO stepFunctionalMinderTreeDTO = getFunctionalMinderTreeDTO(textDescription, MinderLabel.TEXT_DESCRIPTION.toString(), 0L); + if (functionalCaseMindDTO.getExpectedResult() != null) { + String expectedResultText = new String(functionalCaseMindDTO.getExpectedResult(), StandardCharsets.UTF_8); + FunctionalMinderTreeDTO expectedResultFunctionalMinderTreeDTO = getFunctionalMinderTreeDTO(expectedResultText, MinderLabel.EXPECTED_RESULT.toString(), 0L); + stepFunctionalMinderTreeDTO.getChildren().add(expectedResultFunctionalMinderTreeDTO); + } children.add(stepFunctionalMinderTreeDTO); } - if (functionalCaseMindDTO.getExpectedResult() != null) { - String expectedResultText = new String(functionalCaseMindDTO.getExpectedResult(), StandardCharsets.UTF_8); - FunctionalMinderTreeDTO expectedResultFunctionalMinderTreeDTO = getFunctionalMinderTreeDTO(expectedResultText, MinderLabel.EXPECTED_RESULT.toString()); - children.add(expectedResultFunctionalMinderTreeDTO); + + if (functionalCaseMindDTO.getSteps() != null) { + String stepText = new String(functionalCaseMindDTO.getSteps(), StandardCharsets.UTF_8); + List functionalCaseStepDTOS = JSON.parseArray(stepText, FunctionalCaseStepDTO.class); + for (FunctionalCaseStepDTO functionalCaseStepDTO : functionalCaseStepDTOS) { + FunctionalMinderTreeDTO stepFunctionalMinderTreeDTO = getFunctionalMinderTreeDTO(functionalCaseStepDTO.getDesc(), MinderLabel.STEPS.toString(), Long.valueOf(functionalCaseStepDTO.getNum())); + if (functionalCaseMindDTO.getExpectedResult() != null) { + FunctionalMinderTreeDTO expectedResultFunctionalMinderTreeDTO = getFunctionalMinderTreeDTO(functionalCaseStepDTO.getResult(), MinderLabel.EXPECTED_RESULT.toString(), 0L); + stepFunctionalMinderTreeDTO.getChildren().add(expectedResultFunctionalMinderTreeDTO); + } + children.add(stepFunctionalMinderTreeDTO); + } } + if (functionalCaseMindDTO.getPrerequisite() != null) { String prerequisiteText = new String(functionalCaseMindDTO.getPrerequisite(), StandardCharsets.UTF_8); - FunctionalMinderTreeDTO prerequisiteFunctionalMinderTreeDTO = getFunctionalMinderTreeDTO(prerequisiteText, MinderLabel.PREREQUISITE.toString()); + FunctionalMinderTreeDTO prerequisiteFunctionalMinderTreeDTO = getFunctionalMinderTreeDTO(prerequisiteText, MinderLabel.PREREQUISITE.toString(), 0L); children.add(prerequisiteFunctionalMinderTreeDTO); } if (functionalCaseMindDTO.getDescription() != null) { String descriptionText = new String(functionalCaseMindDTO.getDescription(), StandardCharsets.UTF_8); - FunctionalMinderTreeDTO descriptionFunctionalMinderTreeDTO = getFunctionalMinderTreeDTO(descriptionText, MinderLabel.DESCRIPTION.toString()); + FunctionalMinderTreeDTO descriptionFunctionalMinderTreeDTO = getFunctionalMinderTreeDTO(descriptionText, MinderLabel.DESCRIPTION.toString(), 0L); children.add(descriptionFunctionalMinderTreeDTO); } return children; } @NotNull - private static FunctionalMinderTreeDTO getFunctionalMinderTreeDTO(String text, String resource) { + private static FunctionalMinderTreeDTO getFunctionalMinderTreeDTO(String text, String resource, Long pos) { FunctionalMinderTreeDTO functionalMinderTreeDTO = new FunctionalMinderTreeDTO(); FunctionalMinderTreeNodeDTO rootData = new FunctionalMinderTreeNodeDTO(); rootData.setText(text); + rootData.setPos(pos); rootData.setResource(List.of(resource)); functionalMinderTreeDTO.setChildren(new ArrayList<>()); functionalMinderTreeDTO.setData(rootData); diff --git a/backend/services/case-management/src/test/java/io/metersphere/functional/controller/FunctionalCaseMinderControllerTest.java b/backend/services/case-management/src/test/java/io/metersphere/functional/controller/FunctionalCaseMinderControllerTest.java index bbf84e6a63..1b66a003ed 100644 --- a/backend/services/case-management/src/test/java/io/metersphere/functional/controller/FunctionalCaseMinderControllerTest.java +++ b/backend/services/case-management/src/test/java/io/metersphere/functional/controller/FunctionalCaseMinderControllerTest.java @@ -1,10 +1,14 @@ package io.metersphere.functional.controller; +import io.metersphere.functional.domain.FunctionalCaseBlob; +import io.metersphere.functional.dto.FunctionalCaseStepDTO; import io.metersphere.functional.dto.FunctionalMinderTreeDTO; +import io.metersphere.functional.mapper.FunctionalCaseBlobMapper; import io.metersphere.functional.request.FunctionalCaseMindRequest; import io.metersphere.sdk.util.JSON; import io.metersphere.system.base.BaseTest; import io.metersphere.system.controller.handler.ResultHolder; +import jakarta.annotation.Resource; import org.junit.jupiter.api.*; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; @@ -13,6 +17,7 @@ import org.springframework.test.context.jdbc.SqlConfig; import org.springframework.test.web.servlet.MvcResult; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; import java.util.List; @SpringBootTest(webEnvironment= SpringBootTest.WebEnvironment.RANDOM_PORT) @@ -21,11 +26,40 @@ import java.util.List; public class FunctionalCaseMinderControllerTest extends BaseTest { public static final String FUNCTIONAL_CASE_LIST_URL = "/functional/mind/case/list"; + @Resource + private FunctionalCaseBlobMapper functionalCaseBlobMapper; @Test @Order(1) @Sql(scripts = {"/dml/init_file_minder_test.sql"}, config = @SqlConfig(encoding = "utf-8", transactionMode = SqlConfig.TransactionMode.ISOLATED)) public void testGetPageList() throws Exception { + List list = new ArrayList<>(); + FunctionalCaseStepDTO functionalCaseStepDTO = new FunctionalCaseStepDTO(); + functionalCaseStepDTO.setId("12455"); + functionalCaseStepDTO.setNum(0); + functionalCaseStepDTO.setDesc("步骤一"); + functionalCaseStepDTO.setResult("步骤一结果"); + list.add(functionalCaseStepDTO); + functionalCaseStepDTO = new FunctionalCaseStepDTO(); + functionalCaseStepDTO.setId("12ddd455"); + functionalCaseStepDTO.setNum(1); + functionalCaseStepDTO.setDesc("步骤二"); + functionalCaseStepDTO.setResult("步骤二结果"); + list.add(functionalCaseStepDTO); + String textDescription = "hahahahah,这是文本描述"; + String expectedResult = "文本描述的结果"; + String prerequisite = "前置条件"; + String description = "备注"; + + FunctionalCaseBlob functionalCaseBlob = new FunctionalCaseBlob(); + functionalCaseBlob.setId("TEST_FUNCTIONAL_MINDER_CASE_ID_2"); + functionalCaseBlob.setSteps(JSON.toJSONString(list).getBytes(StandardCharsets.UTF_8)); + functionalCaseBlob.setTextDescription(textDescription.getBytes(StandardCharsets.UTF_8)); + functionalCaseBlob.setExpectedResult(expectedResult.getBytes(StandardCharsets.UTF_8)); + functionalCaseBlob.setPrerequisite(prerequisite.getBytes(StandardCharsets.UTF_8)); + functionalCaseBlob.setDescription(description.getBytes(StandardCharsets.UTF_8)); + functionalCaseBlobMapper.insert(functionalCaseBlob); + FunctionalCaseMindRequest request = new FunctionalCaseMindRequest(); request.setProjectId("project-case-minder-test"); request.setModuleId("TEST_MINDER_MODULE_ID_GYQ"); diff --git a/backend/services/case-management/src/test/resources/dml/init_file_minder_test.sql b/backend/services/case-management/src/test/resources/dml/init_file_minder_test.sql index be96706f99..15109b3367 100644 --- a/backend/services/case-management/src/test/resources/dml/init_file_minder_test.sql +++ b/backend/services/case-management/src/test/resources/dml/init_file_minder_test.sql @@ -11,7 +11,6 @@ VALUES ('TEST_FUNCTIONAL_MINDER_CASE_ID_1', 1, 'TEST_MINDER_MODULE_ID_GYQ', 'pro INSERT INTO functional_case_blob(id, steps, text_description, expected_result, prerequisite, description) VALUES ('TEST_FUNCTIONAL_MINDER_CASE_ID_1', NULL, NULL, NULL, NULL, NULL); -INSERT INTO functional_case_blob(id, steps, text_description, expected_result, prerequisite, description) VALUES ('TEST_FUNCTIONAL_MINDER_CASE_ID_2', 0x504B03041400080808002B826D58000000000000000000000000030000007A69708BAE56CA2BCD55B232D0514A492D4E56B2527A366DC3D3DDBB9E4F59F1645FB7B1A1311AF7E9A495682826CF100A62F262F29E4DD909444A3A4A45A9C5A5392584CD5BDFF67C412384CCCD05998030CF10661CD4D05A1DA8630DE18E353236343246B60DC83532040A2AD5C60200504B0708159DEE336E000000DB000000504B010214001400080808002B826D58159DEE336E000000DB0000000300000000000000000000000000000000007A6970504B05060000000001000100310000009F0000000000, 0x504B03041400080808002B826D58000000000000000000000000030000007A69700300504B0708000000000200000000000000504B010214001400080808002B826D580000000002000000000000000300000000000000000000000000000000007A6970504B0506000000000100010031000000330000000000, 0x504B03041400080808002B826D58000000000000000000000000030000007A69700300504B0708000000000200000000000000504B010214001400080808002B826D580000000002000000000000000300000000000000000000000000000000007A6970504B0506000000000100010031000000330000000000, 0x504B03041400080808002B826D58000000000000000000000000030000007A69700300504B0708000000000200000000000000504B010214001400080808002B826D580000000002000000000000000300000000000000000000000000000000007A6970504B0506000000000100010031000000330000000000, 0x504B03041400080808002B826D58000000000000000000000000030000007A69700300504B0708000000000200000000000000504B010214001400080808002B826D580000000002000000000000000300000000000000000000000000000000007A6970504B0506000000000100010031000000330000000000); INSERT INTO functional_case_blob(id, steps, text_description, expected_result, prerequisite, description) VALUES ('TEST_FUNCTIONAL_MINDER_CASE_ID_3', NULL, NULL, NULL, NULL, NULL);