Example #1
0
        private static void Main(string[] args)
        {
            if (args.Length < 3)
            {
                Console.WriteLine("Usage: MonthlyPayslip.ConsoleApp.exe employeeCsvFile taxtableCsvFile payslipsCsvFile");
                return;
            }

            var employeeCsv = args[0];
            var taxtableCsv = args[1];
            var payslipsCsv = args[2];

            var employeeRepository = new EmployeeRepository(employeeCsv);
            var taxTableRepository = new TaxTableRepository(taxtableCsv);
            var payslipRepository  = new PayslipRepository(payslipsCsv);

            var payslipGenerator = new PayslipGenerator(employeeRepository, taxTableRepository);

            var payslips = payslipGenerator.GetPayslips();

            File.Delete(payslipsCsv);

            foreach (var payslip in payslips)
            {
                Console.WriteLine(payslip.ToCsv());
                payslipRepository.Add(payslip);
            }
        }
Example #2
0
        public void GeneratePayslip_creates_valid_payslip()
        {
            // Arrange
            var payCalculator = new PayCalculator();
            var taxTable      = new TaxTable();

            // Act
            var payslipGenerator = new PayslipGenerator(payCalculator, taxTable);
            var payslip          = payslipGenerator.GeneratePayslip(_employee)
                                   .Split(',')
                                   .Select(x => x.Trim())
                                   .ToArray();

            // Name
            Assert.AreEqual(payslip[0], "John Smith");

            // Pay period
            Assert.AreEqual(payslip[1].Trim(), "01 March - 31 March");

            // Gross income
            Assert.AreEqual(payslip[2], "10000");

            // Income tax
            Assert.AreEqual(payslip[3], "2696");

            // Net income
            Assert.AreEqual(payslip[4], "7304");

            // Super
            Assert.AreEqual(payslip[5], "900");
        }
Example #3
0
        public void ReturnTheCorrectGrossIncomeRoundingDown()
        {
            var payslipGenerator = new PayslipGenerator(new Calculator());
            var payslip          = new Person(
                "abby",
                "thompson",
                60050,
                9,
                new DateTime(1, 1, 1),
                new DateTime(1, 1, 30)
                );

            var expected = new Person(
                "abby",
                "thompson",
                60050,
                9,
                new DateTime(1, 1, 1),
                new DateTime(1, 1, 30)
                )
            {
                GrossIncome = 5004, IncomeTax = 922, NetIncome = 4082, SuperTotal = 450
            };

            var actual = payslipGenerator.GeneratePayslip(payslip);

            Assert.Equal(expected.GrossIncome, actual.GrossIncome);
            Assert.Equal(expected.IncomeTax, actual.IncomeTax);
            Assert.Equal(expected.NetIncome, actual.NetIncome);
            Assert.Equal(expected.SuperTotal, actual.SuperTotal);
        }
Example #4
0
        public void GeneratePayslip_should_make_correct_calls_to_service_methods()
        {
            // Arrange
            var payCalculator = new Mock <IPayCalculator>();

            payCalculator.Setup(x => x.CalculateIncomeTax(It.IsAny <decimal>(), It.IsAny <ITaxTable>())).Verifiable();
            payCalculator.Setup(x => x.CalculateGrossIncome(It.IsAny <decimal>())).Verifiable();
            payCalculator.Setup(x => x.CalculateNetIncome(It.IsAny <decimal>(), It.IsAny <decimal>())).Verifiable();
            payCalculator.Setup(x => x.CalculateSuper(It.IsAny <decimal>(), It.IsAny <decimal>())).Verifiable();

            var taxTable = new Mock <ITaxTable>();

            taxTable.Setup(x => x.GetTaxBracket(It.IsAny <decimal>())).Returns(new TaxBracket(0, 18000, 0, 0));

            var payslipGenerator = new PayslipGenerator(payCalculator.Object, taxTable.Object);

            // Act
            payslipGenerator.GeneratePayslip(_employee);

            // Assert
            payCalculator.Verify(
                x => x.CalculateGrossIncome(It.IsAny <decimal>()),
                Times.Once()
                );

            payCalculator.Verify(
                x => x.CalculateNetIncome(It.IsAny <decimal>(), It.IsAny <decimal>()),
                Times.Once()
                );

            payCalculator.Verify(
                x => x.CalculateSuper(It.IsAny <decimal>(), It.IsAny <decimal>()),
                Times.Once()
                );
        }
