The remaining Playwright failures were all in interactions that depend on
the Blazor Server circuit being responsive in CI:
- Settings page access now navigates to /Settings/General directly instead
of expanding the flaky nested Settings SubMenu flyout.
- Drop SettingsMenu_ShowsAllExpectedSubItems; the submenu-expansion is the
unreliable interaction the bUnit migration exists to replace, and the
Settings pages are now covered by bUnit component tests.
- Remove the GameImport UI tests (and unused GamesPage/OpenRCT2.lcx). The
ChunkUploader modal never renders under the in-process test host, so they
failed in every CI run; the Games list render is already covered by
AdminNavigationTests.GamesPage_ShowsEmptyTable.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Target net10.0 to match the now-net10 server project (and fix the
Playwright browser-install path in the PR workflow accordingly).
- Dismiss the persistent "Import Ready" notification (added with main's
background UploadTracker) before clicking Import; its Duration=0 toast
overlays and intercepts the modal's Import button.
- Update General settings assertions: "Database Provider" moved to the new
dedicated /Settings/Database page, so assert on "Use SSL" instead.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace non-waiting Assert.True(await locator.IsVisibleAsync()) checks with
auto-retrying Assertions.Expect(locator).ToBeVisibleAsync()/ToBeHiddenAsync()
to remove flakiness against Blazor's async rendering. Table-row/field page
objects (Metadata/Roles/Users/Profile) now expose ILocator helpers instead of
Task<bool>, so deletion checks wait for the element to disappear.
Also: rename ScreenshotHelper.CaptureIfFailedAsync to CaptureAsync (xUnit v2
cannot expose the test outcome to DisposeAsync, so it always captures the final
page state), drop the unused TestConstants.ServerPort/BaseUrl now that ports
bind dynamically, and fix IClassFixture doc comments to ICollectionFixture.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add ScreenshotHelper that captures full-page screenshots for every test
- Screenshots are named with the full test display name for easy correlation
- Save to SCREENSHOT_DIR env var (CI) or bin/Screenshots/ (local)
- Add ITestOutputHelper to all 10 test classes for test name extraction
- Screenshots are included in the existing ui-test-results artifact upload
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Switch all test classes from IClassFixture<ConfiguredServerFixture> to
[Collection("Server")] with ICollectionFixture so a single server instance
is shared across all test classes (avoids static DatabaseContext.Provider conflicts)
- Put FirstTimeSetupTests in its own collection since it needs an unconfigured server
- Remove Hangfire hosted services in UITestApplicationFactory to prevent
stack overflow during process shutdown (deep DI disposal chain)
- Add graceful shutdown handling with timeout in DisposeAsync
- All 54 tests pass, 1 skipped, clean exit code 0
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>