88 lines
3.1 KiB
C#
88 lines
3.1 KiB
C#
using Explorer.Application;
|
|
|
|
namespace Explorer.Application.Tests;
|
|
|
|
public class BackgroundWorkPolicyTests
|
|
{
|
|
private static BackgroundWorkInputs Idle(TimeSpan? idle = null, bool enabled = true, bool ac = true,
|
|
bool acOnly = true, bool foreground = false, bool runNow = false)
|
|
=> new(
|
|
enabled,
|
|
TimeSpan.FromMinutes(10),
|
|
idle ?? TimeSpan.FromMinutes(12),
|
|
acOnly,
|
|
ac,
|
|
foreground,
|
|
runNow);
|
|
|
|
[Fact]
|
|
public void Below_threshold_stays_active()
|
|
{
|
|
var decision = BackgroundWorkPolicy.Evaluate(Idle(TimeSpan.FromMinutes(3)));
|
|
Assert.Equal(UserActivityState.Active, decision.Activity);
|
|
Assert.False(decision.MaintenanceAllowed);
|
|
Assert.Equal(MaintenanceSkipReason.BelowIdleThreshold, decision.SkipReason);
|
|
}
|
|
|
|
[Fact]
|
|
public void Idle_past_threshold_allows_maintenance()
|
|
{
|
|
var decision = BackgroundWorkPolicy.Evaluate(Idle());
|
|
Assert.Equal(UserActivityState.Idle, decision.Activity);
|
|
Assert.True(decision.MaintenanceAllowed);
|
|
Assert.Equal(MaintenanceSkipReason.None, decision.SkipReason);
|
|
}
|
|
|
|
[Fact]
|
|
public void Activity_resumes_and_blocks_maintenance()
|
|
{
|
|
var decision = BackgroundWorkPolicy.Evaluate(Idle(TimeSpan.Zero));
|
|
Assert.Equal(UserActivityState.Active, decision.Activity);
|
|
Assert.False(decision.MaintenanceAllowed);
|
|
Assert.Equal(MaintenanceSkipReason.UserActive, decision.SkipReason);
|
|
}
|
|
|
|
[Fact]
|
|
public void Foreground_jobs_block_even_when_idle()
|
|
{
|
|
var decision = BackgroundWorkPolicy.Evaluate(Idle(foreground: true));
|
|
Assert.False(decision.MaintenanceAllowed);
|
|
Assert.Equal(MaintenanceSkipReason.ForegroundOperations, decision.SkipReason);
|
|
}
|
|
|
|
[Fact]
|
|
public void Disabled_policy_never_allows()
|
|
{
|
|
var decision = BackgroundWorkPolicy.Evaluate(Idle(enabled: false));
|
|
Assert.False(decision.MaintenanceAllowed);
|
|
Assert.Equal(MaintenanceSkipReason.Disabled, decision.SkipReason);
|
|
}
|
|
|
|
[Fact]
|
|
public void Ac_only_skips_on_battery()
|
|
{
|
|
var decision = BackgroundWorkPolicy.Evaluate(Idle(ac: false, acOnly: true));
|
|
Assert.Equal(UserActivityState.Idle, decision.Activity);
|
|
Assert.False(decision.MaintenanceAllowed);
|
|
Assert.Equal(MaintenanceSkipReason.OnBattery, decision.SkipReason);
|
|
}
|
|
|
|
[Fact]
|
|
public void Ac_only_allows_on_ac()
|
|
{
|
|
var decision = BackgroundWorkPolicy.Evaluate(Idle(ac: true, acOnly: true));
|
|
Assert.True(decision.MaintenanceAllowed);
|
|
}
|
|
|
|
[Fact]
|
|
public void Run_now_bypasses_idle_and_battery_but_not_foreground()
|
|
{
|
|
var allowed = BackgroundWorkPolicy.Evaluate(Idle(TimeSpan.Zero, ac: false, runNow: true));
|
|
Assert.True(allowed.MaintenanceAllowed);
|
|
|
|
var blocked = BackgroundWorkPolicy.Evaluate(Idle(TimeSpan.Zero, foreground: true, runNow: true));
|
|
Assert.False(blocked.MaintenanceAllowed);
|
|
Assert.Equal(MaintenanceSkipReason.ForegroundOperations, blocked.SkipReason);
|
|
}
|
|
}
|