Example #5
0
            public Fixture()
            {
                this.Generator = new PayslipGenerator();

                // configure logging
                Log.Logger = new LoggerConfiguration()
                             .WriteTo.File("logs-test.txt")
                             .WriteTo.Console()
                             .CreateLogger();
            }
Example #6
0
        public void GivenBaseSalary_GenerateCorrectPayslip(string inputCsvLine, string expectedCsv)
        {
            var payslipCalculator      = new PayslipGenerator();
            var payslipCsvLineParser   = new PayslipCsvLineParser();
            var payslipCsvLineComposer = new PayslipCsvLineComposer();

            var payslipInfo    = payslipCsvLineParser.Parse(inputCsvLine);
            var payslipDetails = payslipCalculator.CalculateUsing(payslipInfo);
            var payslipAsCsv   = payslipCsvLineComposer.Compose(payslipDetails);

            Assert.That(payslipAsCsv, Is.EqualTo(expectedCsv));
        }
        public void Setup()
        {
            _employees = new List <Employee>()
            {
                new Employee()
                {
                    FirstName        = "David",
                    LastName         = "Rudd",
                    AnnualSalary     = 60000,
                    SuperRate        = 0.09,
                    PaymentStartDate = "01 March – 31 March"
                },
                new Employee()
                {
                    FirstName        = "Ryan",
                    LastName         = "Chen",
                    AnnualSalary     = 120000,
                    SuperRate        = 0.10,
                    PaymentStartDate = "01 April – 30 April"
                }
            };

            var taxBrackets = new List <TaxBracket>()
            {
                new TaxBracket()
                {
                    MaximumIncome = 18200, Tax = 0, FixedTax = 0
                },
                new TaxBracket()
                {
                    MaximumIncome = 37000, Tax = 0.19, FixedTax = 0
                },
                new TaxBracket()
                {
                    MaximumIncome = 80000, Tax = 0.325, FixedTax = 3572
                },
                new TaxBracket()
                {
                    MaximumIncome = -1, Tax = 0.37, FixedTax = 17547
                }
            };

            _employeeRepository = Substitute.For <IRepository <Employee> >();
            _employeeRepository.FindAll().ReturnsForAnyArgs(_employees);

            _taxTableRepository = Substitute.For <IRepository <TaxBracket> >();
            _taxTableRepository.FindAll().ReturnsForAnyArgs(taxBrackets);

            _payslipGenerator = new PayslipGenerator(_employeeRepository, _taxTableRepository);
        }
Example #8
0
        private static ConsolePayslipFormatter CreateSampleConsolePayslipFormatter()
        {
            const string firstName               = "John";
            const string lastName                = "Doe";
            const float  salary                  = 60050;
            const float  superRate               = 9;
            var          startDate               = new DateTime(2020, 3, 1);
            var          endDate                 = new DateTime(2020, 3, 31);
            var          employee                = new Employee(firstName, lastName, salary, superRate);
            var          payslipGenerator        = new PayslipGenerator(employee, startDate, endDate);
            var          payslip                 = payslipGenerator.Generate();
            var          consolePayslipFormatter = new ConsolePayslipFormatter(payslip);

            return(consolePayslipFormatter);
        }
Example #9
0
        static void Main(string[] args)
        {
            PayslipGenerator payslipGenerator = new PayslipGenerator();

            payslipGenerator.start();
        }
 public PayslipGeneratorShould()
 {
     _payslipGenerator = new PayslipGenerator(new TaxRates2017To2018());
 }
 static Program()
 {
     CsvParser = new Parser();
     PayslipPaySlipGenerator = new PayslipGenerator();
     PayslipCsvConverter     = new PayslipCsvConverter();
 }
 public void SetUp()
 {
     _csvParser        = new Parser();
     _payslipGenerator = new PayslipGenerator();
 }