test(installer): cover CanGoNext end-to-end through WizardViewModel navigation

Navigates Welcome -> SystemCheck and asserts the Next button's CanGoNext
flips false on a blocking Error+Failed check and back to true once a
recheck comes back clean, exercising the PropertyChanged wiring between
the page and WizardViewModel rather than just the page's own BlocksNavigation.
This commit is contained in:
mika kuns
2026-08-05 20:11:15 +02:00
parent 5cc1ec98c0
commit 663b09e0a0
@@ -1,3 +1,4 @@
using ClaudeDo.Installer.Checks;
using ClaudeDo.Installer.Core; using ClaudeDo.Installer.Core;
using ClaudeDo.Installer.Pages.InstallPage; using ClaudeDo.Installer.Pages.InstallPage;
using ClaudeDo.Installer.Pages.PathsPage; using ClaudeDo.Installer.Pages.PathsPage;
@@ -5,6 +6,7 @@ using ClaudeDo.Installer.Pages.ServicePage;
using ClaudeDo.Installer.Pages.SystemCheckPage; using ClaudeDo.Installer.Pages.SystemCheckPage;
using ClaudeDo.Installer.Pages.UiSettingsPage; using ClaudeDo.Installer.Pages.UiSettingsPage;
using ClaudeDo.Installer.Pages.WelcomePage; using ClaudeDo.Installer.Pages.WelcomePage;
using ClaudeDo.Installer.Tests.Pages.SystemCheckPage;
using ClaudeDo.Installer.Views; using ClaudeDo.Installer.Views;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
@@ -50,4 +52,35 @@ public class WizardViewModelTests
Assert.DoesNotContain(vm.Pages, p => p is SystemCheckPageViewModel); Assert.DoesNotContain(vm.Pages, p => p is SystemCheckPageViewModel);
} }
[Fact]
public async Task CanGoNext_is_false_while_the_system_check_page_has_a_blocking_error_and_true_after_a_clean_recheck()
{
var context = new InstallContext { Mode = InstallerMode.FreshInstall };
var callNumber = 0;
var systemCheckPage = new SystemCheckPageViewModel(context, () =>
{
callNumber++;
IEnvironmentCheck check = callNumber == 1
? FakeEnvironmentCheck.Fail("git", CheckSeverity.Error)
: FakeEnvironmentCheck.Ok("git");
return new EnvironmentCheckService(new[] { check });
});
var resolver = new PageResolver(new IInstallerPage[]
{
new WelcomePageViewModel(context),
systemCheckPage,
});
var vm = new WizardViewModel(resolver, context, new FakeLocalizer());
await vm.GoNextCommand.ExecuteAsync(null); // Welcome -> SystemCheck; auto-run fails
Assert.Same(systemCheckPage, vm.CurrentPage);
Assert.False(vm.CanGoNext);
await systemCheckPage.RunChecksCommand.ExecuteAsync(null); // recheck comes back clean
Assert.True(vm.CanGoNext);
}
} }