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,94 @@
using System;
using System.IO;
using System.Threading.Tasks;
using Paca.App.Utils;
using Paca.Core.QuickActions;
using Xunit;
namespace Paca.Tests.App;
public class DownloadFolderOpenE2ERedScenarioTests
{
private static readonly string SolutionRoot = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, "..", "..", "..", "..", ".."));
[Fact]
public void Test01_ExplorerLauncher_CreatesMissingFolder_And_LaunchesExplorerWithFolderPath()
{
string uniqueFolder = Path.Combine(Path.GetTempPath(), $"paca_e2e_folder_{Guid.NewGuid():N}");
try
{
Assert.False(Directory.Exists(uniqueFolder), "Test directory should not exist prior to test");
// Build start info for folder opening
var psi = ExplorerLauncher.BuildProcessStartInfo(null, uniqueFolder);
// 1. Directory must be created automatically on disk!
Assert.True(Directory.Exists(uniqueFolder), "ExplorerLauncher should auto-create destination folder if missing");
// 2. Must launch explorer.exe directly with quoted path argument
Assert.Equal("explorer.exe", psi.FileName);
Assert.Contains(uniqueFolder, psi.Arguments);
Assert.True(psi.UseShellExecute);
}
finally
{
if (Directory.Exists(uniqueFolder)) Directory.Delete(uniqueFolder);
}
}
[Fact]
public void Test02_ExplorerLauncher_SelectedFile_LaunchesSelectArgument()
{
string uniqueFolder = Path.Combine(Path.GetTempPath(), $"paca_e2e_select_{Guid.NewGuid():N}");
Directory.CreateDirectory(uniqueFolder);
string testFile = Path.Combine(uniqueFolder, "test_video.mp4");
File.WriteAllText(testFile, "dummy");
try
{
var psi = ExplorerLauncher.BuildProcessStartInfo(testFile, uniqueFolder);
Assert.Equal("explorer.exe", psi.FileName);
Assert.Contains("/select,", psi.Arguments);
Assert.Contains(testFile, psi.Arguments);
Assert.True(psi.UseShellExecute);
}
finally
{
if (Directory.Exists(uniqueFolder)) Directory.Delete(uniqueFolder, true);
}
}
[Fact]
public async Task Test03_QuickAction_MediaOpenOutputFolder_ActuallyInvokesFolderOpener()
{
var catalog = new QuickActionCatalog();
var action = catalog.GetAction("media.open_output_folder");
Assert.NotNull(action);
string? openedFolder = "NOT_CALLED";
var ctx = new QuickActionContext(
OutputFolder: @"C:\Downloads\Paca",
FolderOpener: path => openedFolder = path
);
Assert.NotNull(action.Handler);
var result = await action.Handler.Invoke(ctx);
Assert.True(result.Success);
// It must NOT just display a toast, it must invoke FolderOpener!
Assert.Null(openedFolder); // FolderOpener(null) opens the output folder
}
[Fact]
public void Test04_NewTabPage_OpenDownloadsMessage_CallsOpenInExplorer()
{
string mainCs = File.ReadAllText(Path.Combine(SolutionRoot, "src", "Paca.App", "MainWindow.xaml.cs"));
Assert.Contains("case \"ntp:opendownloads\":", mainCs);
// ntp:opendownloads must call OpenInExplorer(null) to open the real Windows Explorer folder
int idx = mainCs.IndexOf("case \"ntp:opendownloads\":", StringComparison.OrdinalIgnoreCase);
Assert.True(idx >= 0);
string block = mainCs.Substring(idx, 200);
Assert.Contains("OpenInExplorer(null)", block);
}
}