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(), 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 { 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 { 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(), 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(), 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(), 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 { 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 { 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(), 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(), 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 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(), 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 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(), 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 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); } } }