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
55
tests/Paca.Tests/Core/MediaBitrateEstimatorGateTests.cs
Normal file
55
tests/Paca.Tests/Core/MediaBitrateEstimatorGateTests.cs
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
using System;
|
||||
using Paca.Core;
|
||||
using Xunit;
|
||||
|
||||
namespace Paca.Tests.Core;
|
||||
|
||||
public class MediaBitrateEstimatorGateTests
|
||||
{
|
||||
[Fact]
|
||||
public void Gate425_MediaBitrateEstimator_CalculatesTargetBitrates_Accurately()
|
||||
{
|
||||
// 100s, 25MB target, 128k audio, 3% container overhead
|
||||
long targetBytes = 25L * 1024 * 1024;
|
||||
var result = MediaBitrateEstimator.CalculateBitrate(100.0, targetBytes, audioBitrateKbps: 128, overheadPercent: 3.0);
|
||||
|
||||
Assert.True(result.IsPossible);
|
||||
Assert.InRange(result.VideoBitrateKbps, 1850, 1950);
|
||||
Assert.Equal(128, result.AudioBitrateKbps);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Gate426_MediaBitrateEstimator_HandlesImpossibleConstraint_Gracefully()
|
||||
{
|
||||
// 1000s, 1MB target (impossible with 128k audio)
|
||||
long targetBytes = 1L * 1024 * 1024;
|
||||
var result = MediaBitrateEstimator.CalculateBitrate(1000.0, targetBytes, audioBitrateKbps: 128);
|
||||
|
||||
Assert.False(result.IsPossible);
|
||||
Assert.True(result.VideoBitrateKbps <= 64); // Fallback minimum
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Gate427_MediaBitrateEstimator_ProvidesPlatformPresets()
|
||||
{
|
||||
Assert.Equal(25L * 1024 * 1024, MediaBitrateEstimator.GetPlatformLimitBytes(TargetPlatformLimit.DiscordFree));
|
||||
Assert.Equal(16L * 1024 * 1024, MediaBitrateEstimator.GetPlatformLimitBytes(TargetPlatformLimit.WhatsAppVideo));
|
||||
Assert.Equal(20L * 1024 * 1024, MediaBitrateEstimator.GetPlatformLimitBytes(TargetPlatformLimit.EmailAttachment));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Gate428_MediaBitrateEstimator_BuildsTwoPassFfmpegCommands()
|
||||
{
|
||||
var plan = new BitrateEstimationResult(true, 1800, 128, 25L * 1024 * 1024);
|
||||
var (pass1, pass2) = MediaBitrateEstimator.BuildTwoPassCommands("in.mp4", "out.mp4", plan);
|
||||
|
||||
Assert.Contains("-b:v 1800k", pass1);
|
||||
Assert.Contains("-pass 1", pass1);
|
||||
Assert.Contains("-an", pass1);
|
||||
|
||||
Assert.Contains("-b:v 1800k", pass2);
|
||||
Assert.Contains("-pass 2", pass2);
|
||||
Assert.Contains("-b:a 128k", pass2);
|
||||
Assert.Contains("\"out.mp4\"", pass2);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue