删除掉nodeDefinition表,因为它暂时用不上。
This commit is contained in:
parent
305759dd67
commit
1d518aa4d3
@ -1,39 +0,0 @@
|
||||
package com.qqchen.deploy.backend.workflow.converter;
|
||||
|
||||
import com.qqchen.deploy.backend.framework.converter.BaseConverter;
|
||||
import com.qqchen.deploy.backend.workflow.dto.NodeDefinitionDTO;
|
||||
import com.qqchen.deploy.backend.workflow.entity.NodeDefinition;
|
||||
import com.qqchen.deploy.backend.workflow.entity.WorkflowDefinition;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mapping;
|
||||
import org.mapstruct.Named;
|
||||
|
||||
/**
|
||||
* 节点定义转换器
|
||||
*/
|
||||
@Mapper(config = BaseConverter.class)
|
||||
public interface NodeDefinitionConverter extends BaseConverter<NodeDefinition, NodeDefinitionDTO> {
|
||||
|
||||
@Override
|
||||
@Mapping(target = "workflowDefinitionId", source = "workflowDefinition", qualifiedByName = "getWorkflowDefinitionId")
|
||||
NodeDefinitionDTO toDto(NodeDefinition entity);
|
||||
|
||||
@Override
|
||||
@Mapping(target = "workflowDefinition", source = "workflowDefinitionId", qualifiedByName = "createWorkflowDefinition")
|
||||
NodeDefinition toEntity(NodeDefinitionDTO dto);
|
||||
|
||||
@Named("getWorkflowDefinitionId")
|
||||
default Long getWorkflowDefinitionId(WorkflowDefinition workflowDefinition) {
|
||||
return workflowDefinition != null ? workflowDefinition.getId() : null;
|
||||
}
|
||||
|
||||
@Named("createWorkflowDefinition")
|
||||
default WorkflowDefinition createWorkflowDefinition(Long id) {
|
||||
if (id == null) {
|
||||
return null;
|
||||
}
|
||||
WorkflowDefinition workflowDefinition = new WorkflowDefinition();
|
||||
workflowDefinition.setId(id);
|
||||
return workflowDefinition;
|
||||
}
|
||||
}
|
||||
@ -1,38 +0,0 @@
|
||||
package com.qqchen.deploy.backend.workflow.dto;
|
||||
|
||||
import com.qqchen.deploy.backend.workflow.enums.NodeTypeEnum;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 节点定义DTO,用于解析工作流定义中的节点配置
|
||||
*/
|
||||
@Data
|
||||
public class NodeDefinition {
|
||||
/**
|
||||
* 节点ID
|
||||
*/
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 节点类型
|
||||
*/
|
||||
private NodeTypeEnum type;
|
||||
|
||||
/**
|
||||
* 节点名称
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 下一个节点的ID列表
|
||||
*/
|
||||
private List<String> next;
|
||||
|
||||
/**
|
||||
* 节点配置,不同类型的节点有不同的配置
|
||||
*/
|
||||
private Map<String, Object> config;
|
||||
}
|
||||
@ -0,0 +1,28 @@
|
||||
package com.qqchen.deploy.backend.workflow.engine.exception;
|
||||
|
||||
import com.qqchen.deploy.backend.framework.enums.ResponseCode;
|
||||
import com.qqchen.deploy.backend.framework.exception.BusinessException;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 工作流节点相关异常
|
||||
*/
|
||||
@Getter
|
||||
public class WorkflowNodeException extends BusinessException {
|
||||
|
||||
private final String nodeId;
|
||||
private final String nodeName;
|
||||
|
||||
public WorkflowNodeException(ResponseCode code, String nodeId, String nodeName) {
|
||||
super(code, new Object[]{nodeId, nodeName});
|
||||
this.nodeId = nodeId;
|
||||
this.nodeName = nodeName;
|
||||
}
|
||||
|
||||
public WorkflowNodeException(ResponseCode code, String nodeId, String nodeName, Throwable cause) {
|
||||
super(code, new Object[]{nodeId, nodeName, cause.getMessage()});
|
||||
this.nodeId = nodeId;
|
||||
this.nodeName = nodeName;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,14 +1,8 @@
|
||||
package com.qqchen.deploy.backend.workflow.engine.transition;
|
||||
|
||||
import com.qqchen.deploy.backend.system.enums.LogLevelEnum;
|
||||
import com.qqchen.deploy.backend.framework.enums.ResponseCode;
|
||||
import com.qqchen.deploy.backend.workflow.engine.context.WorkflowContextOperations;
|
||||
import com.qqchen.deploy.backend.workflow.engine.exception.WorkflowEngineException;
|
||||
import com.qqchen.deploy.backend.workflow.entity.NodeDefinition;
|
||||
import com.qqchen.deploy.backend.workflow.entity.NodeInstance;
|
||||
import com.qqchen.deploy.backend.workflow.entity.WorkflowDefinition;
|
||||
import com.qqchen.deploy.backend.workflow.enums.NodeStatusEnum;
|
||||
import com.qqchen.deploy.backend.workflow.repository.INodeDefinitionRepository;
|
||||
import com.qqchen.deploy.backend.workflow.repository.INodeInstanceRepository;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -24,9 +18,6 @@ public class TransitionExecutor {
|
||||
@Resource
|
||||
private TransitionRuleEngine transitionRuleEngine;
|
||||
|
||||
@Resource
|
||||
private INodeDefinitionRepository nodeDefinitionRepository;
|
||||
|
||||
@Resource
|
||||
private INodeInstanceRepository nodeInstanceRepository;
|
||||
|
||||
@ -37,27 +28,6 @@ public class TransitionExecutor {
|
||||
// 1. 获取下一个节点ID列表
|
||||
List<String> nextNodeIds = transitionRuleEngine.getNextNodeIds(currentNode, definition, context);
|
||||
|
||||
// 2. 创建下一个节点实例
|
||||
for (String nodeId : nextNodeIds) {
|
||||
NodeDefinition nextNodeDef = nodeDefinitionRepository.findByWorkflowDefinitionIdAndNodeIdAndDeletedFalse(
|
||||
definition.getId(), nodeId);
|
||||
if (nextNodeDef == null) {
|
||||
throw new WorkflowEngineException(ResponseCode.WORKFLOW_NODE_NOT_FOUND, "未找到节点定义: " + nodeId);
|
||||
}
|
||||
|
||||
NodeInstance nextNode = new NodeInstance();
|
||||
nextNode.setWorkflowInstance(currentNode.getWorkflowInstance());
|
||||
nextNode.setNodeId(nodeId);
|
||||
nextNode.setNodeType(nextNodeDef.getType());
|
||||
nextNode.setName(nextNodeDef.getName());
|
||||
nextNode.setConfig(nextNodeDef.getConfig());
|
||||
nextNode.setStatus(NodeStatusEnum.PENDING);
|
||||
nextNode.setCreateTime(LocalDateTime.now());
|
||||
|
||||
nodeInstanceRepository.save(nextNode);
|
||||
|
||||
context.log(String.format("创建下一个节点实例: %s[%s]", nextNode.getName(), nextNode.getNodeId()),
|
||||
LogLevelEnum.INFO);
|
||||
}
|
||||
//这里应该从WorkflowDefinition类的transitionConfig获取
|
||||
}
|
||||
}
|
||||
@ -1,57 +0,0 @@
|
||||
package com.qqchen.deploy.backend.workflow.entity;
|
||||
|
||||
import com.qqchen.deploy.backend.framework.annotation.LogicDelete;
|
||||
import com.qqchen.deploy.backend.framework.domain.Entity;
|
||||
import com.qqchen.deploy.backend.workflow.enums.NodeTypeEnum;
|
||||
import jakarta.persistence.*;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* 节点定义实体
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@jakarta.persistence.Entity
|
||||
@Table(name = "wf_node_definition")
|
||||
@LogicDelete
|
||||
public class NodeDefinition extends Entity<Long> {
|
||||
|
||||
/**
|
||||
* 所属工作流定义
|
||||
*/
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "workflow_definition_id", nullable = false)
|
||||
private WorkflowDefinition workflowDefinition;
|
||||
|
||||
/**
|
||||
* 节点ID
|
||||
*/
|
||||
@Column(name = "node_id", nullable = false)
|
||||
private String nodeId;
|
||||
|
||||
/**
|
||||
* 节点名称
|
||||
*/
|
||||
@Column(nullable = false)
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 节点类型
|
||||
*/
|
||||
@Enumerated(EnumType.ORDINAL)
|
||||
@Column(nullable = false)
|
||||
private NodeTypeEnum type;
|
||||
|
||||
/**
|
||||
* 节点配置(JSON)
|
||||
*/
|
||||
@Column(columnDefinition = "TEXT")
|
||||
private String config;
|
||||
|
||||
/**
|
||||
* 排序号
|
||||
*/
|
||||
@Column(name = "order_num")
|
||||
private Integer orderNum;
|
||||
}
|
||||
@ -1,70 +0,0 @@
|
||||
package com.qqchen.deploy.backend.workflow.repository;
|
||||
|
||||
import com.qqchen.deploy.backend.framework.repository.IBaseRepository;
|
||||
import com.qqchen.deploy.backend.workflow.entity.NodeDefinition;
|
||||
import com.qqchen.deploy.backend.workflow.enums.NodeTypeEnum;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.data.repository.query.Param;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 节点定义仓库接口
|
||||
*/
|
||||
@Repository
|
||||
public interface INodeDefinitionRepository extends IBaseRepository<NodeDefinition, Long> {
|
||||
|
||||
/**
|
||||
* 根据工作流定义ID查询节点列表
|
||||
*
|
||||
* @param workflowDefinitionId 工作流定义ID
|
||||
* @return 节点列表
|
||||
*/
|
||||
@Query("SELECT n FROM NodeDefinition n WHERE n.workflowDefinition.id = :workflowDefinitionId AND n.deleted = false ORDER BY n.orderNum")
|
||||
List<NodeDefinition> findByWorkflowDefinitionId(@Param("workflowDefinitionId") Long workflowDefinitionId);
|
||||
|
||||
/**
|
||||
* 根据工作流定义ID和节点类型查询节点列表
|
||||
*
|
||||
* @param workflowDefinitionId 工作流定义ID
|
||||
* @param type 节点类型
|
||||
* @return 节点列表
|
||||
*/
|
||||
@Query("SELECT n FROM NodeDefinition n WHERE n.workflowDefinition.id = :workflowDefinitionId AND n.type = :type AND n.deleted = false ORDER BY n.orderNum")
|
||||
List<NodeDefinition> findByWorkflowDefinitionIdAndType(
|
||||
@Param("workflowDefinitionId") Long workflowDefinitionId,
|
||||
@Param("type") NodeTypeEnum type);
|
||||
|
||||
/**
|
||||
* 根据工作流定义ID和节点ID查询节点
|
||||
*
|
||||
* @param workflowDefinitionId 工作流定义ID
|
||||
* @param nodeId 节点ID
|
||||
* @return 节点定义
|
||||
*/
|
||||
@Query("SELECT n FROM NodeDefinition n WHERE n.workflowDefinition.id = :workflowDefinitionId AND n.nodeId = :nodeId AND n.deleted = false")
|
||||
NodeDefinition findByWorkflowDefinitionIdAndNodeIdAndDeletedFalse(
|
||||
@Param("workflowDefinitionId") Long workflowDefinitionId,
|
||||
@Param("nodeId") String nodeId);
|
||||
|
||||
/**
|
||||
* 检查节点ID是否已存在
|
||||
*
|
||||
* @param workflowDefinitionId 工作流定义ID
|
||||
* @param nodeId 节点ID
|
||||
* @return 是否存在
|
||||
*/
|
||||
@Query("SELECT COUNT(n) > 0 FROM NodeDefinition n WHERE n.workflowDefinition.id = :workflowDefinitionId AND n.nodeId = :nodeId AND n.deleted = false")
|
||||
boolean existsByWorkflowDefinitionIdAndNodeIdAndDeletedFalse(
|
||||
@Param("workflowDefinitionId") Long workflowDefinitionId,
|
||||
@Param("nodeId") String nodeId);
|
||||
|
||||
/**
|
||||
* 删除工作流定义的所有节点
|
||||
*
|
||||
* @param workflowDefinitionId 工作流定义ID
|
||||
*/
|
||||
@Query("UPDATE NodeDefinition n SET n.deleted = true WHERE n.workflowDefinition.id = :workflowDefinitionId")
|
||||
void deleteByWorkflowDefinitionId(@Param("workflowDefinitionId") Long workflowDefinitionId);
|
||||
}
|
||||
@ -7,7 +7,6 @@ import com.qqchen.deploy.backend.workflow.converter.WorkflowDefinitionConverter;
|
||||
import com.qqchen.deploy.backend.workflow.dto.WorkflowDefinitionDTO;
|
||||
import com.qqchen.deploy.backend.workflow.entity.WorkflowDefinition;
|
||||
import com.qqchen.deploy.backend.workflow.enums.WorkflowDefinitionStatusEnum;
|
||||
import com.qqchen.deploy.backend.workflow.repository.INodeDefinitionRepository;
|
||||
import com.qqchen.deploy.backend.workflow.repository.IWorkflowDefinitionRepository;
|
||||
import com.qqchen.deploy.backend.workflow.service.IWorkflowDefinitionService;
|
||||
import jakarta.annotation.Resource;
|
||||
@ -30,9 +29,6 @@ public class WorkflowDefinitionServiceImpl extends BaseServiceImpl<WorkflowDefin
|
||||
@Resource
|
||||
private IWorkflowDefinitionRepository workflowDefinitionRepository;
|
||||
|
||||
@Resource
|
||||
private INodeDefinitionRepository nodeDefinitionRepository;
|
||||
|
||||
@Resource
|
||||
private WorkflowDefinitionConverter workflowDefinitionConverter;
|
||||
|
||||
|
||||
@ -405,28 +405,6 @@ CREATE TABLE wf_workflow_definition (
|
||||
CONSTRAINT UK_workflow_definition_code_version UNIQUE (code, version_no)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流定义表';
|
||||
|
||||
-- 节点定义表
|
||||
CREATE TABLE wf_node_definition (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
create_by VARCHAR(255) NULL COMMENT '创建人',
|
||||
create_time DATETIME(6) NULL COMMENT '创建时间',
|
||||
deleted BIT NOT NULL DEFAULT 0 COMMENT '是否删除(0:未删除,1:已删除)',
|
||||
update_by VARCHAR(255) NULL COMMENT '更新人',
|
||||
update_time DATETIME(6) NULL COMMENT '更新时间',
|
||||
version INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号',
|
||||
|
||||
workflow_definition_id BIGINT NOT NULL COMMENT '工作流定义ID',
|
||||
node_id VARCHAR(100) NOT NULL COMMENT '节点ID',
|
||||
name VARCHAR(100) NOT NULL COMMENT '节点名称',
|
||||
type TINYINT NOT NULL COMMENT '节点类型(0:开始节点,1:结束节点,2:任务节点,3:网关节点,4:子流程节点,5:Shell脚本节点,6:审批节点,7:Jenkins任务节点,8:Git操作节点)',
|
||||
config TEXT NULL COMMENT '节点配置(JSON)',
|
||||
description TEXT NULL COMMENT '节点描述',
|
||||
order_num INT NOT NULL DEFAULT 0 COMMENT '排序号',
|
||||
|
||||
CONSTRAINT FK_node_definition_workflow FOREIGN KEY (workflow_definition_id) REFERENCES wf_workflow_definition (id),
|
||||
CONSTRAINT UK_node_definition_workflow_node UNIQUE (workflow_definition_id, node_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='节点定义表';
|
||||
|
||||
-- 流转配置表
|
||||
CREATE TABLE wf_transition_config (
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
|
||||
|
||||
@ -171,32 +171,6 @@ INSERT INTO wf_workflow_definition (
|
||||
1
|
||||
);
|
||||
|
||||
-- 初始化节点定义
|
||||
INSERT INTO wf_node_definition (
|
||||
id, create_by, create_time, deleted, update_by, update_time, version,
|
||||
workflow_definition_id, node_id, name, type, config, order_num
|
||||
) VALUES
|
||||
-- 开始节点
|
||||
(1, 'admin', NOW(), 0, 'admin', NOW(), 0,
|
||||
1, 'startNode', '开始', 0,
|
||||
'{"type":"START","name":"开始"}',
|
||||
1),
|
||||
-- 构建节点
|
||||
(2, 'admin', NOW(), 0, 'admin', NOW(), 0,
|
||||
1, 'build', '构建', 2,
|
||||
'{"type":"TASK","name":"构建","executor":"JENKINS","jenkinsJob":"app-build"}',
|
||||
2),
|
||||
-- 部署节点
|
||||
(3, 'admin', NOW(), 0, 'admin', NOW(), 0,
|
||||
1, 'deploy', '部署', 2,
|
||||
'{"type":"TASK","name":"部署","executor":"SHELL","script":"./deploy.sh"}',
|
||||
3),
|
||||
-- 结束节点
|
||||
(4, 'admin', NOW(), 0, 'admin', NOW(), 0,
|
||||
1, 'endNode', '结束', 1,
|
||||
'{"type":"END","name":"结束"}',
|
||||
4);
|
||||
|
||||
-- 初始化工作流实例
|
||||
INSERT INTO wf_workflow_instance (
|
||||
id, create_by, create_time, deleted, update_by, update_time, version,
|
||||
|
||||
@ -1,162 +0,0 @@
|
||||
package com.qqchen.deploy.backend.workflow.service;
|
||||
|
||||
import com.qqchen.deploy.backend.framework.enums.ResponseCode;
|
||||
import com.qqchen.deploy.backend.framework.exception.BusinessException;
|
||||
import com.qqchen.deploy.backend.workflow.dto.WorkflowDefinitionDTO;
|
||||
import com.qqchen.deploy.backend.workflow.entity.WorkflowDefinition;
|
||||
import com.qqchen.deploy.backend.workflow.enums.WorkflowDefinitionStatusEnum;
|
||||
import com.qqchen.deploy.backend.workflow.repository.INodeDefinitionRepository;
|
||||
import com.qqchen.deploy.backend.workflow.repository.IWorkflowDefinitionRepository;
|
||||
import com.qqchen.deploy.backend.workflow.service.impl.WorkflowDefinitionServiceImpl;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Optional;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class WorkflowDefinitionServiceTest {
|
||||
|
||||
@Mock
|
||||
private IWorkflowDefinitionRepository workflowDefinitionRepository;
|
||||
|
||||
@Mock
|
||||
private INodeDefinitionRepository nodeDefinitionRepository;
|
||||
|
||||
@InjectMocks
|
||||
private WorkflowDefinitionServiceImpl workflowDefinitionService;
|
||||
|
||||
private WorkflowDefinitionDTO dto;
|
||||
private WorkflowDefinition entity;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
dto = new WorkflowDefinitionDTO();
|
||||
dto.setCode("TEST-WF");
|
||||
dto.setName("Test Workflow");
|
||||
dto.setDescription("Test Description");
|
||||
dto.setNodeConfig("{}");
|
||||
dto.setTransitionConfig("{}");
|
||||
dto.setFormDefinition("{}");
|
||||
dto.setGraphDefinition("{}");
|
||||
|
||||
entity = new WorkflowDefinition();
|
||||
entity.setId(1L);
|
||||
entity.setCode("TEST-WF");
|
||||
entity.setName("Test Workflow");
|
||||
entity.setStatus(WorkflowDefinitionStatusEnum.DRAFT);
|
||||
entity.setEnabled(true);
|
||||
}
|
||||
|
||||
@Test
|
||||
void create_Success() {
|
||||
when(workflowDefinitionRepository.existsByCodeAndDeletedFalse(anyString())).thenReturn(false);
|
||||
when(workflowDefinitionRepository.save(any(WorkflowDefinition.class))).thenReturn(entity);
|
||||
|
||||
WorkflowDefinitionDTO result = workflowDefinitionService.create(dto);
|
||||
|
||||
assertNotNull(result);
|
||||
assertEquals(WorkflowDefinitionStatusEnum.DRAFT, result.getStatus());
|
||||
assertTrue(result.getEnabled());
|
||||
verify(workflowDefinitionRepository).existsByCodeAndDeletedFalse(dto.getCode());
|
||||
verify(workflowDefinitionRepository).save(any(WorkflowDefinition.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
void create_CodeExists_ThrowsException() {
|
||||
when(workflowDefinitionRepository.existsByCodeAndDeletedFalse(anyString())).thenReturn(true);
|
||||
|
||||
BusinessException exception = assertThrows(BusinessException.class,
|
||||
() -> workflowDefinitionService.create(dto));
|
||||
assertEquals(ResponseCode.WORKFLOW_CODE_EXISTS, exception.getErrorCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
void publish_Success() {
|
||||
entity.setStatus(WorkflowDefinitionStatusEnum.DRAFT);
|
||||
when(workflowDefinitionRepository.findById(anyLong())).thenReturn(Optional.of(entity));
|
||||
when(workflowDefinitionRepository.save(any(WorkflowDefinition.class))).thenReturn(entity);
|
||||
|
||||
WorkflowDefinitionDTO result = workflowDefinitionService.publish(1L);
|
||||
|
||||
assertNotNull(result);
|
||||
assertEquals(WorkflowDefinitionStatusEnum.PUBLISHED, result.getStatus());
|
||||
verify(workflowDefinitionRepository).findById(1L);
|
||||
verify(workflowDefinitionRepository).save(any(WorkflowDefinition.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
void publish_NotDraft_ThrowsException() {
|
||||
entity.setStatus(WorkflowDefinitionStatusEnum.PUBLISHED);
|
||||
when(workflowDefinitionRepository.findById(anyLong())).thenReturn(Optional.of(entity));
|
||||
|
||||
BusinessException exception = assertThrows(BusinessException.class,
|
||||
() -> workflowDefinitionService.publish(1L));
|
||||
assertEquals(ResponseCode.WORKFLOW_NOT_DRAFT, exception.getErrorCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
void disable_Success() {
|
||||
entity.setStatus(WorkflowDefinitionStatusEnum.PUBLISHED);
|
||||
when(workflowDefinitionRepository.findById(anyLong())).thenReturn(Optional.of(entity));
|
||||
when(workflowDefinitionRepository.save(any(WorkflowDefinition.class))).thenReturn(entity);
|
||||
|
||||
WorkflowDefinitionDTO result = workflowDefinitionService.disable(1L);
|
||||
|
||||
assertNotNull(result);
|
||||
assertEquals(WorkflowDefinitionStatusEnum.DISABLED, result.getStatus());
|
||||
verify(workflowDefinitionRepository).findById(1L);
|
||||
verify(workflowDefinitionRepository).save(any(WorkflowDefinition.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
void enable_Success() {
|
||||
entity.setStatus(WorkflowDefinitionStatusEnum.DISABLED);
|
||||
when(workflowDefinitionRepository.findById(anyLong())).thenReturn(Optional.of(entity));
|
||||
when(workflowDefinitionRepository.save(any(WorkflowDefinition.class))).thenReturn(entity);
|
||||
|
||||
WorkflowDefinitionDTO result = workflowDefinitionService.enable(1L);
|
||||
|
||||
assertNotNull(result);
|
||||
assertEquals(WorkflowDefinitionStatusEnum.PUBLISHED, result.getStatus());
|
||||
verify(workflowDefinitionRepository).findById(1L);
|
||||
verify(workflowDefinitionRepository).save(any(WorkflowDefinition.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
void createNewVersion_Success() {
|
||||
when(workflowDefinitionRepository.findById(anyLong())).thenReturn(Optional.of(entity));
|
||||
when(workflowDefinitionRepository.findLatestVersionByCode(anyString())).thenReturn(1);
|
||||
when(workflowDefinitionRepository.save(any(WorkflowDefinition.class))).thenReturn(entity);
|
||||
|
||||
WorkflowDefinitionDTO result = workflowDefinitionService.createNewVersion(1L);
|
||||
|
||||
assertNotNull(result);
|
||||
assertEquals(WorkflowDefinitionStatusEnum.DRAFT, result.getStatus());
|
||||
assertTrue(result.getEnabled());
|
||||
verify(workflowDefinitionRepository).findById(1L);
|
||||
verify(workflowDefinitionRepository).findLatestVersionByCode(entity.getCode());
|
||||
verify(workflowDefinitionRepository).save(any(WorkflowDefinition.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
void findAllVersions_Success() {
|
||||
when(workflowDefinitionRepository.findAllVersionsByCode(anyString()))
|
||||
.thenReturn(Arrays.asList(entity));
|
||||
|
||||
var results = workflowDefinitionService.findAllVersions("TEST-WF");
|
||||
|
||||
assertNotNull(results);
|
||||
assertFalse(results.isEmpty());
|
||||
assertEquals(1, results.size());
|
||||
verify(workflowDefinitionRepository).findAllVersionsByCode("TEST-WF");
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user