Files
Explorer-Workbench/tests/Explorer.Application.Tests/GitListingOverlayTests.cs

60 lines
2.3 KiB
C#

using Explorer.Application;
using Explorer.Domain;
namespace Explorer.Application.Tests;
public class GitListingOverlayTests
{
[Fact]
public void Clean_tracked_file_is_blank()
{
var status = Status("1 .M N... 100644 100644 100644 a a src/App.cs");
Assert.Equal("", GitListingOverlay.ForItem(@"C:\src\README.md", false, @"C:\src", status));
}
[Fact]
public void File_shows_modified_unstaged_and_staged()
{
var status = Status("""
1 .M N... 100644 100644 100644 a a src/App.cs
1 M. N... 100644 100644 100644 b b README.md
1 MM N... 100644 100644 100644 c c src/Both.cs
? notes.md
""");
Assert.Equal("Modified", GitListingOverlay.ForItem(@"C:\src\src\App.cs", false, @"C:\src", status));
Assert.Equal("Staged", GitListingOverlay.ForItem(@"C:\src\README.md", false, @"C:\src", status));
Assert.Equal("Staged · Modified", GitListingOverlay.ForItem(@"C:\src\src\Both.cs", false, @"C:\src", status));
Assert.Equal("Untracked", GitListingOverlay.ForItem(@"C:\src\notes.md", false, @"C:\src", status));
}
[Fact]
public void Folder_summarizes_dirty_children()
{
var status = Status("""
1 .M N... 100644 100644 100644 a a src/App.cs
? bin/out.dll
""");
Assert.Equal("Modified", GitListingOverlay.ForItem(@"C:\src\src", true, @"C:\src", status));
Assert.Equal("Untracked", GitListingOverlay.ForItem(@"C:\src\bin", true, @"C:\src", status));
Assert.Equal("", GitListingOverlay.ForItem(@"C:\src\docs", true, @"C:\src", status));
}
[Fact]
public void Nested_repo_uses_compact_badge()
{
var status = Status("1 .M N... 100644 100644 100644 a a App.cs");
Assert.Equal("main · 1 modified", GitListingOverlay.ForNestedRepo(status));
}
[Fact]
public void Outside_the_repo_is_blank()
{
var status = Status("1 .M N... 100644 100644 100644 a a App.cs");
Assert.Equal("", GitListingOverlay.ForItem(@"D:\other\App.cs", false, @"C:\src", status));
}
private static GitStatus Status(string body)
=> GitPorcelainParser.Parse("# branch.head main\n" + body, @"C:\src")
?? throw new InvalidOperationException("parse");
}