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() { new Collateral { RepoCompanySelections = new List() { new RepoCompanySelection() { RepoType = RepoType.Voluntary } } } }, RepoStatusChanges = new List() { 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() { new Collateral { RepoCompanySelections = new List() { new RepoCompanySelection() { RepoType = RepoType.Voluntary, RepoCompanyId = 10, RepoCompanyAssignmentDate = DateTime.Today } } } }, RepoStatusChanges = new List() { 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() { new Collateral { RepoCompanySelections = new List() { new RepoCompanySelection() { RepoType = RepoType.Voluntary, RepoCompanyAssignmentDate = DateTime.Today, RepoCompanyId = 5 } } } }, RepoStatusChanges = new List() { 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() { new Collateral { RepoCompanySelections = new List() { new RepoCompanySelection() { RepoType = RepoType.Involuntary, RepoCompanyAssignmentDate = DateTime.Today, RepoCompanyId = 5 } } } }, RepoStatusChanges = new List() { 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() { new Collateral { RepoCompanySelections = new List() { new RepoCompanySelection() { RepoType = RepoType.Involuntary, RepoCompanyAssignmentDate = DateTime.Today, RepoCompanyId = 5 } } } }, RepoStatusChanges = new List() { 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() { new Collateral { RepoCompanySelections = new List() { new RepoCompanySelection() { RepoType = RepoType.PreSkip, RepoCompanyAssignmentDate = DateTime.Today, RepoCompanyId = 5 } } } }, RepoStatusChanges = new List() { 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() { new Collateral { RepoCompanySelections = new List() { new RepoCompanySelection() { RepoType = RepoType.Unknown, RepoCompanyAssignmentDate = null, RepoCompanyId = 5 } } } }, RepoStatusChanges = new List() { 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() { new Collateral { RepoCompanySelections = new List() { 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() { new Collateral { RepoCompanySelections = new List() { 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() { new Collateral { RepoCompanySelections = new List() { new RepoCompanySelection() { RepoType = RepoType.Unknown, RepoCompanyAssignmentDate = DateTime.Now, RepoCompanyId = 5 } } } } }; var checker = new O4rNoRepoChecker(RepoType.PreSkip); Assert.False(checker.IsRepoAssigned(updatedRepoAccount)); } } }