shoc-backend/SeaHavenIndustries.Tests/WorkOrderAuditServiceTests.cs
2026-07-02 09:19:28 -03:00

55 lines
1.9 KiB
C#

using Data.SeaHavenIndustries;
using Data.SeaHavenIndustries.Enums;
using Microsoft.EntityFrameworkCore;
using SeaHaven.Services.Implementation;
using SeaHaven.Services.Interfaces;
namespace SeaHavenIndustries.Tests;
public class WorkOrderAuditServiceTests
{
private static ApplicationDbContext CreateContext()
{
var options = new DbContextOptionsBuilder<ApplicationDbContext>()
.UseInMemoryDatabase(Guid.NewGuid().ToString())
.Options;
return new ApplicationDbContext(options);
}
[Fact]
public async Task LogStatusChanged_CreatesSingleAuditWithManualEventType()
{
await using var context = CreateContext();
context.workOrders.Add(new WorkOrder { Id = 1, Status = "Open" });
await context.SaveChangesAsync();
var locks = new WorkOrderFieldLockService(context);
var audit = new WorkOrderAuditService(context, locks);
await audit.LogStatusChangedAsync(1, "Open", "In Progress", "user-1");
var logs = await context.WorkOrderAuditLogs.ToListAsync();
Assert.Single(logs);
Assert.Equal("StatusChanged", logs[0].Action);
Assert.Equal("Manual", logs[0].EventType);
Assert.Equal("Dispatcher", logs[0].ActorType);
Assert.Equal("LifecycleStatus", logs[0].FieldName);
}
[Fact]
public async Task LogStatusChanged_CreatesFieldLock()
{
await using var context = CreateContext();
context.workOrders.Add(new WorkOrder { Id = 2, Status = "Open" });
await context.SaveChangesAsync();
var locks = new WorkOrderFieldLockService(context);
var audit = new WorkOrderAuditService(context, locks);
await audit.LogStatusChangedAsync(2, "Open", "Scheduled", "user-1");
var fieldLocks = await context.WorkOrderFieldLocks.ToListAsync();
Assert.Single(fieldLocks);
Assert.Equal("LifecycleStatus", fieldLocks[0].FieldName);
}
}