using ClaudeDo.Installer.Core; using ClaudeDo.Installer.Pages.InstallPage; using ClaudeDo.Installer.Pages.PathsPage; using ClaudeDo.Installer.Pages.ServicePage; using ClaudeDo.Installer.Pages.SystemCheckPage; using ClaudeDo.Installer.Pages.UiSettingsPage; using ClaudeDo.Installer.Pages.WelcomePage; using ClaudeDo.Installer.Views; using Microsoft.Extensions.DependencyInjection; namespace ClaudeDo.Installer.Tests; public class WizardViewModelTests { private static IReadOnlyList BuildAllPages(InstallContext context) { var emptyServiceProvider = new ServiceCollection().BuildServiceProvider(); return new IInstallerPage[] { new WelcomePageViewModel(context), new SystemCheckPageViewModel(context, () => throw new InvalidOperationException("not needed for this test")), new PathsPageViewModel(context), new ServicePageViewModel(context), new UiSettingsPageViewModel(context), new InstallPageViewModel(context, emptyServiceProvider), }; } [Fact] public void FreshInstall_includes_SystemCheckPage_directly_after_welcome() { var context = new InstallContext { Mode = InstallerMode.FreshInstall }; var resolver = new PageResolver(BuildAllPages(context)); var vm = new WizardViewModel(resolver, context, new FakeLocalizer()); var pages = vm.Pages.ToList(); var welcomeIndex = pages.FindIndex(p => p is WelcomePageViewModel); var systemCheckIndex = pages.FindIndex(p => p is SystemCheckPageViewModel); Assert.NotEqual(-1, welcomeIndex); Assert.Equal(welcomeIndex + 1, systemCheckIndex); } [Fact] public void Update_mode_does_not_show_SystemCheckPage() { var context = new InstallContext { Mode = InstallerMode.Update }; var resolver = new PageResolver(BuildAllPages(context)); var vm = new WizardViewModel(resolver, context, new FakeLocalizer()); Assert.DoesNotContain(vm.Pages, p => p is SystemCheckPageViewModel); } }