73 lines
2.2 KiB
C#
73 lines
2.2 KiB
C#
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);
|
|
}
|
|
}
|