mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-09-30 08:23:12 +00:00
test(work-orders): fix sync/webhook/recon fixtures for AccountId stamp [SH-221]
Seed resolvable Customer accounts and mock account resolution so create-path CI tests match fail-closed account scope. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
1edcf479ae
commit
bca2e0d50d
3 changed files with 19 additions and 7 deletions
|
|
@ -55,7 +55,7 @@ public class SyncServiceBehaviorTests
|
||||||
var accountResolver = new Mock<IWorkOrderAccountResolver>();
|
var accountResolver = new Mock<IWorkOrderAccountResolver>();
|
||||||
accountResolver
|
accountResolver
|
||||||
.Setup(r => r.TryResolveFromCustomerAsync(It.IsAny<string?>(), It.IsAny<CancellationToken>()))
|
.Setup(r => r.TryResolveFromCustomerAsync(It.IsAny<string?>(), It.IsAny<CancellationToken>()))
|
||||||
.ReturnsAsync((int?)null);
|
.ReturnsAsync(1);
|
||||||
var service = new SyncService(data.Object, external.Object, accountResolver.Object);
|
var service = new SyncService(data.Object, external.Object, accountResolver.Object);
|
||||||
var result = await service.SyncWorkOrdersAsync(CancellationToken.None);
|
var result = await service.SyncWorkOrdersAsync(CancellationToken.None);
|
||||||
|
|
||||||
|
|
@ -65,7 +65,7 @@ public class SyncServiceBehaviorTests
|
||||||
Assert.Equal(3, result.LocationsCreated);
|
Assert.Equal(3, result.LocationsCreated);
|
||||||
Assert.Equal("Updated Title", existingWO.WorkerOrderTitle);
|
Assert.Equal("Updated Title", existingWO.WorkerOrderTitle);
|
||||||
Assert.Equal("In Progress", existingWO.Status);
|
Assert.Equal("In Progress", existingWO.Status);
|
||||||
data.Verify(d => d.EnqueueWorkOrder(It.Is<WorkOrder>(w => w.ExternalWorkOrderId == "EXT-2")), Times.Once);
|
data.Verify(d => d.EnqueueWorkOrder(It.Is<WorkOrder>(w => w.ExternalWorkOrderId == "EXT-2" && w.AccountId == 1)), Times.Once);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
@ -81,17 +81,18 @@ public class SyncServiceBehaviorTests
|
||||||
|
|
||||||
var items = new List<Dictionary<string, string?>>
|
var items = new List<Dictionary<string, string?>>
|
||||||
{
|
{
|
||||||
new() { ["work_order_id"] = "W1", ["wo_status"] = "completed", ["severity"] = "2" }
|
new() { ["work_order_id"] = "W1", ["wo_status"] = "completed", ["severity"] = "2", ["customer"] = "Acme" }
|
||||||
};
|
};
|
||||||
external.Setup(e => e.ScanWorkOrdersAsync(It.IsAny<CancellationToken>())).Returns(items.ToAsyncEnumerable());
|
external.Setup(e => e.ScanWorkOrdersAsync(It.IsAny<CancellationToken>())).Returns(items.ToAsyncEnumerable());
|
||||||
|
|
||||||
var accountResolver = new Mock<IWorkOrderAccountResolver>();
|
var accountResolver = new Mock<IWorkOrderAccountResolver>();
|
||||||
accountResolver
|
accountResolver
|
||||||
.Setup(r => r.TryResolveFromCustomerAsync(It.IsAny<string?>(), It.IsAny<CancellationToken>()))
|
.Setup(r => r.TryResolveFromCustomerAsync("Acme", It.IsAny<CancellationToken>()))
|
||||||
.ReturnsAsync((int?)null);
|
.ReturnsAsync(42);
|
||||||
await new SyncService(data.Object, external.Object, accountResolver.Object).SyncWorkOrdersAsync(CancellationToken.None);
|
await new SyncService(data.Object, external.Object, accountResolver.Object).SyncWorkOrdersAsync(CancellationToken.None);
|
||||||
|
|
||||||
data.Verify(d => d.EnqueueWorkOrder(It.Is<WorkOrder>(w => w.Status == "Done" && w.Priority == "Sev 2" && w.Severity == "2")), Times.Once);
|
data.Verify(d => d.EnqueueWorkOrder(It.Is<WorkOrder>(w =>
|
||||||
|
w.Status == "Done" && w.Priority == "Sev 2" && w.Severity == "2" && w.AccountId == 42)), Times.Once);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
|
||||||
|
|
@ -204,6 +204,8 @@ public sealed class WorkOrderReconciliationTests
|
||||||
.UseInMemoryDatabase($"convergence-{Guid.NewGuid()}")
|
.UseInMemoryDatabase($"convergence-{Guid.NewGuid()}")
|
||||||
.Options;
|
.Options;
|
||||||
await using var context = new ApplicationDbContext(options);
|
await using var context = new ApplicationDbContext(options);
|
||||||
|
context.Accounts.Add(new Accounts { Id = 1, Name = "Recon Customer", IsDeleted = false });
|
||||||
|
await context.SaveChangesAsync();
|
||||||
var data = new WorkOrderWebhookDataService(context);
|
var data = new WorkOrderWebhookDataService(context);
|
||||||
var time = DateTimeOffset.Parse("2026-07-24T12:00:00Z");
|
var time = DateTimeOffset.Parse("2026-07-24T12:00:00Z");
|
||||||
|
|
||||||
|
|
@ -268,7 +270,8 @@ public sealed class WorkOrderReconciliationTests
|
||||||
WorkerOrderNumber = "123",
|
WorkerOrderNumber = "123",
|
||||||
Source = "procurement",
|
Source = "procurement",
|
||||||
IsStateEvent = true,
|
IsStateEvent = true,
|
||||||
Title = title
|
Title = title,
|
||||||
|
Customer = "Recon Customer"
|
||||||
};
|
};
|
||||||
|
|
||||||
private sealed class MockClient : IProcurementWorkOrderClient
|
private sealed class MockClient : IProcurementWorkOrderClient
|
||||||
|
|
|
||||||
|
|
@ -252,6 +252,9 @@ public sealed class WorkOrderWebhookDataServiceTests
|
||||||
.Options;
|
.Options;
|
||||||
await using var context = new CountingDbContext(options);
|
await using var context = new CountingDbContext(options);
|
||||||
await context.Database.EnsureCreatedAsync();
|
await context.Database.EnsureCreatedAsync();
|
||||||
|
context.Accounts.Add(new Accounts { Id = 1, Name = "Webhook Customer", IsDeleted = false });
|
||||||
|
await context.SaveChangesAsync();
|
||||||
|
context.ResetSaveCount();
|
||||||
var data = new WorkOrderWebhookDataService(context);
|
var data = new WorkOrderWebhookDataService(context);
|
||||||
|
|
||||||
var comment = Mutation(
|
var comment = Mutation(
|
||||||
|
|
@ -309,6 +312,8 @@ public sealed class WorkOrderWebhookDataServiceTests
|
||||||
.Options;
|
.Options;
|
||||||
await using var context = new ApplicationDbContext(options);
|
await using var context = new ApplicationDbContext(options);
|
||||||
await context.Database.EnsureCreatedAsync();
|
await context.Database.EnsureCreatedAsync();
|
||||||
|
context.Accounts.Add(new Accounts { Id = 1, Name = "Webhook Customer", IsDeleted = false });
|
||||||
|
await context.SaveChangesAsync();
|
||||||
var data = new WorkOrderWebhookDataService(context);
|
var data = new WorkOrderWebhookDataService(context);
|
||||||
var mutation = Mutation(
|
var mutation = Mutation(
|
||||||
"cancel-delivery",
|
"cancel-delivery",
|
||||||
|
|
@ -377,6 +382,7 @@ public sealed class WorkOrderWebhookDataServiceTests
|
||||||
Source = "procurement",
|
Source = "procurement",
|
||||||
IsStateEvent = eventType != "work_order.comment_added",
|
IsStateEvent = eventType != "work_order.comment_added",
|
||||||
Title = title,
|
Title = title,
|
||||||
|
Customer = "Webhook Customer",
|
||||||
Status = "Open",
|
Status = "Open",
|
||||||
CommentId = commentId,
|
CommentId = commentId,
|
||||||
CommentText = commentId == null ? null : "A comment"
|
CommentText = commentId == null ? null : "A comment"
|
||||||
|
|
@ -391,6 +397,8 @@ public sealed class WorkOrderWebhookDataServiceTests
|
||||||
|
|
||||||
public int SaveCount { get; private set; }
|
public int SaveCount { get; private set; }
|
||||||
|
|
||||||
|
public void ResetSaveCount() => SaveCount = 0;
|
||||||
|
|
||||||
public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = default)
|
public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
SaveCount++;
|
SaveCount++;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue