public FullRoe(SimpleRoe roe, List <FullPayPeriod> payPeriods) { PayPeriodType = roe.PayPeriodType; LastDayForWhichPaid = roe.LastDayForWhichPaid; FinalPayPeriodDay = roe.FinalPayPeriodDay; FirstDayForWhichPaid = roe.FirstDayForWhichPaid; PayPeriods = new List <FullPayPeriod>(payPeriods); }
public void ShouldWorkForSemiMonthly() { // Arrange var sut = GetSut(); var roe = new SimpleRoe() { LastDayForWhichPaid = new DateTime(2021, 4, 3), FinalPayPeriodDay = new DateTime(2021, 4, 15), FirstDayForWhichPaid = new DateTime(2018, 6, 5), PayPeriods = new List <PayPeriod>() { new PayPeriod(1, 200), new PayPeriod(2, 1100), new PayPeriod(3, 1100), new PayPeriod(4, 1000), new PayPeriod(5, 1300), new PayPeriod(6, 1000), new PayPeriod(7, 1100), new PayPeriod(8, 600), new PayPeriod(9, 0), new PayPeriod(10, 0), new PayPeriod(11, 500), new PayPeriod(12, 900), new PayPeriod(13, 900), new PayPeriod(14, 1100), new PayPeriod(15, 1100), new PayPeriod(16, 1200), new PayPeriod(17, 1200), new PayPeriod(18, 1200), new PayPeriod(19, 1300), new PayPeriod(20, 1100), new PayPeriod(21, 1100), new PayPeriod(22, 1100), new PayPeriod(23, 1050), new PayPeriod(24, 1000), new PayPeriod(25, 900), }, PayPeriodType = "semi-monthly" }; var req = new AverageIncomeRequest() { Roe = roe, NumBestWeeks = 20, ApplicationDate = new DateTime(2021, 5, 2), }; // Act var result = sut.Calculate(req); // Assert Assert.InRange(result, 540, 545); }
public void ShouldWorkNormally() { // Arrange var simpleRoe = new SimpleRoe() { PayPeriodType = ppTypes.MONTHLY, FirstDayForWhichPaid = new DateTime(2021, 2, 10), LastDayForWhichPaid = new DateTime(2021, 3, 27), FinalPayPeriodDay = new DateTime(2021, 3, 31), PayPeriods = new List <PayPeriod>() { new PayPeriod(1, 1000), new PayPeriod(2, 2000) } }; var fullRoeCreator = A.Fake <ICreateFullRoes>(); var incomeListGetter = A.Fake <IGetIncomeList>(); var fullRoe = A.Fake <FullRoe>(); var incomeList = new List <decimal>() { 3, -33.3M, 9, 9.999M, 10, 14, 8.8M, 16.5M, 7 }; A.CallTo(() => fullRoeCreator.Create(A <SimpleRoe> ._)) .Returns(fullRoe); A.CallTo(() => incomeListGetter.Get(A <DateTime> ._, A <FullRoe> ._)) .Returns(incomeList); var sut = new AverageIncomeCalculator(fullRoeCreator, incomeListGetter); // Act var req = new AverageIncomeRequest() { NumBestWeeks = 3, Roe = A.Fake <SimpleRoe>(), ApplicationDate = DateTime.Now, }; var result = sut.Calculate(req); // Assert A.CallTo(() => fullRoeCreator.Create(A <SimpleRoe> ._)) .MustHaveHappenedOnceExactly(); A.CallTo(() => incomeListGetter.Get(req.ApplicationDate, A <FullRoe> ._)) .MustHaveHappenedOnceExactly(); Assert.Equal(13.5M, result); }
public FullRoe Create(SimpleRoe roe) { var payPeriods = new List <FullPayPeriod>(); var endDate = roe.FinalPayPeriodDay; foreach (var pp in roe.PayPeriods) { var startDate = _startDateGetter.Get(endDate, roe.PayPeriodType); var nextPP = _payPeriodCreator.Create(pp, startDate, endDate, roe.FirstDayForWhichPaid, roe.LastDayForWhichPaid); payPeriods.Add(nextPP); endDate = startDate.AddDays(-1); } return(new FullRoe(roe, payPeriods)); }
public void ShouldWorkNormally() { // Arrange var simpleRoe = new SimpleRoe() { PayPeriodType = ppTypes.MONTHLY, FirstDayForWhichPaid = new DateTime(2021, 2, 10), LastDayForWhichPaid = new DateTime(2021, 3, 27), FinalPayPeriodDay = new DateTime(2021, 3, 31), PayPeriods = new List <PayPeriod>() { new PayPeriod(1, 1000), new PayPeriod(2, 2000) } }; var startDateGetter = A.Fake <IGetStartDateFromEndDate>(); var fullPayPeriodCreator = A.Fake <ICreateFullPayPeriods>(); A.CallTo(() => startDateGetter.Get(new DateTime(2021, 3, 31), ppTypes.MONTHLY)) .Returns(new DateTime(2021, 3, 1)); A.CallTo(() => startDateGetter.Get(new DateTime(2021, 2, 28), ppTypes.MONTHLY)) .Returns(new DateTime(2021, 2, 1)); A.CallTo(() => fullPayPeriodCreator.Create(A <PayPeriod> ._, A <DateTime> ._, A <DateTime> ._, A <DateTime> ._, A <DateTime> ._)) .Returns(new FullPayPeriod(1, 100)) .Twice(); var sut = new FullRoeCreator(startDateGetter, fullPayPeriodCreator); // Act var result = sut.Create(simpleRoe); // Assert A.CallTo(() => startDateGetter.Get(new DateTime(2021, 3, 31), ppTypes.MONTHLY)) .MustHaveHappenedOnceExactly(); A.CallTo(() => startDateGetter.Get(new DateTime(2021, 2, 28), ppTypes.MONTHLY)) .MustHaveHappenedOnceExactly(); A.CallTo(() => fullPayPeriodCreator.Create(A <PayPeriod> ._, A <DateTime> ._, A <DateTime> ._, A <DateTime> ._, A <DateTime> ._)) .MustHaveHappenedTwiceExactly(); Assert.Equal(2, result.PayPeriods.Count); }
public void ShouldWorkForMonthly() { // Arrange var sut = GetSut(); var roe = new SimpleRoe() { LastDayForWhichPaid = new DateTime(2021, 4, 17), FinalPayPeriodDay = new DateTime(2021, 4, 30), FirstDayForWhichPaid = new DateTime(2018, 6, 5), PayPeriods = new List <PayPeriod>() { new PayPeriod(1, 2300), new PayPeriod(2, 3400), new PayPeriod(3, 3400), new PayPeriod(4, 3400), new PayPeriod(5, 2500), new PayPeriod(6, 3100), new PayPeriod(7, 3400), new PayPeriod(8, 3400), new PayPeriod(9, 3400), new PayPeriod(10, 3000), new PayPeriod(11, 2900), new PayPeriod(12, 3400), new PayPeriod(13, 3400), }, PayPeriodType = "monthly" }; var req = new AverageIncomeRequest() { Roe = roe, NumBestWeeks = 14, ApplicationDate = new DateTime(2021, 5, 2), }; // Act var result = sut.Calculate(req); // Assert Assert.InRange(result, 830, 835); }
public void ShouldWorkForBiWeekly() { // Arrange var sut = GetSut(); var roe = new SimpleRoe() { LastDayForWhichPaid = new DateTime(2020, 9, 18), FinalPayPeriodDay = new DateTime(2020, 9, 19), FirstDayForWhichPaid = new DateTime(2020, 4, 6), PayPeriods = new List <PayPeriod>() { new PayPeriod(1, 1800), new PayPeriod(2, 1800), new PayPeriod(3, 1800), new PayPeriod(4, 750), new PayPeriod(5, 0), new PayPeriod(6, 450), new PayPeriod(7, 1800), new PayPeriod(8, 1800), new PayPeriod(9, 1800), new PayPeriod(10, 1800), new PayPeriod(11, 1800), new PayPeriod(12, 1100) }, PayPeriodType = "bi-weekly" }; var req = new AverageIncomeRequest() { Roe = roe, NumBestWeeks = 20, ApplicationDate = new DateTime(2020, 10, 4), }; // Act var result = sut.Calculate(req); // Assert Assert.InRange(result, 810, 815); }
public void ShouldWorkNormally() { // Arrange var applicationDate = new DateTime(2021, 6, 22); var startDate = new DateTime(2021, 6, 1); var mainStartDateGetter = A.Fake <IGetMainStartDate>(); var weeklyIncomeGetter = A.Fake <IGetIncomeForOneWeek>(); A.CallTo(() => mainStartDateGetter.Get(A <DateTime> ._, A <DateTime> ._)) .Returns(startDate); A.CallTo(() => weeklyIncomeGetter.Get(A <FullRoe> ._, A <DateTime> ._)) .Returns(10); var sut = new IncomeListGetter(mainStartDateGetter, weeklyIncomeGetter); // Act var simpleRoe = new SimpleRoe() { LastDayForWhichPaid = new DateTime(2021, 6, 21), FirstDayForWhichPaid = new DateTime(2021, 1, 1), }; var payPeriods = new List <FullPayPeriod>() { new FullPayPeriod(1, 1000), new FullPayPeriod(2, 2000) }; var fullRoe = new FullRoe(simpleRoe, payPeriods); var result = sut.Get(applicationDate, fullRoe); // Assert A.CallTo(() => mainStartDateGetter.Get(A <DateTime> ._, A <DateTime> ._)) .MustHaveHappenedOnceExactly(); A.CallTo(() => weeklyIncomeGetter.Get(A <FullRoe> ._, A <DateTime> ._)) .MustHaveHappened(3, Times.Exactly); Assert.Equal(3, result.Count); }
public void ShouldWorkNormally() { // Arrange var startOfWeek = new DateTime(2021, 7, 11); var minDate = new DateTime(2021, 1, 1); var maxDate = new DateTime(2021, 12, 31); var incomeRoeGetter = A.Fake <IGetIncomeFromOneRoe>(); A.CallTo(() => incomeRoeGetter.Get(A <FullPayPeriod> ._, startOfWeek, minDate, maxDate)) .Returns(100).Once(); A.CallTo(() => incomeRoeGetter.Get(A <FullPayPeriod> ._, startOfWeek, minDate, maxDate)) .Returns(150).Once(); var sut = new WeeklyIncomeGetter(incomeRoeGetter); // Act var simpleRoe = new SimpleRoe() { LastDayForWhichPaid = maxDate, FirstDayForWhichPaid = minDate, }; var payPeriods = new List <FullPayPeriod>() { new FullPayPeriod(1, 1000), new FullPayPeriod(2, 2000) }; var fullRoe = new FullRoe(simpleRoe, payPeriods); var result = sut.Get(fullRoe, startOfWeek); // Assert A.CallTo(() => incomeRoeGetter.Get(A <FullPayPeriod> ._, A <DateTime> ._, A <DateTime> ._, A <DateTime> ._)) .MustHaveHappenedTwiceExactly(); Assert.Equal(250, result); }
public void ShouldWorkForWeekly() { // Arrange var sut = GetSut(); var roe = new SimpleRoe() { LastDayForWhichPaid = new DateTime(2020, 9, 18), FinalPayPeriodDay = new DateTime(2020, 9, 19), FirstDayForWhichPaid = new DateTime(2019, 4, 6), PayPeriods = new List <PayPeriod>() { new PayPeriod(1, 500), new PayPeriod(2, 530), new PayPeriod(3, 520), new PayPeriod(4, 510), new PayPeriod(5, 0), new PayPeriod(6, 450), new PayPeriod(7, 470), new PayPeriod(8, 520), new PayPeriod(9, 520), new PayPeriod(10, 520), new PayPeriod(11, 520), new PayPeriod(12, 520), new PayPeriod(13, 520), new PayPeriod(14, 540), new PayPeriod(15, 500), new PayPeriod(16, 550), new PayPeriod(17, 0), new PayPeriod(18, 450), new PayPeriod(19, 500), new PayPeriod(20, 500), new PayPeriod(21, 500), new PayPeriod(22, 500), new PayPeriod(23, 520), new PayPeriod(24, 520), new PayPeriod(25, 520), new PayPeriod(26, 580), new PayPeriod(27, 580), new PayPeriod(28, 600), new PayPeriod(29, 600), new PayPeriod(30, 610), new PayPeriod(31, 610), new PayPeriod(32, 610), new PayPeriod(33, 610), new PayPeriod(34, 610), new PayPeriod(35, 630), new PayPeriod(36, 630), new PayPeriod(37, 630), new PayPeriod(38, 630), new PayPeriod(39, 630), new PayPeriod(40, 700), new PayPeriod(41, 700), new PayPeriod(42, 700), new PayPeriod(43, 700), new PayPeriod(44, 700), new PayPeriod(45, 700), new PayPeriod(46, 700), new PayPeriod(47, 700), new PayPeriod(48, 700), new PayPeriod(49, 700), new PayPeriod(50, 700), new PayPeriod(51, 700), new PayPeriod(52, 700), new PayPeriod(53, 750) }, PayPeriodType = "weekly" }; var req = new AverageIncomeRequest() { Roe = roe, NumBestWeeks = 14, ApplicationDate = new DateTime(2020, 10, 4), }; // Act var result = sut.Calculate(req); // Assert Assert.InRange(result, 680, 690); }