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
@@ -5,7 +5,7 @@ namespace ZB.MOM.WW.ScadaBridge.CentralUI.PlaywrightTests.Notifications;
/// <summary>
/// End-to-end coverage for the central Notification Report page's Retry / Discard
/// actions on parked notifications (Notification Outbox #21).
/// actions on parked notifications (Notification Outbox).
///
/// <para>
/// Each test seeds its own <c>Parked</c> row directly into the running cluster's
@@ -34,6 +34,8 @@ public class NotificationActionTests
private readonly PlaywrightFixture _fixture;
/// <summary>Initializes the test class with the shared Playwright fixture.</summary>
/// <param name="fixture">The shared Playwright fixture.</param>
public NotificationActionTests(PlaywrightFixture fixture)
{
_fixture = fixture;
@@ -94,6 +96,8 @@ public class NotificationActionTests
return (page, row);
}
/// <summary>Verifies that retrying a parked notification shows an outcome toast.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[SkippableFact]
public async Task Retry_ParkedNotification_ShowsOutcomeToast()
{
@@ -133,6 +137,8 @@ public class NotificationActionTests
}
}
/// <summary>Verifies that discarding a parked notification shows an outcome toast.</summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[SkippableFact]
public async Task Discard_ParkedNotification_ShowsOutcomeToast()
{
@@ -179,6 +185,7 @@ public class NotificationActionTests
/// than widening — the marker isolates the pair from ambient cluster rows, and the
/// subject keyword discriminates between them.
/// </summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[SkippableFact]
public async Task FilterCombination_StatusPlusList_NarrowsToMatch()
{
@@ -237,6 +244,7 @@ public class NotificationActionTests
/// close affordances are wired to the same <c>CloseDetail</c> handler; this exercises
/// each path independently (open → X-close → reopen → footer-close).
/// </summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[SkippableFact]
public async Task DetailModal_OpenOnDblClick_CloseViaXAndFooter()
{
@@ -308,6 +316,7 @@ public class NotificationActionTests
/// docker cluster carries no override — so a Retrying row back-dated 15 min passes both
/// the repository's StuckOnly SQL predicate and the page's <c>IsStuck</c> derivation.
/// </summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[SkippableFact]
public async Task StuckOnlyFilter_NarrowsToStuckRows()
{
@@ -384,6 +393,7 @@ public class NotificationActionTests
/// disables both pager buttons — so the button-state assertions never race the in-flight
/// query.
/// </summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[SkippableFact]
public async Task Pagination_PageNumberNextAndPrev_TraversesPages()
{
@@ -413,7 +423,7 @@ public class NotificationActionTests
await page.Locator("button.btn-primary:has-text('Query')").ClickAsync();
await page.WaitForLoadStateAsync(LoadState.NetworkIdle);
// Pager locators (M10 OffsetPager). Previous/Next are the pager's data-test
// Pager locators (OffsetPager). Previous/Next are the pager's data-test
// hooks (the page header's Refresh button is also a .btn-outline-secondary.btn-sm,
// so we no longer scope by text). The summary span carries the page/total readout
// ("Page {N} of {Y} · {Total} total").
@@ -4,8 +4,7 @@ using ZB.MOM.WW.ScadaBridge.CentralUI.PlaywrightTests.Cluster;
namespace ZB.MOM.WW.ScadaBridge.CentralUI.PlaywrightTests.Notifications;
/// <summary>
/// Direct-SQL seeding helper for the Notification Report page Playwright E2E tests
/// (Notification Outbox #21).
/// Direct-SQL seeding helper for the Notification Report page Playwright E2E tests.
///
/// <para>
/// The Notification Report page reads the central <c>Notifications</c> table through the
@@ -74,6 +73,7 @@ internal static class NotificationDataSeeder
/// <param name="retryCount">Retry count to display on the row.</param>
/// <param name="lastError">Optional last-error text shown beneath the subject.</param>
/// <param name="ct">Cancellation token.</param>
/// <returns>A task that represents the asynchronous operation.</returns>
public static async Task InsertNotificationAsync(
Guid notificationId,
string listNameMarker,
@@ -132,6 +132,7 @@ VALUES
/// <param name="retryCount">Retry count to display on the row.</param>
/// <param name="lastError">Optional last-error text shown beneath the subject.</param>
/// <param name="ct">Cancellation token.</param>
/// <returns>A task that represents the asynchronous operation.</returns>
public static Task InsertParkedNotificationAsync(
Guid notificationId,
string listNameMarker,
@@ -152,6 +153,9 @@ VALUES
/// to <c>Pending</c> (and a subsequent dispatch sweep) does not change the <c>ListName</c>,
/// so the marker still matches whatever terminal state the row ends in.
/// </summary>
/// <param name="listNameMarker">Unique per-run marker stored in <c>ListName</c>.</param>
/// <param name="ct">Cancellation token.</param>
/// <returns>A task that represents the asynchronous operation.</returns>
public static async Task DeleteByMarkerAsync(string listNameMarker, CancellationToken ct = default)
{
try
@@ -175,6 +179,8 @@ VALUES
/// this so a downed cluster surfaces a clear message rather than an opaque
/// <see cref="SqlException"/>.
/// </summary>
/// <param name="ct">Cancellation token.</param>
/// <returns><c>true</c> if a connection could be opened; otherwise <c>false</c>.</returns>
public static async Task<bool> IsAvailableAsync(CancellationToken ct = default)
{
try
@@ -22,6 +22,8 @@ public class NotificationKpisTests
private readonly PlaywrightFixture _pw;
/// <summary>Initializes the test class with the shared Playwright fixture.</summary>
/// <param name="pw">The shared Playwright fixture.</param>
public NotificationKpisTests(PlaywrightFixture pw)
{
_pw = pw;
@@ -32,6 +34,7 @@ public class NotificationKpisTests
/// real state — EITHER all 5 KPI tile labels rendered OR the 'KPIs unavailable'
/// alert is shown.
/// </summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[SkippableFact]
public async Task KpisPage_RendersTilesOrError()
{
@@ -62,6 +65,7 @@ public class NotificationKpisTests
/// that the button re-enables within 10 s — proving the refresh round-trip completed
/// without hanging.
/// </summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[SkippableFact]
public async Task KpisPage_RefreshReenables()
{
@@ -23,6 +23,8 @@ public class NotificationListCrudTests
private readonly PlaywrightFixture _pw;
/// <summary>Creates the test class with the shared Playwright fixture.</summary>
/// <param name="pw">The shared Playwright fixture.</param>
public NotificationListCrudTests(PlaywrightFixture pw)
{
_pw = pw;
@@ -33,6 +35,7 @@ public class NotificationListCrudTests
/// open it for edit, add a recipient, remove that recipient, then delete the list —
/// asserting the delete confirm dialog, the success toast, and the row disappearing.
/// </summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[SkippableFact]
public async Task Create_AddRecipient_RemoveRecipient_Delete_RoundTrips()
{
@@ -124,6 +127,7 @@ public class NotificationListCrudTests
/// Submits the create form with a blank name and asserts the inline 'Name required.'
/// validation error appears and the page does not navigate away. Mutates nothing.
/// </summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[SkippableFact]
public async Task CreateForm_EmptyName_ShowsInlineError()
{
@@ -50,6 +50,8 @@ public class SmsNotificationE2ETests
private readonly PlaywrightFixture _pw;
/// <summary>Initializes the tests with the shared Playwright fixture.</summary>
/// <param name="pw">The shared Playwright browser fixture.</param>
public SmsNotificationE2ETests(PlaywrightFixture pw)
{
_pw = pw;
@@ -74,6 +76,7 @@ public class SmsNotificationE2ETests
/// fills, and never raise the saved toast — all of which are asserted with web-first waits.
/// </para>
/// </summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[SkippableFact]
public async Task SmsConfigPage_CreateOrRender_NeverLeaksAuthToken()
{
@@ -141,6 +144,7 @@ public class SmsNotificationE2ETests
/// phone recipient and assert the row appears. Best-effort CLI teardown in <c>finally</c>.
/// </para>
/// </summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[SkippableFact]
public async Task ListCreate_SmsType_ShowsPhoneInput_NotEmail()
{
@@ -208,6 +212,7 @@ public class SmsNotificationE2ETests
/// the list page, and scopes the assertion to that list's row so it cannot match another
/// list's Type cell. Best-effort CLI teardown in <c>finally</c>.
/// </summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[SkippableFact]
public async Task ListCreate_SmsType_ShowsSmsInTypeColumn()
{
@@ -40,6 +40,8 @@ public class SmtpConfigTests
private readonly PlaywrightFixture _pw;
/// <summary>Initializes a new instance of the <see cref="SmtpConfigTests"/> class.</summary>
/// <param name="pw">The shared Playwright fixture.</param>
public SmtpConfigTests(PlaywrightFixture pw)
{
_pw = pw;
@@ -51,6 +53,7 @@ public class SmtpConfigTests
/// The page's <c>Save</c> handler returns at this guard BEFORE persisting, so this fact
/// mutates nothing. Then it cancels and asserts the form closed.
/// </summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[SkippableFact]
public async Task SmtpForm_MissingRequired_ShowsInlineError()
{
@@ -95,6 +98,7 @@ public class SmtpConfigTests
/// card (Credentials value '(stored)' or '(not set)') is present, OR the empty-state
/// 'No SMTP configuration set.' text is shown. Pure-read; mutates nothing.
/// </summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[SkippableFact]
public async Task SmtpPage_RendersConfigOrEmptyState()
{
@@ -130,6 +134,7 @@ public class SmtpConfigTests
/// skips (SMTP config has no delete verb, so we never create one we could not delete).
/// </para>
/// </summary>
/// <returns>A task that represents the asynchronous operation.</returns>
[SkippableFact]
public async Task SmtpEdit_NoopSave_ShowsSavedToast()
{