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,73 @@
using System;
using Paca.Mobile.Core;
using Xunit;
namespace Paca.Tests.Core;
public class MediaFileNameTemplateGateTests
{
[Fact]
public void Gate361_MediaFileNameTemplate_SubstitutesTokens_Accurately()
{
var ctx = new MediaTemplateContext
{
Title = "Rolling in the Deep",
Artist = "Adele",
Channel = "AdeleVEVO",
Domain = "youtube.com",
Resolution = "1080p",
UploadDate = new DateTime(2010, 11, 30),
TrackNumber = 1
};
var template = "[{domain}] {artist} - {title} ({resolution})";
var result = MediaFileNameTemplateEngine.FormatFileName(template, ctx);
Assert.Equal("[youtube.com] Adele - Rolling in the Deep (1080p)", result);
}
[Fact]
public void Gate362_MediaFileNameTemplate_HandlesNullTokens_Gracefully()
{
var ctx = new MediaTemplateContext
{
Title = "Solo Track",
Artist = null,
Resolution = null
};
var template = "{artist} - {title} [{resolution}]";
var result = MediaFileNameTemplateEngine.FormatFileName(template, ctx);
// Null tokens are omitted or stripped cleanly
Assert.Equal("Solo Track", result);
}
[Fact]
public void Gate363_MediaFileNameTemplate_SanitizesIllegalCharacters()
{
var dirty = "Who: Are / You * In <Wonderland>? | Check \"This\"";
var clean = MediaFileNameTemplateEngine.SanitizePathSegment(dirty);
Assert.DoesNotContain(":", clean);
Assert.DoesNotContain("/", clean);
Assert.DoesNotContain("*", clean);
Assert.DoesNotContain("<", clean);
Assert.DoesNotContain(">", clean);
Assert.DoesNotContain("?", clean);
Assert.DoesNotContain("|", clean);
Assert.DoesNotContain("\"", clean);
}
[Fact]
public void Gate364_MediaFileNameTemplate_TruncatesExcessiveLength_PreservingFormat()
{
var longTitle = new string('A', 300);
var ctx = new MediaTemplateContext { Title = longTitle };
var formatted = MediaFileNameTemplateEngine.FormatFileName("{title}", ctx, maxLength: 50);
Assert.Equal(50, formatted.Length);
Assert.StartsWith("AAAA", formatted);
}
}