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
64
tests/Paca.Tests/App/DesktopRemoteTabSyncGateTests.cs
Normal file
64
tests/Paca.Tests/App/DesktopRemoteTabSyncGateTests.cs
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Text.Json;
|
||||
using Paca.Mobile.Core;
|
||||
using Paca.Tests.Infrastructure;
|
||||
using Xunit;
|
||||
|
||||
namespace Paca.Tests.App;
|
||||
|
||||
/// <summary>
|
||||
/// Gate 161 ~ 163: 데스크톱 ↔ 모바일 원격 탭 동기화 및 원클릭 웹 브라우징 릴레이 기계적 검증
|
||||
/// </summary>
|
||||
public class DesktopRemoteTabSyncGateTests
|
||||
{
|
||||
[Fact]
|
||||
public void Gate161_RemoteTabs_Models_And_Serialization()
|
||||
{
|
||||
var tab = new RemoteTabDto(
|
||||
Id: "tab-101",
|
||||
Title: "4K Nature Landscape - YouTube",
|
||||
Url: "https://www.youtube.com/watch?v=12345",
|
||||
IsActive: true
|
||||
);
|
||||
|
||||
var json = JsonSerializer.Serialize(tab);
|
||||
var deserialized = JsonSerializer.Deserialize<RemoteTabDto>(json);
|
||||
|
||||
Assert.NotNull(deserialized);
|
||||
Assert.Equal("tab-101", deserialized.Id);
|
||||
Assert.Equal("4K Nature Landscape - YouTube", deserialized.Title);
|
||||
Assert.Equal("https://www.youtube.com/watch?v=12345", deserialized.Url);
|
||||
Assert.True(deserialized.IsActive);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Gate162_ServerHost_Tabs_Endpoints_Registered()
|
||||
{
|
||||
var serverHostPath = Path.Combine(SourceTree.Root, "src", "Paca.Server", "ServerHost.cs");
|
||||
Assert.True(File.Exists(serverHostPath), "ServerHost.cs must exist");
|
||||
|
||||
var code = File.ReadAllText(serverHostPath);
|
||||
|
||||
Assert.Contains("/api/tabs", code);
|
||||
Assert.Contains("/api/tabs/open", code);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Gate163_ApiClient_RemoteTabs_Methods_Implemented()
|
||||
{
|
||||
var mobileDir = Directory.Exists(Path.Combine(SourceTree.Root, "src", "Paca.Mobile"))
|
||||
? Path.Combine(SourceTree.Root, "src", "Paca.Mobile")
|
||||
: Path.Combine(SourceTree.Root, "Paca.Mobile");
|
||||
|
||||
var apiClientPath = File.Exists(Path.Combine(mobileDir, "ApiClient.cs"))
|
||||
? Path.Combine(mobileDir, "ApiClient.cs")
|
||||
: Path.Combine(SourceTree.Root, "src", "Paca.Mobile.Core", "ApiClient.cs");
|
||||
Assert.True(File.Exists(apiClientPath), "ApiClient.cs must exist");
|
||||
|
||||
var code = File.ReadAllText(apiClientPath);
|
||||
|
||||
Assert.Contains("GetRemoteTabsAsync", code);
|
||||
Assert.Contains("OpenRemoteTabAsync", code);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue