using ClaudeDo.Ui.Services; using ClaudeDo.Ui.ViewModels.Islands; namespace ClaudeDo.Ui.Tests.ViewModels; public class MergePreviewPresenterTests { [Fact] public void Clean_Plural() { var (text, clean, conflict) = MergePreviewPresenter.Describe( new MergePreviewDto("clean", System.Array.Empty(), 3)); Assert.Equal("Merges cleanly · 3 files", text); Assert.True(clean); Assert.False(conflict); } [Fact] public void Clean_Singular() { var (text, _, _) = MergePreviewPresenter.Describe( new MergePreviewDto("clean", System.Array.Empty(), 1)); Assert.Equal("Merges cleanly · 1 file", text); } [Fact] public void Conflict_ListsUpToThree() { var (text, clean, conflict) = MergePreviewPresenter.Describe( new MergePreviewDto("conflict", new[] { "a.cs", "b.cs" }, 0)); Assert.Equal("Conflicts in a.cs, b.cs", text); Assert.False(clean); Assert.True(conflict); } [Fact] public void Conflict_TruncatesWithMore() { var (text, _, _) = MergePreviewPresenter.Describe( new MergePreviewDto("conflict", new[] { "a", "b", "c", "d", "e" }, 0)); Assert.Equal("Conflicts in a, b, c (+2 more)", text); } [Fact] public void Unavailable_IsMuted() { var (text, clean, conflict) = MergePreviewPresenter.Describe( new MergePreviewDto("unavailable", System.Array.Empty(), 0)); Assert.Equal("Mergeability unknown", text); Assert.False(clean); Assert.False(conflict); } [Fact] public void Null_IsEmpty() { var (text, clean, conflict) = MergePreviewPresenter.Describe(null); Assert.Equal("", text); Assert.False(clean); Assert.False(conflict); } }