releases/tests/Paca.Tests/Core/WorkspaceEncodingSanitizerTests.cs

76 lines
2.9 KiB
C#

using Paca.Core.Config;
using Xunit;
namespace Paca.Tests.Core;
public class WorkspaceEncodingSanitizerTests
{
[Fact]
public void IsCorrupted_ReturnsTrue_ForUnicodeReplacementAndMojibake()
{
// Corrupted characters found in real user config.json
string corrupted1 = "\uFFFD\u06FE\uFFFD";
string corrupted2 = "\uFFFD\uFFFD\uFFFD\uFFFD";
string corrupted3 = "\uFFFD\u043D\uFFFD";
string corrupted4 = "??";
string empty = " ";
Assert.True(WorkspaceConfigSanitizer.IsCorrupted(corrupted1));
Assert.True(WorkspaceConfigSanitizer.IsCorrupted(corrupted2));
Assert.True(WorkspaceConfigSanitizer.IsCorrupted(corrupted3));
Assert.True(WorkspaceConfigSanitizer.IsCorrupted(corrupted4));
Assert.True(WorkspaceConfigSanitizer.IsCorrupted(empty));
Assert.True(WorkspaceConfigSanitizer.IsCorrupted(null));
}
[Fact]
public void IsCorrupted_ReturnsFalse_ForValidKoreanAndEnglishNames()
{
Assert.False(WorkspaceConfigSanitizer.IsCorrupted("작업"));
Assert.False(WorkspaceConfigSanitizer.IsCorrupted("개인"));
Assert.False(WorkspaceConfigSanitizer.IsCorrupted("학습"));
Assert.False(WorkspaceConfigSanitizer.IsCorrupted("기본"));
Assert.False(WorkspaceConfigSanitizer.IsCorrupted("Work"));
Assert.False(WorkspaceConfigSanitizer.IsCorrupted("Research 2026"));
}
[Fact]
public void Sanitize_ReplacesAllCorruptedNamesWithCleanDefaults()
{
var corruptedList = new List<string> { "\uFFFD\u06FE\uFFFD", "\uFFFD\uFFFD\uFFFD\uFFFD", "\uFFFD\u043D\uFFFD" };
var sanitized = WorkspaceConfigSanitizer.Sanitize(corruptedList);
Assert.NotNull(sanitized);
Assert.NotEmpty(sanitized);
Assert.All(sanitized, name => Assert.False(WorkspaceConfigSanitizer.IsCorrupted(name)));
Assert.Contains("작업", sanitized);
Assert.Contains("개인", sanitized);
Assert.Contains("학습", sanitized);
}
[Fact]
public void Sanitize_PreservesValidNamesAndFiltersCorrupted()
{
var mixedList = new List<string> { "프로젝트A", "\uFFFD\u06FE\uFFFD", "디자인" };
var sanitized = WorkspaceConfigSanitizer.Sanitize(mixedList);
Assert.Equal(2, sanitized.Count);
Assert.Equal("프로젝트A", sanitized[0]);
Assert.Equal("디자인", sanitized[1]);
}
[Fact]
public void AppConfig_Sanitize_CleansCorruptedWorkspaceNames()
{
var config = new AppConfig
{
WorkspaceNames = new List<string> { "\uFFFD\u06FE\uFFFD", "\uFFFD\uFFFD\uFFFD\uFFFD" }
};
config.Sanitize();
Assert.NotNull(config.WorkspaceNames);
Assert.All(config.WorkspaceNames, name => Assert.False(WorkspaceConfigSanitizer.IsCorrupted(name)));
Assert.Equal("작업", config.WorkspaceNames[0]);
}
}