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 } }