test(central-ui): fix test-host hang in CentralUI.Tests

DiffDialogTests.SetupBodyLockInterop registered bUnit SetupVoid planned
invocations that were never completed; DisposeAsync_WhileOpen awaited
DiffDialog.DisposeAsync -> TryUnlockBodyAsync -> InvokeVoidAsync on one of
them, suspending the test forever so the test host never exited (regression
from the CentralUI-023 catch-narrowing). SetupBodyLockInterop now uses Loose
JSInterop mode. Also dispose the leaked WebApplication instances in the Auth
tests (FileSystemWatcher + ConsoleLoggerProcessor threads) and the extra
ServiceProvider in the DebugView tests. Suite now runs 281 tests in ~7s and
exits cleanly.
This commit is contained in:
Joseph Doherty
2026-05-17 05:43:05 -04:00
parent e55bd46ca1
commit cfa8667c78
5 changed files with 25 additions and 11 deletions

View File

@@ -14,16 +14,16 @@ namespace ScadaLink.CentralUI.Tests.Shared;
public class DiffDialogTests : BunitContext
{
/// <summary>
/// DiffDialog applies/removes a body scroll-lock class via JS interop on
/// open/close. CentralUI-023 narrowed those catch blocks so they no longer
/// swallow every exception — including bUnit's strict-mode unplanned-call
/// exception. Tests that exercise open/close must therefore register the
/// body-class calls so they do not surface as harness exceptions.
/// DiffDialog applies/removes a body scroll-lock class and focuses the modal
/// via JS interop on open/close. Loose mode auto-completes those void calls
/// so a path that <c>await</c>s them (e.g. <c>DisposeAsync</c> →
/// <c>TryUnlockBodyAsync</c>) resumes instead of hanging on a never-completed
/// planned invocation, and no strict-mode unplanned-invocation exception
/// surfaces through the narrowed CentralUI-023 catch blocks.
/// </summary>
private void SetupBodyLockInterop()
{
JSInterop.SetupVoid("document.body.classList.add", "modal-open");
JSInterop.SetupVoid("document.body.classList.remove", "modal-open");
JSInterop.Mode = JSRuntimeMode.Loose;
}
[Fact]