test(core/browser/platform): 26 extreme RED/GREEN TDD cycles and full regression hardening (3,235 PASS)
Some checks failed
release / test (push) Failing after 14m5s
release / windows (push) Has been cancelled
release / android (push) Has been cancelled
release / linux (push) Has been cancelled
release / macos (push) Has been cancelled

This commit is contained in:
Yun Chan 2026-09-18 23:32:32 +09:00
parent bcd242691f
commit 8677853822
100 changed files with 4814 additions and 333 deletions

View file

@ -0,0 +1,119 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Paca.Core.Config;
using Paca.Core.Security;
using Xunit;
namespace Paca.Tests.Core;
public class SecurityAndConfigExtremeRedTests
{
private const string TestBase32Secret = "JBSWY3DPEHPK3PXP"; // "Hello!" in Base32
[Theory]
[InlineData(0)]
[InlineData(-10)]
[InlineData(-1)]
public void TotpEngine_ZeroOrNegativeTimeStep_DoesNotThrowDivideByZero(int timeStep)
{
var ex = Record.Exception(() =>
TotpEngine.GenerateCurrentCode(TestBase32Secret, timeStepSeconds: timeStep));
Assert.Null(ex);
}
[Theory]
[InlineData(0)]
[InlineData(-30)]
public void TotpEngine_GetRemainingSeconds_ZeroOrNegativeTimeStep_DoesNotThrowDivideByZero(int timeStep)
{
var ex = Record.Exception(() =>
TotpEngine.GetRemainingSeconds(timeStepSeconds: timeStep));
Assert.Null(ex);
var remaining = TotpEngine.GetRemainingSeconds(timeStepSeconds: timeStep);
Assert.True(remaining > 0);
}
[Theory]
[InlineData(0)]
[InlineData(-5)]
[InlineData(20)]
public void TotpEngine_InvalidDigits_ClampedToValidRange(int digits)
{
var code = TotpEngine.GenerateCurrentCode(TestBase32Secret, digits: digits);
Assert.True(code.Length >= 6 && code.Length <= 8);
}
[Fact]
public void CredentialSecurityAuditor_NullCredentials_ReturnsSafeReport()
{
var report = CredentialSecurityAuditor.PerformAudit(null!);
Assert.NotNull(report);
Assert.Equal(0, report.TotalAccounts);
Assert.Equal(100, report.OverallHealthScore);
}
[Fact]
public void CredentialSecurityAuditor_NegativeDays_ClampsToPositive()
{
var cred = new SiteCredentialRecord
{
Id = "1",
Domain = "example.com",
Username = "user",
DecryptedPassword = "SuperSecurePassword123!",
CreatedAt = DateTime.UtcNow,
LastModifiedAt = DateTime.UtcNow
};
var report = CredentialSecurityAuditor.PerformAudit(new[] { cred }, oldPasswordDays: -10);
Assert.Equal(0, report.OldPasswordCount);
}
[Fact]
public void CredentialSecurityAuditor_RecentlyModified_NotMarkedAsOldEvenIfCreatedLongAgo()
{
var cred = new SiteCredentialRecord
{
Id = "1",
Domain = "example.com",
Username = "user",
DecryptedPassword = "SuperSecurePassword123!",
CreatedAt = DateTime.UtcNow.AddDays(-200), // Created 200 days ago
LastModifiedAt = DateTime.UtcNow // But modified today!
};
var report = CredentialSecurityAuditor.PerformAudit(new[] { cred }, oldPasswordDays: 90);
Assert.Equal(0, report.OldPasswordCount);
Assert.DoesNotContain(report.Issues, i => i.IssueType == "OldPassword");
}
[Fact]
public void WorkspaceConfigSanitizer_ExcessiveWorkspaces_CappedTo20()
{
var many = Enumerable.Range(1, 100).Select(i => $"Workspace_{i}").ToList();
var sanitized = WorkspaceConfigSanitizer.Sanitize(many);
Assert.True(sanitized.Count <= 20);
}
[Fact]
public void WorkspaceConfigSanitizer_OverlyLongName_TruncatedSafely()
{
var longName = new string('A', 200);
var sanitized = WorkspaceConfigSanitizer.Sanitize(new[] { longName });
Assert.Single(sanitized);
Assert.True(sanitized[0].Length <= 30);
}
[Theory]
[InlineData(null)]
[InlineData("")]
[InlineData(" ")]
public void PasswordSecurityEngine_EvaluateStrength_NullOrWhitespace_ReturnsZeroScore(string? emptyPass)
{
var result = PasswordSecurityEngine.EvaluateStrength(emptyPass!);
Assert.NotNull(result);
Assert.Equal(0, result.Score);
Assert.Equal(PasswordGrade.VeryWeak, result.Grade);
}
}