namespace OrpaonVision.Core.Testing;
///
/// 测试数据工厂。
///
public static class TestDataFactory
{
///
/// 创建测试用户。
///
/// 用户ID。
/// 用户名。
/// 显示名称。
/// 测试用户。
public static Security.Contracts.UserDetailDto CreateUser(
Guid id = default,
string userName = "testuser",
string displayName = "Test User")
{
return new Security.Contracts.UserDetailDto
{
UserId = id == default ? Guid.NewGuid() : id,
UserName = userName,
DisplayName = displayName,
Email = $"{userName}@example.com",
Status = "Active",
IsActive = true,
Roles = ["Operator"],
Permissions = ["production.view", "training.view"],
CreatedAtUtc = DateTime.UtcNow.AddDays(-30),
LastLoginAtUtc = DateTime.UtcNow.AddHours(-2)
};
}
///
/// 创建测试产品会话。
///
/// 会话ID。
/// 测试产品会话。
public static Production.Contracts.ProductSessionDetailDto CreateProductSession(
Guid id = default)
{
return new Production.Contracts.ProductSessionDetailDto
{
SessionId = id == default ? Guid.NewGuid() : id,
ProductSerialNumber = "PSN-001",
ProductTypeId = Guid.NewGuid(),
ProductTypeCode = "PT-A100",
ProductTypeName = "变频器 A100",
WorkstationId = Guid.NewGuid(),
WorkstationName = "Station-01",
OperatorName = "张三",
Shift = "白班",
StartedAtUtc = DateTime.UtcNow.AddMinutes(-30),
EndedAtUtc = DateTime.UtcNow.AddMinutes(-5),
TotalDurationSeconds = 1500,
FinalResult = "OK",
ModelVersion = "v1.0.0",
RuleVersion = "v1.0.0",
LayerResults = [],
AbnormalRecords = [],
KeyScreenshots = []
};
}
///
/// 创建测试训练任务。
///
/// 任务ID。
/// 任务名称。
/// 状态。
/// 测试训练任务。
public static Training.Contracts.TrainingJobDetailDto CreateTrainingJob(
Guid id = default,
string name = "Test Training Job",
string status = "Running")
{
return new Training.Contracts.TrainingJobDetailDto
{
TrainingJobId = id == default ? Guid.NewGuid() : id,
Name = name,
Description = "Test training job description",
DatasetVersionId = Guid.NewGuid(),
DatasetVersionNo = "Dataset-v1.0",
ProductTypeId = Guid.NewGuid(),
ProductTypeCode = "PT-A100",
AlgorithmType = "YOLOv8",
TrainingParametersJson = "{}",
Status = status,
ProgressPercentage = status == "Completed" ? 100 : 50,
CurrentEpoch = status == "Completed" ? 100 : 50,
TotalEpochs = 100,
CurrentLoss = status == "Completed" ? 0.1m : 0.5m,
BestLoss = 0.1m,
EstimatedRemainingSeconds = status == "Completed" ? 0 : 1800,
StartedAtUtc = DateTime.UtcNow.AddHours(-2),
CompletedAtUtc = status == "Completed" ? DateTime.UtcNow.AddMinutes(-30) : null,
CreatedBy = "testuser",
CreatedAtUtc = DateTime.UtcNow.AddDays(-1),
ErrorMessage = string.Empty,
OutputPath = "outputs/train-001",
LogPath = "logs/train-001.log"
};
}
///
/// 创建测试审计日志。
///
/// 日志ID。
/// 操作类型。
/// 模块。
/// 测试审计日志。
public static Audit.Contracts.AuditLogDetailDto CreateAuditLog(
Guid id = default,
string action = "CREATE",
string module = "UserManagement")
{
return new Audit.Contracts.AuditLogDetailDto
{
AuditLogId = id == default ? Guid.NewGuid() : id,
ActionType = action,
Module = module,
Description = "测试审计日志",
OperatorUserName = "testuser",
OperatorIpAddress = "127.0.0.1",
OperatorUserAgent = "UnitTest",
TargetResourceType = "User",
TargetResourceId = Guid.NewGuid().ToString(),
Result = "Success",
RiskLevel = "Low",
DurationMs = 150,
OperatedAtUtc = DateTime.UtcNow.AddMinutes(-10),
RequestParametersJson = "{}",
ResponseDataJson = "{}",
ErrorMessage = string.Empty,
ExceptionStackTrace = string.Empty,
SessionId = Guid.NewGuid().ToString("N"),
TraceId = Guid.NewGuid().ToString("N"),
BusinessContextJson = "{}"
};
}
///
/// 创建测试相机帧。
///
/// 帧ID。
/// 宽度。
/// 高度。
/// 测试相机帧。
public static object CreateCameraFrame(
Guid id = default,
int width = 1920,
int height = 1080)
{
return new
{
FrameId = id == default ? Guid.NewGuid() : id,
CameraId = "Camera-01",
TimestampUtc = DateTime.UtcNow,
Width = width,
Height = height,
Format = "RGB",
FrameNumber = 12345
};
}
///
/// 创建测试推理结果。
///
/// 结果ID。
/// 置信度。
/// 测试推理结果。
public static object CreateInferenceResult(
Guid id = default,
double confidence = 0.95)
{
return new
{
ResultId = id == default ? Guid.NewGuid() : id,
ModelVersion = "v1.0.0",
ModelName = "YOLOv8",
InferenceTimeMs = 150,
Confidence = confidence,
TimestampUtc = DateTime.UtcNow
};
}
}