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:
parent
a88aafa1e5
commit
0e568f1f0a
975 changed files with 130593 additions and 16783 deletions
99
tests/Paca.Tests/Browser/ChromeDownloadShelfSecurityTests.cs
Normal file
99
tests/Paca.Tests/Browser/ChromeDownloadShelfSecurityTests.cs
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
using System.Linq;
|
||||
using Paca.Browser.Downloads;
|
||||
using Xunit;
|
||||
|
||||
namespace Paca.Tests.Browser;
|
||||
|
||||
public class ChromeDownloadShelfSecurityTests
|
||||
{
|
||||
[Fact]
|
||||
public void AutoOpenFilePolicy_Strictly_Blocks_Dangerous_Executable_Extensions()
|
||||
{
|
||||
var policy = new ChromeAutoOpenFilePolicy();
|
||||
|
||||
// Must reject common executable and script types
|
||||
string[] dangerous = { ".exe", ".bat", ".cmd", ".ps1", ".vbs", ".js", ".msi", ".scr", ".jar", ".pif", ".cpl", ".hta" };
|
||||
foreach (var ext in dangerous)
|
||||
{
|
||||
bool setSuccess = policy.SetAutoOpen(ext, true);
|
||||
Assert.False(setSuccess);
|
||||
Assert.False(policy.IsAutoOpenEnabled(ext));
|
||||
Assert.False(policy.CanAutoOpen($"payload{ext}"));
|
||||
Assert.False(policy.CanAutoOpen($"PAYLOAD{ext.ToUpperInvariant()}"));
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AutoOpenFilePolicy_Allows_Safe_Extensions_And_Toggles_State()
|
||||
{
|
||||
var policy = new ChromeAutoOpenFilePolicy();
|
||||
|
||||
Assert.False(policy.CanAutoOpen("document.pdf"));
|
||||
|
||||
bool setPdf = policy.SetAutoOpen(".pdf", true);
|
||||
Assert.True(setPdf);
|
||||
Assert.True(policy.IsAutoOpenEnabled(".pdf"));
|
||||
Assert.True(policy.CanAutoOpen("document.pdf"));
|
||||
Assert.True(policy.CanAutoOpen("REPORT.PDF"));
|
||||
|
||||
// Disable
|
||||
policy.SetAutoOpen("pdf", false);
|
||||
Assert.False(policy.IsAutoOpenEnabled(".pdf"));
|
||||
Assert.False(policy.CanAutoOpen("document.pdf"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DownloadShelfCoordinator_Tracks_Items_And_Enforces_Capacity()
|
||||
{
|
||||
var coordinator = new ChromeDownloadShelfCoordinator(maxItems: 3);
|
||||
Assert.Empty(coordinator.Items);
|
||||
Assert.False(coordinator.IsVisible);
|
||||
|
||||
var it1 = coordinator.AddOrUpdate("1", "video1.mp4", 1000);
|
||||
var it2 = coordinator.AddOrUpdate("2", "video2.mp4", 2000);
|
||||
var it3 = coordinator.AddOrUpdate("3", "video3.mp4", 3000);
|
||||
|
||||
Assert.Equal(3, coordinator.Items.Count);
|
||||
Assert.True(coordinator.IsVisible);
|
||||
|
||||
// Adding 4th item evicts oldest (it1)
|
||||
var it4 = coordinator.AddOrUpdate("4", "video4.mp4", 4000);
|
||||
Assert.Equal(3, coordinator.Items.Count);
|
||||
Assert.DoesNotContain(coordinator.Items, x => x.Id == "1");
|
||||
Assert.Contains(coordinator.Items, x => x.Id == "4");
|
||||
|
||||
// Update progress
|
||||
coordinator.UpdateProgress("4", bytesReceived: 2000, speedBytesPerSec: 500000, isComplete: false);
|
||||
var item4 = coordinator.Items.First(x => x.Id == "4");
|
||||
Assert.Equal(2000, item4.BytesReceived);
|
||||
Assert.Equal(50, item4.Percent);
|
||||
Assert.False(item4.IsComplete);
|
||||
|
||||
// Mark complete
|
||||
coordinator.UpdateProgress("4", bytesReceived: 4000, speedBytesPerSec: 0, isComplete: true, filePath: @"C:\downloads\video4.mp4");
|
||||
item4 = coordinator.Items.First(x => x.Id == "4");
|
||||
Assert.Equal(100, item4.Percent);
|
||||
Assert.True(item4.IsComplete);
|
||||
Assert.Equal(@"C:\downloads\video4.mp4", item4.FilePath);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DownloadShelfCoordinator_Dismiss_And_Clear()
|
||||
{
|
||||
var coordinator = new ChromeDownloadShelfCoordinator();
|
||||
coordinator.AddOrUpdate("1", "doc.pdf", 500);
|
||||
coordinator.AddOrUpdate("2", "music.mp3", 1500);
|
||||
|
||||
Assert.Equal(2, coordinator.Items.Count);
|
||||
Assert.True(coordinator.IsVisible);
|
||||
|
||||
coordinator.DismissItem("1");
|
||||
Assert.Single(coordinator.Items);
|
||||
Assert.Equal("2", coordinator.Items[0].Id);
|
||||
Assert.True(coordinator.IsVisible);
|
||||
|
||||
coordinator.DismissAll();
|
||||
Assert.Empty(coordinator.Items);
|
||||
Assert.False(coordinator.IsVisible);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue