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,")] [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 { 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 { 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); } }