删除(workflow 模块): - Application/BuildFlow/CustomFunctions/ 全目录(Commands/Handlers/Queries/DTOs/Services) - Domain/Entities/CustomFunction.cs + CustomFunctionExecutionLog.cs - Domain/Enums/CustomFunctionType.cs + CustomFunctionExecutionStatus.cs - Infrastructure/Configurations/CustomFunction*Configuration.cs - Host/Endpoints/Workflow/BuildFlow/CustomFunctions/ 全目录(5 端点+5 请求) - Host/Services/Integration/HttpFunctionExecutor.cs + IHttpFunctionExecutor.cs(HTTP 函数不做,spec §11) - WorkflowDbContext 移除 CustomFunctions/CustomFunctionExecutionLogs DbSet - WorkflowApplicationModule 移除 ICustomFunctionExecutionService 注册 迁移: - SeedData 权限码 buildflow:function:* → scripts.* (8 个) - SeedData 菜单 buildflow.functions → scripts(顶级模块) - 新增空迁移 RemoveCustomFunctionFromWorkflowModel(仅更新 ModelSnapshot) 测试清理: - 删除 CustomFunctionTests.cs + BuildFlowApplicationTests.cs CustomFunction 用例 - BuildFlowButtonActionTests.cs 删除 7 个已 skip 的执行器测试(T9 重写) - BuildFlowEntrySeedTests / PermissionRegistration 断言对齐新种子 Task T7 of scripting module refactor
111 lines
3.8 KiB
C#
111 lines
3.8 KiB
C#
using FluentAssertions;
|
||
using BuildFlow.Shared.Domain.Common;
|
||
using Microsoft.EntityFrameworkCore;
|
||
using Workflow.Application.BuildFlow.Buttons.Commands;
|
||
using Workflow.Application.BuildFlow.Buttons.Handlers;
|
||
using Workflow.Domain.Entities;
|
||
using Workflow.Domain.Enums;
|
||
using Xunit;
|
||
|
||
namespace BuildFlow.Workflow.Tests.BuildFlow;
|
||
|
||
/// <summary>
|
||
/// 按钮动作链测试,约束按钮配置驱动后端动作执行,而不是前端写死行为。
|
||
/// </summary>
|
||
public class BuildFlowButtonActionTests
|
||
{
|
||
[Fact]
|
||
public async Task CreateButtonDefinition_PersistsActionMetadata()
|
||
{
|
||
await using var db = TestDbFactory.Create();
|
||
var handler = new CreateBuildFlowButtonDefinitionCommandHandler(db);
|
||
|
||
var button = await handler.Handle(
|
||
new CreateBuildFlowButtonDefinitionCommand(
|
||
null,
|
||
null,
|
||
null,
|
||
null,
|
||
"submit",
|
||
"提交",
|
||
"send",
|
||
BuildFlowButtonPlacement.FormToolbar,
|
||
"form:submit",
|
||
null,
|
||
null,
|
||
"""{"title":"确认提交?"}""",
|
||
null,
|
||
"""[]""",
|
||
null,
|
||
10),
|
||
CancellationToken.None);
|
||
|
||
button.Code.Should().Be("submit");
|
||
button.PermissionCode.Should().Be("form:submit");
|
||
button.Status.Should().Be(BuildFlowMetadataStatus.Draft);
|
||
}
|
||
|
||
[Fact]
|
||
public async Task PublishButtonDefinition_ShouldMakeButtonExecutableByRuntime()
|
||
{
|
||
await using var db = TestDbFactory.Create();
|
||
var button = CreateButton();
|
||
button.Status = BuildFlowMetadataStatus.Draft;
|
||
db.BuildFlowButtons.Add(button);
|
||
await db.SaveChangesAsync();
|
||
|
||
var handler = new PublishBuildFlowButtonDefinitionCommandHandler(db);
|
||
|
||
var result = await handler.Handle(
|
||
new PublishBuildFlowButtonDefinitionCommand(button.Id),
|
||
CancellationToken.None);
|
||
|
||
result.Status.Should().Be(BuildFlowMetadataStatus.Published);
|
||
(await db.BuildFlowButtons.FindAsync(button.Id))!.Status
|
||
.Should().Be(BuildFlowMetadataStatus.Published);
|
||
}
|
||
|
||
[Fact]
|
||
public async Task DisableButtonDefinition_ShouldRemoveButtonFromRuntime()
|
||
{
|
||
await using var db = TestDbFactory.Create();
|
||
var button = CreateButton();
|
||
db.BuildFlowButtons.Add(button);
|
||
await db.SaveChangesAsync();
|
||
|
||
var handler = new DisableBuildFlowButtonDefinitionCommandHandler(db);
|
||
|
||
var result = await handler.Handle(
|
||
new DisableBuildFlowButtonDefinitionCommand(button.Id),
|
||
CancellationToken.None);
|
||
|
||
result.Status.Should().Be(BuildFlowMetadataStatus.Disabled);
|
||
(await db.BuildFlowButtons.FindAsync(button.Id))!.Status
|
||
.Should().Be(BuildFlowMetadataStatus.Disabled);
|
||
}
|
||
|
||
// 注:原 7 个 BuildFlowButtonActionExecutor 执行器用例(runFunction/submitForm/权限校验等)已删除。
|
||
// T6 已将执行器改造为依赖 IScriptExecutionService + ScriptingDbContext,旧用例基于已删除的
|
||
// CustomFunctionExecutionService/CustomFunctionCommandHandler 链路,无法编译。T9 将基于新的脚本执行路径重写。
|
||
|
||
private static BuildFlowButtonDefinition CreateButton()
|
||
=> new()
|
||
{
|
||
Id = Guid.NewGuid(),
|
||
Code = "submit-and-run",
|
||
Label = "提交并计算",
|
||
Placement = BuildFlowButtonPlacement.FormToolbar,
|
||
Status = BuildFlowMetadataStatus.Published,
|
||
ActionsJson = """
|
||
[
|
||
{
|
||
"type": "runFunction",
|
||
"target": "00000000-0000-0000-0000-000000000001",
|
||
"params": { "amount": "$input.amount" },
|
||
"runPolicy": "stopOnFailure"
|
||
}
|
||
]
|
||
""",
|
||
};
|
||
}
|