Befund (bestätigt): src/ClaudeDo.Ui/ViewModels/Modals/DiffModalViewModel.cs, LoadAsync (~Zeile 116): bei FromCommitRange=true aber HeadCommit==null fällt der Ternary still auf GetBranchDiffAsync(WorktreePath, BaseRef) zurück. In diesem Modus ist WorktreePath aber das Listen-Working-Dir (Repo-Root, kein Worktree) — es wird ein falscher Diff angezeigt, ohne jeden Hinweis. Änderungen: 1. Guard: From ClaudeDo-Task: d667c80c-3f32-478c-8584-46aec78357b6
55 lines
1.6 KiB
C#
55 lines
1.6 KiB
C#
using System.IO;
|
|
using ClaudeDo.Localization;
|
|
using ClaudeDo.Ui.Localization;
|
|
using ClaudeDo.Ui.ViewModels.Modals;
|
|
|
|
namespace ClaudeDo.Ui.Tests.ViewModels;
|
|
|
|
public class DiffModalViewModelTests
|
|
{
|
|
public DiffModalViewModelTests()
|
|
{
|
|
var dir = AppContext.BaseDirectory;
|
|
while (dir is not null && !Directory.Exists(Path.Combine(dir, "src", "ClaudeDo.Localization", "locales")))
|
|
dir = Path.GetDirectoryName(dir);
|
|
Loc.Current = new Localizer(
|
|
LocaleStore.Load(Path.Combine(dir!, "src", "ClaudeDo.Localization", "locales")), "en");
|
|
}
|
|
|
|
[Fact]
|
|
public async Task LoadAsync_CommitRange_NullHeadCommit_ShowsUnavailableState()
|
|
{
|
|
var vm = new DiffModalViewModel(null!)
|
|
{
|
|
WorktreePath = "/some/repo",
|
|
BaseRef = "abc123",
|
|
HeadCommit = null,
|
|
FromCommitRange = true,
|
|
};
|
|
|
|
await vm.LoadAsync();
|
|
|
|
Assert.Empty(vm.Files);
|
|
Assert.NotNull(vm.StatusMessage);
|
|
Assert.Contains("no longer available", vm.StatusMessage, StringComparison.OrdinalIgnoreCase);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task LoadAsync_CommitRange_NullBaseRef_ShowsUnavailableState()
|
|
{
|
|
var vm = new DiffModalViewModel(null!)
|
|
{
|
|
WorktreePath = "/some/repo",
|
|
BaseRef = null,
|
|
HeadCommit = "def456",
|
|
FromCommitRange = true,
|
|
};
|
|
|
|
await vm.LoadAsync();
|
|
|
|
Assert.Empty(vm.Files);
|
|
Assert.NotNull(vm.StatusMessage);
|
|
Assert.Contains("no longer available", vm.StatusMessage, StringComparison.OrdinalIgnoreCase);
|
|
}
|
|
}
|