74 lines
2.8 KiB
C#
74 lines
2.8 KiB
C#
using FluentAssertions;
|
|
using Workflow.Application.BuildFlow.CustomFunctions.Commands;
|
|
using Workflow.Application.BuildFlow.CustomFunctions.Handlers;
|
|
using Workflow.Application.BuildFlow.CustomFunctions.Services;
|
|
using Workflow.Domain.Enums;
|
|
using Xunit;
|
|
|
|
namespace BuildFlow.Workflow.Tests.BuildFlow;
|
|
|
|
/// <summary>
|
|
/// 自定义函数测试,约束函数必须发布后才能被运行,禁用后立即阻断。
|
|
/// </summary>
|
|
public class CustomFunctionTests
|
|
{
|
|
[Fact]
|
|
public async Task ExecuteAsync_PublishedFunction_ReturnsScriptResult()
|
|
{
|
|
await using var db = TestDbFactory.Create();
|
|
var createHandler = new CreateCustomFunctionCommandHandler(db);
|
|
var publishHandler = new PublishCustomFunctionCommandHandler(db);
|
|
var executor = new CustomFunctionExecutionService(db);
|
|
|
|
var function = await createHandler.Handle(
|
|
new CreateCustomFunctionCommand(
|
|
"amount-level",
|
|
"金额分级",
|
|
"按金额输出审批等级",
|
|
"((System.Text.Json.JsonElement)Variables[\"amount\"]).GetDecimal() > 1000 ? \"high\" : \"normal\"",
|
|
"""{"type":"object"}""",
|
|
"""{"type":"string"}""",
|
|
5000),
|
|
CancellationToken.None);
|
|
|
|
await publishHandler.Handle(new PublishCustomFunctionCommand(function.Id), CancellationToken.None);
|
|
|
|
var result = await executor.ExecuteAsync(
|
|
function.Id,
|
|
"""{"amount":1200}""",
|
|
CancellationToken.None);
|
|
|
|
result.Status.Should().Be(CustomFunctionExecutionStatus.Success);
|
|
result.ResultJson.Should().Be("\"high\"");
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ExecuteAsync_DisabledFunction_ThrowsBusinessException()
|
|
{
|
|
await using var db = TestDbFactory.Create();
|
|
var createHandler = new CreateCustomFunctionCommandHandler(db);
|
|
var publishHandler = new PublishCustomFunctionCommandHandler(db);
|
|
var disableHandler = new DisableCustomFunctionCommandHandler(db);
|
|
var executor = new CustomFunctionExecutionService(db);
|
|
|
|
var function = await createHandler.Handle(
|
|
new CreateCustomFunctionCommand(
|
|
"disabled-func",
|
|
"禁用函数",
|
|
null,
|
|
""""ok"""",
|
|
null,
|
|
null,
|
|
5000),
|
|
CancellationToken.None);
|
|
|
|
await publishHandler.Handle(new PublishCustomFunctionCommand(function.Id), CancellationToken.None);
|
|
await disableHandler.Handle(new DisableCustomFunctionCommand(function.Id), CancellationToken.None);
|
|
|
|
var act = () => executor.ExecuteAsync(function.Id, "{}", CancellationToken.None);
|
|
|
|
await act.Should().ThrowAsync<BusinessException>()
|
|
.WithMessage("*已禁用*");
|
|
}
|
|
}
|