示例#1
0
        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();
        }
示例#2
0
        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>());
        }
    }
}
示例#4
0
        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();
        }
示例#5
0
        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);
        }