using Explorer.Application; using Explorer.Domain; namespace Explorer.Application.Tests; public class FolderStatusTextTests { [Fact] public void Empty_folder_is_zero_items() { Assert.Equal("0 items", FolderStatusText.Format([], [])); } [Fact] public void Folder_totals_use_known_sizes() { var items = new[] { File("a.txt", 100), File("b.txt", 924), Folder("pics", size: 0, SizeKnowledge.Unknown) }; Assert.Equal("3 items · 1 KB", FolderStatusText.Format(items, [])); } [Fact] public void Selection_replaces_folder_totals() { var items = new[] { File("a.txt", 100), File("b.txt", 200), File("c.txt", 300) }; Assert.Equal("1 item selected · 200 B", FolderStatusText.Format(items, [items[1]])); Assert.Equal("2 items selected · 300 B", FolderStatusText.Format(items, [items[0], items[1]])); } [Fact] public void Unknown_folder_sizes_are_omitted() { var folders = new[] { Folder("a", 0, SizeKnowledge.Unknown), Folder("b", 0, SizeKnowledge.Unknown) }; Assert.Equal("2 items", FolderStatusText.Format(folders, [])); } [Fact] public void Indexed_folder_sizes_are_included() { var items = new[] { Folder("docs", 2_048, SizeKnowledge.Calculated), File("readme.txt", 1_024) }; Assert.Equal("2 items · 3 KB", FolderStatusText.Format(items, [])); } [Fact] public void Zero_byte_file_selection_still_shows_size() { var file = File("empty.dat", 0); Assert.Equal("1 item selected · 0 B", FolderStatusText.Format([file], [file])); } private static FileSystemItem File(string name, long size) => new() { FullPath = @"C:\" + name, Name = name, SizeBytes = size, SizeKnowledge = SizeKnowledge.Calculated }; private static FileSystemItem Folder(string name, long size, SizeKnowledge knowledge) => new() { FullPath = @"C:\" + name, Name = name, IsDirectory = true, SizeBytes = size, SizeKnowledge = knowledge }; }