using System; using Paca.Mobile.Core; using Xunit; namespace Paca.Tests.Core; public class MediaStreamingTransferGateTests { [Fact] public void Gate353_MediaStreamingTransfer_ParsesExplicitRange_Correctly() { var totalSize = 10_000L; var rangeHeader = "bytes=1000-1999"; var range = MediaStreamingTransferEngine.ParseRangeHeader(rangeHeader, totalSize); Assert.True(range.IsPartial); Assert.Equal(1000L, range.Start); Assert.Equal(1999L, range.End); Assert.Equal(1000L, range.ContentLength); Assert.Equal("bytes 1000-1999/10000", range.ContentRangeHeader); } [Fact] public void Gate354_MediaStreamingTransfer_ParsesOpenEndedRange_ToEOF() { var totalSize = 5_000L; var rangeHeader = "bytes=2000-"; var range = MediaStreamingTransferEngine.ParseRangeHeader(rangeHeader, totalSize); Assert.True(range.IsPartial); Assert.Equal(2000L, range.Start); Assert.Equal(4999L, range.End); Assert.Equal(3000L, range.ContentLength); Assert.Equal("bytes 2000-4999/5000", range.ContentRangeHeader); } [Fact] public void Gate355_MediaStreamingTransfer_ComputesProgressAndSpeed_Accurately() { // 50 MB transferred out of 100 MB in 5.0 seconds var total = 100 * 1024 * 1024L; var transferred = 50 * 1024 * 1024L; var elapsed = 5.0; var progress = MediaStreamingTransferEngine.ComputeProgress("stream-1", transferred, total, elapsed); Assert.Equal("stream-1", progress.TransferId); Assert.Equal(50.0, progress.ProgressPercent); Assert.Equal(10 * 1024 * 1024.0, progress.TransferRateBytesPerSec); // 10 MB/s Assert.Equal(10.0, progress.TransferRateMbPerSec); } [Fact] public void Gate356_MediaStreamingTransfer_HandlesInvalidRange_WithFullFallback() { var totalSize = 2_000L; // Invalid range exceeding total size var invalidRange = "bytes=5000-6000"; var result = MediaStreamingTransferEngine.ParseRangeHeader(invalidRange, totalSize); Assert.False(result.IsPartial); Assert.Equal(0L, result.Start); Assert.Equal(1999L, result.End); Assert.Equal(2000L, result.ContentLength); // Null or empty range var nullResult = MediaStreamingTransferEngine.ParseRangeHeader(null, totalSize); Assert.False(nullResult.IsPartial); Assert.Equal(2000L, nullResult.ContentLength); } }