修改相关bug
This commit is contained in:
@@ -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>
|
||||
@@ -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; } }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user