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
160
tests/Paca.Tests/Browser/ProfileManagerTests.cs
Normal file
160
tests/Paca.Tests/Browser/ProfileManagerTests.cs
Normal file
|
|
@ -0,0 +1,160 @@
|
|||
using Paca.Browser.Profiles;
|
||||
using Xunit;
|
||||
|
||||
namespace Paca.Tests.Browser;
|
||||
|
||||
public sealed class ProfileManagerTests
|
||||
{
|
||||
[Fact]
|
||||
public void DefaultProfile_IsCreatedWhenStoreIsEmpty()
|
||||
{
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), "paca_test_profile_" + Guid.NewGuid());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
try
|
||||
{
|
||||
var manager = new ProfileManager(tempDir);
|
||||
var profiles = manager.GetProfiles();
|
||||
var active = manager.GetActiveProfile();
|
||||
|
||||
Assert.NotEmpty(profiles);
|
||||
Assert.NotNull(active);
|
||||
Assert.Equal("default", active.Id);
|
||||
Assert.Equal("기본 프로필", active.Name);
|
||||
Assert.True(active.IsActive);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (Directory.Exists(tempDir)) Directory.Delete(tempDir, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AddProfile_CreatesNewProfileAndPersists()
|
||||
{
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), "paca_test_profile_" + Guid.NewGuid());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
try
|
||||
{
|
||||
var manager = new ProfileManager(tempDir);
|
||||
var newProfile = manager.AddProfile("업무용 프로필", "#059669", "💼");
|
||||
|
||||
Assert.NotNull(newProfile);
|
||||
Assert.Equal("업무용 프로필", newProfile.Name);
|
||||
Assert.Equal("#059669", newProfile.Color);
|
||||
Assert.Equal("💼", newProfile.Icon);
|
||||
Assert.False(newProfile.IsActive);
|
||||
|
||||
var list = manager.GetProfiles();
|
||||
Assert.Equal(2, list.Count);
|
||||
|
||||
// 새 인스턴스로 로드해서 파일 저장 검증
|
||||
var manager2 = new ProfileManager(tempDir);
|
||||
var list2 = manager2.GetProfiles();
|
||||
Assert.Equal(2, list2.Count);
|
||||
Assert.Contains(list2, p => p.Name == "업무용 프로필");
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (Directory.Exists(tempDir)) Directory.Delete(tempDir, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SwitchProfile_ChangesActiveProfile()
|
||||
{
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), "paca_test_profile_" + Guid.NewGuid());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
try
|
||||
{
|
||||
var manager = new ProfileManager(tempDir);
|
||||
var p2 = manager.AddProfile("개인", "#EC4899", "🎮");
|
||||
|
||||
manager.SwitchProfile(p2.Id);
|
||||
|
||||
var active = manager.GetActiveProfile();
|
||||
Assert.Equal(p2.Id, active.Id);
|
||||
Assert.True(active.IsActive);
|
||||
|
||||
var defaultProf = manager.GetProfiles().First(p => p.Id == "default");
|
||||
Assert.False(defaultProf.IsActive);
|
||||
|
||||
// 영속화 확인
|
||||
var manager2 = new ProfileManager(tempDir);
|
||||
Assert.Equal(p2.Id, manager2.GetActiveProfile().Id);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (Directory.Exists(tempDir)) Directory.Delete(tempDir, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void UpdateProfile_UpdatesNameAndAppearance()
|
||||
{
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), "paca_test_profile_" + Guid.NewGuid());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
try
|
||||
{
|
||||
var manager = new ProfileManager(tempDir);
|
||||
var p2 = manager.AddProfile("이전 이름", "#4F46E5", "👤");
|
||||
|
||||
manager.UpdateProfile(p2.Id, "새 이름", "#DC2626", "🚀");
|
||||
|
||||
var updated = manager.GetProfile(p2.Id);
|
||||
Assert.NotNull(updated);
|
||||
Assert.Equal("새 이름", updated.Name);
|
||||
Assert.Equal("#DC2626", updated.Color);
|
||||
Assert.Equal("🚀", updated.Icon);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (Directory.Exists(tempDir)) Directory.Delete(tempDir, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DeleteProfile_RemovesProfile_CannotDeleteLastOrActive()
|
||||
{
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), "paca_test_profile_" + Guid.NewGuid());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
try
|
||||
{
|
||||
var manager = new ProfileManager(tempDir);
|
||||
var p2 = manager.AddProfile("삭제할 프로필", "#D97706", "⭐");
|
||||
Assert.Equal(2, manager.GetProfiles().Count);
|
||||
|
||||
var deleted = manager.DeleteProfile(p2.Id);
|
||||
Assert.True(deleted);
|
||||
Assert.Single(manager.GetProfiles());
|
||||
|
||||
// 기본(유일한) 프로필 삭제 시도 -> 실패해야 함
|
||||
var deletedDefault = manager.DeleteProfile("default");
|
||||
Assert.False(deletedDefault);
|
||||
Assert.Single(manager.GetProfiles());
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (Directory.Exists(tempDir)) Directory.Delete(tempDir, true);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ProfileFolder_ReturnsUniquePathForProfile()
|
||||
{
|
||||
var tempDir = Path.Combine(Path.GetTempPath(), "paca_test_profile_" + Guid.NewGuid());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
try
|
||||
{
|
||||
var manager = new ProfileManager(tempDir);
|
||||
var defaultFolder = manager.GetProfileUserDataFolder("default");
|
||||
var customFolder = manager.GetProfileUserDataFolder("custom_123");
|
||||
|
||||
Assert.NotEqual(defaultFolder, customFolder);
|
||||
Assert.Contains("custom_123", customFolder);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (Directory.Exists(tempDir)) Directory.Delete(tempDir, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue