public async Task CheckSupportComplianceRequest_AmountExceeded_FlagReturned() { var fileId = TestData.EvacuationFileId; var householdMembers = TestData.HouseholdMemberIds; var from = DateTime.UtcNow.AddDays(-3); var to = DateTime.UtcNow.AddDays(1); var checkedSupport = new ClothingSupport { FileId = fileId, SupportDelivery = new Interac(), TotalAmount = 100.00m, IncludedHouseholdMembers = householdMembers, From = from, To = to, ApproverName = TestHelper.GenerateNewUniqueId(TestData.TestPrefix), CreatedBy = new TeamMember { Id = TestData.Tier4TeamMemberId } }; checkedSupport.Id = ((ProcessDigitalSupportsResponse)await engine.Process(new ProcessDigitalSupportsRequest { FileId = fileId, Supports = new[] { checkedSupport }, RequestingUserId = TestData.Tier4TeamMemberId })).Supports.ShouldHaveSingleItem().Id; var response = (CheckSupportComplianceResponse)await engine.Validate(new CheckSupportComplianceRequest { Supports = new[] { checkedSupport } }); var flags = response.Flags.ShouldHaveSingleItem(); flags.Key.Id.ShouldBe(checkedSupport.Id); flags.Value.Where(f => f is AmountExceededSupportFlag d && d.Approver == checkedSupport.ApproverName).ShouldHaveSingleItem(); }
public async Task SubmitSupportForApproval_SupportWithFlags_AssignedToApprovalQueue() { var householdMembers = TestData.HouseholdMemberIds; var now = DateTime.UtcNow; var fileId = TestData.EvacuationFileId; var support = new ClothingSupport { SupportDelivery = new Interac { NotificationEmail = "test@email", NotificationMobile = "12345", ReceivingRegistrantId = TestData.ContactId, RecipientFirstName = "test", RecipientLastName = "test" }, CreatedByTeamMemberId = TestData.Tier4TeamMemberId, IncludedHouseholdMembers = householdMembers, From = now, To = now.AddDays(3), IssuedOn = now }; var supportId = ((CreateNewSupportsCommandResult)await supportRepository.Manage(new CreateNewSupportsCommand { FileId = fileId, Supports = new[] { support } })).Supports.ShouldHaveSingleItem().Id; var flags = new[] { new AmountOverridenSupportFlag { Approver = "test" } }; //should be in pending scan ((SearchSupportQueryResult)await supportRepository.Query(new SearchSupportsQuery { ByStatus = SupportStatus.PendingScan })).Items.Where(s => s.Id == supportId).ShouldHaveSingleItem(); await supportRepository.Manage(new SubmitSupportForApprovalCommand { SupportId = supportId, Flags = flags }); //should be in pending approval var pendingApprovalSupport = ((SearchSupportQueryResult)await supportRepository.Query(new SearchSupportsQuery { ById = supportId })).Items.ShouldHaveSingleItem(); pendingApprovalSupport.Status.ShouldBe(SupportStatus.PendingApproval); pendingApprovalSupport.Flags.ShouldHaveSingleItem().ShouldBeAssignableTo <AmountOverridenSupportFlag>().ShouldNotBeNull().Approver.ShouldBe(flags[0].Approver); }
public async Task <IEnumerable <SupportFlag> > CheckCompliance(Support support) { await Task.CompletedTask; var approverName = support switch { ClothingSupport s => s.ApproverName, IncidentalsSupport s => s.ApproverName, FoodGroceriesSupport s => s.ApproverName, _ => null }; if (!string.IsNullOrEmpty(approverName)) { return new[] { new AmountExceededSupportFlag { Approver = approverName } } } ; return(Array.Empty <SupportFlag>()); } } }
public async Task CheckSupportComplianceRequest_OneDuplicate_FlagReturned() { var fileId = TestData.EvacuationFileId; var householdMembers = TestData.HouseholdMemberIds; var from = DateTime.UtcNow.AddDays(-3); var to = DateTime.UtcNow.AddDays(1); var supports = new Support[] { new ClothingSupport { FileId = fileId, SupportDelivery = new Referral(), TotalAmount = 100.00m, ApproverName = "test approver" }, new IncidentalsSupport { FileId = fileId, SupportDelivery = new Referral(), TotalAmount = 100.00m, ApproverName = "test approver" }, }; foreach (var support in supports) { support.From = from; support.To = to; support.IncludedHouseholdMembers = householdMembers; support.CreatedBy = new TeamMember { Id = TestData.Tier4TeamMemberId }; } var duplicateSupportId = ((ProcessDigitalSupportsResponse)await engine.Process(new ProcessDigitalSupportsRequest { FileId = fileId, Supports = supports, RequestingUserId = TestData.Tier4TeamMemberId })).Supports.Where(s => s is ClothingSupport).ShouldHaveSingleItem().Id; var checkedSupport = new ClothingSupport { FileId = fileId, SupportDelivery = new Interac(), TotalAmount = 100.00m, IncludedHouseholdMembers = householdMembers, From = from.AddMinutes(1), To = to.AddMinutes(1), CreatedBy = new TeamMember { Id = TestData.Tier4TeamMemberId } }; checkedSupport.Id = ((ProcessDigitalSupportsResponse)await engine.Process(new ProcessDigitalSupportsRequest { FileId = fileId, Supports = new[] { checkedSupport }, RequestingUserId = TestData.Tier4TeamMemberId })).Supports.ShouldHaveSingleItem().Id; var response = (CheckSupportComplianceResponse)await engine.Validate(new CheckSupportComplianceRequest { Supports = new[] { checkedSupport } }); var flags = response.Flags.ShouldHaveSingleItem(); flags.Key.Id.ShouldBe(checkedSupport.Id); flags.Value.Where(f => f is DuplicateSupportFlag d && d.DuplicatedSupportId == duplicateSupportId).ShouldHaveSingleItem(); }
public static IEnumerable <Support> CreateSupports(string prefix, EvacuationFile file) { var householdMemberIds = file.HouseholdMembers.Select(m => m.Id).ToArray(); var from = DateTime.UtcNow.AddDays(-1); var to = DateTime.UtcNow.AddDays(2); var supports = new Support[] { new ClothingSupport { TotalAmount = RandomAmount() }, new IncidentalsSupport { TotalAmount = RandomAmount() }, new FoodGroceriesSupport { TotalAmount = RandomAmount() }, new FoodRestaurantSupport { TotalAmount = RandomAmount() }, new LodgingBilletingSupport() { NumberOfNights = RandomInt() }, new LodgingGroupSupport { NumberOfNights = RandomInt(), FacilityCommunityCode = file.EvacuatedFromAddress.Community }, new LodgingHotelSupport { NumberOfNights = RandomInt(), NumberOfRooms = RandomInt() }, new TransportationOtherSupport { TotalAmount = RandomAmount() }, new TransportationTaxiSupport { FromAddress = "test", ToAddress = "test" }, }; Func <Support, SupportDelivery> createSupportDelivery = sup => sup switch { IncidentalsSupport s => new Interac { NotificationEmail = $"{prefix}[email protected]", ReceivingRegistrantId = file.PrimaryRegistrantId }, ClothingSupport s => new Interac { NotificationEmail = $"{prefix}[email protected]", ReceivingRegistrantId = file.PrimaryRegistrantId }, _ => new Referral { IssuedToPersonName = $"{prefix}-unitest" }, }; foreach (var support in supports) { support.FileId = file.Id; support.IncludedHouseholdMembers = householdMemberIds.TakeRandom(); support.From = from; support.To = to; support.SupportDelivery = createSupportDelivery(support); } return(supports); }