docs(tests): fix CommentChecker findings across tests/ — 13,392 → 0 (repo-wide scan clean)

Comment/XML-doc changes only:
- add summaries to ~10k test methods, fixtures, fakes and helpers
  (+ <param> on theories, <returns> on async Task methods,
  <inheritdoc/> on interface implementations the checker can resolve)
- strip ~2.6k project-tracking references (WP*, P*-*, row-NN, Task N,
  #NN, Component-0NN) from comments, keeping the explanatory text;
  reword false positives in comments only
- real docs on fakes implementing BCL/library interfaces
  (IDisposable, ILogger, IOptionsMonitor, IAsyncLifetime)
- reword the last 5 src/ false positives (CWE-1236, failures-1,
  year-0001, M365)

Only non-comment edits: four one-line nested classes split across lines
so members can carry docs. Build 0 errors / 0 warnings.
This commit is contained in:
Joseph Doherty
2026-10-07 15:05:49 -04:00
parent 0ffd4bdbea
commit 513fa1aa16
998 changed files with 17896 additions and 2395 deletions
@@ -11,13 +11,13 @@ using ZB.MOM.WW.ScadaBridge.TestSupport;
namespace ZB.MOM.WW.ScadaBridge.SiteRuntime.Tests.Scripts;
/// <summary>
/// Notification Outbox (Task 19): tests for the async <c>Notify.Send</c> /
/// Notification Outbox: tests for the async <c>Notify.Send</c> /
/// <c>Notify.Status</c> script API.
///
/// In the outbox design <c>Notify.To("list").Send(...)</c> no longer delivers email
/// inline — it generates a stable <c>NotificationId</c>, enqueues a
/// <see cref="StoreAndForwardCategory.Notification"/> message into the site
/// Store-and-Forward Engine (which Task 18 retargets to forward to central), and
/// Store-and-Forward Engine (which forwards to central), and
/// returns the <c>NotificationId</c> immediately. <c>Notify.Status(id)</c> queries
/// central for delivery status, reporting the site-local <c>Forwarding</c> state
/// while the notification is still buffered at the site.
@@ -28,6 +28,7 @@ public class NotifyHelperTests : TestKit, IAsyncLifetime, IDisposable
private readonly StoreAndForwardStorage _storage;
private readonly StoreAndForwardService _saf;
/// <summary>Initializes the test with an in-memory store-and-forward storage and service.</summary>
public NotifyHelperTests()
{
// LocalDb has no in-memory mode, so the store runs over a real temp file.
@@ -43,10 +44,15 @@ public class NotifyHelperTests : TestKit, IAsyncLifetime, IDisposable
_saf = new StoreAndForwardService(_storage, options, NullLogger<StoreAndForwardService>.Instance);
}
/// <summary>Initializes the storage before the tests run.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
public async Task InitializeAsync() => await _storage.InitializeAsync();
/// <summary>Does nothing; storage is released in <c>Dispose</c>.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
public Task DisposeAsync() => Task.CompletedTask;
/// <inheritdoc />
protected override void Dispose(bool disposing)
{
if (disposing)
@@ -79,6 +85,8 @@ public class NotifyHelperTests : TestKit, IAsyncLifetime, IDisposable
sourceNode: sourceNode);
}
/// <summary>Verifies that send, enqueues notification into store and forward, and returns notification id immediately.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Send_EnqueuesNotificationIntoStoreAndForward_AndReturnsNotificationIdImmediately()
{
@@ -95,6 +103,8 @@ public class NotifyHelperTests : TestKit, IAsyncLifetime, IDisposable
Assert.Equal(1, depth.GetValueOrDefault(StoreAndForwardCategory.Notification));
}
/// <summary>Verifies that send, buffered payload, carries list subject body and notification id.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Send_BufferedPayload_CarriesListSubjectBodyAndNotificationId()
{
@@ -123,6 +133,8 @@ public class NotifyHelperTests : TestKit, IAsyncLifetime, IDisposable
Assert.Equal("Plant.Pump3", payload.SourceInstanceId);
}
/// <summary>Verifies that send, when helper has source script, stamps it on the notification submit.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Send_WhenHelperHasSourceScript_StampsItOnTheNotificationSubmit()
{
@@ -140,10 +152,12 @@ public class NotifyHelperTests : TestKit, IAsyncLifetime, IDisposable
Assert.Equal("ScriptActor:MonitorSpeed", payload!.SourceScript);
}
/// <summary>Verifies that send, stamps execution id, on the notification submit payload.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Send_StampsExecutionId_OnTheNotificationSubmitPayload()
{
// Audit Log #23 (ExecutionId Task 5): Notify.Send must stamp the
// ExecutionId: Notify.Send must stamp the
// script run's ExecutionId onto the NotificationSubmit so it rides
// inside the serialized S&F payload to central, where the dispatcher
// echoes it onto the NotifyDeliver rows. This is the SAME id stamped
@@ -161,10 +175,12 @@ public class NotifyHelperTests : TestKit, IAsyncLifetime, IDisposable
Assert.Equal(executionId, payload!.OriginExecutionId);
}
/// <summary>Verifies that send, stamps parent execution id, on the notification submit payload.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Send_StampsParentExecutionId_OnTheNotificationSubmitPayload()
{
// Audit Log ParentExecutionId (Task 7): for an inbound-API-routed run,
// ParentExecutionId: for an inbound-API-routed run,
// Notify.Send must stamp the routed run's parent ExecutionId onto the
// NotificationSubmit so it rides inside the serialized S&F payload to
// central, where the dispatcher echoes it onto the NotifyDeliver rows.
@@ -182,6 +198,8 @@ public class NotifyHelperTests : TestKit, IAsyncLifetime, IDisposable
Assert.Equal(parentExecutionId, payload!.OriginParentExecutionId);
}
/// <summary>Verifies that send, non routed run, leaves origin parent execution id null.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Send_NonRoutedRun_LeavesOriginParentExecutionIdNull()
{
@@ -199,10 +217,12 @@ public class NotifyHelperTests : TestKit, IAsyncLifetime, IDisposable
Assert.Null(payload!.OriginParentExecutionId);
}
/// <summary>Verifies that send, stamps source node, on the notification submit payload.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Send_StampsSourceNode_OnTheNotificationSubmitPayload()
{
// SourceNode-stamping (Task 13): when the helper is wired with the
// SourceNode-stamping: when the helper is wired with the
// local INodeIdentityProvider's NodeName, Notify.Send must stamp it
// onto the NotificationSubmit so it rides inside the serialized S&F
// payload to central, where NotificationOutboxActor persists it on
@@ -219,6 +239,8 @@ public class NotifyHelperTests : TestKit, IAsyncLifetime, IDisposable
Assert.Equal("node-a", payload!.SourceNode);
}
/// <summary>Verifies that send, no node identity, leaves source node null.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Send_NoNodeIdentity_LeavesSourceNodeNull()
{
@@ -238,6 +260,8 @@ public class NotifyHelperTests : TestKit, IAsyncLifetime, IDisposable
Assert.Null(payload!.SourceNode);
}
/// <summary>Verifies that send, when helper has no source script, leaves source script null.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Send_WhenHelperHasNoSourceScript_LeavesSourceScriptNull()
{
@@ -252,6 +276,8 @@ public class NotifyHelperTests : TestKit, IAsyncLifetime, IDisposable
Assert.Null(payload!.SourceScript);
}
/// <summary>Verifies that status, when still buffered at site, reports forwarding.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Status_WhenStillBufferedAtSite_ReportsForwarding()
{
@@ -277,6 +303,8 @@ public class NotifyHelperTests : TestKit, IAsyncLifetime, IDisposable
Assert.Equal("Forwarding", status.Status);
}
/// <summary>Verifies that status, when central reports delivered, maps the central response.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Status_WhenCentralReportsDelivered_MapsTheCentralResponse()
{
@@ -299,6 +327,8 @@ public class NotifyHelperTests : TestKit, IAsyncLifetime, IDisposable
Assert.Equal(deliveredAt, status.DeliveredAt);
}
/// <summary>Verifies that status, when central not found and not buffered, reports unknown.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task Status_WhenCentralNotFoundAndNotBuffered_ReportsUnknown()
{
@@ -318,10 +348,12 @@ public class NotifyHelperTests : TestKit, IAsyncLifetime, IDisposable
Assert.Equal("Unknown", status.Status);
}
/// <summary>Verifies that notify send, buffers unbounded, and never invokes forwarder inline.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[Fact]
public async Task NotifySend_BuffersUnbounded_AndNeverInvokesForwarderInline()
{
// Task 13: Notify.Send must buffer with maxRetries: 0 (never park for retry
// Notify.Send must buffer with maxRetries: 0 (never park for retry
// exhaustion) and deferToSweep: true (never run the forwarder's central Ask
// inline on the scarce script thread). A central outage must return in
// milliseconds, and the row must not strand behind operator unparking.