Skip to content

[release/13.6] Fix Dashboard tests and popup behavior - #20410

Merged
Jose Perez Rodriguez (joperezr) merged 3 commits into
release/13.6from
backport/dashboard-fixes-to-release-13.6
Sep 24, 2026
Merged

Jose Perez Rodriguez (joperezr) merged 3 commits into
release/13.6from
backport/dashboard-fixes-to-release-13.6

Conversation

@JamesNK

Copy link
Copy Markdown
Member

Backports #20360, #20341, and #20362 to release/13.6.

Customer Impact

Dashboard users can encounter popups that are misaligned, overflow the viewport, or disappear while metric dimensions update. Resource graph context menus may not reopen immediately after dismissal, and terminal auto-fit can move focus away from the active control.

Testing

Validated on the release/13.6 backport branch: 570 Aspire.Dashboard.Components.Tests and 1,892 Aspire.Dashboard.Tests passed, excluding quarantined and outerloop tests. The source changes also include targeted Playwright coverage for resources, terminal, navigation, authentication, accessibility, and popup behavior. git diff --check passes.

Risk

Medium. The production changes are localized to Dashboard popup, focus, and component-state behavior with no public API changes, but this combines three related changes and a broad component-test migration.

Regression?

Yes — fixes Dashboard behavior and test regressions introduced by the Fluent UI v5 migration.

@github-actions

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 20410

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 20410"

@aspire-repo-bot
aspire-repo-bot Bot requested a balanced review from Copilot September 23, 2026 23:55
@github-actions

Copy link
Copy Markdown
Contributor

Tests selector

Selects the full PR test matrix + all PR-gated jobs (ALL) — a rule matching 'eng/Versions.props' selects ALL


Selection computed for commit e358195.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🟡 Changes recommended

The added hidden-resource Playwright fixture is converted into a visible resource, leaving the intended regression path untested.

Get a fresh assessment by requesting another Copilot review.

Review effort: Balanced
Findings: 1 Medium severity

Open (1)
What changed in this PR

Backports Dashboard popup, focus, Playwright reliability, and bUnit compatibility fixes from #20341, #20360, and #20362 to release/13.6.

Changes:

  • Stabilizes popup positioning, persistence, menu reopening, and terminal focus.
  • Upgrades bUnit and migrates component tests to its v2 APIs.
  • Improves Playwright isolation, adaptive timeouts, and Fluent UI v5 selectors.
