コード例 #1
0
ファイル: ShiftDTO.cs プロジェクト: tyranthym/Payroll-test
        public ShiftDTO CalculateEarning()
        {
            switch (this.DayOfWeek)
            {
            case DayOfWeek.Saturday:
                var saturdayEarningOptions = new SaturdayEarningOptions(TotalHoursWorked, OvertimeHoursWorked, OvertimeLateHoursWorked, WageBase);
                ShiftEarning = PayslipCalculator.CalculateSaturdayEarning(saturdayEarningOptions);
                break;

            case DayOfWeek.Sunday:
                var sundayEarningOptions = new SundayEarningOptions(TotalHoursWorked, OvertimeHoursWorked, WageBase);
                ShiftEarning = PayslipCalculator.CalculateSundayEarning(sundayEarningOptions);
                break;

            default:
                var weekdayEarningOptions = new WeekdayEarningOptions
                                                (NormalHoursWorked,
                                                After6PmHoursWorked,
                                                OvertimeHoursWorked,
                                                OvertimeLateHoursWorked,
                                                After6PmAndOvertimeHoursWorked,
                                                WageBase);
                ShiftEarning = PayslipCalculator.CalculateWeekdayEarning(weekdayEarningOptions);
                break;
            }
            return(this);
        }
コード例 #2
0
ファイル: ShiftDTO.cs プロジェクト: tyranthym/Payroll-test
 public ShiftDTO CalculateHoursWorked()
 {
     //no break version
     if (this.HasBreak == false)
     {
         TotalHoursWorked               = PayslipCalculator.CalculateTotalHoursWorked(StartedAt, EndedAt);
         OvertimeHoursWorked            = PayslipCalculator.CalculateOvertimeHoursWorked(StartedAt, EndedAt);
         OvertimeLateHoursWorked        = PayslipCalculator.CalculateOvertimeLateHoursWorked(StartedAt, EndedAt);
         After6PmHoursWorked            = PayslipCalculator.CalculateAfter6PmHours(StartedAt, EndedAt);
         After6PmAndOvertimeHoursWorked = PayslipCalculator.CalculateAfter6PmAndOvertimeHoursWorked(StartedAt, EndedAt);
         NormalHoursWorked              = PayslipCalculator.CalculateNormalHoursWorked(StartedAt, EndedAt);
     }
     else   //break version
     {
         DateTime breakStartTime = BreakStartedAt.GetValueOrDefault();
         DateTime breakEndTime   = BreakEndedAt.GetValueOrDefault();
         BreakHours                     = PayslipCalculator.CalculateHours(breakStartTime, breakEndTime);
         TotalHoursWorked               = PayslipCalculator.CalculateTotalHoursWorked(StartedAt, EndedAt, breakStartTime, breakEndTime);
         OvertimeHoursWorked            = PayslipCalculator.CalculateOvertimeHoursWorked(StartedAt, EndedAt, breakStartTime, breakEndTime);
         OvertimeLateHoursWorked        = PayslipCalculator.CalculateOvertimeLateHoursWorked(StartedAt, EndedAt, breakStartTime, breakEndTime);
         After6PmHoursWorked            = PayslipCalculator.CalculateAfter6PmHours(StartedAt, EndedAt, breakStartTime, breakEndTime);
         After6PmAndOvertimeHoursWorked = PayslipCalculator.CalculateAfter6PmAndOvertimeHoursWorked(StartedAt, EndedAt, breakStartTime, breakEndTime);
         NormalHoursWorked              = PayslipCalculator.CalculateNormalHoursWorked(StartedAt, EndedAt, breakStartTime, breakEndTime);
     }
     return(this);
 }
コード例 #3
0
        public void GivenFirstAndLastNameShouldFormatIntoFullName(string firstName, string lastName, string expectedName)
        {
            var user             = Mock.Of <User>(u => u.Name == firstName && u.Surname == lastName && u.Salary == 0 && u.EndDate == "" && u.StartDate == "" && u.SuperRate == 0);
            var payslipGenerator = new PayslipCalculator(_calculator.Object, new DateValidator());
            var payslip          = payslipGenerator.GeneratePayslip(user);

            Assert.Equal(expectedName, payslip.Fullname);
        }
コード例 #4
0
        public void CalculateIncomeTax_VariousIncomesAndPeriods_Calculated(double grossIncome, int payPeriods, double tax)
        {
            var expected = tax;

            var actual = PayslipCalculator.CalculateIncomeTax(grossIncome, payPeriods);

            Assert.Equal(expected, actual);
        }
コード例 #5
0
        public void calculateIncomeTax_calculatesIncomeTax_correctly(int testSalary, decimal expectedIncomeTax)
        {
            PayslipCalculator payslipCalculator = new PayslipCalculator();

            decimal actualIncomeTax = payslipCalculator.CalculateIncomeTax(testSalary);

            Assert.Equal(expectedIncomeTax, actualIncomeTax);
        }
コード例 #6
0
        public void calculateSuperPaid_calculatesSuperPaid_correctly()
        {
            var payslipCalculator = new PayslipCalculator();
            var testEmployee      = new Employee("John Smith", 60050, 0.09m, "March 1", "March 31");
            var expectedSuperPaid = 450;

            var actualSuperPaid = payslipCalculator.CreatePayslip(testEmployee).SuperPaid;

            Assert.Equal(expectedSuperPaid, actualSuperPaid);
        }
