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:
Yun Chan 2026-09-14 00:39:44 +09:00
parent a88aafa1e5
commit 0e568f1f0a
975 changed files with 130593 additions and 16783 deletions

View file

@ -0,0 +1,57 @@
using System;
using Paca.Core;
using Xunit;
namespace Paca.Tests.Core;
public class AudioDynamicRangeCompressorGateTests
{
[Fact]
public void Gate429_AudioDynamicRangeCompressor_BuildsPresetFilter_Accurately()
{
var filter = AudioDynamicRangeCompressor.BuildFilter(CompressorPreset.NightListening);
Assert.Contains("threshold=-24dB", filter);
Assert.Contains("ratio=6", filter);
Assert.Contains("alimiter=limit=-1dB", filter);
}
[Fact]
public void Gate430_AudioDynamicRangeCompressor_BuildsCustomCompressorFilter()
{
var filter = AudioDynamicRangeCompressor.BuildCustomFilter(
thresholdDb: -22.0,
ratio: 5.0,
attackMs: 8.0,
releaseMs: 120.0,
makeupDb: 5.0,
limitPeakDb: -0.5
);
Assert.Contains("threshold=-22dB", filter);
Assert.Contains("ratio=5", filter);
Assert.Contains("attack=8", filter);
Assert.Contains("release=120", filter);
Assert.Contains("makeup=5dB", filter);
Assert.Contains("alimiter=limit=-0.5dB", filter);
}
[Fact]
public void Gate431_AudioDynamicRangeCompressor_HandlesPassthrough()
{
var filter = AudioDynamicRangeCompressor.BuildFilter(CompressorPreset.None);
Assert.Equal("anull", filter);
}
[Fact]
public void Gate432_AudioDynamicRangeCompressor_BuildsFfmpegArgs_Properly()
{
var args = AudioDynamicRangeCompressor.BuildFfmpegArgs("in.mp4", "out.mp4", CompressorPreset.NightListening, copyVideo: true);
Assert.Contains("-i \"in.mp4\"", args);
Assert.Contains("-c:v copy", args);
Assert.Contains("-af \"acompressor=", args);
Assert.Contains("-c:a aac -b:a 192k", args);
Assert.Contains("\"out.mp4\"", args);
}
}