File Description
tests/​Directory.Packages.props Upgrades bUnit.
tests/​Aspire.Dashboard.Tests/​Model/​DashboardClientTests.cs Uses hosted TestServer setup.
tests/​Aspire.Dashboard.Tests/​Integration/​Playwright/​TerminalTests.cs Updates terminal interactions and selectors.
tests/​Aspire.Dashboard.Tests/​Integration/​Playwright/​TerminalDockTests.cs Updates focus coverage.
tests/​Aspire.Dashboard.Tests/​Integration/​Playwright/​ResourcesTests.cs Updates resource-menu regression coverage.
tests/​Aspire.Dashboard.Tests/​Integration/​Playwright/​NativeAotDashboardTests.cs Applies shared timeouts.
tests/​Aspire.Dashboard.Tests/​Integration/​Playwright/​MobileNavMenuTests.cs Uses configured browser contexts.
tests/​Aspire.Dashboard.Tests/​Integration/​Playwright/​Infrastructure/​PlaywrightTestsBase.cs Serializes fixture tests through disposal.
tests/​Aspire.Dashboard.Tests/​Integration/​Playwright/​Infrastructure/​PlaywrightFixture.cs Centralizes adaptive timeouts.
tests/​Aspire.Dashboard.Tests/​Integration/​Playwright/​Infrastructure/​DashboardServerFixture.cs Adds test gate and disposal ordering.
tests/​Aspire.Dashboard.Tests/​Integration/​Playwright/​DashboardInteractionsTests.cs Updates positioning assertions.
tests/​Aspire.Dashboard.Tests/​Integration/​Playwright/​BrowserTokenAuthenticationTests.cs Updates selectors and timeouts.
tests/​Aspire.Dashboard.Tests/​Integration/​Playwright/​AspireMenuLayoutTests.cs Updates action-menu selector.
tests/​Aspire.Dashboard.Tests/​Integration/​Playwright/​AppBarTests.cs Updates Fluent UI layout assertions.
tests/​Aspire.Dashboard.Components.Tests/​Shared/​TestJSObjectReference.cs Migrates to BunitContext.
tests/​Aspire.Dashboard.Components.Tests/​Shared/​TerminalSetupHelpers.cs Migrates bUnit helper APIs.
tests/​Aspire.Dashboard.Components.Tests/​Shared/​StructuredLogsSetupHelpers.cs Migrates context type.
tests/​Aspire.Dashboard.Components.Tests/​Shared/​ResourceSetupHelpers.cs Migrates context type.
tests/​Aspire.Dashboard.Components.Tests/​Shared/​MetricsSetupHelpers.cs Migrates context type.
tests/​Aspire.Dashboard.Components.Tests/​Shared/​LayoutSetupHelpers.cs Migrates context type.
tests/​Aspire.Dashboard.Components.Tests/​Shared/​InteractionsSetupHelpers.cs Migrates render types.
tests/​Aspire.Dashboard.Components.Tests/​Shared/​FluentUISetupHelpers.cs Migrates shared bUnit APIs.
tests/​Aspire.Dashboard.Components.Tests/​Shared/​DashboardPageTestContext.cs Uses BunitContext.
tests/​Aspire.Dashboard.Components.Tests/​Pages/​TracesTests.cs Migrates rendering calls.
tests/​Aspire.Dashboard.Components.Tests/​Pages/​TraceDetailsTests.cs Migrates rendering and disposal.
tests/​Aspire.Dashboard.Components.Tests/​Pages/​TerminalWindowTests.cs Migrates rendering calls.
tests/​Aspire.Dashboard.Components.Tests/​Pages/​StructuredLogsTests.cs Migrates rendering calls.
tests/​Aspire.Dashboard.Components.Tests/​Pages/​MetricsTests.cs Tests persistent chart popovers.
tests/​Aspire.Dashboard.Components.Tests/​Pages/​ConsoleLogsTests.cs Migrates rendering types.
tests/​Aspire.Dashboard.Components.Tests/​Pages/​ConsoleLogsTerminalTests.cs Migrates APIs and dimension labeling.
tests/​Aspire.Dashboard.Components.Tests/​Layout/​TerminalDockWindowTrackingTests.cs Migrates rendering calls.
tests/​Aspire.Dashboard.Components.Tests/​Layout/​TerminalDockTelemetryTests.cs Migrates rendering calls.
tests/​Aspire.Dashboard.Components.Tests/​Layout/​TerminalDockInitializationTests.cs Migrates rendering calls.
tests/​Aspire.Dashboard.Components.Tests/​Layout/​ResourceServiceConnectionProviderTests.cs Migrates rendering call.
tests/​Aspire.Dashboard.Components.Tests/​Layout/​MobileNavMenuTests.cs Migrates bUnit and DOM APIs.
tests/​Aspire.Dashboard.Components.Tests/​Layout/​MainLayoutTests.cs Migrates rendering APIs.
tests/​Aspire.Dashboard.Components.Tests/​Layout/​MainLayoutTerminalTests.cs Migrates rendering calls.
tests/​Aspire.Dashboard.Components.Tests/​Layout/​DashboardDialogProviderTests.cs Migrates rendering and disposal APIs.
tests/​Aspire.Dashboard.Components.Tests/​JavaScript/​TerminalView.test.mjs Verifies auto-fit preserves focus.
tests/​Aspire.Dashboard.Components.Tests/​Interactions/​InteractionsProviderTests.Terminal.cs Migrates rendering calls.
tests/​Aspire.Dashboard.Components.Tests/​Interactions/​InteractionsProviderTests.cs Migrates rendering calls.
tests/​Aspire.Dashboard.Components.Tests/​GridColumnManagerTests.cs Migrates rendering calls.
tests/​Aspire.Dashboard.Components.Tests/​Dialogs/​SettingsDialogTests.cs Migrates rendering call.
tests/​Aspire.Dashboard.Components.Tests/​Dialogs/​NotificationEntryComponentTests.cs Migrates rendering call.
tests/​Aspire.Dashboard.Components.Tests/​Dialogs/​ManageDataDialogTests.cs Migrates rendering calls.
tests/​Aspire.Dashboard.Components.Tests/​Dialogs/​InteractionsTerminalDialogTests.cs Migrates rerender API.
tests/​Aspire.Dashboard.Components.Tests/​Dialogs/​InteractionsInputDialogTests.cs Migrates rendered-component type.
tests/​Aspire.Dashboard.Components.Tests/​Dialogs/​InteractionMessageBoxDialogTests.cs Migrates dialog rendering APIs.
tests/​Aspire.Dashboard.Components.Tests/​Dialogs/​HelpDialogTests.cs Migrates rendering call.
tests/​Aspire.Dashboard.Components.Tests/​Dialogs/​FilterDialogTests.cs Migrates rendering calls.
tests/​Aspire.Dashboard.Components.Tests/​Controls/​UserProfileTests.cs Migrates authorization and rendering APIs.
tests/​Aspire.Dashboard.Components.Tests/​Controls/​UrlsColumnDisplayTests.cs Migrates rendering calls.
tests/​Aspire.Dashboard.Components.Tests/​Controls/​TotalItemsFooterTests.cs Migrates rendering call.
tests/​Aspire.Dashboard.Components.Tests/​Controls/​TextVisualizerDialogTests.cs Migrates dialog rendering APIs.
tests/​Aspire.Dashboard.Components.Tests/​Controls/​StructuredLogDetailsTests.cs Migrates rendering call.
tests/​Aspire.Dashboard.Components.Tests/​Controls/​ResourceSelectTests.cs Migrates rendering call.
tests/​Aspire.Dashboard.Components.Tests/​Controls/​ResourceDetailsTests.cs Migrates rendering APIs.
tests/​Aspire.Dashboard.Components.Tests/​Controls/​PlotlyChartTests.cs Migrates rendering calls.
tests/​Aspire.Dashboard.Components.Tests/​Controls/​LogViewerTests.cs Migrates rendering APIs.
tests/​Aspire.Dashboard.Components.Tests/​Controls/​GenAIVisualizerDialogTests.cs Migrates dialog rendering APIs.
tests/​Aspire.Dashboard.Components.Tests/​Controls/​ChartFiltersTests.cs Adds popup identity and persistence tests.
tests/​Aspire.Dashboard.Components.Tests/​Controls/​AspirePropertyDetailsAccordionItemTests.cs Migrates rendering calls.
tests/​Aspire.Dashboard.Components.Tests/​Controls/​AspireProgressRingTests.cs Migrates rendering calls.
tests/​Aspire.Dashboard.Components.Tests/​Controls/​AspireMenuTests.cs Tests immediate context-menu reopening.
tests/​Aspire.Dashboard.Components.Tests/​Controls/​AspireMenuButtonTests.cs Migrates rendering APIs.
tests/​Aspire.Dashboard.Components.Tests/​Controls/​AspireLogoTests.cs Migrates context and rendering APIs.
tests/​Aspire.Dashboard.Components.Tests/​Controls/​AspireFluentDataGridTests.cs Migrates rendering APIs.
tests/​Aspire.Dashboard.Components.Tests/​Controls/​ApplicationNameTests.cs Migrates rendering calls.
tests/​Aspire.Dashboard.Components.Tests/​Aspire.Dashboard.Components.Tests.csproj Adds scoped .NET 11 dependency overrides.
src/​Aspire.Dashboard/​wwwroot/​css/​controls.css Adjusts menu layout and sizing.
src/​Aspire.Dashboard/​Model/​DimensionFilterViewModel.cs Adds collision-resistant anchor identity.
src/​Aspire.Dashboard/​Components/​ResourcesGridColumns/​UrlsColumnDisplay.razor.css Anchors URL overflow popups.
src/​Aspire.Dashboard/​Components/​Pages/​Resources.razor.css Anchors resource filter popup.
src/​Aspire.Dashboard/​Components/​Pages/​Resources.razor.cs Refines view-option items.
src/​Aspire.Dashboard/​Components/​Pages/​Resources.razor Keeps view options visible.
src/​Aspire.Dashboard/​Components/​Layout/​DesktopToolbarDivider.razor Updates divider semantics.
src/​Aspire.Dashboard/​Components/​Dialogs/​SettingsDialog.razor Updates Fluent accessibility attributes.
src/​Aspire.Dashboard/​Components/​Controls/​UserProfile.razor.css Anchors profile popup.
src/​Aspire.Dashboard/​Components/​Controls/​UserProfile.razor Supplies profile anchor identity.
src/​Aspire.Dashboard/​Components/​Controls/​TerminalView.razor.js Prevents auto-fit focus theft.
src/​Aspire.Dashboard/​Components/​Controls/​TerminalView.razor.cs Removes obsolete JS label option.
src/​Aspire.Dashboard/​Components/​Controls/​TerminalView.razor Moves dimension label to placeholder.
src/​Aspire.Dashboard/​Components/​Controls/​ResourceActions.razor Updates divider semantics.
src/​Aspire.Dashboard/​Components/​Controls/​Chart/​ChartFilterTags.razor.cs Delegates popup state to parent.
src/​Aspire.Dashboard/​Components/​Controls/​Chart/​ChartFilterTags.razor Uses delegated popup handler.
src/​Aspire.Dashboard/​Components/​Controls/​Chart/​ChartFilters.razor.css Moves filter-button styling.
src/​Aspire.Dashboard/​Components/​Controls/​Chart/​ChartFilters.razor.cs Maintains stable popup state.
src/​Aspire.Dashboard/​Components/​Controls/​Chart/​ChartFilters.razor Stabilizes rows, anchors, and popovers.
src/​Aspire.Dashboard/​Components/​Controls/​Chart/​ChartFilterPopover.razor.css Anchors chart popovers.
src/​Aspire.Dashboard/​Components/​Controls/​Chart/​ChartFilterPopover.razor.cs Handles replaced filter subscriptions.
src/​Aspire.Dashboard/​Components/​Controls/​Chart/​ChartFilterPopover.razor Separates trigger and popup rendering.
src/​Aspire.Dashboard/​Components/​Controls/​Chart/​ChartContainer.razor Keys filters by metric identity.
src/​Aspire.Dashboard/​Components/​Controls/​AspireMenuButton.razor Adds menu layout wrapper class.
src/​Aspire.Dashboard/​Components/​Controls/​AspireMenu.razor.cs Handles stale close callbacks during reopening.
eng/​Versions.props Adds .NET 11 package version properties.

