Skip to content

Dashboard.Ui test coverage: 23.6% -> ~97% (restores the 90% Codecov floor) - #213

Merged
blehnen merged 9 commits into
masterfrom
phase-2-dashboard-ui-coverage
Jul 22, 2026
Merged

Dashboard.Ui test coverage: 23.6% -> ~97% (restores the 90% Codecov floor)#213
blehnen merged 9 commits into
masterfrom
phase-2-dashboard-ui-coverage

Conversation

@blehnen

@blehnen blehnen commented Jul 22, 2026

Copy link
Copy Markdown
Owner

Why

Codecov master sits at 88.09% against a 90% floor. The shortfall is not erosion — it is one untested project. DotNetWorkQueue.Dashboard.Ui was at 23.6%; removing it from the totals reproduces the historical ~90% exactly. Covering it is the only work that moves the number (the transports and core are already integration-covered).

See docs/code-coverage.md for the full rebaseline, including why Codecov and the local ReportGenerator badge differ by ~2.5 points (Codecov excludes partially-covered lines from hits; ReportGenerator counts them as covered).

What

Test-only change. git diff master -- Source/DotNetWorkQueue.Dashboard.Ui/ is empty — no production code was modified.

The test project goes from 66 to 273 test methods across:

Area Tests
DashboardApiClient 48
MessageDetailDrawer 36 (new)
QueueDetail 21
ConnectionDetail 16 (new)
HistoryTab 15
ErrorsTab 14
MessagesTab 12
StaleTab 11
SourceHealthMonitor 11
ConsumersTab 10
Login 8
ConfigTab, AutoRefresh, Home, EmptyLayout, services remainder

Four tests carried over from earlier work were failing. All four were test bugs, not component bugs:

  • MudSelect.SelectOption(2) resolves to the index overload rather than the value — invoke ValueChanged instead.
  • Re-stubbing an NSubstitute method after configuring it to throw re-invokes the throw; replaced with a single call-count stub.
  • div.mud-paper also matches the two popover containers MudPopoverProvider renders ahead of page content — the status cards are selected via .mud-elevation-2.
  • cut.Instance is the ContainerFragment wrapper, so private-field reflection has to go through FindComponent<QueueDetail>().Instance.

One real coverage trap worth noting: SourceHealthMonitor's state-transition log statements are guarded by _logger.IsEnabled(LogLevel.Information), and an NSubstitute ILogger returns false by default — so those lines were never being executed by the existing tests.

Numbers

Local Coverlet, Source/DotNetWorkQueue.Dashboard.Ui/ only: 23.6% -> 97.24% line coverage, 66 misses remaining.

Measured Codecov-style (deduped by line, partials excluded from hits): 1096 hits vs the 307 master baseline = +789. Master needs +639 for 90%, which projects to roughly 90.4%.

Verification

  • 273 tests pass on net10.0 and net8.0
  • dotnet build Source\DotNetWorkQueueNoTests.sln -c Release -p:CI=true — 0 warnings, 0 errors
  • No Thread.Sleep in the test project (async waits use WaitForAssertion)
  • No production-code changes

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Tests
    • Expanded UI coverage with new suites for empty layout theming, connection/queue details, home navigation, login submission behavior, and shared components (auto-refresh, config, consumers, errors, history, stale, messages, and message detail drawer).
    • Added assertions for loading spinners, empty states, error alerts, retry/reload flows, filtering, pagination, drawer open/close, and read-only UI behavior.
    • Added service-level tests for dashboard API client request/response handling, query construction, failure branches, and source health monitor polling/lifecycle behavior.
  • Chores
    • Enabled nullable annotations in the test project configuration.

blehnen and others added 8 commits July 21, 2026 16:02
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Salvaged work from the parallel build before stopping. Compiles clean;
173 passing / 4 failing on both TFMs. Project went 66 -> 188 [TestMethod].

New test files:
  DashboardApiClientTests.cs  48   (committed separately, 3ef6281)
  ErrorsTabTests.cs           14   (committed separately, c6d7558)
  QueueDetailTests.cs         16
  StaleTabTests.cs            11
  ConfigTabTests.cs            7
  ConsumersTabTests.cs         6
  AutoRefreshTests.cs          6
  MessagesTabTests.cs          5
  HomeTests.cs                     (extended)

KNOWN FAILING (4, identical on net8.0 and net10.0):
  MessagesTab  ChangingStatusFilter_RequeriesWithSelectedValue
  Home         ShowsErrorMessage_WhenLoadConnectionsThrows
  QueueDetail  ClickingWaitingCard_FiltersMessagesTab_ToWaitingStatus
  QueueDetail  ClickingErrorCard_SwitchesActiveTabToErrors

