- 仅国联民生收益互换支持在新增待确认、修改待确认、审批中生成交易确认书,期权、其他公司及其他交易状态保持原限制 - 交易确认书页面同步开放上述交易的“生成确认书”按钮,后端批量生成链路同步放开状态过滤 - 审批前生成仅校验客户、标的、初始持仓等模板必需核心数据;不以银行账户、联系人、保证金等非模板必填资料阻断 - 审批前已生成确认书的交易被修改时,使该交易原确认书关联失效,重新生成仍按原覆盖逻辑处理 - 审批拒绝时清理该交易审批前生成的确认书关联、OA 结果及用印队列;无其他有效引用时删除确认书数据,避免遗留无效确认书 - 保持原交易编号逻辑:自动生成和手工填写均不复用已拒绝交易编号 - 新增审批前适用范围、确认书关联及 OA 清理谓词专项单测
107 lines
4.5 KiB
C#
107 lines
4.5 KiB
C#
using YLErp.Configuration;
|
|
using YLErp.DBModels;
|
|
using YLErp.DBModels.Consts;
|
|
using YLErp.DBModels.Enums;
|
|
using YLErp.Modules.TradeModule.DocGenerateModule;
|
|
|
|
namespace YLErp.UnitTestProject.Modules.TradeModule.DocGenerateModule
|
|
{
|
|
[TestClass]
|
|
public class GuolianSwapConfirmBookScopeTest
|
|
{
|
|
[TestMethod]
|
|
public void IsPreApprovalTrade_AllAllowedStatuses_ReturnsTrue()
|
|
{
|
|
var statuses = new[]
|
|
{
|
|
ConsTrade.新增待确认,
|
|
ConsTrade.修改待确认,
|
|
ConsTrade.审批中
|
|
};
|
|
|
|
foreach (var status in statuses)
|
|
{
|
|
var trade = CreateTrade(status);
|
|
|
|
Assert.IsTrue(GuolianSwapConfirmBookScope.IsPreApprovalTrade(trade, CompanyEnum.国联), status);
|
|
}
|
|
}
|
|
|
|
[TestMethod]
|
|
public void IsPreApprovalTrade_NonGuolianSwapOrInvalidTrade_ReturnsFalse()
|
|
{
|
|
var confirmedSwap = CreateTrade(ConsTrade.确认成交);
|
|
var optionTrade = CreateTrade(ConsTrade.审批中, "香草期权");
|
|
var invalidSwap = CreateTrade(ConsTrade.审批中);
|
|
invalidSwap.ValidState = ConsGlobal.InValid;
|
|
|
|
Assert.IsFalse(GuolianSwapConfirmBookScope.IsPreApprovalTrade(confirmedSwap, CompanyEnum.国联));
|
|
Assert.IsFalse(GuolianSwapConfirmBookScope.IsPreApprovalTrade(optionTrade, CompanyEnum.国联));
|
|
Assert.IsFalse(GuolianSwapConfirmBookScope.IsPreApprovalTrade(CreateTrade(ConsTrade.审批中), CompanyEnum.国泰君安));
|
|
Assert.IsFalse(GuolianSwapConfirmBookScope.IsPreApprovalTrade(invalidSwap, CompanyEnum.国联));
|
|
}
|
|
|
|
[TestMethod]
|
|
public void OtherActiveReferencePredicate_OnlyMatchesOtherActiveTrade()
|
|
{
|
|
const string contractCode = "GLMS-TEST-20260728-FICC-04-000001";
|
|
var predicate = GuolianSwapConfirmBookCleanupService
|
|
.BuildOtherActiveReferencePredicate(contractCode, 4)
|
|
.Compile();
|
|
|
|
Assert.IsFalse(predicate(CreateRelation(4, contractCode, ContractTypeEnum.Trade, true)));
|
|
Assert.IsTrue(predicate(CreateRelation(7, contractCode, ContractTypeEnum.Trade, true)));
|
|
Assert.IsFalse(predicate(CreateRelation(7, contractCode, ContractTypeEnum.Trade, false)));
|
|
Assert.IsFalse(predicate(CreateRelation(7, "OTHER", ContractTypeEnum.Trade, true)));
|
|
Assert.IsFalse(predicate(CreateRelation(7, contractCode, ContractTypeEnum.Clearing, true)));
|
|
}
|
|
|
|
[TestMethod]
|
|
public void TradeConfirmationRelationPredicate_MatchesActiveAndInactiveRelations()
|
|
{
|
|
const string contractCode = "GLMS-TEST-20260728-FICC-04-000001";
|
|
var predicate = GuolianSwapConfirmBookCleanupService
|
|
.BuildTradeConfirmationRelationPredicate(4)
|
|
.Compile();
|
|
|
|
Assert.IsTrue(predicate(CreateRelation(4, contractCode, ContractTypeEnum.Trade, true)));
|
|
Assert.IsTrue(predicate(CreateRelation(4, contractCode, ContractTypeEnum.Trade, false)));
|
|
Assert.IsFalse(predicate(CreateRelation(7, contractCode, ContractTypeEnum.Trade, true)));
|
|
Assert.IsFalse(predicate(CreateRelation(4, contractCode, ContractTypeEnum.Clearing, true)));
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ActiveOaResultPredicate_OnlyMatchesRejectedTradeActiveResult()
|
|
{
|
|
var predicate = GuolianSwapConfirmBookCleanupService
|
|
.BuildActiveOaResultPredicate(4)
|
|
.Compile();
|
|
|
|
Assert.IsTrue(predicate(new trade_contract_oa_result { trade_id = 4, is_valid = true }));
|
|
Assert.IsFalse(predicate(new trade_contract_oa_result { trade_id = 4, is_valid = false }));
|
|
Assert.IsFalse(predicate(new trade_contract_oa_result { trade_id = 7, is_valid = true }));
|
|
}
|
|
|
|
private static trade CreateTrade(string status, string tradeType = "收益互换")
|
|
{
|
|
return new trade
|
|
{
|
|
TradeType = tradeType,
|
|
TradeStatus = status,
|
|
ValidState = ConsGlobal.Valid
|
|
};
|
|
}
|
|
|
|
private static trade_contract_r CreateRelation(int tradeId, string contractCode, string type, bool isValid)
|
|
{
|
|
return new trade_contract_r
|
|
{
|
|
TradeId = tradeId,
|
|
ContractCode = contractCode,
|
|
Type = type,
|
|
IsValid = isValid
|
|
};
|
|
}
|
|
}
|
|
}
|