@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@joperezr
Jose Perez Rodriguez (joperezr) merged commit ec3a5ce into release/13.6 Sep 24, 2026
834 of 837 checks passed
@microsoft-github-policy-service microsoft-github-policy-service Bot added this to the 13.6 milestone Sep 24, 2026
@aspire-repo-bot

Copy link
Copy Markdown
Contributor

✅ No documentation update needed.

Step 5 branch taken: excluded → base_branch_is_release, head_branch_is_backport, title_release_prefix

This PR is a backport (is_backport: true in signals.json) and excluded: true overrides the docs_optional recommendation per workflow rules — backport PRs are out of scope for docs generation since their user-facing documentation belongs to the original forward PRs.

Exclusion reasons (from signals.json): base branch is release/13.6 (a release branch), head/title indicate a backport (title is prefixed [release/13.6]), and the PR body states "Backports #20360, #20341, and #20362 to release/13.6."

Triggered signals (2, not acted on due to exclusion): dashboard_user_facing_page_changed (Resources.razor / Resources.razor.cs changed), pr_body_has_cli_flag_mention (matched on PR body text, false positive from Risk section wording, not an actual CLI flag).

Documentation for the underlying Dashboard popup/focus fixes should be authored (if needed) against the original forward PRs (#20360, #20341, #20362) on the default branch, not against this backport.

David Pine (IEvangelist) pushed a commit that referenced this pull request Oct 1, 2026
Backports #20360, #20341, and #20362 to release/13.6.

## Customer Impact

Dashboard users can encounter popups that are misaligned, overflow the
viewport, or disappear while metric dimensions update. Resource graph
context menus may not reopen immediately after dismissal, and terminal
auto-fit can move focus away from the active control.

## Testing

Validated on the release/13.6 backport branch: 570
Aspire.Dashboard.Components.Tests and 1,892 Aspire.Dashboard.Tests
passed, excluding quarantined and outerloop tests. The source changes
also include targeted Playwright coverage for resources, terminal,
navigation, authentication, accessibility, and popup behavior. `git diff
--check` passes.

## Risk

Medium. The production changes are localized to Dashboard popup, focus,
and component-state behavior with no public API changes, but this
combines three related changes and a broad component-test migration.

## Regression?

Yes — fixes Dashboard behavior and test regressions introduced by the
Fluent UI v5 migration.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants