build-flow.api/tests/BuildFlow.Scripting.Tests/ScriptingTestDbFactory.cs
xiangning e9cc9247f2 test(scripting): 集成测试 + 按钮链回归测试
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)
2026-07-07 11:12:28 +08:00

29 lines
1.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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());
}
}