ScriptExecutionServiceTests: - 脚本执行返回结果(简单+变量读取) - 沙箱拦截(File/Reflection 禁用 API 抛异常) - 草稿可测(ExecuteTestAsync 跳过 Published) - 状态守卫(Draft/Disabled 拒绝正式执行) - 执行日志写入(success/timeout/failed) - 业务异常冒泡不包裹 - 编译缓存(同代码两次执行) - Logger 输出收集 - ExecuteByNameAsync 按名执行 ScriptCommandHandlerTests: - Create 唯一名校验 + 默认超时 - Update Disabled 拒绝 + Published 自增版本 - Delete Published 拒绝 + Draft 软删除 - Publish 状态+版本 BuildFlowButtonActionTests(回归): - ExecuteAsync_RunFunctionAction 通过 IScriptExecutionService 执行脚本 - ExecuteAsync_DraftButton 状态守卫 Task T9 of scripting module refactor (final)
29 lines
1.1 KiB
C#
29 lines
1.1 KiB
C#
using BuildFlow.Shared.Domain.Common;
|
||
using Microsoft.EntityFrameworkCore;
|
||
using Scripting.Infrastructure.Persistence;
|
||
|
||
namespace BuildFlow.Scripting.Tests;
|
||
|
||
/// <summary>
|
||
/// InMemory ScriptingDbContext 工厂(镜像 Workflow.Tests.TestDbFactory)。
|
||
/// 传入测试用 ICurrentUserContext,让 ScriptingDbContext.OnConfiguring 注册 AuditInterceptor,
|
||
/// 自动填充审计字段(CreatedBy/UpdatedBy/OperatorIP 等),与生产行为一致。
|
||
/// </summary>
|
||
public static class ScriptingTestDbFactory
|
||
{
|
||
private sealed class TestCurrentUserContext : ICurrentUserContext
|
||
{
|
||
public string UserId => "test-user";
|
||
public string IPAddress => "127.0.0.1";
|
||
}
|
||
|
||
public static ScriptingDbContext Create(ICurrentUserContext? currentUser = null)
|
||
{
|
||
var options = new DbContextOptionsBuilder<ScriptingDbContext>()
|
||
.UseInMemoryDatabase($"scripting-test-{Guid.NewGuid()}")
|
||
.Options;
|
||
// 用 2 参构造激活 AuditInterceptor,保证 ScriptExecutionLog 等实体的审计字段被自动填充
|
||
return new ScriptingDbContext(options, currentUser ?? new TestCurrentUserContext());
|
||
}
|
||
}
|