public void PayIntervalShouldMatchPaycheckCount()
        {
            var expectedPaycheckCounts = new List <int>()
            {
                12 /*monthly*/, 26 /*biweekly*/, 52                                            /*weekly*/
            };

            expectedPaycheckCounts.ForEach(expectedPaycheckCount =>
            {
                var employee = new Employee(1, "Alan", "Smith");
                var salary   = new Salary()
                {
                    PerPeriod = 1000, Interval = (PayInterval)expectedPaycheckCount
                };
                var benefit = new Benefit()
                {
                    Beneficiary = employee, GrossCost = 1000
                };
                var benefitPackage = new BenefitPackage();
                benefitPackage.Benefits.Add(benefit);

                var mockSalaryLogic = new Mock <ISalaryLogic>();
                mockSalaryLogic.Setup(x => x.GetItem(employee)).Returns(salary);

                var mockBenefitLogic = new Mock <IBenefitPackageLogic>();
                mockBenefitLogic.Setup(x => x.GetItem(employee)).Returns(benefitPackage);

                var payrollLogic = new PayrollLogic(mockSalaryLogic.Object, mockBenefitLogic.Object);

                Payroll payroll = payrollLogic.Calculate(employee);

                Assert.AreEqual(expectedPaycheckCount, payroll.PaySchedule.Count);
            });
        }
        public void SalaryShouldMatchPayScheduleSummation()
        {
            var employee = new Employee(1, "Alan", "Smith");
            var salary   = new Salary()
            {
                PerPeriod = 1000, Interval = PayInterval.Weekly
            };
            var benefit = new Benefit()
            {
                Beneficiary = employee, GrossCost = 1000
            };
            var benefitPackage = new BenefitPackage();

            benefitPackage.Benefits.Add(benefit);

            var mockSalaryLogic = new Mock <ISalaryLogic>();

            mockSalaryLogic.Setup(x => x.GetItem(employee)).Returns(salary);

            var mockBenefitLogic = new Mock <IBenefitPackageLogic>();

            mockBenefitLogic.Setup(x => x.GetItem(employee)).Returns(benefitPackage);

            var payrollLogic = new PayrollLogic(mockSalaryLogic.Object, mockBenefitLogic.Object);

            Payroll payroll = payrollLogic.Calculate(employee);

            Assert.AreEqual(payroll.Salary.Yearly, payroll.PaySchedule.Sum(x => x.GrossPay));
            Assert.AreEqual(payroll.NetYearlySalary, payroll.PaySchedule.Sum(x => x.NetPay));
        }
        private static IEnumerable <PayPeriod> BreakoutPaySchedule(Salary salary, BenefitPackage benefitPackage)
        {
            int payPeriodsPerYear = (int)salary.Interval;

            decimal typicalDeductions = (benefitPackage.NetCost / payPeriodsPerYear).TruncateToTwoDecimals();

            var periods = Enumerable.Range(1, payPeriodsPerYear - 1)
                          .Select(index => new PayPeriod()
            {
                Period     = index,
                GrossPay   = salary.PerPeriod,
                Deductions = typicalDeductions,
            }).ToList();

            var lastPeriod = new PayPeriod
            {
                Period     = payPeriodsPerYear,
                GrossPay   = salary.Yearly - periods.Sum(x => x.GrossPay),
                Deductions = benefitPackage.NetCost - periods.Sum(x => x.Deductions)
            };

            periods.Add(lastPeriod);

            return(periods);
        }
 public Employee( string name, int age, int id, float pay, string ssn)
 {
     EmpBenefits = new BenefitPackage();
      EmpName = name;
      EmpAge = age;
      EmpID = id;
      CurPay = pay;
      EmpSSN = ssn;
 }
Beispiel #5
0
        public BenefitPackage GetItem(Employee employee)
        {
            if (employee == null)
            {
                throw new ArgumentNullException(nameof(employee));
            }

            var benefitPackage = new BenefitPackage();

            var employeeBenefit = this._benefitLogic.GetItem(employee);

            benefitPackage.Benefits.Add(employeeBenefit);

            benefitPackage.Benefits.AddRange(this.GetDependentBenefits(employee));

            return(benefitPackage);
        }