public void CalculateFeeLaFullPeriodWithFeeChangeMultipleChgInOnePeriodForCustomDates() { FeeCalculatorService srv = new FeeCalculatorService(); var schedules = getSchedules(40); var invoiceResident = new InvoiceResident(40, "John", schedules); var resident = srv.CalculateFee(invoiceResident, new DateTime(2020, 01, 01), new DateTime(2020, 03, 31)); var feesPerSchedules = resident.GetSchedules(); var amounts = feesPerSchedules.Select(c => c.AmountDue).ToArray(); var totalAmount = amounts.Sum(); // Multiple Fee changes // (40, 1, 1, new DateTime(2019, 01, 01), new DateTime(2020, 01, 10), 600.50M)); // (40, 1, 1, new DateTime(2020, 01, 11), new DateTime(2020, 01, 15), 630.90M)); // (40, 1, 1, new DateTime(2020, 01, 16), new DateTime(2050, 12, 31), 250.50M)); // (40, 99, 2, new DateTime(2019, 01, 01), new DateTime(2020, 01, 10), 150.44M)); // (40, 99, 2, new DateTime(2020, 01, 11), new DateTime(2020, 01, 15), 165.78M)); // (40, 99, 2, new DateTime(2020, 01, 16), new DateTime(2050, 12, 31), 550.58M)); // LA 600.50 CC 150.44 for 10 days // LA 630.90 CC 165.78 for 5 days // LA 250.50 CC 550.58 for 13 days 91 days Assert.AreEqual(10339.26M, totalAmount); }
public void GetInvoiceDataByDateTest() { var startDate = new DateTime(2020, 01, 01); var endDate = new DateTime(2020, 01, 31); // arrange Mock <IInvoiceDataProvider> mockInvDP = new Mock <IInvoiceDataProvider>(); Mock <IResidentDataProvider> mockResDP = new Mock <IResidentDataProvider>(); IFeeCalculatorService feeCalculatorService = new FeeCalculatorService(); Mock <IUserService> mockUserDP = new Mock <IUserService>(); Mock <IBillingCycleDataProvider> mockBcDP = new Mock <IBillingCycleDataProvider>(); mockResDP.Setup(m => m.GetResidents()).Returns(GetResidents()); mockInvDP.Setup(m => m.GetAllSchedulesForInvoiceDate(startDate, endDate)).Returns(GetSchedulePayments()); mockUserDP.Setup(m => m.GetUsers()).Returns(GetUsers()); IInvoiceService srv = new InvoiceService(mockInvDP.Object, mockResDP.Object, feeCalculatorService, mockUserDP.Object, mockBcDP.Object); var actual = srv.GetInvoiceData(startDate, endDate); // assert decimal[] amountDues = { 714.29M, 285.71M, 1200.00M, 900.00M }; // calcualted based on dates. see schedule data decimal wkFee = 700.00M; Assert.AreEqual(wkFee, actual.InvoiceResidents.FirstOrDefault().ResidentWeeklyFee); var sps = actual.InvoiceResidents.FirstOrDefault().SchedulePayments.ToList(); int i = 0; sps.ForEach(s => { Assert.AreEqual(amountDues[i], s.AmountDue); i++; }); }
public void CalculateFeeLaResidentArrivesMidMonth() { FeeCalculatorService srv = new FeeCalculatorService(); var schedules = getSchedules(21); var invoiceResident = new InvoiceResident(21, "John", schedules); var resident = srv.CalculateFee(invoiceResident, new DateTime(2020, 01, 01), new DateTime(2020, 01, 28)); var feesPerSchedules = resident.GetSchedules(); var amounts = feesPerSchedules.Select(c => c.AmountDue).ToArray(); var totalAmount = amounts.Sum(); // Fee = la= 678.01 // For 8 days: 774.87 Assert.AreEqual(774.87M, totalAmount); }
public void CalculateFeeLaResidentLeavesMidMonth() { FeeCalculatorService srv = new FeeCalculatorService(); var schedules = getSchedules(20); var invoiceResident = new InvoiceResident(20, "John", schedules); var resident = srv.CalculateFee(invoiceResident, new DateTime(2020, 01, 01), new DateTime(2020, 01, 28)); var feesPerSchedules = resident.GetSchedules(); var amounts = feesPerSchedules.Select(c => c.AmountDue).ToArray(); var totalAmount = amounts.Sum(); // Fee = la= 680.10 // For 15 days: 1457.36 Assert.AreEqual(1457.36M, totalAmount); }
public void CalculateFeeLaAndCcFullPeriodNoFeeChange() { FeeCalculatorService srv = new FeeCalculatorService(); var schedules = getSchedules(11); var invoiceResident = new InvoiceResident(11, "John", schedules); var resident = srv.CalculateFee(invoiceResident, new DateTime(2020, 01, 01), new DateTime(2020, 01, 28)); var feesPerSchedules = resident.GetSchedules(); var amounts = feesPerSchedules.Select(c => c.AmountDue).ToArray(); var totalAmount = amounts.Sum(); // Fee = la= 555.75M cc= 245.43M // For 28 days: 555.75+245.43 / 7 * 28 = 3204.72 Assert.AreEqual(3204.72M, totalAmount); }
public void CalculateFeeLaFullPeriodNoFeeChangeForCustomDates() { FeeCalculatorService srv = new FeeCalculatorService(); var schedules = getSchedules(10); var invoiceResident = new InvoiceResident(10, "John", schedules); var resident = srv.CalculateFee(invoiceResident, new DateTime(2020, 01, 01), new DateTime(2020, 03, 31)); // <<--quarter var feesPerSchedules = resident.GetSchedules(); var amounts = feesPerSchedules.Select(c => c.AmountDue).ToArray(); var totalAmount = amounts.Sum(); // Fee = 599.99M // For 91 days: 599.99 / 7 * 91 = 7799.87 Assert.AreEqual(7799.87M, totalAmount); }
public void CalculateFeeLaFullPeriodNoFeeChange() { FeeCalculatorService srv = new FeeCalculatorService(); // get schedules for John var schedules = getSchedules(10); var invoiceResident = new InvoiceResident(10, "John", schedules); var resident = srv.CalculateFee(invoiceResident, new DateTime(2020, 01, 01), new DateTime(2020, 01, 28)); var feesPerSchedules = resident.GetSchedules(); var amounts = feesPerSchedules.Select(c => c.AmountDue).ToArray(); var totalAmount = amounts.Sum(); // Fee = 599.99M // For 28 days: 599.99 / 7 * 28 = 2399.96 Assert.AreEqual(2399.96M, totalAmount); }
public void CalculateFeeLaFullPeriodWithFeeChange() { FeeCalculatorService srv = new FeeCalculatorService(); var schedules = getSchedules(30); var invoiceResident = new InvoiceResident(30, "John", schedules); var resident = srv.CalculateFee(invoiceResident, new DateTime(2020, 01, 01), new DateTime(2020, 01, 28)); var feesPerSchedules = resident.GetSchedules(); var amounts = feesPerSchedules.Select(c => c.AmountDue).ToArray(); var totalAmount = amounts.Sum(); // (30, 1, 1, new DateTime(2019, 01, 01), new DateTime(2020, 01, 15), 630.50M)); // (30, 1, 1, new DateTime(2020, 01, 16), new DateTime(2050, 12, 31), 655.75M)); // For 630.50 for 15 days = 1351.07 // For 655.75 for 13 days = 1217.82 = 2568.89 Assert.AreEqual(2568.89M, totalAmount); }
public void CalculateFeeLaAndCcWithLaMultiplePaymentsAndCcMultiplePayments() { FeeCalculatorService srv = new FeeCalculatorService(); var schedules = getSchedules(50); var invoiceResident = new InvoiceResident(50, "John", schedules); var resident = srv.CalculateFee(invoiceResident, new DateTime(2020, 01, 01), new DateTime(2020, 01, 28)); var feesPerSchedules = resident.GetSchedules(); var amounts = feesPerSchedules.Select(c => c.AmountDue).ToArray(); var totalAmount = amounts.Sum(); // multiple payments categories from la // (50, 1, 1, new DateTime(2019, 01, 01), new DateTime(2050, 12, 31), 499.99M)); // (50, 1, 1, new DateTime(2019, 01, 01), new DateTime(2050, 12, 31), 69.75M)); // (50, 1, 1, new DateTime(2019, 01, 01), new DateTime(2050, 12, 31), 25.55M)); // (50, 99, 2, new DateTime(2019, 01, 01), new DateTime(2050, 12, 31), 125.75M)); // (50, 99, 2, new DateTime(2019, 01, 01), new DateTime(2050, 12, 31), 13.33M)); // For 28 days: all totals = 2937.48 Assert.AreEqual(2937.48M, totalAmount); }