Show folder names immediately and refresh stale index sizes without walking the whole drive.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-26 11:21:20 +02:00
parent 6fc7506eb7
commit e2916aef9c
88 changed files with 5373 additions and 544 deletions

View File

@@ -0,0 +1,78 @@
using Explorer.Application;
using Explorer.Domain;
namespace Explorer.Application.Tests;
public class BackgroundMaintenancePlannerTests
{
[Fact]
public void Skips_network_cloud_and_removable()
{
var utc = DateTimeOffset.Parse("2026-08-26T00:00:00Z");
var chosen = BackgroundMaintenancePlanner.NextLocalScan(
[
Source("net", SourceKind.Smb, SourceStatus.Stale, utc.AddDays(-30)),
Source("cloud", SourceKind.Cloud, SourceStatus.Stale, utc.AddDays(-30)),
Source("usb", SourceKind.Removable, SourceStatus.Stale, utc.AddDays(-30)),
Source("local", SourceKind.NtfsLocal, SourceStatus.Stale, utc.AddDays(-30))
], utc);
Assert.NotNull(chosen);
Assert.Equal("local", chosen.StableKey);
}
[Fact]
public void Prefers_stale_over_old_but_online()
{
var utc = DateTimeOffset.Parse("2026-08-26T00:00:00Z");
var chosen = BackgroundMaintenancePlanner.NextLocalScan(
[
Source("old", SourceKind.NtfsLocal, SourceStatus.Online, utc.AddDays(-40)),
Source("stale", SourceKind.NtfsLocal, SourceStatus.Stale, utc.AddDays(-2))
], utc);
Assert.Equal("stale", chosen!.StableKey);
}
[Fact]
public void Fresh_online_local_is_not_full_rescanned()
{
var utc = DateTimeOffset.Parse("2026-08-26T00:00:00Z");
var chosen = BackgroundMaintenancePlanner.NextLocalScan(
[
Source("fresh", SourceKind.NtfsLocal, SourceStatus.Online, utc.AddHours(-2))
], utc);
Assert.Null(chosen);
}
[Fact]
public void Fresh_online_local_is_verified_when_idle()
{
var utc = DateTimeOffset.Parse("2026-08-26T00:00:00Z");
var chosen = BackgroundMaintenancePlanner.NextLocalVerify(
[
Source("fresh", SourceKind.NtfsLocal, SourceStatus.Online, utc.AddHours(-2))
]);
Assert.NotNull(chosen);
Assert.Equal("fresh", chosen.StableKey);
}
[Fact]
public void Does_not_pick_a_source_already_queued()
{
var utc = DateTimeOffset.Parse("2026-08-26T00:00:00Z");
var source = Source("local", SourceKind.NtfsLocal, SourceStatus.Stale, utc.AddDays(-30));
source.Id = 7;
var chosen = BackgroundMaintenancePlanner.NextLocalScan([source], utc, alreadyQueued: new HashSet<long> { 7 });
Assert.Null(chosen);
}
private static Source Source(string key, SourceKind kind, SourceStatus status, DateTimeOffset indexed)
=> new()
{
StableKey = key,
DisplayName = key,
Kind = kind,
Status = status,
LastRootPath = @"D:\",
LastIndexedUtc = indexed
};
}