feat(ads/seo/release): v1.2.0 with live Google Ads, isolated ad profile, ads.txt, and SEO/AEO/GEO optimization
This commit is contained in:
parent
a88aafa1e5
commit
0e568f1f0a
975 changed files with 130593 additions and 16783 deletions
74
tests/Paca.Tests/Core/MediaStreamingTransferGateTests.cs
Normal file
74
tests/Paca.Tests/Core/MediaStreamingTransferGateTests.cs
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
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);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue