From bca2e0d50d3e0345b1e542e6df75b93ffe62a8fe Mon Sep 17 00:00:00 2001 From: Arthur Bassi Date: Tue, 11 Aug 2026 10:54:23 -0300 Subject: [PATCH] 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 --- .../ServiceBehaviorTests.cs | 13 +++++++------ .../WorkOrderReconciliationTests.cs | 5 ++++- SeaHavenIndustries.Tests/WorkOrderWebhookTests.cs | 8 ++++++++ 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/Api.SeaHavenIndustries.Tests/ServiceBehaviorTests.cs b/Api.SeaHavenIndustries.Tests/ServiceBehaviorTests.cs index 10333d9..dccbbc6 100644 --- a/Api.SeaHavenIndustries.Tests/ServiceBehaviorTests.cs +++ b/Api.SeaHavenIndustries.Tests/ServiceBehaviorTests.cs @@ -55,7 +55,7 @@ public class SyncServiceBehaviorTests var accountResolver = new Mock(); accountResolver .Setup(r => r.TryResolveFromCustomerAsync(It.IsAny(), It.IsAny())) - .ReturnsAsync((int?)null); + .ReturnsAsync(1); var service = new SyncService(data.Object, external.Object, accountResolver.Object); var result = await service.SyncWorkOrdersAsync(CancellationToken.None); @@ -65,7 +65,7 @@ public class SyncServiceBehaviorTests Assert.Equal(3, result.LocationsCreated); Assert.Equal("Updated Title", existingWO.WorkerOrderTitle); Assert.Equal("In Progress", existingWO.Status); - data.Verify(d => d.EnqueueWorkOrder(It.Is(w => w.ExternalWorkOrderId == "EXT-2")), Times.Once); + data.Verify(d => d.EnqueueWorkOrder(It.Is(w => w.ExternalWorkOrderId == "EXT-2" && w.AccountId == 1)), Times.Once); } [Fact] @@ -81,17 +81,18 @@ public class SyncServiceBehaviorTests var items = new List> { - 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())).Returns(items.ToAsyncEnumerable()); var accountResolver = new Mock(); accountResolver - .Setup(r => r.TryResolveFromCustomerAsync(It.IsAny(), It.IsAny())) - .ReturnsAsync((int?)null); + .Setup(r => r.TryResolveFromCustomerAsync("Acme", It.IsAny())) + .ReturnsAsync(42); await new SyncService(data.Object, external.Object, accountResolver.Object).SyncWorkOrdersAsync(CancellationToken.None); - data.Verify(d => d.EnqueueWorkOrder(It.Is(w => w.Status == "Done" && w.Priority == "Sev 2" && w.Severity == "2")), Times.Once); + data.Verify(d => d.EnqueueWorkOrder(It.Is(w => + w.Status == "Done" && w.Priority == "Sev 2" && w.Severity == "2" && w.AccountId == 42)), Times.Once); } [Fact] diff --git a/SeaHavenIndustries.Tests/WorkOrderReconciliationTests.cs b/SeaHavenIndustries.Tests/WorkOrderReconciliationTests.cs index af8da90..331ab47 100644 --- a/SeaHavenIndustries.Tests/WorkOrderReconciliationTests.cs +++ b/SeaHavenIndustries.Tests/WorkOrderReconciliationTests.cs @@ -204,6 +204,8 @@ public sealed class WorkOrderReconciliationTests .UseInMemoryDatabase($"convergence-{Guid.NewGuid()}") .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 time = DateTimeOffset.Parse("2026-07-24T12:00:00Z"); @@ -268,7 +270,8 @@ public sealed class WorkOrderReconciliationTests WorkerOrderNumber = "123", Source = "procurement", IsStateEvent = true, - Title = title + Title = title, + Customer = "Recon Customer" }; private sealed class MockClient : IProcurementWorkOrderClient diff --git a/SeaHavenIndustries.Tests/WorkOrderWebhookTests.cs b/SeaHavenIndustries.Tests/WorkOrderWebhookTests.cs index f015ca3..ba47dd8 100644 --- a/SeaHavenIndustries.Tests/WorkOrderWebhookTests.cs +++ b/SeaHavenIndustries.Tests/WorkOrderWebhookTests.cs @@ -252,6 +252,9 @@ public sealed class WorkOrderWebhookDataServiceTests .Options; await using var context = new CountingDbContext(options); 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 comment = Mutation( @@ -309,6 +312,8 @@ public sealed class WorkOrderWebhookDataServiceTests .Options; await using var context = new ApplicationDbContext(options); 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 mutation = Mutation( "cancel-delivery", @@ -377,6 +382,7 @@ public sealed class WorkOrderWebhookDataServiceTests Source = "procurement", IsStateEvent = eventType != "work_order.comment_added", Title = title, + Customer = "Webhook Customer", Status = "Open", CommentId = commentId, CommentText = commentId == null ? null : "A comment" @@ -391,6 +397,8 @@ public sealed class WorkOrderWebhookDataServiceTests public int SaveCount { get; private set; } + public void ResetSaveCount() => SaveCount = 0; + public override Task SaveChangesAsync(CancellationToken cancellationToken = default) { SaveCount++;