WorkflowDomainServiceTest.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using Hotline.Caching.Interfaces;
  2. using Hotline.FlowEngine.Workflows;
  3. using Hotline.Share.Dtos.FlowEngine.Workflow;
  4. using Hotline.Share.Enums.FlowEngine;
  5. using Microsoft.AspNetCore.Http;
  6. using Shouldly;
  7. using XF.Domain.Exceptions;
  8. namespace Hotline.Tests.Domain.Workflow;
  9. public class WorkflowDomainServiceTest
  10. {
  11. private readonly IWorkflowDomainService _workflowDomainService;
  12. private readonly IWfModuleCacheManager _wfModuleCacheManager;
  13. public WorkflowDomainServiceTest(
  14. IWorkflowDomainService workflowDomainService,
  15. IWfModuleCacheManager wfModuleCacheManager)
  16. {
  17. _workflowDomainService = workflowDomainService;
  18. _wfModuleCacheManager = wfModuleCacheManager;
  19. }
  20. public async Task StartAsyncTest(string definitionModuleCode)
  21. {
  22. var wfModule = await _wfModuleCacheManager.GetWorkflowModuleAsync(definitionModuleCode, default);
  23. if (wfModule == null)
  24. throw UserFriendlyException.SameMessage("无效流程模块编码");
  25. if (wfModule.Definition is null)
  26. throw new UserFriendlyException($"{definitionModuleCode} 未配置流程模板", "未配置流程模板");
  27. var definition = wfModule.Definition;
  28. if (definition == null)
  29. throw new UserFriendlyException("无效模板编码");
  30. if (definition.Status is not EDefinitionStatus.Enable)
  31. throw new UserFriendlyException("该模板不可用");
  32. //如果发起会签需检查是否支持发起会签
  33. var startStepDefine = definition.FindStartStepDefine();
  34. var nextStep = definition.FindStepDefine(startStepDefine.NextSteps.First().Code);
  35. //StartWorkflowDto dto, string externalId,DateTime? expiredTime = null,
  36. var dto = new StartWorkflowDto
  37. {
  38. DefinitionModuleCode = definitionModuleCode,
  39. Title = "测试流程开启",
  40. NextStepCode = nextStep.Code,
  41. NextStepName = nextStep.Name,
  42. };
  43. var orderId = Ulid.NewUlid().ToString();
  44. var expiredTime = DateTime.Now;
  45. var (workflow, startStep) = await _workflowDomainService.StartAsync(dto, orderId, expiredTime, cancellationToken: default);
  46. workflow.ExternalId.ShouldBe(orderId);
  47. startStep.StepExpiredTime.ShouldBe(expiredTime);
  48. startStep.FlowAssignType.ShouldNotBe(null);
  49. startStep.Status.ShouldBe(EWorkflowStepStatus.WaitForAccept);
  50. }
  51. public async Task HandleAsyncTest(string definitionModuleCode)
  52. {
  53. }
  54. }