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,60 @@
using System;
using Paca.App.Browser.Features;
using Xunit;
namespace Paca.Tests.App;
public class ChromeDownloadManagerParityTests
{
private class FakeDownloadOperation : IDownloadOperation
{
public string Uri { get; set; } = "https://example.com/file.zip";
public string FileName { get; set; } = "file.zip";
public long TotalBytesToReceive { get; set; } = 100 * 1024 * 1024; // 100MB
public long BytesReceived { get; set; } = 0;
public string State { get; set; } = "InProgress";
public event Action? Changed;
public void Pause() { State = "Paused"; Changed?.Invoke(); }
public void Resume() { State = "InProgress"; Changed?.Invoke(); }
public void Cancel() { State = "Cancelled"; Changed?.Invoke(); }
public void Notify(long received, string state)
{
BytesReceived = received;
State = state;
Changed?.Invoke();
}
}
[Fact]
public void PageDownloadItem_SizeProgressText_Formats_Correctly()
{
var fake = new FakeDownloadOperation { TotalBytesToReceive = 100 * 1024 * 1024, BytesReceived = 25 * 1024 * 1024 };
var item = new PageDownloadItem(fake, "file.zip");
Assert.Equal("25.0 MB / 100.0 MB", item.SizeProgressText);
var unknownTotal = new FakeDownloadOperation { TotalBytesToReceive = 0, BytesReceived = 10 * 1024 * 1024 };
var item2 = new PageDownloadItem(unknownTotal, "stream.bin");
Assert.Equal("10.0 MB", item2.SizeProgressText);
}
[Fact]
public void PageDownloadItem_EtaText_Calculations()
{
var fake = new FakeDownloadOperation { TotalBytesToReceive = 100 * 1024 * 1024, BytesReceived = 50 * 1024 * 1024 };
var item = new PageDownloadItem(fake, "file.zip");
// When bps is 0
Assert.Equal("—", item.EtaText);
// 50MB remaining. Speed = 5MB/s -> 10 seconds remaining
item.UpdateSpeed(50 * 1024 * 1024, TimeSpan.FromSeconds(1));
item.UpdateSpeed(55 * 1024 * 1024, TimeSpan.FromSeconds(1)); // 5 MB/s
Assert.Contains("초 남음", item.EtaText);
// When completed
fake.Notify(100 * 1024 * 1024, "Completed");
Assert.Equal("완료됨", item.EtaText);
}
}