84 lines
3.1 KiB
C#
84 lines
3.1 KiB
C#
using System;
|
|
using Paca.Mobile.Core;
|
|
using Xunit;
|
|
|
|
namespace Paca.Tests.Core;
|
|
|
|
public class DataUsageQuotaTrackerGateTests
|
|
{
|
|
[Fact]
|
|
public void Gate333_DataUsageQuotaTracker_AccumulatesWifiAndCellularSeparately()
|
|
{
|
|
var tracker = new DataUsageQuotaTracker();
|
|
|
|
tracker.RecordUsage(bytes: 500 * 1024 * 1024, isCellular: false); // 500 MB Wifi
|
|
tracker.RecordUsage(bytes: 300 * 1024 * 1024, isCellular: false); // 300 MB Wifi
|
|
tracker.RecordUsage(bytes: 200 * 1024 * 1024, isCellular: true); // 200 MB Cellular
|
|
|
|
Assert.Equal(800 * 1024 * 1024L, tracker.TotalWifiBytes);
|
|
Assert.Equal(200 * 1024 * 1024L, tracker.TotalCellularBytes);
|
|
Assert.Equal(1000 * 1024 * 1024L, tracker.TotalBytes);
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate334_DataUsageQuotaTracker_TriggersWarningAt80Percent()
|
|
{
|
|
var settings = new QuotaSettings(
|
|
MonthlyCellularQuotaBytes: 10L * 1024 * 1024 * 1024, // 10 GB
|
|
WarningThresholdPercent: 80.0,
|
|
AutoPauseOnQuotaExceeded: true
|
|
);
|
|
|
|
// 8.2 GB consumed (82%)
|
|
var currentBytes = (long)(8.2 * 1024 * 1024 * 1024);
|
|
var status = DataUsageQuotaTracker.EvaluateQuota(currentBytes, settings);
|
|
|
|
Assert.True(status.IsWarning);
|
|
Assert.False(status.IsExceeded);
|
|
Assert.False(status.ShouldPauseDownload);
|
|
Assert.True(status.UsagePercent >= 80.0 && status.UsagePercent < 100.0);
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate335_DataUsageQuotaTracker_AutoPausesWhen100PercentExceeded()
|
|
{
|
|
var settings = new QuotaSettings(
|
|
MonthlyCellularQuotaBytes: 5L * 1024 * 1024 * 1024, // 5 GB
|
|
WarningThresholdPercent: 80.0,
|
|
AutoPauseOnQuotaExceeded: true
|
|
);
|
|
|
|
// 5.1 GB consumed (102%)
|
|
var currentBytes = (long)(5.1 * 1024 * 1024 * 1024);
|
|
var status = DataUsageQuotaTracker.EvaluateQuota(currentBytes, settings);
|
|
|
|
Assert.True(status.IsWarning);
|
|
Assert.True(status.IsExceeded);
|
|
Assert.True(status.ShouldPauseDownload);
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate336_DataUsageQuotaTracker_PassesGracefully_WhenUnlimitedOrAutoPauseDisabled()
|
|
{
|
|
var unlimitedSettings = new QuotaSettings(
|
|
MonthlyCellularQuotaBytes: 0, // 0 = Unlimited
|
|
WarningThresholdPercent: 80.0,
|
|
AutoPauseOnQuotaExceeded: true
|
|
);
|
|
|
|
var statusUnlimited = DataUsageQuotaTracker.EvaluateQuota(100L * 1024 * 1024 * 1024, unlimitedSettings);
|
|
Assert.False(statusUnlimited.IsWarning);
|
|
Assert.False(statusUnlimited.IsExceeded);
|
|
Assert.False(statusUnlimited.ShouldPauseDownload);
|
|
|
|
var noAutoPause = new QuotaSettings(
|
|
MonthlyCellularQuotaBytes: 1L * 1024 * 1024 * 1024,
|
|
WarningThresholdPercent: 80.0,
|
|
AutoPauseOnQuotaExceeded: false // Auto pause disabled
|
|
);
|
|
|
|
var statusNoPause = DataUsageQuotaTracker.EvaluateQuota(2L * 1024 * 1024 * 1024, noAutoPause);
|
|
Assert.True(statusNoPause.IsExceeded);
|
|
Assert.False(statusNoPause.ShouldPauseDownload); // Allowed because auto pause is disabled
|
|
}
|
|
}
|