feat(ui): Worker-Menü "Update Claude CLI" führt claude update aus
Neuer Eintrag im Worker-Menü der Titelleiste, der die Claude CLI über das konfigurierte claude_bin (ExecutableResolver, inkl. Shim-Handling) mit `claude update` aktualisiert. Ausgabe/Fehler landen im Footer-Strip (FlashFooterSuccess/FlashFooterError), Menüpunkt ist während des Laufs deaktiviert. 5-Minuten-Timeout tötet den Prozessbaum.
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user