STILL MISSING (181 uncovered lines unaddressed):
  ConnectionDetailTests.cs     (85 misses)
  MessageDetailDrawerTests.cs  (90 misses)
  HistoryResponseTests.cs      (6 misses)

Also fixes a compile break left by an interrupted builder: bUnit 2.x
renamed IRenderedComponent<T>.SetParametersAndRender to Render.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- MessagesTab: MudSelect.SelectOption(2) resolves to the index overload, not
  the value; invoke ValueChanged directly to exercise OnStatusFilterChanged.
- Home: re-stubbing GetConnectionsAsync after a throwing setup re-invokes the
  throw; use a single call-count stub instead.
- QueueDetail: "div.mud-paper" also matches MudPopoverProvider's two popover
  containers; select the cards by .mud-elevation-2.
- QueueDetail: cut.Instance is the ContainerFragment wrapper, so reflect over
  FindComponent<QueueDetail>().Instance for _activeTab.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Covers source-not-found, queue/job table rendering, empty states, consumer
count chip vs zero, load failure + retry recovery, queue-row navigation with
and without names, breadcrumb single- vs multi-source, and the
same-parameters reload guard.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Covers the closed/no-id load guards, metadata rendering (optional fields on
and off), detail-load failure, best-effort swallowing of body/header/retry
failures, JSON formatting branches, decoding-error/type/interceptor display,
header and retry tables, read-only gating, the edit/save/cancel cycle
including blank-input and exception paths, delete confirm-then-commit,
requeue/reset/cancel success and failure, close, and the reload guard.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Adds empty state, all StatusName/StatusColor branches, every FormatDuration
range, TruncateId with and without a value, expand/collapse of the exception
child row, status-filter and pagination requeries, the RefreshVersion reload,
and purge confirm/success/failure. Also drives HistoryResponse.StatusName
through all seven branches.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Login: submit via button and Enter key, blank-credential and non-Enter
  no-ops, asserted through bUnit JSInterop invocations.
- SourceHealthMonitor: ExecuteAsync startup poll + graceful stop, the
  already-cancelled shutdown path, and the transition log lines (the logger
  substitute reports IsEnabled=false by default, so they were never reached).
- QueueDetail: in-flight spinner, tab change, RefreshCounts via the drawer's
  OnDataChanged, and the swallowed-failure paths for refresh and manual refresh.
- MessagesTab: id truncation, delayed chip, pagination, row-click callback
  with and without a queue id, refresh and filter-version reloads.
- ConsumersTab: spinner, both uptime format branches, refresh reload.
- EmptyLayout: renders the body inside the dark-theme container.

Dashboard.Ui local line coverage 77.97% -> 97.24%; 273 tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The pull request adds broad automated coverage for dashboard API clients, source health monitoring, Blazor pages, shared tabs, message actions, login interactions, auto-refresh behavior, and layout rendering.

Changes

Dashboard test coverage

