60 lines
2.3 KiB
C#
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");
|
|
}
|