Adding
This commit is contained in:
+169
@@ -0,0 +1,169 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using LCU.API.Collections.RepoApi.Domain.AlertChecker;
|
||||
using LCU.API.Collections.RepoApi.Domain.Processing;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models;
|
||||
using Xunit;
|
||||
|
||||
namespace LCU.API.Collections.RepoApiTests.AlertCheckers
|
||||
{
|
||||
public class AuctionOnHoldCheckerTest
|
||||
{
|
||||
readonly AuctionOnHoldChecker _auctionOnHoldChecker;
|
||||
|
||||
public AuctionOnHoldCheckerTest()
|
||||
{
|
||||
_auctionOnHoldChecker = new AuctionOnHoldChecker();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Auction_On_Hold_Created_Ok()
|
||||
{
|
||||
var updatedAccount = new RepoAccount()
|
||||
{
|
||||
Status = "REHO",
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral()
|
||||
{
|
||||
AuctionAssignmentToCollaterals = new List<AuctionAssignmentToCollateral>()
|
||||
{
|
||||
new AuctionAssignmentToCollateral()
|
||||
{
|
||||
AuctionAssignmentId = 1,
|
||||
CollateralId = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
AuctionAssignments = new List<AuctionAssignment>()
|
||||
{
|
||||
new AuctionAssignment()
|
||||
{
|
||||
HoldStatus = 1
|
||||
}
|
||||
},
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = updatedAccount
|
||||
};
|
||||
var result = _auctionOnHoldChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Auction On Hold", result[0].Message);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Auction_On_Hold_Not_Created_RepoRedeemed()
|
||||
{
|
||||
var updatedAccount = new RepoAccount()
|
||||
{
|
||||
Status = "REDEEMED",
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral()
|
||||
{
|
||||
AuctionAssignmentToCollaterals = new List<AuctionAssignmentToCollateral>()
|
||||
{
|
||||
new AuctionAssignmentToCollateral()
|
||||
{
|
||||
AuctionAssignmentId = 1,
|
||||
CollateralId = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
AuctionAssignments = new List<AuctionAssignment>()
|
||||
{
|
||||
new AuctionAssignment()
|
||||
{
|
||||
HoldStatus = 0
|
||||
}
|
||||
},
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = updatedAccount
|
||||
};
|
||||
var result = _auctionOnHoldChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Auction_On_Hold_Not_Created_Sold()
|
||||
{
|
||||
var updatedAccount = new RepoAccount()
|
||||
{
|
||||
Status = "SOLD",
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral()
|
||||
{
|
||||
AuctionAssignmentToCollaterals = new List<AuctionAssignmentToCollateral>()
|
||||
{
|
||||
new AuctionAssignmentToCollateral()
|
||||
{
|
||||
AuctionAssignmentId = 1,
|
||||
CollateralId = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
AuctionAssignments = new List<AuctionAssignment>()
|
||||
{
|
||||
new AuctionAssignment()
|
||||
{
|
||||
HoldStatus = 0
|
||||
}
|
||||
},
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = updatedAccount
|
||||
};
|
||||
var result = _auctionOnHoldChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Auction_On_Hold_Not_Created_No_AuctionAssignments()
|
||||
{
|
||||
var updatedAccount = new RepoAccount()
|
||||
{
|
||||
Status = "REHO",
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral()
|
||||
}
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
AuctionAssignments = new List<AuctionAssignment>()
|
||||
{
|
||||
new AuctionAssignment()
|
||||
{
|
||||
AutoIMS = new ImsAutoFileData()
|
||||
{
|
||||
FundsSent = DateTime.Now.AddDays(-2)
|
||||
}
|
||||
}
|
||||
},
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = updatedAccount
|
||||
};
|
||||
var result = _auctionOnHoldChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
+295
@@ -0,0 +1,295 @@
|
||||
using System.Collections.Generic;
|
||||
using LCU.API.Collections.RepoApi.Domain.AlertChecker;
|
||||
using LCU.API.Collections.RepoApi.Domain.Processing;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models;
|
||||
using Xunit;
|
||||
|
||||
namespace LCU.API.Collections.RepoApiTests.AlertCheckers
|
||||
{
|
||||
public class AuctionVinDifferentCheckerTest
|
||||
{
|
||||
readonly AuctionVinDifferentChecker _auctionVinDifferentChecker;
|
||||
|
||||
public AuctionVinDifferentCheckerTest()
|
||||
{
|
||||
_auctionVinDifferentChecker = new AuctionVinDifferentChecker();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Auction_Vin_Different_Single_Created_Ok()
|
||||
{
|
||||
var updatedAccount = new RepoAccount()
|
||||
{
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral()
|
||||
{
|
||||
AuctionAssignmentToCollaterals = new List<AuctionAssignmentToCollateral>()
|
||||
{
|
||||
new AuctionAssignmentToCollateral()
|
||||
{
|
||||
AuctionAssignmentId = 1,
|
||||
CollateralId = 1
|
||||
}
|
||||
},
|
||||
Vin = "OurVin"
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
AuctionAssignments = new List<AuctionAssignment>()
|
||||
{
|
||||
new AuctionAssignment()
|
||||
{
|
||||
AutoIMS = new ImsAutoFileData()
|
||||
{
|
||||
VIN = "TheirVin"
|
||||
}
|
||||
}
|
||||
},
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = updatedAccount
|
||||
};
|
||||
var result = _auctionVinDifferentChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Auction VIN Different", result[0].Message);
|
||||
Assert.Equal("Auction Assignment VIN: THEIRVIN differs from RepoManager VIN: OURVIN", result[0].SubMessage);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Auction_Vin_Different_Multiple_Created_Ok()
|
||||
{
|
||||
var updatedAccount = new RepoAccount()
|
||||
{
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral()
|
||||
{
|
||||
AuctionAssignmentToCollaterals = new List<AuctionAssignmentToCollateral>()
|
||||
{
|
||||
new AuctionAssignmentToCollateral()
|
||||
{
|
||||
AuctionAssignmentId = 1,
|
||||
CollateralId = 1
|
||||
}
|
||||
},
|
||||
Vin = "OurFirstVin"
|
||||
},
|
||||
new Collateral()
|
||||
{
|
||||
AuctionAssignmentToCollaterals = new List<AuctionAssignmentToCollateral>()
|
||||
{
|
||||
new AuctionAssignmentToCollateral()
|
||||
{
|
||||
AuctionAssignmentId = 1,
|
||||
CollateralId = 1
|
||||
}
|
||||
},
|
||||
Vin = "OurSecondVin"
|
||||
},
|
||||
new Collateral()
|
||||
{
|
||||
AuctionAssignmentToCollaterals = new List<AuctionAssignmentToCollateral>()
|
||||
{
|
||||
new AuctionAssignmentToCollateral()
|
||||
{
|
||||
AuctionAssignmentId = 1,
|
||||
CollateralId = 1
|
||||
}
|
||||
},
|
||||
Vin = "OurThirdVin"
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
AuctionAssignments = new List<AuctionAssignment>()
|
||||
{
|
||||
new AuctionAssignment()
|
||||
{
|
||||
AutoIMS = new ImsAutoFileData()
|
||||
{
|
||||
VIN = "TheirVin"
|
||||
}
|
||||
}
|
||||
},
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = updatedAccount
|
||||
};
|
||||
var result = _auctionVinDifferentChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Auction VIN Different", result[0].Message);
|
||||
Assert.Equal(
|
||||
"Auction Assignment VIN: THEIRVIN is not among RepoManager VINs: OURFIRSTVIN, OURSECONDVIN, OURTHIRDVIN",
|
||||
result[0].SubMessage);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Auction_Vin_Different_Not_Created_Single_Vins_Match()
|
||||
{
|
||||
var updatedAccount = new RepoAccount()
|
||||
{
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral()
|
||||
{
|
||||
AuctionAssignmentToCollaterals = new List<AuctionAssignmentToCollateral>()
|
||||
{
|
||||
new AuctionAssignmentToCollateral()
|
||||
{
|
||||
AuctionAssignmentId = 1,
|
||||
CollateralId = 1
|
||||
}
|
||||
},
|
||||
Vin = "OurVin"
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
AuctionAssignments = new List<AuctionAssignment>()
|
||||
{
|
||||
new AuctionAssignment()
|
||||
{
|
||||
AutoIMS = new ImsAutoFileData()
|
||||
{
|
||||
VIN = "OurVin"
|
||||
}
|
||||
}
|
||||
},
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = updatedAccount
|
||||
};
|
||||
var result = _auctionVinDifferentChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Auction_Vin_Different_Not_Created_Multiple_Vins_Match()
|
||||
{
|
||||
var updatedAccount = new RepoAccount()
|
||||
{
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral()
|
||||
{
|
||||
AuctionAssignmentToCollaterals = new List<AuctionAssignmentToCollateral>()
|
||||
{
|
||||
new AuctionAssignmentToCollateral()
|
||||
{
|
||||
AuctionAssignmentId = 1,
|
||||
CollateralId = 1
|
||||
}
|
||||
},
|
||||
Vin = "OurFirstVin"
|
||||
},
|
||||
new Collateral()
|
||||
{
|
||||
AuctionAssignmentToCollaterals = new List<AuctionAssignmentToCollateral>()
|
||||
{
|
||||
new AuctionAssignmentToCollateral()
|
||||
{
|
||||
AuctionAssignmentId = 1,
|
||||
CollateralId = 1
|
||||
}
|
||||
},
|
||||
Vin = "OurSecondVin"
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
AuctionAssignments = new List<AuctionAssignment>()
|
||||
{
|
||||
new AuctionAssignment()
|
||||
{
|
||||
AutoIMS = new ImsAutoFileData()
|
||||
{
|
||||
VIN = "OurSecondVin"
|
||||
}
|
||||
}
|
||||
},
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = updatedAccount
|
||||
};
|
||||
var result = _auctionVinDifferentChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Auction_Vin_Different_Not_Created_Vin_Null()
|
||||
{
|
||||
var updatedAccount = new RepoAccount()
|
||||
{
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral()
|
||||
{
|
||||
AuctionAssignmentToCollaterals = new List<AuctionAssignmentToCollateral>()
|
||||
{
|
||||
new AuctionAssignmentToCollateral()
|
||||
{
|
||||
AuctionAssignmentId = 1,
|
||||
CollateralId = 1
|
||||
}
|
||||
},
|
||||
Vin = "OurVin"
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
AuctionAssignments = new List<AuctionAssignment>()
|
||||
{
|
||||
new AuctionAssignment()
|
||||
{
|
||||
AutoIMS = new ImsAutoFileData()
|
||||
}
|
||||
},
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = updatedAccount
|
||||
};
|
||||
var result = _auctionVinDifferentChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Auction_Vin_Different_Not_Created_No_AuctionAssignments()
|
||||
{
|
||||
var updatedAccount = new RepoAccount()
|
||||
{
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral()
|
||||
}
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
AuctionAssignments = new List<AuctionAssignment>()
|
||||
{
|
||||
new AuctionAssignment()
|
||||
{
|
||||
AutoIMS = new ImsAutoFileData()
|
||||
}
|
||||
},
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = updatedAccount
|
||||
};
|
||||
var result = _auctionVinDifferentChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
+95
@@ -0,0 +1,95 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using LCU.API.Collections.RepoApi.Domain.AlertChecker;
|
||||
using LCU.API.Collections.RepoApi.Domain.Processing;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models.Consumer;
|
||||
using Xunit;
|
||||
|
||||
namespace LCU.API.Collections.RepoApiTests.AlertCheckers
|
||||
{
|
||||
public class CreditAdjustmentCheckerTest
|
||||
{
|
||||
private readonly CreditAdjustmentChecker _creditAdjustmentChecker;
|
||||
private readonly List<CoreTransaction> _transactions;
|
||||
|
||||
public CreditAdjustmentCheckerTest()
|
||||
{
|
||||
_transactions = new List<CoreTransaction>()
|
||||
{
|
||||
new CoreTransaction()
|
||||
{
|
||||
postingDate = DateTime.Now.AddDays(-2),
|
||||
transactionTypeCode = "PDSB",
|
||||
amount = 500,
|
||||
runningBalance = 2000,
|
||||
transactionTypeDescription = "Test"
|
||||
}
|
||||
};
|
||||
_creditAdjustmentChecker = new CreditAdjustmentChecker();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Creates_Alert_With_Recent_Transactions_Present_And_O4R_Status()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
TransactionHistory = _transactions,
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = new RepoAccount { Status = "O4R" }
|
||||
};
|
||||
|
||||
var result = _creditAdjustmentChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Credit Adjustment Received", result[0].Message);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Creates_Alert_With_Recent_Transactions_Present_And_REPO_Status()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
TransactionHistory = _transactions,
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = new RepoAccount { Status = "REPO" }
|
||||
};
|
||||
|
||||
var result = _creditAdjustmentChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Credit Adjustment Received", result[0].Message);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Creates_Alert_With_Recent_Transactions_Present_And_SOLD_Status()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
TransactionHistory = _transactions,
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = new RepoAccount { Status = "SOLD" }
|
||||
};
|
||||
|
||||
var result = _creditAdjustmentChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Credit Adjustment Received", result[0].Message);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Does_Not_Create_Alert_For_Unwatched_Statuses()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
TransactionHistory = _transactions,
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = new RepoAccount { Status = "RECA" }
|
||||
};
|
||||
|
||||
var result = _creditAdjustmentChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
+95
@@ -0,0 +1,95 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using LCU.API.Collections.RepoApi.Domain.AlertChecker;
|
||||
using LCU.API.Collections.RepoApi.Domain.Processing;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models.Consumer;
|
||||
using Xunit;
|
||||
|
||||
namespace LCU.API.Collections.RepoApiTests.AlertCheckers
|
||||
{
|
||||
public class DebitAdjustmentCheckerTest
|
||||
{
|
||||
private readonly DebitAdjustmentChecker _debitAdjustmentChecker;
|
||||
private readonly List<CoreTransaction> _transactions;
|
||||
|
||||
public DebitAdjustmentCheckerTest()
|
||||
{
|
||||
_transactions = new List<CoreTransaction>()
|
||||
{
|
||||
new CoreTransaction()
|
||||
{
|
||||
postingDate = DateTime.Now.AddDays(-2),
|
||||
transactionTypeCode = "PRCT",
|
||||
amount = 500,
|
||||
runningBalance = 2000,
|
||||
transactionTypeDescription = "Test"
|
||||
}
|
||||
};
|
||||
_debitAdjustmentChecker = new DebitAdjustmentChecker();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Creates_Alert_With_Recent_Transactions_Present_And_O4R_Status()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
TransactionHistory = _transactions,
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = new RepoAccount { Status = "O4R" }
|
||||
};
|
||||
|
||||
var result = _debitAdjustmentChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Debit Adjustment Received", result[0].Message);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Creates_Alert_With_Recent_Transactions_Present_And_REPO_Status()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
TransactionHistory = _transactions,
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = new RepoAccount { Status = "REPO" }
|
||||
};
|
||||
|
||||
var result = _debitAdjustmentChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Debit Adjustment Received", result[0].Message);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Creates_Alert_With_Recent_Transactions_Present_And_SOLD_Status()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
TransactionHistory = _transactions,
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = new RepoAccount { Status = "SOLD" }
|
||||
};
|
||||
|
||||
var result = _debitAdjustmentChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Debit Adjustment Received", result[0].Message);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Does_Not_Create_Alert_For_Unwatched_Statuses()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
TransactionHistory = _transactions,
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = new RepoAccount { Status = "RECA" }
|
||||
};
|
||||
|
||||
var result = _debitAdjustmentChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
+436
@@ -0,0 +1,436 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using LCU.API.Collections.RepoApi.Domain.AlertChecker;
|
||||
using LCU.API.Collections.RepoApi.Domain.Processing;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models.Consumer;
|
||||
using Moq;
|
||||
using Xunit;
|
||||
|
||||
namespace LCU.API.Collections.RepoApiTests.AlertCheckers
|
||||
{
|
||||
public class DocumentNotFoundCheckerTest
|
||||
{
|
||||
public DocumentNotFoundCheckerTest()
|
||||
{
|
||||
}
|
||||
|
||||
private MemberDetail MakeMemberWithAddressInState(string state)
|
||||
{
|
||||
return new MemberDetail
|
||||
{
|
||||
Address = new AddressDetail
|
||||
{
|
||||
State = state
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_NoticeOfSaleBankruptcy_Ok()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
Letters = new List<RepoLetter>(),
|
||||
Member = MakeMemberWithAddressInState("WI"),
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
Bankruptcy = "B13",
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
}
|
||||
};
|
||||
var checker = new DocumentNotFoundChecker("Notice of Sale", "LTR35", "701", "REPO");
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_NoticeOfSaleWiFound_Ok()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
Letters = new List<RepoLetter>
|
||||
{
|
||||
new RepoLetter
|
||||
{
|
||||
ActionCode = "LTR35",
|
||||
NoticeType = "WI Repo-Notice of Plan to Sell"
|
||||
}
|
||||
},
|
||||
Member = MakeMemberWithAddressInState("WI"),
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "RECA"
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "RECA"
|
||||
}
|
||||
};
|
||||
var checker = new DocumentNotFoundChecker("Notice of Sale", "LTR35", "701", "REPO");
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_NoticeOfSaleIlFound_Ok()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
Letters = new List<RepoLetter>
|
||||
{
|
||||
new RepoLetter
|
||||
{
|
||||
ActionCode = "701",
|
||||
NoticeType = "Right to Reinstate/Redeem-Illinois"
|
||||
}
|
||||
},
|
||||
Member = MakeMemberWithAddressInState("IL"),
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "RECA"
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "RECA"
|
||||
}
|
||||
};
|
||||
var checker = new DocumentNotFoundChecker("Notice of Sale", "LTR35", "701", "REPO");
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_NoticeOfSaleWrongStatus_Ok()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
Letters = new List<RepoLetter>(),
|
||||
Member = MakeMemberWithAddressInState("WI"),
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "RECA"
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "RECA"
|
||||
}
|
||||
};
|
||||
var checker = new DocumentNotFoundChecker("Notice of Sale", "LTR35", "701", "REPO");
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_NoticeOfSaleNotFound_Ok()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
Letters = new List<RepoLetter>(),
|
||||
Member = MakeMemberWithAddressInState("WI"),
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 5,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 5,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
}
|
||||
};
|
||||
|
||||
var checker = new DocumentNotFoundChecker("Notice of Plan to Sell", "LTR35", "701", "REPO");
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Notice of Plan to Sell Not Found", result[0].Message);
|
||||
Assert.Equal("123456-789", result[0].AccountNo);
|
||||
Assert.Equal("Batch", result[0].CreatedBy);
|
||||
Assert.InRange(result[0].DateAdded, DateTime.Now.AddSeconds(-1), DateTime.Now.AddSeconds(1));
|
||||
Assert.Equal(5, result[0].RepoId);
|
||||
Assert.Null(result[0].MarkedReadBy);
|
||||
Assert.Null(result[0].DateMarkedRead);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_NoticeOfRepossessionBankruptcy_Ok()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
Letters = new List<RepoLetter>(),
|
||||
Member = MakeMemberWithAddressInState("WI"),
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
Bankruptcy = "B13",
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
}
|
||||
};
|
||||
var checker = new DocumentNotFoundChecker("Notice of Repossession", "LTR34", "701", "REPO");
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_NoticeOfRepossessionWiFound_Ok()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
Letters = new List<RepoLetter>
|
||||
{
|
||||
new RepoLetter
|
||||
{
|
||||
ActionCode = "LTR34",
|
||||
NoticeType = "Repo-WI Notice of Repossession"
|
||||
}
|
||||
},
|
||||
Member = MakeMemberWithAddressInState("WI"),
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
}
|
||||
};
|
||||
var checker = new DocumentNotFoundChecker("Notice of Repossession", "LTR34", "701", "REPO");
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_NoticeOfRepossessionIlFound_Ok()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
Letters = new List<RepoLetter>
|
||||
{
|
||||
new RepoLetter
|
||||
{
|
||||
ActionCode = "701",
|
||||
NoticeType = "Right to Reinstate/Redeem-Illinois"
|
||||
}
|
||||
},
|
||||
Member = MakeMemberWithAddressInState("IL"),
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
}
|
||||
};
|
||||
var checker = new DocumentNotFoundChecker("Notice of Repossession", "LTR34", "701", "REPO");
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_NoticeOfRepossessionWrongStatus_Ok()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
Letters = new List<RepoLetter>(),
|
||||
Member = MakeMemberWithAddressInState("WI"),
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "RECA"
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "RECA"
|
||||
}
|
||||
};
|
||||
var checker = new DocumentNotFoundChecker("Notice of Repossession", "LTR34", "701", "REPO");
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_NoticeOfRepossessionNotFound_Ok()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
Letters = new List<RepoLetter>(),
|
||||
Member = MakeMemberWithAddressInState("WI"),
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 5,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 5,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
}
|
||||
};
|
||||
var checker = new DocumentNotFoundChecker("Notice of Repossession", "LTR34", "701", "REPO");
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result[0]);
|
||||
Assert.Equal("Notice of Repossession Not Found", result[0].Message);
|
||||
Assert.Equal("123456-789", result[0].AccountNo);
|
||||
Assert.Equal("Batch", result[0].CreatedBy);
|
||||
Assert.InRange(result[0].DateAdded, DateTime.Now.AddSeconds(-1), DateTime.Now.AddSeconds(1));
|
||||
Assert.Equal(5, result[0].RepoId);
|
||||
Assert.Null(result[0].MarkedReadBy);
|
||||
Assert.Null(result[0].DateMarkedRead);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Null_Letters_Dont_Throw_Exception()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
Letters = null,
|
||||
Member = MakeMemberWithAddressInState("WI"),
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
Bankruptcy = "B13",
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
}
|
||||
};
|
||||
|
||||
var checker = new DocumentNotFoundChecker("RTC Letter", "RTC 3");
|
||||
|
||||
List<EventAlert> result = null;
|
||||
|
||||
try
|
||||
{
|
||||
result = checker.CheckForAlert(slip);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
Assert.True(false, "Null letters should not have thrown an exception.");
|
||||
}
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Null_Member_Does_Not_Throw_Exception()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
Letters = new List<RepoLetter>(),
|
||||
Member = null,
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
Bankruptcy = "B13",
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
}
|
||||
};
|
||||
|
||||
var checker = new DocumentNotFoundChecker("RTC Letter", "RTC 3");
|
||||
|
||||
List<EventAlert> result = null;
|
||||
|
||||
try
|
||||
{
|
||||
result = checker.CheckForAlert(slip);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
Assert.True(false, "A null member should not have thrown an exception.");
|
||||
}
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Null_Member_Address_Does_Not_Throw_Exception()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
Letters = new List<RepoLetter>(),
|
||||
Member = MakeMemberWithAddressInState(null),
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
Bankruptcy = "B13",
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
}
|
||||
};
|
||||
|
||||
var checker = new DocumentNotFoundChecker("RTC Letter", "RTC 3");
|
||||
|
||||
List<EventAlert> result = null;
|
||||
|
||||
try
|
||||
{
|
||||
result = checker.CheckForAlert(slip);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
Assert.True(false, "A null member address should not have thrown an exception.");
|
||||
}
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
+169
@@ -0,0 +1,169 @@
|
||||
using System;
|
||||
using LCU.API.Collections.RepoApi.Domain.AlertChecker;
|
||||
using LCU.API.Collections.RepoApi.Domain.Processing;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models;
|
||||
using Xunit;
|
||||
|
||||
namespace LCU.API.Collections.RepoApiTests.AlertCheckers
|
||||
{
|
||||
public class NoticeOfSurplusDeficiencyNotSentCheckerTest
|
||||
{
|
||||
private readonly NoticeOfSurplusDeficiencyNotSentChecker _checker;
|
||||
|
||||
public NoticeOfSurplusDeficiencyNotSentCheckerTest()
|
||||
{
|
||||
_checker = new NoticeOfSurplusDeficiencyNotSentChecker();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Does_Not_Create_Alert_When_Refunds_Received_Date_Is_Null()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 1,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 1,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO",
|
||||
RefundStatus = new RefundStatus
|
||||
{
|
||||
RepoId = 1,
|
||||
RefundsReceivedDate = null
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var result = _checker.CheckForAlert(slip);
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Does_Not_Create_Alert_When_Refunds_Received_Date_Two_Days_Ago_And_Account_Not_Closed()
|
||||
{
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 1,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 1,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO",
|
||||
RefundStatus = new RefundStatus
|
||||
{
|
||||
RepoId = 1,
|
||||
RefundsReceivedDate = DateTime.Now.AddDays(-2).Date
|
||||
}
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = _checker.CheckForAlert(slip);
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Creates_Alert_When_Refunds_Received_Date_Three_Days_Ago_And_Account_Not_Closed()
|
||||
{
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 1,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 1,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO",
|
||||
RefundStatus = new RefundStatus
|
||||
{
|
||||
RepoId = 1,
|
||||
RefundsReceivedDate = DateTime.Now.AddDays(-3).Date
|
||||
}
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = _checker.CheckForAlert(slip);
|
||||
Assert.NotNull(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Does_Not_Create_Alert_When_Refunds_Received_Date_Three_Days_Ago_And_Account_Not_Closed_And_Bankruptcy_Not_Null()
|
||||
{
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 1,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO",
|
||||
Bankruptcy = "B7"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 1,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO",
|
||||
Bankruptcy = "B7",
|
||||
RefundStatus = new RefundStatus
|
||||
{
|
||||
RepoId = 1,
|
||||
RefundsReceivedDate = DateTime.Now.AddDays(-3).Date
|
||||
}
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = _checker.CheckForAlert(slip);
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Does_Not_Create_Alert_When_Refunds_Received_Date_Three_Days_Ago_And_Account_Is_Closed()
|
||||
{
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 1,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 1,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO",
|
||||
DateClosed = DateTime.Now.Date,
|
||||
RefundStatus = new RefundStatus
|
||||
{
|
||||
RepoId = 1,
|
||||
RefundsReceivedDate = DateTime.Now.AddDays(-3).Date
|
||||
}
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = _checker.CheckForAlert(slip);
|
||||
Assert.Null(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
+517
@@ -0,0 +1,517 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using LCU.API.Collections.CollectionsApiLib.Models;
|
||||
using LCU.API.Collections.RepoApi.Domain.AlertChecker;
|
||||
using LCU.API.Collections.RepoApi.Domain.Processing;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models;
|
||||
using Moq;
|
||||
using Xunit;
|
||||
|
||||
namespace LCU.API.Collections.RepoApiTests.AlertCheckers
|
||||
{
|
||||
public class O4rNoRepoCheckerTest
|
||||
{
|
||||
[Fact]
|
||||
public void Create_TooFewDays_Ok()
|
||||
{
|
||||
var checker = new O4rNoRepoChecker(RepoType.Voluntary);
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R",
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
RepoCompanySelections = new List<RepoCompanySelection>()
|
||||
{
|
||||
new RepoCompanySelection()
|
||||
{
|
||||
RepoType = RepoType.Voluntary
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
RepoStatusChanges = new List<RepoStatusChange>()
|
||||
{
|
||||
new RepoStatusChange()
|
||||
{
|
||||
StatusFrom = "None",
|
||||
StatusTo = "O4R",
|
||||
ChangedDate = DateTime.Now.AddDays(-1)
|
||||
}
|
||||
}
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_Voluntary_Ok()
|
||||
{
|
||||
var checker = new O4rNoRepoChecker(RepoType.Voluntary);
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 5,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 5,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R",
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
RepoCompanySelections = new List<RepoCompanySelection>()
|
||||
{
|
||||
new RepoCompanySelection()
|
||||
{
|
||||
RepoType = RepoType.Voluntary,
|
||||
RepoCompanyId = 10,
|
||||
RepoCompanyAssignmentDate = DateTime.Today
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
RepoStatusChanges = new List<RepoStatusChange>()
|
||||
{
|
||||
new RepoStatusChange()
|
||||
{
|
||||
StatusFrom = "None",
|
||||
StatusTo = "O4R",
|
||||
ChangedDate = DateTime.Now.AddDays(-2)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("O4R No Repo", result[0].Message);
|
||||
Assert.Equal("123456-789", result[0].AccountNo);
|
||||
Assert.Equal("Batch", result[0].CreatedBy);
|
||||
Assert.InRange(result[0].DateAdded, DateTime.Now.AddSeconds(-1), DateTime.Now.AddSeconds(1));
|
||||
Assert.Equal(5, result[0].RepoId);
|
||||
Assert.Null(result[0].MarkedReadBy);
|
||||
Assert.Null(result[0].DateMarkedRead);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_VoluntaryRepeat_Ok()
|
||||
{
|
||||
var checker = new O4rNoRepoChecker(RepoType.Voluntary);
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 7,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 7,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R",
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
RepoCompanySelections = new List<RepoCompanySelection>()
|
||||
{
|
||||
new RepoCompanySelection()
|
||||
{
|
||||
RepoType = RepoType.Voluntary,
|
||||
RepoCompanyAssignmentDate = DateTime.Today,
|
||||
RepoCompanyId = 5
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
RepoStatusChanges = new List<RepoStatusChange>()
|
||||
{
|
||||
new RepoStatusChange()
|
||||
{
|
||||
StatusFrom = "None",
|
||||
StatusTo = "O4R",
|
||||
ChangedDate = DateTime.Now.AddDays(-3)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("O4R No Repo", result[0].Message);
|
||||
Assert.Equal("123456-789", result[0].AccountNo);
|
||||
Assert.Equal("Batch", result[0].CreatedBy);
|
||||
Assert.InRange(result[0].DateAdded, DateTime.Now.AddSeconds(-1), DateTime.Now.AddSeconds(1));
|
||||
Assert.Equal(7, result[0].RepoId);
|
||||
Assert.Null(result[0].MarkedReadBy);
|
||||
Assert.Null(result[0].DateMarkedRead);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_Involuntary_Ok()
|
||||
{
|
||||
var checker = new O4rNoRepoChecker(RepoType.Involuntary);
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 4,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 4,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R",
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
RepoCompanySelections = new List<RepoCompanySelection>()
|
||||
{
|
||||
new RepoCompanySelection()
|
||||
{
|
||||
RepoType = RepoType.Involuntary,
|
||||
RepoCompanyAssignmentDate = DateTime.Today,
|
||||
RepoCompanyId = 5
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
RepoStatusChanges = new List<RepoStatusChange>()
|
||||
{
|
||||
new RepoStatusChange()
|
||||
{
|
||||
StatusFrom = "None",
|
||||
StatusTo = "O4R",
|
||||
ChangedDate = DateTime.Now.AddDays(-60)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("O4R No Repo", result[0].Message);
|
||||
Assert.Equal("123456-789", result[0].AccountNo);
|
||||
Assert.Equal("Batch", result[0].CreatedBy);
|
||||
Assert.InRange(result[0].DateAdded, DateTime.Now.AddSeconds(-1), DateTime.Now.AddSeconds(1));
|
||||
Assert.Equal(4, result[0].RepoId);
|
||||
Assert.Null(result[0].MarkedReadBy);
|
||||
Assert.Null(result[0].DateMarkedRead);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_InvoluntaryRepeat_Ok()
|
||||
{
|
||||
var checker = new O4rNoRepoChecker(RepoType.Involuntary);
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 7,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 7,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R",
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
RepoCompanySelections = new List<RepoCompanySelection>()
|
||||
{
|
||||
new RepoCompanySelection()
|
||||
{
|
||||
RepoType = RepoType.Involuntary,
|
||||
RepoCompanyAssignmentDate = DateTime.Today,
|
||||
RepoCompanyId = 5
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
RepoStatusChanges = new List<RepoStatusChange>()
|
||||
{
|
||||
new RepoStatusChange()
|
||||
{
|
||||
StatusFrom = "None",
|
||||
StatusTo = "O4R",
|
||||
ChangedDate = DateTime.Now.AddDays(-90)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("O4R No Repo", result[0].Message);
|
||||
Assert.Equal("123456-789", result[0].AccountNo);
|
||||
Assert.Equal("Batch", result[0].CreatedBy);
|
||||
Assert.InRange(result[0].DateAdded, DateTime.Now.AddSeconds(-1), DateTime.Now.AddSeconds(1));
|
||||
Assert.Equal(7, result[0].RepoId);
|
||||
Assert.Null(result[0].MarkedReadBy);
|
||||
Assert.Null(result[0].DateMarkedRead);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_Preskip_Ok()
|
||||
{
|
||||
var checker = new O4rNoRepoChecker(RepoType.PreSkip);
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 7,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 7,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R",
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
RepoCompanySelections = new List<RepoCompanySelection>()
|
||||
{
|
||||
new RepoCompanySelection()
|
||||
{
|
||||
RepoType = RepoType.PreSkip,
|
||||
RepoCompanyAssignmentDate = DateTime.Today,
|
||||
RepoCompanyId = 5
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
RepoStatusChanges = new List<RepoStatusChange>()
|
||||
{
|
||||
new RepoStatusChange()
|
||||
{
|
||||
StatusFrom = "None",
|
||||
StatusTo = "O4R",
|
||||
ChangedDate = DateTime.Now.AddDays(-31)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("O4R No Repo", result[0].Message);
|
||||
Assert.Equal("123456-789", result[0].AccountNo);
|
||||
Assert.Equal("Batch", result[0].CreatedBy);
|
||||
Assert.InRange(result[0].DateAdded, DateTime.Now.AddSeconds(-1), DateTime.Now.AddSeconds(1));
|
||||
Assert.Equal(7, result[0].RepoId);
|
||||
Assert.Null(result[0].MarkedReadBy);
|
||||
Assert.Null(result[0].DateMarkedRead);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_No_Repo_Ok()
|
||||
{
|
||||
var checker = new O4rNoRepoChecker(RepoType.PreSkip);
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 7,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 7,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R",
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
RepoCompanySelections = new List<RepoCompanySelection>()
|
||||
{
|
||||
new RepoCompanySelection()
|
||||
{
|
||||
RepoType = RepoType.Unknown,
|
||||
RepoCompanyAssignmentDate = null,
|
||||
RepoCompanyId = 5
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
RepoStatusChanges = new List<RepoStatusChange>()
|
||||
{
|
||||
new RepoStatusChange()
|
||||
{
|
||||
StatusFrom = "None",
|
||||
StatusTo = "O4R",
|
||||
ChangedDate = DateTime.Now.AddDays(-31)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(15, 10, 5, true)]
|
||||
[InlineData(20, 10, 10, true)]
|
||||
[InlineData(16, 10, 5, false)]
|
||||
[InlineData(8, 10, 5, false)]
|
||||
[InlineData(10, 10, 5, false)]
|
||||
public void ShouldSendRepeatedAlert_OK(int daysInStatus, int dayCount, int repeatCount, bool expected)
|
||||
{
|
||||
var checker = new O4rNoRepoChecker(RepoType.PreSkip);
|
||||
|
||||
Assert.Equal(expected, checker.ShouldSendRepeatedAlert(daysInStatus, dayCount, repeatCount));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsRepoAssigned_True_OK()
|
||||
{
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 7,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R",
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
RepoCompanySelections = new List<RepoCompanySelection>()
|
||||
{
|
||||
new RepoCompanySelection()
|
||||
{
|
||||
RepoType = RepoType.PreSkip,
|
||||
RepoCompanyAssignmentDate = DateTime.Now,
|
||||
RepoCompanyId = 5
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var checker = new O4rNoRepoChecker(RepoType.PreSkip);
|
||||
|
||||
Assert.True(checker.IsRepoAssigned(updatedRepoAccount));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsRepoAssigned_No_Date_OK()
|
||||
{
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 7,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R",
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
RepoCompanySelections = new List<RepoCompanySelection>()
|
||||
{
|
||||
new RepoCompanySelection()
|
||||
{
|
||||
RepoType = RepoType.PreSkip,
|
||||
RepoCompanyAssignmentDate = null,
|
||||
RepoCompanyId = 5
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var checker = new O4rNoRepoChecker(RepoType.PreSkip);
|
||||
|
||||
Assert.False(checker.IsRepoAssigned(updatedRepoAccount));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsRepoAssigned_No_Type_OK()
|
||||
{
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 7,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R",
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
RepoCompanySelections = new List<RepoCompanySelection>()
|
||||
{
|
||||
new RepoCompanySelection()
|
||||
{
|
||||
RepoType = RepoType.Unknown,
|
||||
RepoCompanyAssignmentDate = DateTime.Now,
|
||||
RepoCompanyId = 5
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var checker = new O4rNoRepoChecker(RepoType.PreSkip);
|
||||
|
||||
Assert.False(checker.IsRepoAssigned(updatedRepoAccount));
|
||||
}
|
||||
}
|
||||
}
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using LCU.API.Collections.RepoApi.Domain.AlertChecker;
|
||||
using LCU.API.Collections.RepoApi.Domain.Processing;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models.Consumer;
|
||||
using Xunit;
|
||||
|
||||
namespace LCU.API.Collections.RepoApiTests.AlertCheckers
|
||||
{
|
||||
public class PaymentReceivedCheckerTest
|
||||
{
|
||||
private readonly PaymentReceivedChecker _paymentReceivedChecker;
|
||||
private readonly List<CoreTransaction> _transactions;
|
||||
|
||||
public PaymentReceivedCheckerTest()
|
||||
{
|
||||
_transactions = new List<CoreTransaction>()
|
||||
{
|
||||
new CoreTransaction()
|
||||
{
|
||||
postingDate = DateTime.Now.AddDays(-2),
|
||||
transactionTypeCode = "EXT",
|
||||
amount = 500,
|
||||
runningBalance = 2000,
|
||||
transactionTypeDescription = "Test"
|
||||
}
|
||||
};
|
||||
|
||||
_paymentReceivedChecker = new PaymentReceivedChecker();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Creates_Alert_With_Recent_Transactions_Present_And_O4R_Status()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
TransactionHistory = _transactions,
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = new RepoAccount { Status = "O4R" }
|
||||
};
|
||||
var result = _paymentReceivedChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Payment Received", result[0].Message);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Creates_Alert_With_Recent_Transactions_Present_And_REPO_Status()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
TransactionHistory = _transactions,
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = new RepoAccount { Status = "REPO" }
|
||||
};
|
||||
var result = _paymentReceivedChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Payment Received", result[0].Message);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Creates_Alert_With_Recent_Transactions_Present_And_SOLD_Status()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
TransactionHistory = _transactions,
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = new RepoAccount { Status = "SOLD" }
|
||||
};
|
||||
var result = _paymentReceivedChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Payment Received", result[0].Message);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Does_Not_Create_Alert_For_Unwatched_Statuses()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
TransactionHistory = _transactions,
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = new RepoAccount { Status = "RECA" }
|
||||
};
|
||||
var result = _paymentReceivedChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
+180
@@ -0,0 +1,180 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using LCU.API.Collections.RepoApi.Domain.AlertChecker;
|
||||
using LCU.API.Collections.RepoApi.Domain.Processing;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models;
|
||||
using Xunit;
|
||||
|
||||
namespace LCU.API.Collections.RepoApiTests.AlertCheckers
|
||||
{
|
||||
public class RedemptionEndedNoTitleOrderedCheckerTest
|
||||
{
|
||||
private readonly RedemptionEndedNoTitleOrderedChecker _checker;
|
||||
|
||||
public RedemptionEndedNoTitleOrderedCheckerTest()
|
||||
{
|
||||
_checker = new RedemptionEndedNoTitleOrderedChecker();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_TooFewDays_Ok()
|
||||
{
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO",
|
||||
RedemptionExpiredDate = DateTime.Now.AddDays(-7),
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral()
|
||||
{
|
||||
AuctionAssignmentToCollaterals = new List<AuctionAssignmentToCollateral>()
|
||||
{
|
||||
new AuctionAssignmentToCollateral()
|
||||
{
|
||||
AuctionAssignmentId = 1,
|
||||
CollateralId = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = _checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_StatusNotRepo_Ok()
|
||||
{
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R",
|
||||
RedemptionExpiredDate = DateTime.Now.AddDays(-8),
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral()
|
||||
{
|
||||
AuctionAssignmentToCollaterals = new List<AuctionAssignmentToCollateral>()
|
||||
{
|
||||
new AuctionAssignmentToCollateral()
|
||||
{
|
||||
AuctionAssignmentId = 1,
|
||||
CollateralId = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = _checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_RedemptionEndedNoTitleOrdered_Ok()
|
||||
{
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO",
|
||||
RedemptionExpiredDate = DateTime.Now.AddDays(-8),
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral()
|
||||
{
|
||||
AuctionAssignmentToCollaterals = new List<AuctionAssignmentToCollateral>()
|
||||
{
|
||||
new AuctionAssignmentToCollateral()
|
||||
{
|
||||
AuctionAssignmentId = 1,
|
||||
CollateralId = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = _checker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Redemption Ended No Title Ordered", result[0].Message);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_RedemptionEndedTitleOrdered_Ok()
|
||||
{
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO",
|
||||
RedemptionExpiredDate = DateTime.Now.AddDays(-8),
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral()
|
||||
{
|
||||
AuctionAssignmentToCollaterals = new List<AuctionAssignmentToCollateral>()
|
||||
{
|
||||
new AuctionAssignmentToCollateral()
|
||||
{
|
||||
AuctionAssignmentId = 1,
|
||||
CollateralId = 1
|
||||
}
|
||||
},
|
||||
RetitledInLandmarkName = DateTime.Now.AddDays(-5)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = _checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
+173
@@ -0,0 +1,173 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using LCU.API.Collections.RepoApi.Domain.AlertChecker;
|
||||
using LCU.API.Collections.RepoApi.Domain.Processing;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models;
|
||||
using Xunit;
|
||||
|
||||
namespace LCU.API.Collections.RepoApiTests.AlertCheckers
|
||||
{
|
||||
public class RepoNotSoldCheckerTest
|
||||
{
|
||||
private readonly RepoNotSoldChecker _checker;
|
||||
|
||||
public RepoNotSoldCheckerTest()
|
||||
{
|
||||
_checker = new RepoNotSoldChecker(60, 30);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_TooFewDays_Ok()
|
||||
{
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO",
|
||||
RepoStatusChanges = new List<RepoStatusChange>()
|
||||
{
|
||||
new RepoStatusChange()
|
||||
{
|
||||
StatusFrom = "None",
|
||||
StatusTo = "REPO",
|
||||
ChangedDate = DateTime.Now.AddDays(-59)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = _checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_RepoNotSold_Ok()
|
||||
{
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 3,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 3,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO",
|
||||
RepoStatusChanges = new List<RepoStatusChange>()
|
||||
{
|
||||
new RepoStatusChange()
|
||||
{
|
||||
StatusFrom = "None",
|
||||
StatusTo = "REPO",
|
||||
ChangedDate = DateTime.Now.AddDays(-60)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = _checker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Repo Not Sold", result[0].Message);
|
||||
Assert.Equal("123456-789", result[0].AccountNo);
|
||||
Assert.Equal("Batch", result[0].CreatedBy);
|
||||
Assert.InRange(result[0].DateAdded, DateTime.Now.AddSeconds(-1), DateTime.Now.AddSeconds(1));
|
||||
Assert.Equal(3, result[0].RepoId);
|
||||
Assert.Null(result[0].MarkedReadBy);
|
||||
Assert.Null(result[0].DateMarkedRead);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_RepoNotSoldRepeat_Ok()
|
||||
{
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 6,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 6,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO",
|
||||
RepoStatusChanges = new List<RepoStatusChange>()
|
||||
{
|
||||
new RepoStatusChange()
|
||||
{
|
||||
StatusFrom = "None",
|
||||
StatusTo = "REPO",
|
||||
ChangedDate = DateTime.Now.AddDays(-90)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = _checker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Repo Not Sold", result[0].Message);
|
||||
Assert.Equal("123456-789", result[0].AccountNo);
|
||||
Assert.Equal("Batch", result[0].CreatedBy);
|
||||
Assert.InRange(result[0].DateAdded, DateTime.Now.AddSeconds(-1), DateTime.Now.AddSeconds(1));
|
||||
Assert.Equal(6, result[0].RepoId);
|
||||
Assert.Null(result[0].MarkedReadBy);
|
||||
Assert.Null(result[0].DateMarkedRead);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_61DaysInRepoNull_Ok()
|
||||
{
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO",
|
||||
RepoStatusChanges = new List<RepoStatusChange>()
|
||||
{
|
||||
new RepoStatusChange()
|
||||
{
|
||||
StatusFrom = "None",
|
||||
StatusTo = "REPO",
|
||||
ChangedDate = DateTime.Now.AddDays(-61)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = _checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
+227
@@ -0,0 +1,227 @@
|
||||
using System.Collections.Generic;
|
||||
using LCU.API.Collections.CollectionsApiLib.Models;
|
||||
using LCU.API.Collections.RepoApi.Domain.AlertChecker;
|
||||
using LCU.API.Collections.RepoApi.Domain.Processing;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models.Consumer;
|
||||
using Xunit;
|
||||
|
||||
namespace LCU.API.Collections.RepoApiTests.AlertCheckers
|
||||
{
|
||||
public class RtcLetterIsNullCheckerTest
|
||||
{
|
||||
public RtcLetterIsNullCheckerTest()
|
||||
{
|
||||
}
|
||||
|
||||
private MemberDetail MakeMemberWithAddressInState(string state)
|
||||
{
|
||||
return new MemberDetail
|
||||
{
|
||||
Address = new AddressDetail
|
||||
{
|
||||
State = state
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_RtcLetterWiAutoLoansFound_Ok()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
Letters = new List<RepoLetter>
|
||||
{
|
||||
new RepoLetter
|
||||
{
|
||||
ActionCode = "RTC 3",
|
||||
NoticeType = "RTC-WI-AUTO LOANS"
|
||||
}
|
||||
},
|
||||
Member = MakeMemberWithAddressInState("WI"),
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "RECA"
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "RECA",
|
||||
Collaterals = new List<Collateral>
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
CollateralId = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
var checker = new RtcLetterNotFoundChecker("RTC Letter", new List<string> { "RTC 1", "RTC 3" });
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_RtcLetterWiNonAutoFound_Ok()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
Letters = new List<RepoLetter>
|
||||
{
|
||||
new RepoLetter
|
||||
{
|
||||
ActionCode = "RTC 1",
|
||||
NoticeType = "RTC WI- ATV,Boat, Snowmobile"
|
||||
}
|
||||
},
|
||||
Member = MakeMemberWithAddressInState("WI"),
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "RECA"
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "RECA",
|
||||
Collaterals = new List<Collateral>
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
CollateralId = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
var checker = new RtcLetterNotFoundChecker("RTC Letter", new List<string> { "RTC 1", "RTC 3" });
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_RtcLetterIlNotApplicable_Ok()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
Letters = new List<RepoLetter>(),
|
||||
Member = MakeMemberWithAddressInState("IL"),
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "RECA"
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "RECA",
|
||||
Collaterals = new List<Collateral>
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
CollateralId = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
var checker = new RtcLetterNotFoundChecker("RTC Letter", new List<string> { "RTC 1", "RTC 3" });
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_RtcLetterWiVoluntary_Ok()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
Letters = new List<RepoLetter>(),
|
||||
Member = MakeMemberWithAddressInState("WI"),
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "RECA",
|
||||
Collaterals = new List<Collateral>
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
CollateralId = 1,
|
||||
RepoCompanySelections = new List<RepoCompanySelection>
|
||||
{
|
||||
new RepoCompanySelection
|
||||
{
|
||||
Id = 1,
|
||||
RepoType = RepoType.Voluntary
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "RECA",
|
||||
Collaterals = new List<Collateral>
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
CollateralId = 1,
|
||||
RepoCompanySelections = new List<RepoCompanySelection>
|
||||
{
|
||||
new RepoCompanySelection
|
||||
{
|
||||
Id = 1,
|
||||
RepoType = RepoType.Voluntary
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
var checker = new RtcLetterNotFoundChecker("RTC Letter", new List<string> { "RTC 1", "RTC 3" });
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_RtcLetterNotFound_Ok()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
Letters = new List<RepoLetter>(),
|
||||
Member = MakeMemberWithAddressInState("WI"),
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 5,
|
||||
AccountNo = "123456-789",
|
||||
Status = "RECA"
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 5,
|
||||
AccountNo = "123456-789",
|
||||
Status = "RECA",
|
||||
Collaterals = new List<Collateral>
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
CollateralId = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
var checker = new RtcLetterNotFoundChecker("RTC Letter", new List<string> { "RTC 1", "RTC 3" });
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
+235
@@ -0,0 +1,235 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using LCU.API.Collections.CollectionsApiLib.Models;
|
||||
using LCU.API.Collections.RepoApi.Domain.AlertChecker;
|
||||
using LCU.API.Collections.RepoApi.Domain.Processing;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models.Consumer;
|
||||
using Xunit;
|
||||
|
||||
namespace LCU.API.Collections.RepoApiTests.AlertCheckers
|
||||
{
|
||||
public class RtcLetterNotFoundCheckerTest
|
||||
{
|
||||
public RtcLetterNotFoundCheckerTest()
|
||||
{
|
||||
}
|
||||
|
||||
private MemberDetail MakeMemberWithAddressInState(string state)
|
||||
{
|
||||
return new MemberDetail
|
||||
{
|
||||
Address = new AddressDetail
|
||||
{
|
||||
State = state
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_RtcLetterWiAutoLoansFound_Ok()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
Letters = new List<RepoLetter>
|
||||
{
|
||||
new RepoLetter
|
||||
{
|
||||
ActionCode = "RTC 3",
|
||||
NoticeType = "RTC-WI-AUTO LOANS"
|
||||
}
|
||||
},
|
||||
Member = MakeMemberWithAddressInState("WI"),
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R"
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R",
|
||||
Collaterals = new List<Collateral>
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
CollateralId = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
var checker = new RtcLetterNotFoundChecker("RTC Letter", new List<string> { "RTC 1", "RTC 3" });
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_RtcLetterWiNonAutoFound_Ok()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
Letters = new List<RepoLetter>
|
||||
{
|
||||
new RepoLetter
|
||||
{
|
||||
ActionCode = "RTC 1",
|
||||
NoticeType = "RTC WI- ATV,Boat, Snowmobile"
|
||||
}
|
||||
},
|
||||
Member = MakeMemberWithAddressInState("WI"),
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R"
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R",
|
||||
Collaterals = new List<Collateral>
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
CollateralId = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
var checker = new RtcLetterNotFoundChecker("RTC Letter", new List<string> { "RTC 1", "RTC 3" });
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_RtcLetterIlNotApplicable_Ok()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
Letters = new List<RepoLetter>(),
|
||||
Member = MakeMemberWithAddressInState("IL"),
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R"
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R",
|
||||
Collaterals = new List<Collateral>
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
CollateralId = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
var checker = new RtcLetterNotFoundChecker("RTC Letter", new List<string> { "RTC 1", "RTC 3" });
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_RtcLetterWiVoluntary_Ok()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
Letters = new List<RepoLetter>(),
|
||||
Member = MakeMemberWithAddressInState("WI"),
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R",
|
||||
Collaterals = new List<Collateral>
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
CollateralId = 1,
|
||||
RepoCompanySelections = new List<RepoCompanySelection>
|
||||
{
|
||||
new RepoCompanySelection
|
||||
{
|
||||
Id = 1,
|
||||
RepoType = RepoType.Voluntary
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R",
|
||||
Collaterals = new List<Collateral>
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
CollateralId = 1,
|
||||
RepoCompanySelections = new List<RepoCompanySelection>
|
||||
{
|
||||
new RepoCompanySelection
|
||||
{
|
||||
Id = 1,
|
||||
RepoType = RepoType.Voluntary
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
var checker = new RtcLetterNotFoundChecker("RTC Letter", new List<string> { "RTC 1", "RTC 3" });
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_RtcLetterNotFound_Ok()
|
||||
{
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
Letters = new List<RepoLetter>(),
|
||||
Member = MakeMemberWithAddressInState("WI"),
|
||||
ExistingRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 5,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R"
|
||||
},
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 5,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R",
|
||||
Collaterals = new List<Collateral>
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
CollateralId = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
var checker = new RtcLetterNotFoundChecker("RTC Letter", new List<string> { "RTC 1", "RTC 3" });
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("RTC Letter Not Found", result[0].Message);
|
||||
Assert.Equal("123456-789", result[0].AccountNo);
|
||||
Assert.Equal("Batch", result[0].CreatedBy);
|
||||
Assert.InRange(result[0].DateAdded, DateTime.Now.AddSeconds(-1), DateTime.Now.AddSeconds(1));
|
||||
Assert.Equal(5, result[0].RepoId);
|
||||
Assert.Null(result[0].MarkedReadBy);
|
||||
Assert.Null(result[0].DateMarkedRead);
|
||||
}
|
||||
}
|
||||
}
|
||||
+87
@@ -0,0 +1,87 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using LCU.API.Collections.RepoApi.DataAccess;
|
||||
using LCU.API.Collections.RepoApi.Domain.AlertChecker;
|
||||
using LCU.API.Collections.RepoApi.Domain.Processing;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models.Consumer;
|
||||
using Moq;
|
||||
using Xunit;
|
||||
|
||||
namespace LCU.API.Collections.RepoApiTests.AlertCheckers
|
||||
{
|
||||
public class SaleFundsReceivedCheckerTest
|
||||
{
|
||||
private SaleFundsReceivedChecker _saleFundsReceivedChecker;
|
||||
private List<CoreTransaction> _transactions;
|
||||
private readonly Mock<ICoreDao> _mockCoreDao;
|
||||
|
||||
public SaleFundsReceivedCheckerTest()
|
||||
{
|
||||
_mockCoreDao = new Mock<ICoreDao>();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Creates_Alert_When_Description_Contains_Sub_string()
|
||||
{
|
||||
_mockCoreDao.Setup(service => service.RetrieveMemberAsync(It.IsAny<string>()))
|
||||
.ReturnsAsync(
|
||||
new MemberDetail()
|
||||
{
|
||||
MemberId = 8675309
|
||||
}
|
||||
);
|
||||
|
||||
_transactions = new List<CoreTransaction>()
|
||||
{
|
||||
new CoreTransaction()
|
||||
{
|
||||
postingDate = DateTime.Now.AddDays(-2),
|
||||
transactionTypeCode = "PRCT",
|
||||
amount = 500,
|
||||
runningBalance = 2000,
|
||||
transactionTypeDescription = "Sale Of Test"
|
||||
}
|
||||
};
|
||||
_saleFundsReceivedChecker = new SaleFundsReceivedChecker();
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
TransactionHistory = _transactions,
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
};
|
||||
|
||||
var result = _saleFundsReceivedChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Sale Funds Received", result[0].Message);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Does_Not_Create_Alert_When_Description_Does_Not_Contain_Sub_String()
|
||||
{
|
||||
_transactions = new List<CoreTransaction>()
|
||||
{
|
||||
new CoreTransaction()
|
||||
{
|
||||
postingDate = DateTime.Now.AddDays(-2),
|
||||
transactionTypeCode = "SHOULDFAILTYPECODE",
|
||||
amount = 500,
|
||||
runningBalance = 2000,
|
||||
transactionTypeDescription = "Test"
|
||||
}
|
||||
};
|
||||
_saleFundsReceivedChecker = new SaleFundsReceivedChecker();
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
TransactionHistory = _transactions,
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
};
|
||||
|
||||
var result = _saleFundsReceivedChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
+115
@@ -0,0 +1,115 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using LCU.API.Collections.CollectionsApiLib.Models;
|
||||
using LCU.API.Collections.RepoApi.Domain.AlertChecker;
|
||||
using LCU.API.Collections.RepoApi.Domain.Processing;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models;
|
||||
using Xunit;
|
||||
|
||||
namespace LCU.API.Collections.RepoApiTests.AlertCheckers
|
||||
{
|
||||
public class SkipEndCheckerTest
|
||||
{
|
||||
[Fact]
|
||||
public void Create_SkipNotEnded_Ok()
|
||||
{
|
||||
var checker = new SkipEndChecker(91);
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R",
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
RepoCompanySelections = new List<RepoCompanySelection>()
|
||||
{
|
||||
new RepoCompanySelection()
|
||||
{
|
||||
RepoType = RepoType.Skip
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
RepoStatusChanges = new List<RepoStatusChange>()
|
||||
{
|
||||
new RepoStatusChange()
|
||||
{
|
||||
StatusFrom = "None",
|
||||
StatusTo = "O4R",
|
||||
ChangedDate = DateTime.Now.AddDays(-90)
|
||||
}
|
||||
}
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_SkipEnded_Ok()
|
||||
{
|
||||
var checker = new SkipEndChecker(91);
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 1,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 1,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R",
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
RepoCompanySelections = new List<RepoCompanySelection>()
|
||||
{
|
||||
new RepoCompanySelection()
|
||||
{
|
||||
RepoType = RepoType.Skip
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
RepoStatusChanges = new List<RepoStatusChange>()
|
||||
{
|
||||
new RepoStatusChange()
|
||||
{
|
||||
StatusFrom = "None",
|
||||
StatusTo = "O4R",
|
||||
ChangedDate = DateTime.Now.AddDays(-91)
|
||||
}
|
||||
}
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Skip Claim Ended", result[0].Message);
|
||||
Assert.Equal("123456-789", result[0].AccountNo);
|
||||
Assert.Equal("Batch", result[0].CreatedBy);
|
||||
Assert.InRange(result[0].DateAdded, DateTime.Now.AddSeconds(-1), DateTime.Now.AddSeconds(1));
|
||||
Assert.Equal(1, result[0].RepoId);
|
||||
Assert.Null(result[0].MarkedReadBy);
|
||||
Assert.Null(result[0].DateMarkedRead);
|
||||
}
|
||||
}
|
||||
}
|
||||
+220
@@ -0,0 +1,220 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using LCU.API.Collections.CollectionsApiLib.Models;
|
||||
using LCU.API.Collections.RepoApi.Domain.AlertChecker;
|
||||
using LCU.API.Collections.RepoApi.Domain.Processing;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models;
|
||||
using Xunit;
|
||||
|
||||
namespace LCU.API.Collections.RepoApiTests.AlertCheckers
|
||||
{
|
||||
public class SkipNotPaidCheckerTest
|
||||
{
|
||||
[Fact]
|
||||
public void Create_TooFewDays_Ok()
|
||||
{
|
||||
var checker = new SkipNotPaidChecker(106, 15);
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R",
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
RepoCompanySelections = new List<RepoCompanySelection>()
|
||||
{
|
||||
new RepoCompanySelection()
|
||||
{
|
||||
RepoType = RepoType.Skip
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
RepoStatusChanges = new List<RepoStatusChange>()
|
||||
{
|
||||
new RepoStatusChange()
|
||||
{
|
||||
StatusFrom = "None",
|
||||
StatusTo = "O4R",
|
||||
ChangedDate = DateTime.Now.AddDays(-105)
|
||||
}
|
||||
}
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_PaidSkip_Ok()
|
||||
{
|
||||
var checker = new SkipNotPaidChecker(106, 15);
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R",
|
||||
SubStatus = "PSKP",
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
RepoCompanySelections = new List<RepoCompanySelection>()
|
||||
{
|
||||
new RepoCompanySelection()
|
||||
{
|
||||
RepoType = RepoType.Skip
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
RepoStatusChanges = new List<RepoStatusChange>()
|
||||
{
|
||||
new RepoStatusChange()
|
||||
{
|
||||
StatusFrom = "None",
|
||||
StatusTo = "O4R",
|
||||
ChangedDate = DateTime.Now.AddDays(-106)
|
||||
}
|
||||
}
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_SkipNotPaid_Ok()
|
||||
{
|
||||
var checker = new SkipNotPaidChecker(106);
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 4,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 4,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R",
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
RepoCompanySelections = new List<RepoCompanySelection>()
|
||||
{
|
||||
new RepoCompanySelection()
|
||||
{
|
||||
RepoType = RepoType.Skip
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
RepoStatusChanges = new List<RepoStatusChange>()
|
||||
{
|
||||
new RepoStatusChange()
|
||||
{
|
||||
StatusFrom = "None",
|
||||
StatusTo = "O4R",
|
||||
ChangedDate = DateTime.Now.AddDays(-106)
|
||||
}
|
||||
}
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Skip Not Paid", result[0].Message);
|
||||
Assert.Equal("123456-789", result[0].AccountNo);
|
||||
Assert.Equal("Batch", result[0].CreatedBy);
|
||||
Assert.InRange(result[0].DateAdded, DateTime.Now.AddSeconds(-1), DateTime.Now.AddSeconds(1));
|
||||
Assert.Equal(4, result[0].RepoId);
|
||||
Assert.Null(result[0].MarkedReadBy);
|
||||
Assert.Null(result[0].DateMarkedRead);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_SkipNotPaidRepeating_Ok()
|
||||
{
|
||||
var checker = new SkipNotPaidChecker(106, 15);
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 5,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 5,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R",
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral
|
||||
{
|
||||
RepoCompanySelections = new List<RepoCompanySelection>()
|
||||
{
|
||||
new RepoCompanySelection()
|
||||
{
|
||||
RepoType = RepoType.Skip
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
RepoStatusChanges = new List<RepoStatusChange>()
|
||||
{
|
||||
new RepoStatusChange()
|
||||
{
|
||||
StatusFrom = "None",
|
||||
StatusTo = "O4R",
|
||||
ChangedDate = DateTime.Now.AddDays(-121)
|
||||
}
|
||||
}
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Skip Not Paid", result[0].Message);
|
||||
Assert.Equal("123456-789", result[0].AccountNo);
|
||||
Assert.Equal("Batch", result[0].CreatedBy);
|
||||
Assert.InRange(result[0].DateAdded, DateTime.Now.AddSeconds(-1), DateTime.Now.AddSeconds(1));
|
||||
Assert.Equal(5, result[0].RepoId);
|
||||
Assert.Null(result[0].MarkedReadBy);
|
||||
Assert.Null(result[0].DateMarkedRead);
|
||||
}
|
||||
}
|
||||
}
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using LCU.API.Collections.RepoApi.Domain.AlertChecker;
|
||||
using LCU.API.Collections.RepoApi.Domain.Processing;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models;
|
||||
using Xunit;
|
||||
|
||||
namespace LCU.API.Collections.RepoApiTests.AlertCheckers
|
||||
{
|
||||
public class SkipPaidCheckerTest
|
||||
{
|
||||
[Fact]
|
||||
public void Create_Ok()
|
||||
{
|
||||
var checker = new SkipPaidChecker(); // 106, 15
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
SubStatus = SkipPaidChecker.RepoSubStatusPaidSkip,
|
||||
Status = "O4R",
|
||||
Collaterals = new List<Collateral>(),
|
||||
RepoStatusChanges = new List<RepoStatusChange>()
|
||||
{
|
||||
new RepoStatusChange()
|
||||
{
|
||||
StatusFrom = "None",
|
||||
StatusTo = "O4R",
|
||||
ChangedDate = DateTime.Now.AddDays(-105)
|
||||
}
|
||||
}
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Equal(updatedRepoAccount.SubStatus, updatedRepoAccount.Status);
|
||||
Assert.NotNull(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DoNotThrowOnNull()
|
||||
{
|
||||
var checker = new SkipPaidChecker(); // 106, 15
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R"
|
||||
};
|
||||
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = null
|
||||
};
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
Assert.Null(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
+175
@@ -0,0 +1,175 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using LCU.API.Collections.RepoApi.Domain.AlertChecker;
|
||||
using LCU.API.Collections.RepoApi.Domain.Processing;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models;
|
||||
using Xunit;
|
||||
|
||||
namespace LCU.API.Collections.RepoApiTests.AlertCheckers
|
||||
{
|
||||
public class SoldNoProceedsCheckerTest
|
||||
{
|
||||
private readonly SoldNoProceedsChecker _soldNoProceedsChecker;
|
||||
|
||||
public SoldNoProceedsCheckerTest()
|
||||
{
|
||||
_soldNoProceedsChecker = new SoldNoProceedsChecker();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Sold_No_Proceeds_Created_Ok()
|
||||
{
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral()
|
||||
{
|
||||
AuctionAssignmentToCollaterals = new List<AuctionAssignmentToCollateral>()
|
||||
{
|
||||
new AuctionAssignmentToCollateral()
|
||||
{
|
||||
AuctionAssignmentId = 1,
|
||||
CollateralId = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
AuctionAssignments = new List<AuctionAssignment>()
|
||||
{
|
||||
new AuctionAssignment()
|
||||
{
|
||||
AutoIMS = new ImsAutoFileData()
|
||||
{
|
||||
SoldDate = DateTime.Now.AddDays(-6)
|
||||
}
|
||||
}
|
||||
},
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = _soldNoProceedsChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Sold No Proceeds", result[0].Message);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Sold_No_Proceeds_Not_Created_Funds_Sent()
|
||||
{
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral()
|
||||
{
|
||||
AuctionAssignmentToCollaterals = new List<AuctionAssignmentToCollateral>()
|
||||
{
|
||||
new AuctionAssignmentToCollateral()
|
||||
{
|
||||
AuctionAssignmentId = 1,
|
||||
CollateralId = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
AuctionAssignments = new List<AuctionAssignment>()
|
||||
{
|
||||
new AuctionAssignment()
|
||||
{
|
||||
AutoIMS = new ImsAutoFileData()
|
||||
{
|
||||
SoldDate = DateTime.Now.AddDays(-6),
|
||||
FundsSent = DateTime.Now.AddDays(-2)
|
||||
}
|
||||
}
|
||||
},
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = _soldNoProceedsChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Sold_No_Proceeds_Not_Created_SoldDate_Null()
|
||||
{
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral()
|
||||
{
|
||||
AuctionAssignmentToCollaterals = new List<AuctionAssignmentToCollateral>()
|
||||
{
|
||||
new AuctionAssignmentToCollateral()
|
||||
{
|
||||
AuctionAssignmentId = 1,
|
||||
CollateralId = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
AuctionAssignments = new List<AuctionAssignment>()
|
||||
{
|
||||
new AuctionAssignment()
|
||||
{
|
||||
AutoIMS = new ImsAutoFileData()
|
||||
{
|
||||
FundsSent = DateTime.Now.AddDays(-2)
|
||||
}
|
||||
}
|
||||
},
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = _soldNoProceedsChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Sold_No_Proceeds_Not_Created_No_AuctionAssignments()
|
||||
{
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
Collaterals = new List<Collateral>()
|
||||
{
|
||||
new Collateral()
|
||||
}
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
AuctionAssignments = new List<AuctionAssignment>()
|
||||
{
|
||||
new AuctionAssignment()
|
||||
{
|
||||
AutoIMS = new ImsAutoFileData()
|
||||
{
|
||||
FundsSent = DateTime.Now.AddDays(-2)
|
||||
}
|
||||
}
|
||||
},
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = _soldNoProceedsChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
+148
@@ -0,0 +1,148 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using LCU.API.Collections.RepoApi.Domain.AlertChecker;
|
||||
using LCU.API.Collections.RepoApi.Domain.Processing;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models;
|
||||
using Xunit;
|
||||
|
||||
namespace LCU.API.Collections.RepoApiTests.AlertCheckers
|
||||
{
|
||||
public class StatusChangeCheckerTest
|
||||
{
|
||||
[Fact]
|
||||
public void Create_StatusIsUnchanged_Ok()
|
||||
{
|
||||
var checker = new StatusChangeChecker("RECA");
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "RECA"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "RECA"
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_StatusIsReca_Ok()
|
||||
{
|
||||
var checker = new StatusChangeChecker("RECA");
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 2,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 2,
|
||||
AccountNo = "123456-789",
|
||||
Status = "RECA"
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Status Changed to RECA", result[0].Message);
|
||||
Assert.Equal("Previously REPO. I confirm that I have updated the Status to RECA in RDN.",
|
||||
result[0].SubMessage);
|
||||
Assert.Equal("123456-789", result[0].AccountNo);
|
||||
Assert.Equal("Batch", result[0].CreatedBy);
|
||||
Assert.InRange(result[0].DateAdded, DateTime.Now.AddSeconds(-1), DateTime.Now.AddSeconds(1));
|
||||
Assert.Equal(2, result[0].RepoId);
|
||||
Assert.Null(result[0].MarkedReadBy);
|
||||
Assert.Null(result[0].DateMarkedRead);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_StatusIsReho_Ok()
|
||||
{
|
||||
var checker = new StatusChangeChecker("REHO");
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 2,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REPO"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 2,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REHO"
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Status Changed to REHO", result[0].Message);
|
||||
Assert.Equal("Previously REPO. I confirm that I have updated the Status to REHO in RDN.",
|
||||
result[0].SubMessage);
|
||||
Assert.Equal("123456-789", result[0].AccountNo);
|
||||
Assert.Equal("Batch", result[0].CreatedBy);
|
||||
Assert.InRange(result[0].DateAdded, DateTime.Now.AddSeconds(-1), DateTime.Now.AddSeconds(1));
|
||||
Assert.Equal(2, result[0].RepoId);
|
||||
Assert.Null(result[0].MarkedReadBy);
|
||||
Assert.Null(result[0].DateMarkedRead);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_StatusFromO4rToBlank_Ok()
|
||||
{
|
||||
var DefaultNoStatusIntellec = "NO STATUS INTELLEC";
|
||||
|
||||
|
||||
var checker = new StatusChangeChecker(DefaultNoStatusIntellec, new List<string>() { "O4R", "REPO" });
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 2,
|
||||
AccountNo = "123456-789",
|
||||
Status = "O4R"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 2,
|
||||
AccountNo = "123456-789",
|
||||
Status = DefaultNoStatusIntellec
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("Status Changed to " + DefaultNoStatusIntellec, result[0].Message);
|
||||
Assert.Equal("Previously O4R. I confirm that I have updated the Status to NO STATUS INTELLEC in RDN.",
|
||||
result[0].SubMessage);
|
||||
Assert.Equal("123456-789", result[0].AccountNo);
|
||||
Assert.Equal("Batch", result[0].CreatedBy);
|
||||
Assert.InRange(result[0].DateAdded, DateTime.Now.AddSeconds(-1), DateTime.Now.AddSeconds(1));
|
||||
Assert.Equal(2, result[0].RepoId);
|
||||
Assert.Null(result[0].MarkedReadBy);
|
||||
Assert.Null(result[0].DateMarkedRead);
|
||||
}
|
||||
}
|
||||
}
|
||||
+168
@@ -0,0 +1,168 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using LCU.API.Collections.RepoApi.Domain.AlertChecker;
|
||||
using LCU.API.Collections.RepoApi.Domain.Processing;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models;
|
||||
using Xunit;
|
||||
|
||||
namespace LCU.API.Collections.RepoApiTests.AlertCheckers
|
||||
{
|
||||
public class TimeInStatusCheckerTest
|
||||
{
|
||||
[Fact]
|
||||
public void Create_TooFewDays_Ok()
|
||||
{
|
||||
var checker = new TimeInStatusChecker("REHO", 30, 30);
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "REHO"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "REHO",
|
||||
RepoStatusChanges = new List<RepoStatusChange>()
|
||||
{
|
||||
new RepoStatusChange()
|
||||
{
|
||||
StatusFrom = "None",
|
||||
StatusTo = "REHO",
|
||||
ChangedDate = DateTime.Now.AddDays(-29)
|
||||
}
|
||||
}
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_30DaysInReho_Ok()
|
||||
{
|
||||
var checker = new TimeInStatusChecker("REHO", 30, 30);
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 9,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REHO"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 9,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REHO",
|
||||
RepoStatusChanges = new List<RepoStatusChange>()
|
||||
{
|
||||
new RepoStatusChange()
|
||||
{
|
||||
StatusFrom = "None",
|
||||
StatusTo = "REHO",
|
||||
ChangedDate = DateTime.Now.AddDays(-30)
|
||||
}
|
||||
}
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("30 days in REHO", result[0].Message);
|
||||
Assert.Equal("123456-789", result[0].AccountNo);
|
||||
Assert.Equal("Batch", result[0].CreatedBy);
|
||||
Assert.InRange(result[0].DateAdded, DateTime.Now.AddSeconds(-1), DateTime.Now.AddSeconds(1));
|
||||
Assert.Equal(9, result[0].RepoId);
|
||||
Assert.Null(result[0].MarkedReadBy);
|
||||
Assert.Null(result[0].DateMarkedRead);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_30DaysInRehoRepeat_Ok()
|
||||
{
|
||||
var checker = new TimeInStatusChecker("REHO", 30, 30);
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 9,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REHO"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
RepoId = 9,
|
||||
AccountNo = "123456-789",
|
||||
Status = "REHO",
|
||||
RepoStatusChanges = new List<RepoStatusChange>()
|
||||
{
|
||||
new RepoStatusChange()
|
||||
{
|
||||
StatusFrom = "None",
|
||||
StatusTo = "REHO",
|
||||
ChangedDate = DateTime.Now.AddDays(-60)
|
||||
}
|
||||
}
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal("60 days in REHO", result[0].Message);
|
||||
Assert.Equal("123456-789", result[0].AccountNo);
|
||||
Assert.Equal("Batch", result[0].CreatedBy);
|
||||
Assert.InRange(result[0].DateAdded, DateTime.Now.AddSeconds(-1), DateTime.Now.AddSeconds(1));
|
||||
Assert.Equal(9, result[0].RepoId);
|
||||
Assert.Null(result[0].MarkedReadBy);
|
||||
Assert.Null(result[0].DateMarkedRead);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_45DaysInRehoNull_Ok()
|
||||
{
|
||||
var checker = new TimeInStatusChecker("REHO", 30, 30);
|
||||
var originalRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "REHO"
|
||||
};
|
||||
var updatedRepoAccount = new RepoAccount()
|
||||
{
|
||||
AccountNo = "123456-789",
|
||||
Status = "REHO",
|
||||
RepoStatusChanges = new List<RepoStatusChange>()
|
||||
{
|
||||
new RepoStatusChange()
|
||||
{
|
||||
StatusFrom = "None",
|
||||
StatusTo = "REHO",
|
||||
ChangedDate = DateTime.Now.AddDays(-45)
|
||||
}
|
||||
}
|
||||
};
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
ExistingRepoAccount = originalRepoAccount,
|
||||
UpdatedRepoAccount = updatedRepoAccount
|
||||
};
|
||||
|
||||
var result = checker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
+96
@@ -0,0 +1,96 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using LCU.API.Collections.RepoApi.Domain.AlertChecker;
|
||||
using LCU.API.Collections.RepoApi.Domain.Processing;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models.Consumer;
|
||||
using Xunit;
|
||||
|
||||
namespace LCU.API.Collections.RepoApiTests.AlertCheckers
|
||||
{
|
||||
public class TransactionHistoryCheckerTest
|
||||
{
|
||||
private DummyTransactionChecker _transactionHistoryChecker;
|
||||
|
||||
[Fact]
|
||||
public void Does_Not_Create_Alert_When_Posting_Date_Is_Too_old()
|
||||
{
|
||||
var transactions = new List<CoreTransaction>()
|
||||
{
|
||||
new CoreTransaction()
|
||||
{
|
||||
postingDate = DateTime.Now.AddDays(-5),
|
||||
transactionTypeCode = "TEST"
|
||||
}
|
||||
};
|
||||
_transactionHistoryChecker = new DummyTransactionChecker();
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
TransactionHistory = transactions,
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
};
|
||||
|
||||
var result = _transactionHistoryChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Does_Not_Create_Alert_When_Transaction_Type_Is_Wrong()
|
||||
{
|
||||
var transactions = new List<CoreTransaction>()
|
||||
{
|
||||
new CoreTransaction()
|
||||
{
|
||||
postingDate = DateTime.Now.AddDays(-1),
|
||||
transactionTypeCode = "WRONGTYPE",
|
||||
}
|
||||
};
|
||||
_transactionHistoryChecker = new DummyTransactionChecker();
|
||||
var slip = new RepoAccountProcessingSlip()
|
||||
{
|
||||
TransactionHistory = transactions,
|
||||
ExistingRepoAccount = new RepoAccount(),
|
||||
UpdatedRepoAccount = new RepoAccount()
|
||||
};
|
||||
var result = _transactionHistoryChecker.CheckForAlert(slip);
|
||||
|
||||
Assert.Null(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Test_Formatted_Message()
|
||||
{
|
||||
var transactions = new List<CoreTransaction>()
|
||||
{
|
||||
new CoreTransaction()
|
||||
{
|
||||
postingDate = DateTime.Now.AddDays(-5),
|
||||
}
|
||||
};
|
||||
_transactionHistoryChecker = new DummyTransactionChecker();
|
||||
var result = TransactionHistoryChecker.FormatTransactionMessage(new CoreTransaction()
|
||||
{
|
||||
postingDate = DateTime.Parse("1941-12-07"),
|
||||
amount = 248.49M,
|
||||
runningBalance = 2398.05M,
|
||||
transactionTypeDescription = "Test",
|
||||
transactionTypeCode = "TEST"
|
||||
});
|
||||
|
||||
var expectedMessage =
|
||||
"Transaction Type: \"TEST\" | Posting: 12/7/1941 12:00:00 AM | Transaction: $248.49 | Balance: $2,398.05 | Description: \"Test\"";
|
||||
Assert.Equal(expectedMessage, result);
|
||||
}
|
||||
}
|
||||
|
||||
internal class DummyTransactionChecker : TransactionHistoryChecker
|
||||
{
|
||||
public override List<EventAlert> CheckForAlert(RepoAccountProcessingSlip slip)
|
||||
{
|
||||
var result = GetRecentTransactionsFromType(new List<string> { "TEST TRANSACTION" }, slip.TransactionHistory);
|
||||
return result != null ? new List<EventAlert> { new EventAlert() } : null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user