Layer / File(s) Summary
API client and health-monitor contracts
Source/DotNetWorkQueue.Dashboard.Ui.Tests/Services/*, Source/DotNetWorkQueue.Dashboard.Ui.Tests/DotNetWorkQueue.Dashboard.Ui.Tests.csproj
Adds endpoint, serialization, error, query-building, health-transition, cancellation, lifecycle, and nullable-annotation coverage.
Shared data-tab rendering and reloads
Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Shared/ConfigTabTests.cs, ConsumersTabTests.cs, MessagesTabTests.cs, StaleTabTests.cs
Adds loading, empty-state, error, formatting, filtering, pagination, refresh, and reset-flow coverage.
Shared actions, history, drawer, and refresh behavior
Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Shared/ErrorsTabTests.cs, HistoryTabTests.cs, MessageDetailDrawerTests.cs, AutoRefreshTests.cs
Adds action visibility, confirmations, snackbars, editing, drawer lifecycle, history purge, and timer behavior tests.
Dashboard page rendering and navigation
Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Pages/HomeTests.cs, ConnectionDetailTests.cs, QueueDetailTests.cs
Adds page-state, source-resolution, navigation, breadcrumb, retry, refresh, tab, and message-drawer integration tests.
Login and empty-layout interactions
Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Pages/LoginTests.cs, Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Layout/EmptyLayoutTests.cs
Adds credential submission, keyboard-event, layout-body, and dark-theme rendering tests.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

Poem

A rabbit checks each button twice,
Through queues and drawers, logs, and mice.
APIs answer, timers run,
Dark themes glow beneath the sun.
“All tested!” hops the rabbit bright.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 2.24% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: a large Dashboard.Ui test coverage increase restoring the coverage floor.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 Checkov (3.3.8)
Source/DotNetWorkQueue.Dashboard.Ui.Tests/DotNetWorkQueue.Dashboard.Ui.Tests.csproj

Traceback (most recent call last):
File "/usr/local/bin/checkov", line 2, in
from checkov.main import Checkov
ModuleNotFoundError: No module named 'checkov'


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (2)
Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Shared/HistoryTabTests.cs (1)

161-173: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Assertion on "-" is too weak to verify the missing-QueueId placeholder.

A bare "-" appears throughout the rendered markup (timestamps, CSS class names, other placeholders), so this passes regardless of whether the QueueId cell actually renders a dash. Tighten to a cell-scoped assertion like the <td>-</td> form used in ConnectionDetailTests, or query the specific queue-id cell.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Shared/HistoryTabTests.cs`
around lines 161 - 173, Strengthen the assertion in
RendersDash_WhenQueueIdMissing so it verifies the QueueId table cell
specifically renders the "-" placeholder, rather than searching the entire
markup. Use a cell-scoped assertion such as the rendered <td>-</td> form or
query the specific QueueId cell, while preserving the existing missing-QueueId
test setup.
Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Shared/AutoRefreshTests.cs (1)

42-54: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

TogglingOn_StartsTimer does not assert timer behavior.

refreshCount is checked as 0 immediately after toggling on, which is trivially true and independent of whether a timer was started. The test name implies verifying the timer, but nothing exercises a tick. Consider driving the callback deterministically (e.g. inject/override the interval to a small value and WaitForAssertion, or expose the timer for test control) so the assertion actually guards the start behavior. Same applies to TogglingOff_StopsTimer, which only re-asserts Toggled.

Also note the toggle.InvokeAsync(...)/select.InvokeAsync(...) calls here and throughout the file are not awaited; awaiting them (make the methods async Task) avoids swallowed exceptions and ordering surprises.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Shared/AutoRefreshTests.cs`
around lines 42 - 54, Update TogglingOn_StartsTimer and TogglingOff_StopsTimer
to deterministically exercise timer ticks and assert the OnRefresh callback
behavior, rather than only checking immediate state. Use the component’s
existing timer configuration or test-control seam, and await toggle/select
InvokeAsync calls by converting affected tests to async Task so state changes
and exceptions are observed reliably.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Layout/EmptyLayoutTests.cs`:
- Around line 40-41: Update the test method in EmptyLayoutTests to locate the
div.mud-theme-dark element and assert that its inner HTML contains
layout-body-marker, rather than searching the full cut.Markup. Keep the existing
themed-wrapper assertion and verify the body marker is nested within that
element.

In `@Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Pages/LoginTests.cs`:
- Around line 130-135: Update SetCredentials to return Task and await both
cut.InvokeAsync credential updates. Make each of its four call sites await
SetCredentials before triggering submit or the Enter action, ensuring the
updated username and password state is applied first.

In
`@Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Pages/QueueDetailTests.cs`:
- Around line 234-261: Update
OpenMessageDrawer_ViaMessagesTabCallback_OpensDrawerWithMessageId and
ClosingDrawer_ViaOpenChangedCallback_ClearsSelectedMessage to return async Task
and await each cut.InvokeAsync call before reading or asserting drawer state.
Preserve the existing assertions and test behavior while ensuring callback
exceptions and asynchronous updates are observed.

In
`@Source/DotNetWorkQueue.Dashboard.Ui.Tests/Services/SourceHealthMonitorTests.cs`:
- Around line 250-286: The ExecuteAsync_PollsOnStartup_AndExitsGracefullyOnStop
test asserts health before the asynchronous initial poll is guaranteed to
complete. Wait until GetHealth(source.Slug).Status becomes Healthy before
calling StopAsync, or invoke PollAllSourcesAsync explicitly, while preserving
the existing startup/shutdown assertions.

---

Nitpick comments:
In
`@Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Shared/AutoRefreshTests.cs`:
- Around line 42-54: Update TogglingOn_StartsTimer and TogglingOff_StopsTimer to
deterministically exercise timer ticks and assert the OnRefresh callback
behavior, rather than only checking immediate state. Use the component’s
existing timer configuration or test-control seam, and await toggle/select
InvokeAsync calls by converting affected tests to async Task so state changes
and exceptions are observed reliably.

In
`@Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Shared/HistoryTabTests.cs`:
- Around line 161-173: Strengthen the assertion in
RendersDash_WhenQueueIdMissing so it verifies the QueueId table cell
specifically renders the "-" placeholder, rather than searching the entire
markup. Use a cell-scoped assertion such as the rendered <td>-</td> form or
query the specific QueueId cell, while preserving the existing missing-QueueId
test setup.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 9fb1299c-5861-4267-8284-32dbe6846d24

📥 Commits

Reviewing files that changed from the base of the PR and between d678edb and 1f075af.

📒 Files selected for processing (15)
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Layout/EmptyLayoutTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Pages/ConnectionDetailTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Pages/HomeTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Pages/LoginTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Pages/QueueDetailTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Shared/AutoRefreshTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Shared/ConfigTabTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Shared/ConsumersTabTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Shared/ErrorsTabTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Shared/HistoryTabTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Shared/MessageDetailDrawerTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Shared/MessagesTabTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Shared/StaleTabTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Services/DashboardApiClientTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Services/SourceHealthMonitorTests.cs

Comment thread Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Layout/EmptyLayoutTests.cs Outdated
Comment thread Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Pages/LoginTests.cs Outdated
Comment thread Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Pages/QueueDetailTests.cs Outdated
SonarCloud (47 issues, all in the new test code):
- CS8632 x30: the component under test is Nullable=enable, so its nullable
  signatures leak into test code. Set <Nullable>annotations</Nullable> on the
  test project — annotations without nullable warnings — instead of scattering
  #nullable enable pragmas.
- CS4014 x8: NSubstitute Received()/DidNotReceive() assertions on Task-returning
  members are themselves Tasks; inside async test methods they were unawaited.
  Awaited, which is NSubstitute's documented idiom for async members.
- MUD0012: reading MudTextField.Value from outside the component is disallowed
  and GetState is not accessible to test code, so assert on the rendered
  textarea content instead.
- MSTEST0037 x2: Assert.AreEqual(false, nullableBool) -> IsNotNull + IsFalse.

CodeRabbit:
- EmptyLayout: assert the body marker against the themed wrapper's InnerHtml,
  so the test fails if the body ever renders outside it.
- Login: SetCredentials fire-and-forgot both InvokeAsync calls; it now returns
  Task and all four call sites await it before submitting.
- QueueDetail: the two drawer tests are async and await their InvokeAsync calls
  (same root cause as the CS4014 batch).
- SourceHealthMonitor: the ExecuteAsync test asserted health without waiting for
  the startup poll; it now gates on a TaskCompletionSource the poll signals.

Test project Release build is clean (0 warnings besides the pre-existing NU1902
on AngleSharp, a bUnit transitive). 273 tests pass on both TFMs; still no
production-code changes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
Source/DotNetWorkQueue.Dashboard.Ui.Tests/DotNetWorkQueue.Dashboard.Ui.Tests.csproj (1)

5-7: 🎯 Functional Correctness | 🔵 Trivial | 🏗️ Heavy lift

Keep nullable flow warnings on for the test project. Nullable=annotations preserves ? syntax but turns off flow analysis in files that don't opt into #nullable enable, so possible-null dereferences in the suite can still slip through. Switch the project to enable and address the resulting diagnostics.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@Source/DotNetWorkQueue.Dashboard.Ui.Tests/DotNetWorkQueue.Dashboard.Ui.Tests.csproj`
around lines 5 - 7, Update the test project’s Nullable setting from annotations
to enable so nullable flow analysis remains active, then resolve all resulting
nullable diagnostics throughout the test suite without suppressing valid
warnings.

Source: MCP tools

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In
`@Source/DotNetWorkQueue.Dashboard.Ui.Tests/DotNetWorkQueue.Dashboard.Ui.Tests.csproj`:
- Around line 5-7: Update the test project’s Nullable setting from annotations
to enable so nullable flow analysis remains active, then resolve all resulting
nullable diagnostics throughout the test suite without suppressing valid
warnings.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: fc8e5a81-b846-43bb-837a-dbb55ec7e07e

📥 Commits

Reviewing files that changed from the base of the PR and between 1f075af and ac2b65d.

📒 Files selected for processing (8)
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Layout/EmptyLayoutTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Pages/LoginTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Pages/QueueDetailTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Shared/HistoryTabTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Shared/MessageDetailDrawerTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Shared/MessagesTabTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/DotNetWorkQueue.Dashboard.Ui.Tests.csproj
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Services/SourceHealthMonitorTests.cs
🚧 Files skipped from review as they are similar to previous changes (7)
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Layout/EmptyLayoutTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Services/SourceHealthMonitorTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Shared/MessagesTabTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Shared/HistoryTabTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Shared/MessageDetailDrawerTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Pages/QueueDetailTests.cs
  • Source/DotNetWorkQueue.Dashboard.Ui.Tests/Components/Pages/LoginTests.cs

@sonarqubecloud

Copy link
Copy Markdown

@blehnen
blehnen merged commit fe3909b into master Jul 22, 2026
6 checks passed
@blehnen
blehnen deleted the phase-2-dashboard-ui-coverage branch July 22, 2026 16:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant