releases/tests/Paca.Tests/Detection/UrlAndMediaDetectionExtremeRedTests.cs
Yun Chan 8677853822
Some checks failed
release / test (push) Failing after 14m5s
release / windows (push) Has been cancelled
release / android (push) Has been cancelled
release / linux (push) Has been cancelled
release / macos (push) Has been cancelled
test(core/browser/platform): 26 extreme RED/GREEN TDD cycles and full regression hardening (3,235 PASS)
2026-09-18 23:32:32 +09:00

119 lines
4.8 KiB
C#

using System;
using System.Collections.Generic;
using Paca.Core.Config;
using Paca.Core.Detection;
using Paca.Core.Security;
using Xunit;
namespace Paca.Tests.Detection;
public class UrlAndMediaDetectionExtremeRedTests
{
[Theory]
[InlineData(null)]
[InlineData("")]
[InlineData(" ")]
[InlineData("not a url")]
[InlineData("javascript:alert('pwn')")]
[InlineData("data:text/html,<script>alert(1)</script>")]
[InlineData("file:///C:/Windows/System32/calc.exe")]
[InlineData("blob:https://youtube.com/1234-5678")]
public void SocialSiteDetector_TryMatchString_InvalidOrDangerousUrls_ReturnsFalse(string? input)
{
var result = SocialSiteDetector.TryMatch(input, out var normalized, out var label);
Assert.False(result);
Assert.Empty(normalized);
Assert.Empty(label);
}
[Theory]
[InlineData("https://www.youtube.com/watch?v=dQw4w9WgXcQ", "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "YOUTUBE")]
[InlineData("https://youtu.be/dQw4w9WgXcQ", "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "YOUTUBE")]
[InlineData("https://www.youtube.com/shorts/dQw4w9WgXcQ", "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "YOUTUBE")]
[InlineData("https://twitter.com/OpenAI/status/1234567890", "https://x.com/OpenAI/status/1234567890", "X")]
[InlineData("https://x.com/OpenAI/status/1234567890", "https://x.com/OpenAI/status/1234567890", "X")]
[InlineData("https://www.instagram.com/reel/C_xyz123/", "https://www.instagram.com/reel/C_xyz123", "INSTAGRAM")]
[InlineData("https://www.tiktok.com/@user/video/1234567890", "https://www.tiktok.com/@user/video/1234567890", "TIKTOK")]
public void SocialSiteDetector_TryMatchString_ValidUrls_NormalizesCorrectly(string input, string expectedUrl, string expectedLabel)
{
var result = SocialSiteDetector.TryMatch(input, out var normalized, out var label);
Assert.True(result);
Assert.Equal(expectedUrl, normalized);
Assert.Equal(expectedLabel, label);
}
[Fact]
public void MediaDetector_Classify_NullConfig_ReturnsNullWithoutThrowing()
{
var result = MediaDetector.Classify("https://cdn.example.com/video.mp4", "video/mp4", 1024 * 1024, null!);
Assert.Null(result);
}
[Theory]
[InlineData("javascript:alert('xss')")]
[InlineData("data:video/mp4;base64,AAAA")]
[InlineData("file:///C:/videos/test.mp4")]
[InlineData("blob:https://example.com/uuid-1234")]
public void MediaDetector_Classify_DangerousSchemes_ReturnsNull(string dangerousUri)
{
var config = new AppConfig();
var result = MediaDetector.Classify(dangerousUri, "video/mp4", 1024 * 1024, config);
Assert.Null(result);
}
[Fact]
public void MediaDetector_Classify_InvalidNegativeLengthBelowMinusOne_ReturnsNull()
{
var config = new AppConfig();
var result = MediaDetector.Classify("https://cdn.example.com/video.mp4", "video/mp4", -99999L, config);
Assert.Null(result);
}
[Fact]
public void MediaDetector_ProbeFormat_BoundaryFtypBox_RecognizesMp4()
{
var ftypBytes = new byte[] { 0, 0, 0, 0x18, (byte)'f', (byte)'t', (byte)'y', (byte)'p', (byte)'m', (byte)'p', (byte)'4', (byte)'2' };
var format = MediaDetector.ProbeFormat(ftypBytes);
Assert.Equal("mp4", format);
}
[Fact]
public void CredentialSecurityAuditor_PerformAudit_NullList_ReturnsHealthyZeroReport()
{
var report = CredentialSecurityAuditor.PerformAudit(null!);
Assert.NotNull(report);
Assert.Equal(100, report.OverallHealthScore);
Assert.Equal(0, report.TotalAccounts);
Assert.Empty(report.Issues);
}
[Fact]
public void CredentialSecurityAuditor_PerformAudit_ListWithNullElements_FiltersNullsWithoutThrowing()
{
var credentials = new List<SiteCredentialRecord?>
{
new() { Id = "1", Domain = "example.com", Username = "user1", DecryptedPassword = "Password123!" },
null,
new() { Id = "2", Domain = "test.com", Username = "user2", DecryptedPassword = "SuperSecurePassword2026!#" }
};
var report = CredentialSecurityAuditor.PerformAudit(credentials!);
Assert.NotNull(report);
Assert.Equal(2, report.TotalAccounts);
}
[Fact]
public void CredentialSecurityAuditor_PerformAudit_DetectsWeakAndReusedPasswords()
{
var credentials = new List<SiteCredentialRecord>
{
new() { Id = "1", Domain = "site1.com", Username = "user", DecryptedPassword = "123" },
new() { Id = "2", Domain = "site2.com", Username = "user", DecryptedPassword = "123" }
};
var report = CredentialSecurityAuditor.PerformAudit(credentials);
Assert.True(report.WeakPasswordCount > 0);
Assert.True(report.ReusedPasswordCount > 0);
Assert.True(report.OverallHealthScore < 100);
}
}