Scripts are now grabbed from a separate request. This ensures that the contents of the scripts themselves don't muddy up the manifest model. This also opens up the potential to allow clients to redownload scripts without redownloading the entire game/tool/redist.
Blazor Server's InputFile component doesn't reliably process synthetic
FileList objects from Playwright's SetInputFilesAsync on headless Linux.
Switch to clicking the upload label to trigger the native file dialog,
then intercept it with Playwright's FileChooser API. This triggers a
real browser file selection that Blazor always recognizes.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.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>
- GameEditTests now use a game seeded via the service layer in
ConfiguredServerFixture instead of importing via the UI.
This eliminates the Blazor InputFile compatibility issue on Linux CI.
- GamesPage.ImportGameAsync uses SetInputFilesAsync with retry and
manual change event dispatch for Blazor InputFile compatibility.
- Add dorny/test-reporter to display test results in PR summary.
- Add checks/pull-requests write permissions for test-reporter.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use Playwright's FileChooser API instead of SetInputFilesAsync on the
hidden file input. AntDesign's Upload component JS interop doesn't
recognize files set directly on the hidden input in headless Linux,
leaving the Upload button disabled. The FileChooser approach intercepts
the native file dialog, which AntDesign processes normally.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The LANCommander.UI project runs 'npm run package' during build,
which requires Node.js and npm dependencies to be installed first.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Runs Playwright UI tests on ubuntu-latest with Chromium.
Only builds and tests the LANCommander.Server.UI.Tests project.
Uploads test results as artifacts for inspection on failure.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Refactor FirstTimeSetupTests to use FreshServerFixture via ICollectionFixture
instead of creating its own UITestApplicationFactory per test
- Skip _realHost.Dispose() in UITestApplicationFactory since the DI container's
deep dependency chain causes an uncatchable native StackOverflowException
- All 62 tests pass with exit code 0 (61 pass, 1 skip)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copy OpenRCT2.lcx into TestData/ and reference via AppContext.BaseDirectory
so tests don't depend on a user-specific Downloads path.
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>
- Create UsersPage page object with navigate, search, user visibility,
roles check, and delete methods
- Add UserManagementTests with 5 tests: admin user visibility, search,
roles display, new user registration, and user deletion
- Fix GamesPage.cs syntax error (unchecked is a C# keyword)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Create SettingsPage page object with navigation helpers for all settings
sub-pages and SettingsTests with 9 tests covering General form elements,
Users list, Roles list, Authentication, Archives, Media, Beacon, Updates,
and Appearance settings pages.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add Playwright-based UI tests for the Roles management page including:
- RolesPage page object with navigation, add, delete, and visibility methods
- Tests verifying Administrator role visibility
- Tests for adding and deleting custom roles
- Test confirming Administrator role cannot be deleted
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace process-based server management (ServerManager) with ASP.NET Core's
WebApplicationFactory<Program> for proper integration testing:
- Add UITestApplicationFactory with dual-host pattern (real Kestrel + dummy TestServer)
to work around .NET 9's hard-cast to TestServer in WebApplicationFactory
- Use in-memory EF Core database with dynamic port binding (IPAddress.Loopback:0)
- Stub IVersionProvider and IGitHubService to avoid external dependencies
- Programmatically create admin user in ConfiguredServerFixture via service layer
- Remove ServerManager.cs (no longer needed)
- Skip CompleteWizardAndLogin test (requires real DB file I/O)
- 18 tests pass, 1 skipped, ~28s runtime (down from ~101s)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>