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

171 lines
5.9 KiB
C#

using Explorer.Application;
using Explorer.Domain;
using Explorer.Domain.Abstractions;
namespace Explorer.Application.Tests;
public class UiPreferencesStoreTests
{
[Fact]
public void Parse_reads_theme_and_independent_group_flags()
{
var prefs = UiPreferencesStore.Parse(
[
"theme=Light",
"group-network=true",
"group-cloud=false",
"index-archives=true",
"auto-clear-queue=true",
"seven-zip=C:\\Program Files\\7-Zip\\7z.exe"
]);
Assert.Equal("Light", prefs.Theme);
Assert.True(prefs.GroupNetworkPlaces);
Assert.False(prefs.GroupCloudPlaces);
Assert.True(prefs.IndexArchiveContents);
Assert.True(prefs.AutoClearQueueWhenDone);
Assert.Equal(@"C:\Program Files\7-Zip\7z.exe", prefs.SevenZipPath);
Assert.Null(prefs.GitPath);
}
[Fact]
public void Parse_reads_organize_destinations()
{
var prefs = UiPreferencesStore.Parse(["organize-installers=D:\\Software", "organize-pictures=D:\\Pictures"]);
Assert.Equal(@"D:\Software", prefs.OrganizeInstallers);
Assert.Equal(@"D:\Pictures", prefs.OrganizePictures);
Assert.Null(prefs.OrganizeArchives);
}
[Fact]
public void Parse_reads_git_path()
{
var prefs = UiPreferencesStore.Parse(["git=C:\\Program Files\\Git\\cmd\\git.exe"]);
Assert.Equal(@"C:\Program Files\Git\cmd\git.exe", prefs.GitPath);
}
[Fact]
public void Parse_defaults_missing_keys()
{
var prefs = UiPreferencesStore.Parse(["theme=dark"]);
Assert.Equal("Dark", prefs.Theme);
Assert.False(prefs.GroupNetworkPlaces);
Assert.False(prefs.GroupCloudPlaces);
Assert.False(prefs.IndexArchiveContents);
Assert.True(prefs.ShowHiddenFiles);
Assert.False(prefs.ShowProtectedSystemLocations);
Assert.False(prefs.AutoClearQueueWhenDone);
Assert.Null(prefs.SevenZipPath);
Assert.Null(prefs.GitPath);
}
[Fact]
public void Parse_reads_window_layout()
{
var prefs = UiPreferencesStore.Parse(
[
"theme=Dark",
"window-width=1440.5",
"window-height=900",
"window-left=12",
"window-top=24",
"window-maximized=true",
"tree-width=320"
]);
Assert.Equal(1440.5, prefs.WindowWidth);
Assert.Equal(900, prefs.WindowHeight);
Assert.Equal(12, prefs.WindowLeft);
Assert.Equal(24, prefs.WindowTop);
Assert.True(prefs.WindowMaximized);
Assert.Equal(320, prefs.TreeWidth);
}
[Fact]
public void Load_and_save_roundtrip()
{
var dir = Path.Combine(Path.GetTempPath(), "ew-ui-prefs", Guid.NewGuid().ToString("N"));
try
{
var store = new UiPreferencesStore(new PrefsEnv(dir));
store.Save(new UiPreferences("Light", true, false, true, AutoClearQueueWhenDone: true, WindowWidth: 1100, WindowHeight: 720, TreeWidth: 300));
var loaded = store.Load();
Assert.Equal("Light", loaded.Theme);
Assert.True(loaded.GroupNetworkPlaces);
Assert.False(loaded.GroupCloudPlaces);
Assert.True(loaded.IndexArchiveContents);
Assert.True(loaded.ShowHiddenFiles);
Assert.False(loaded.ShowProtectedSystemLocations);
Assert.True(loaded.AutoClearQueueWhenDone);
Assert.Equal(1100, loaded.WindowWidth);
Assert.Equal(720, loaded.WindowHeight);
Assert.Equal(300, loaded.TreeWidth);
}
finally
{
try { Directory.Delete(dir, true); } catch { /* ignore */ }
}
}
}
public class LocationVisibilityTests
{
[Fact]
public void Hides_protected_when_setting_is_off()
{
var prefs = UiPreferences.Default;
var svi = LocationClassifier.Classify(
@"C:\System Volume Information", "System Volume Information",
AttributeFlags.Directory | AttributeFlags.Hidden | AttributeFlags.System, true);
Assert.False(LocationVisibility.ShouldShow(svi, prefs));
Assert.True(LocationVisibility.ShouldShow(svi, prefs with { ShowProtectedSystemLocations = true }));
}
[Fact]
public void Unknown_size_when_access_denied_and_zero()
{
var info = new LocationInfo(true, true, true, true, false);
Assert.Equal(SizeKnowledge.Unknown, LocationVisibility.ResolveSizeKnowledge(info, true, 0, true));
Assert.Equal(SizeKnowledge.Partial, LocationVisibility.ResolveSizeKnowledge(info, true, 1000, true));
}
[Fact]
public void Recycle_bin_folder_is_never_shown()
{
var recycle = LocationClassifier.Classify(
@"C:\$RECYCLE.BIN", "$RECYCLE.BIN",
AttributeFlags.Directory | AttributeFlags.Hidden | AttributeFlags.System, true);
Assert.False(LocationVisibility.ShouldShow(recycle, UiPreferences.Default));
Assert.False(LocationVisibility.ShouldShow(recycle, UiPreferences.Default with
{
ShowHiddenFiles = true,
ShowProtectedSystemLocations = true
}));
}
[Fact]
public void Recycle_bin_summary_clamps_negative_query_values()
{
var summary = RecycleBinSummary.FromQuery(-12, -3);
Assert.Equal(0, summary.ItemCount);
Assert.Equal(0, summary.UsedBytes);
var ok = RecycleBinSummary.FromQuery(4096, 3);
Assert.Equal(3, ok.ItemCount);
Assert.Equal(4096, ok.UsedBytes);
}
}
file sealed class PrefsEnv : IAppEnvironment
{
public PrefsEnv(string dir)
{
DataDirectory = dir;
Directory.CreateDirectory(dir);
DatabasePath = Path.Combine(dir, "index.db");
LogDirectory = Path.Combine(dir, "logs");
Directory.CreateDirectory(LogDirectory);
}
public string DataDirectory { get; }
public string DatabasePath { get; }
public string LogDirectory { get; }
}