修改相关bug

This commit is contained in:
fuenmao
2026-09-17 11:37:39 +08:00
parent e9894538e8
commit 9de05b44b8
17 changed files with 171 additions and 30 deletions
+21
View File
@@ -47,6 +47,27 @@ foreach (var terminal in new[] { ElectronicSignStatus.Completed, ElectronicSignS
foreach (var backward in new[] { ElectronicSignStatus.PendingEmployeeSign, ElectronicSignStatus.Draft, ElectronicSignStatus.Creating, ElectronicSignStatus.Failed })
Reject(() => OnboardingSignStateGuard.Resolve(ElectronicSignStatus.PendingCompanySeal, backward), "signed progress cannot regress: " + backward);
// Uses the real signing-material validity rule. End time is exclusive.
var validityNow = new DateTime(2026, 9, 17, 12, 0, 0);
var availableVersion = new ObContractTemplateVersion { VersionStatus = ContractTemplateVersionStatus.Enabled };
Check(ContractTemplateVersionValidity.IsAvailable(availableVersion, validityNow), "enabled version without time bounds is available");
availableVersion.EffectiveDate = validityNow;
availableVersion.ExpiryDate = validityNow.AddSeconds(1);
Check(ContractTemplateVersionValidity.IsAvailable(availableVersion, validityNow), "effective boundary is inclusive");
availableVersion.ExpiryDate = validityNow;
Check(!ContractTemplateVersionValidity.IsAvailable(availableVersion, validityNow), "expiry boundary is exclusive");
availableVersion.EffectiveDate = validityNow.AddSeconds(1);
availableVersion.ExpiryDate = validityNow.AddMinutes(1);
Check(!ContractTemplateVersionValidity.IsAvailable(availableVersion, validityNow), "future version is unavailable");
availableVersion.EffectiveDate = validityNow.AddMinutes(-1);
availableVersion.ExpiryDate = validityNow.AddMinutes(1);
availableVersion.VersionStatus = ContractTemplateVersionStatus.Disabled;
Check(!ContractTemplateVersionValidity.IsAvailable(availableVersion, validityNow), "disabled version is unavailable");
ContractTemplateVersionValidity.ValidateRange(validityNow, validityNow.AddSeconds(1));
Reject(() => ContractTemplateVersionValidity.ValidateRange(validityNow, validityNow), "equal start/end rejected");
Reject(() => ContractTemplateVersionValidity.ValidateRange(validityNow, validityNow.AddSeconds(-1)), "end before start rejected");
// Exercises the real async gate with a fake external lease. Does NOT claim MySQL GET_LOCK integration.
var leases = new FakeLeases();
Task<int> Gate(string key, Func<Task<int>> action) => OnboardingOperationGate.Run(key, () => leases.Acquire(key), action);
@@ -10,6 +10,7 @@
<Compile Include="../../SimpleAdmin.Core/BaseInput/BasePageInput.cs" Link="BasePageInput.cs"/>
<Compile Include="../../SimpleAdmin.Application/Services/Onboarding/Common/OnboardingOperationGate.cs" Link="OnboardingOperationGate.cs"/>
<Compile Include="../../SimpleAdmin.Application/Services/Onboarding/ElectronicSign/OnboardingSignStateGuard.cs" Link="OnboardingSignStateGuard.cs"/>
<Compile Include="../../SimpleAdmin.Application/Services/Onboarding/Common/ContractTemplateVersionValidity.cs" Link="ContractTemplateVersionValidity.cs"/>
<Compile Include="../../SimpleAdmin.Application/Entity/Onboarding/OnboardingStatus.cs" Link="OnboardingStatus.cs"/>
</ItemGroup>
</Project>
+1
View File
@@ -7,4 +7,5 @@ namespace SimpleAdmin.Core {
}
namespace SimpleAdmin.Application {
public static class Oops { public static Exception Bah(string text) => new InvalidOperationException(text); }
public sealed class ObContractTemplateVersion { public string VersionStatus { get; set; } public DateTime? EffectiveDate { get; set; } public DateTime? ExpiryDate { get; set; } }
}