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
|
|
@ -0,0 +1,79 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Paca.Core.QuickActions;
|
||||
using Xunit;
|
||||
|
||||
namespace Paca.Tests.App;
|
||||
|
||||
public class QuickActionLauncherIntegrationGateTests
|
||||
{
|
||||
private static readonly string SolutionRoot = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, "..", "..", "..", "..", ".."));
|
||||
|
||||
[Fact]
|
||||
public void Gate_MainWindow_IntegratesQuickActionServicesAndTray()
|
||||
{
|
||||
var mwPath = Path.Combine(SolutionRoot, "src", "Paca.App", "MainWindow.xaml.cs");
|
||||
Assert.True(File.Exists(mwPath), $"MainWindow.xaml.cs must exist at {mwPath}");
|
||||
var code = File.ReadAllText(mwPath);
|
||||
|
||||
// Global hotkey integration
|
||||
Assert.Contains("InitializeQuickActionServices", code);
|
||||
Assert.Contains("Shift+Ctrl+Alt+P", code);
|
||||
Assert.Contains("ShowQuickActionLauncher", code);
|
||||
|
||||
// Windows tray daemon integration
|
||||
Assert.Contains("WindowsTrayDaemon", code);
|
||||
Assert.Contains("CloseToTray", code);
|
||||
Assert.Contains("ForceClose", code);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Gate_QuickActionLauncher_ExecuteAction_ExecutesHandlerWithContext()
|
||||
{
|
||||
var catalog = new QuickActionCatalog();
|
||||
bool actionRan = false;
|
||||
string? passedQuery = null;
|
||||
|
||||
var customAction = new QuickActionItem(
|
||||
"test.custom_action",
|
||||
"테스트 액션",
|
||||
QuickActionCategory.Developer,
|
||||
"test custom action",
|
||||
"Ctrl+Alt+T",
|
||||
"\uE710",
|
||||
ctx =>
|
||||
{
|
||||
actionRan = true;
|
||||
passedQuery = ctx.SelectedText;
|
||||
}
|
||||
);
|
||||
|
||||
catalog.RegisterAction(customAction);
|
||||
|
||||
var retrieved = catalog.FindById("test.custom_action");
|
||||
Assert.NotNull(retrieved);
|
||||
|
||||
var context = new QuickActionContext(SelectedText: "hello world");
|
||||
retrieved.Handler?.Invoke(context);
|
||||
|
||||
Assert.True(actionRan);
|
||||
Assert.Equal("hello world", passedQuery);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Gate_QuickActionCatalog_Contains200PlusActionsAcross8Categories()
|
||||
{
|
||||
var catalog = new QuickActionCatalog();
|
||||
var all = catalog.GetAllActions();
|
||||
|
||||
Assert.True(all.Count >= 200, $"Expected >= 200 actions, but got {all.Count}");
|
||||
|
||||
// Verify all 8 categories are populated
|
||||
foreach (QuickActionCategory cat in Enum.GetValues<QuickActionCategory>())
|
||||
{
|
||||
var catItems = catalog.GetByCategory(cat);
|
||||
Assert.True(catItems.Count > 0, $"Category {cat} must contain at least 1 action.");
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue