public void GeneratePayslipForEmployee_TestData2_ReturnExpectedData()
        {
            //Arrange
            var mockTaxCalculator = new Mock <ITaxCalculatorService>();

            mockTaxCalculator.Setup(tc => tc.CalculateIncomeTax(It.IsAny <int>(), Enums.CalculationFrequency.Monthly)).Returns(2696);
            IPayslipService _payslipService = new PayslipService(mockTaxCalculator.Object);

            var data = new EmployeeInformation()
            {
                EmployeeFirstName = "Ryan",
                EmployeeLastName  = "Chen",
                AnnualSalary      = 120000,
                PayslipFrequency  = Enums.CalculationFrequency.Monthly,
                SuperRate         = 10,
                PayPeriod         = "01 Mar-31 Mar"
            };

            var expectedResult = new PayslipInfo()
            {
                Name        = "Ryan Chen",
                GrossIncome = 10000,
                IncomeTax   = 2696,
                Super       = 1000,
                PayPeriod   = "01 Mar-31 Mar"
            };

            //Act
            var payslip = _payslipService.GeneratePayslipForEmployee(data);

            //Assert
            Assert.AreEqual(expectedResult.NetIncome, payslip.NetIncome);
            Assert.AreEqual(expectedResult.ToString(), payslip.ToString());
        }
        public void Init()
        {
            _loggerMock = new Mock <ILogger <PayslipService> >();
            //_loggerMock.Setup(x => x.LogTrace(It.IsAny<int>(), It.IsAny<string>(), It.IsAny<object[]>())).Verifiable();
            //_loggerMock.Setup(x => x.LogError(It.IsAny<int>(), It.IsAny<string>(), It.IsAny<object[]>())).Verifiable();

            _payslipService = new PayslipService(null, _loggerMock.Object);
        }
        public void PayslipService_MissingTaxBraketForIncome_ThrowsException()
        {
            var payslipRequest = GetMockRequestData();
            var taxSettings    = new TaxSettings()
            {
                TaxRates = new List <TaxRates>()
                {
                    new TaxRates()
                    {
                        ApplyFrom = null, ApplyTo = new DateTime(2015, 9, 30), TaxBrackets = new List <TaxBracket>()
                        {
                            new TaxBracket()
                            {
                                Base = 0, FromIncome = 0, ToIncome = 110000, TaxPerDollar = 0.10m
                            },
                            new TaxBracket()
                            {
                                Base = 11000, FromIncome = 125000, ToIncome = null, TaxPerDollar = 0.20m
                            }
                        }
                    },
                    new TaxRates()
                    {
                        ApplyFrom = new DateTime(2015, 10, 1), ApplyTo = null, TaxBrackets = new List <TaxBracket>()
                        {
                            new TaxBracket()
                            {
                                Base = 0, FromIncome = 0, ToIncome = 110000, TaxPerDollar = 0.10m
                            },
                            new TaxBracket()
                            {
                                Base = 11000, FromIncome = 110000, ToIncome = null, TaxPerDollar = 0.20m
                            }
                        }
                    },
                }
            };

            _payslipService = new PayslipService(taxSettings, _loggerMock.Object);

            var response = _payslipService.GeneratePayslip(payslipRequest);
        }
