using ClaudeDo.Ui.ViewModels; using Xunit; namespace ClaudeDo.Ui.Tests; public class IslandsShellViewModelUpdateClaudeCliTests { [Fact] public void Success_uses_last_non_empty_output_line() { var (success, message) = IslandsShellViewModel.SummarizeClaudeUpdateOutcome( 0, "Checking for updates...\nSuccessfully updated to 2.1.4\n", ""); Assert.True(success); Assert.Equal("Successfully updated to 2.1.4", message); } [Fact] public void Success_with_no_output_falls_back_to_default_message() { var (success, message) = IslandsShellViewModel.SummarizeClaudeUpdateOutcome(0, "", ""); Assert.True(success); Assert.Equal("Claude CLI is already up to date.", message); } [Fact] public void Failure_reports_exit_code_and_last_stderr_line() { var (success, message) = IslandsShellViewModel.SummarizeClaudeUpdateOutcome( 1, "", "network error\nrequest failed\n"); Assert.False(success); Assert.Equal("Update failed (exit 1): request failed", message); } [Fact] public void Failure_falls_back_to_stdout_when_stderr_is_empty() { var (success, message) = IslandsShellViewModel.SummarizeClaudeUpdateOutcome( 2, "some diagnostic line\n", ""); Assert.False(success); Assert.Equal("Update failed (exit 2): some diagnostic line", message); } }