コード例 #7
0
        public void calculateGrossIncome_calculatesGrossIncome_correctly()
        {
            var payslipCalculator   = new PayslipCalculator();
            var testEmployee        = new Employee("John Smith", 60050, 0.09m, "March 1", "March 31");
            var expectedGrossIncome = 5004;

            var actualGrossIncome = payslipCalculator.CreatePayslip(testEmployee).GrossIncome;

            Assert.Equal(expectedGrossIncome, actualGrossIncome);
        }
コード例 #8
0
        public void CalculatePayPeriods_SameMonth_Calculated()
        {
            const int expected = 1;

            var startDate = new DateTime(2020, 3, 1);
            var endDate   = new DateTime(2020, 3, 31);
            var actual    = PayslipCalculator.CalculatePayPeriods(startDate, endDate);

            Assert.Equal(expected, actual);
        }
コード例 #9
0
        public void GivenGrossIncomeAndSuperRateShouldCalculateSuper(int salary, int superRate, int expectedSuper)
        {
            var user = Mock.Of <User>(u => u.Name == "" && u.Surname == "" && u.Salary == salary && u.EndDate == "" && u.StartDate == "" && u.SuperRate == superRate);

            _calculator.Setup(c => c.CalculateSuper(It.IsAny <int>(), It.IsAny <int>())).Returns(expectedSuper);
            var payslipGenerator = new PayslipCalculator(_calculator.Object, new DateValidator());
            var payslip          = payslipGenerator.GeneratePayslip(user);

            Assert.Equal(expectedSuper, payslip.Super);
        }
コード例 #10
0
        public void GeneratePayslip()
        {
            var inputDetails      = _inputOutput.GetInputDetails();
            var payslip           = new Payslip();
            var payslipCalculator = new PayslipCalculator();

            payslip.FullName    = payslipCalculator.JoinFirstAndLastNames(inputDetails.FirstName, inputDetails.LastName);
            payslip.PayPeriod   = payslipCalculator.CalculatePayPeriod(inputDetails.StartDate, inputDetails.EndDate);
            payslip.GrossIncome = payslipCalculator.CalculateGrossIncome(inputDetails.AnnualSalary);
            payslip.IncomeTax   = payslipCalculator.CalculateIncomeTax(inputDetails.AnnualSalary);
            payslip.NetIncome   = payslipCalculator.CalculateNetIncome(payslip.GrossIncome, payslip.IncomeTax);
            payslip.Super       = payslipCalculator.CalculateSuper(payslip.GrossIncome, inputDetails.SuperRate);
            _inputOutput.OutputPayslip(payslip);
        }
コード例 #11
0
        public void GivenExceptionThrownShouldCreateEmptyPayslip()
        {
            var user = Mock.Of <User>(u => u.Name == "" && u.Surname == "" && u.Salary == -1 && u.EndDate == "" && u.StartDate == "" && u.SuperRate == 0);

            _calculator.Setup(c => c.CalculateIncomeTax(It.IsAny <int>())).Throws <Exception>();
            var payslipGenerator = new PayslipCalculator(_calculator.Object, new DateValidator());
            var payslip          = payslipGenerator.GeneratePayslip(user);

            Assert.Null(payslip.Fullname);
            Assert.Equal(0, payslip.GrossIncome);
            Assert.Equal(0, payslip.IncomeTax);
            Assert.Equal(0, payslip.NetIncome);
            Assert.Equal(0, payslip.Super);
        }
コード例 #12
0
        public static string GetPayslip(string input)
        {
            var inputProcessor   = new InputProcessor();
            var payslipGenerator = new PayslipCalculator();
            var outputProcessor  = new OutputProcessor();

            //InputProcessor will split the required Input from string
            payslipInput = inputProcessor.Process(input);

            //Payslip Generator internally will calculate tax and create tax table to prepare payslip
            payslipInfo = payslipGenerator.Calculate(payslipInput);

            //OutputProcessor will join the output in string
            return(outputProcessor.Process(payslipInfo));
        }
コード例 #13
0
        public void PayslipCalculatorTest()
        {
            string Input    = "David,Rudd,60050,9%,01 March – 31 March";
            string Expected = "David Rudd,01 March – 31 March,5004,922,4082,450";
            string Actual;

            PayslipInput payslipInput;
            PayslipInfo  payslipInfo;

            var inputProcessor    = new InputProcessor();
            var payslipCalculator = new PayslipCalculator();
            var outputProcessor   = new OutputProcessor();

            payslipInput = inputProcessor.Process(Input);
            payslipInfo  = payslipCalculator.Calculate(payslipInput);
            Actual       = outputProcessor.Process(payslipInfo);
            Assert.AreEqual(Expected, Actual);
        }
コード例 #14
0
 public PayslipCalculatorTest()
 {
     _payslipCalculator = new PayslipCalculator();
 }
コード例 #15
0
        public void Entering_Salary_Details_Returns_Gross_Income()
        {
            var payslipCalculator = new PayslipCalculator(new SalaryDetails(60050, 9));

            Assert.Equal(5004, payslipCalculator.GetGrossIncome());
        }
コード例 #16
0
        public void Entering_Salary_Details_Returns_Super()
        {
            var payslipCalculator = new PayslipCalculator(new SalaryDetails(60050, 9));

            Assert.Equal(450, payslipCalculator.GetSuper());
        }
コード例 #17
0
        public void Entering_Salary_Details_Returns_Net_Income()
        {
            var payslipCalculator = new PayslipCalculator(new SalaryDetails(60050, 9));

            Assert.Equal(4082, payslipCalculator.GetNetIncome());
        }