fix: 防止定时任务引用失效工作流
- 保存任务时校验工作流权限与必填参数 - 删除工作流前检查并重新确认定时任务引用
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
package tech.easyflow.admin.controller.job;
|
||||
|
||||
import com.easyagents.flow.core.chain.Parameter;
|
||||
import org.mockito.MockedStatic;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.Test;
|
||||
import tech.easyflow.ai.easyagentsflow.service.WorkflowRunningParameterResolver;
|
||||
import tech.easyflow.ai.entity.Workflow;
|
||||
import tech.easyflow.ai.service.WorkflowService;
|
||||
import tech.easyflow.common.constant.enums.EnumJobType;
|
||||
import tech.easyflow.common.entity.LoginAccount;
|
||||
import tech.easyflow.common.satoken.util.SaTokenUtil;
|
||||
import tech.easyflow.common.web.exceptions.BusinessException;
|
||||
import tech.easyflow.job.entity.SysJob;
|
||||
import tech.easyflow.job.job.JobConstant;
|
||||
import tech.easyflow.job.service.SysJobService;
|
||||
import tech.easyflow.system.service.ResourceAccessService;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.mockStatic;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
/**
|
||||
* {@link SysJobController} 工作流任务参数校验测试。
|
||||
*/
|
||||
public class SysJobControllerTest {
|
||||
|
||||
/**
|
||||
* 验证缺少工作流必填参数时拒绝保存定时任务。
|
||||
*/
|
||||
@Test
|
||||
public void shouldRejectWorkflowJobWhenRequiredParameterIsMissing() {
|
||||
BigInteger workflowId = BigInteger.valueOf(101);
|
||||
SysJobService jobService = mock(SysJobService.class);
|
||||
WorkflowService workflowService = mock(WorkflowService.class);
|
||||
ResourceAccessService resourceAccessService = mock(ResourceAccessService.class);
|
||||
WorkflowRunningParameterResolver parameterResolver =
|
||||
mock(WorkflowRunningParameterResolver.class);
|
||||
Workflow workflow = new Workflow();
|
||||
workflow.setId(workflowId);
|
||||
workflow.setContent("{}");
|
||||
when(workflowService.getById(workflowId)).thenReturn(workflow);
|
||||
Parameter requiredParameter = mock(Parameter.class);
|
||||
when(requiredParameter.isRequired()).thenReturn(true);
|
||||
when(requiredParameter.getName()).thenReturn("user_input");
|
||||
when(requiredParameter.getFormLabel()).thenReturn("用户问题");
|
||||
when(parameterResolver.resolveStartParameters(workflow.getContent()))
|
||||
.thenReturn(List.of(requiredParameter));
|
||||
SysJobController controller = new SysJobController(
|
||||
jobService,
|
||||
workflowService,
|
||||
resourceAccessService,
|
||||
parameterResolver
|
||||
);
|
||||
SysJob job = new SysJob();
|
||||
job.setJobType(EnumJobType.TINY_FLOW.getCode());
|
||||
job.setJobParams(Map.of(
|
||||
JobConstant.WORKFLOW_KEY, workflowId.toString(),
|
||||
JobConstant.WORKFLOW_PARAMS_KEY, Map.of()
|
||||
));
|
||||
LoginAccount account = new LoginAccount();
|
||||
account.setId(BigInteger.ONE);
|
||||
|
||||
try (MockedStatic<SaTokenUtil> saToken = mockStatic(SaTokenUtil.class)) {
|
||||
saToken.when(SaTokenUtil::getLoginAccount).thenReturn(account);
|
||||
|
||||
BusinessException exception = Assert.expectThrows(
|
||||
BusinessException.class,
|
||||
() -> controller.onSaveOrUpdateBefore(job, true)
|
||||
);
|
||||
|
||||
Assert.assertTrue(exception.getMessage().contains("用户问题"));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user