Show Git, Cloud, and created date in Details, and hide Free space except on drives.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-26 22:07:35 +02:00
parent ff070beba4
commit b72c375e87
10 changed files with 371 additions and 17 deletions

View File

@@ -0,0 +1,59 @@
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");
}