Example #4
0
        static void Main(string[] args)
        {
            Console.WriteLine("Welcome to payslip app. Please enter file name to process");
            var inputFileName = Console.ReadLine();

            if (File.Exists(inputFileName))
            {
                var service = new PayslipService(
                    new EmployeeDetailRepo(inputFileName), new TaxCalculater());
                var payslips = service.GeneratePayslips();
                PrintPayslips(payslips);
            }
            else
            {
                Console.WriteLine("Sorry file does not exist");
            }
            Console.WriteLine();
            Console.WriteLine("Please press enter to exit");
            Console.ReadLine();
        }
        public void GeneratePayslipSuccesfully()
        {
            var repo = new Mock <IEmployeeDetailRepo>();

            repo.Setup(x => x.ReadAllEmployeeDetails()).Returns(new EmployeeDetailModel[] { inputEmployee1, inputEmployee2 });
            var taxCalculater = new Mock <ITaxCalculater>();

            taxCalculater.Setup(x => x.CalculateIncomeTax(inputEmployee2.AnnualSalary)).Returns(payslip2.IncomeTax * PayslipService.NumberOfMonthInYear);

            var service       = new PayslipService(repo.Object, taxCalculater.Object);
            var payslips      = service.GeneratePayslips();
            var payslipsArray = payslips.ToArray();

            Assert.IsTrue(payslipsArray.Length == 2 &&
                          payslipsArray[1].Name == payslip2.Name &&
                          payslipsArray[1].Payperiod == payslip2.Payperiod &&
                          payslipsArray[1].GrossIncome == payslip2.GrossIncome &&
                          payslipsArray[1].IncomeTax == payslip2.IncomeTax &&
                          payslipsArray[1].NetIncome == payslip2.NetIncome &&
                          payslipsArray[1].Super == payslip2.Super);
        }
        public void GeneratePayslipForEmployee_TestInvalidData_ReturnsNullForPayslip()
        {
            //Arrange
            var             mockTaxCalculator = new Mock <ITaxCalculatorService>();
            IPayslipService _payslipService   = new PayslipService(mockTaxCalculator.Object);

            var data = new EmployeeInformation()
            {
                EmployeeFirstName = "David",
                EmployeeLastName  = "Rudd",
                AnnualSalary      = 60050,
                PayslipFrequency  = Enums.CalculationFrequency.Monthly,
                SuperRate         = 52, // << Invalid
                PayPeriod         = "01 Jan-31 Jan"
            };

            //Act
            var payslip = _payslipService.GeneratePayslipForEmployee(data);

            //Assert
            Assert.IsNull(payslip);
        }
 public void GenerateCsvTest()
 {
     var payslipService = new PayslipService();
     Assert.AreEqual(0, payslipService.TaxBrackets[0].MinSalary); //Tests that the correct parameters are being passed to the tax calculation logic.////////
     Assert.AreEqual(18200, payslipService.TaxBrackets[0].MaxSalary);//                                                                                   //
     Assert.AreEqual(0, payslipService.TaxBrackets[0].BaseTax);//                                                                                         //
     Assert.AreEqual(0, payslipService.TaxBrackets[0].MarginalRate);//                                                                                    //
     Assert.AreEqual(18201, payslipService.TaxBrackets[1].MinSalary);//                                                                                   //
     Assert.AreEqual(37000, payslipService.TaxBrackets[1].MaxSalary);//                                                                                   //
     Assert.AreEqual(0, payslipService.TaxBrackets[1].BaseTax);//                                                                                         //
     Assert.AreEqual(0.19m, payslipService.TaxBrackets[1].MarginalRate);//                                                                                //
     Assert.AreEqual(37001, payslipService.TaxBrackets[2].MinSalary);//                                                                                   //
     Assert.AreEqual(80000, payslipService.TaxBrackets[2].MaxSalary);//                                                                                   //
     Assert.AreEqual(3572, payslipService.TaxBrackets[2].BaseTax);//                                                                                      //
     Assert.AreEqual(0.325m, payslipService.TaxBrackets[2].MarginalRate);//                                                                               //
     Assert.AreEqual(80001, payslipService.TaxBrackets[3].MinSalary);//                                                                                   //
     Assert.AreEqual(180000, payslipService.TaxBrackets[3].MaxSalary);//                                                                                  //
     Assert.AreEqual(17547, payslipService.TaxBrackets[3].BaseTax);//                                                                                     //
     Assert.AreEqual(0.37m, payslipService.TaxBrackets[3].MarginalRate);//                                                                                //
     Assert.AreEqual(180001, payslipService.TaxBrackets[4].MinSalary);//                                                                                  //
     Assert.AreEqual(2147483647, payslipService.TaxBrackets[4].MaxSalary);//                                                                              //
     Assert.AreEqual(54547, payslipService.TaxBrackets[4].BaseTax);//                                                                                     //
     Assert.AreEqual(0.45m, payslipService.TaxBrackets[4].MarginalRate);////////////////////////////////////////////////////////////////////////////////////
     var feedbackMessage = payslipService.GenerateCsv();
     Assert.IsFalse(feedbackMessage.Contains(PayslipService.ErrorPrefix), feedbackMessage);
     var inputExists = File.Exists(payslipService.InputFileName);
     var outputExists = File.Exists(payslipService.OutputFileName);
     Assert.IsTrue(!inputExists ^ outputExists);
     if (outputExists)
     {
         using (var reader = File.OpenText(payslipService.OutputFileName))
         {
             var output = new CsvReader(reader);
             var payslips = output.GetRecords<Payslip>();
             var foundDavidRudd = false;
             var foundRyanChen = false;
             foreach (var payslip in payslips) //Tests the logic of the income tax calculation. The logic is exactly the same code for each tax bracket.
             {
                 if (payslip.Name == "David Rudd")
                 {
                     foundDavidRudd = true;
                     Assert.AreEqual("01 March – 31 March", payslip.PayPeriod);
                     Assert.AreEqual(5004, payslip.GrossIncome);
                     Assert.AreEqual(922, payslip.IncomeTax);
                     Assert.AreEqual(4082, payslip.NetIncome);
                     Assert.AreEqual(450, payslip.Super);
                 }
                 else if (payslip.Name == "Ryan Chen")
                 {
                     foundRyanChen = true;
                     Assert.AreEqual("01 March – 31 March", payslip.PayPeriod);
                     Assert.AreEqual(10000, payslip.GrossIncome);
                     Assert.AreEqual(2696, payslip.IncomeTax);
                     Assert.AreEqual(7304, payslip.NetIncome);
                     Assert.AreEqual(1000, payslip.Super);
                 }
                 Assert.IsTrue
                 (
                     payslip.GrossIncome < 0 ^ payslip.NetIncome >= 0,
                     "Income tax " + payslip.IncomeTax + " exceeds gross income " + payslip.GrossIncome
                 );
             }
             Assert.AreEqual(true, foundDavidRudd);
             Assert.AreEqual(true, foundRyanChen);
         }
     }
 }
 public EmployeeController()
 {
     this._payslip = new PayslipService(FINENCIAL_YEAR);
 }