private void ProcessEmployeePayslip(CsvInputFile inputFile)
        {
            // Loop through each line of the CSV File
            var lines = inputFile.GetListOfObjectInFileAsStrings();

            foreach (var line in lines)
            {
                // Try create an EmployeeInformationEntity
                var parts = line.Split(inputFile.PartSeparator, StringSplitOptions.RemoveEmptyEntries);
                if (parts.Length != 5)
                {
                    _invalidObjects.Add(new InvalidEmployeeInformationEntity(line, "Missing fields!"));
                }
                else
                {
                    try
                    {
                        _processedList.Add(new EmployeeInformationEntity(parts[0], parts[1], parts[2], parts[3], parts[4]));
                    }
                    catch (InvalidPayslipException ex)
                    {
                        _invalidObjects.Add(new InvalidEmployeeInformationEntity(line, ex.Message));
                    }
                }
            }
        }
        public void PayslipProgram_WhenUsingGivenInputs()
        {
            const string contents         = "David,Rudd,60050,9%,01 March – 31 March\nRyan,Chen,120000,10%,01 March – 31 March";
            var          csv              = new CsvInputFile(contents, new[] { '\n' }, new[] { ',' });
            var          payslipGenerator = new EmployeePayslipGenerator(csv);

            var expectedReturnTuple = (
                new List <BaseValidPayslip> {
                new PayslipEntity("David", "Rudd", new PayPeriod("01 March – 31 March"), 5004, 922, 4082, 450),
                new PayslipEntity("Ryan", "Chen", new PayPeriod("01 March – 31 March"), 10000, 2696, 7304, 1000)
            },
                new List <BaseInvalidPayslip>()
                );

            var payslips = payslipGenerator.ProcessPayslips();

            CollectionAssert.AreEqual(expectedReturnTuple.Item1, payslips.validPayslips);
            CollectionAssert.AreEqual(expectedReturnTuple.Item2, payslips.invalidPayslips);
        }
        public void PayslipProgram_WhenUsingErrorProneInputs()
        {
            const string contents         = "David,Rudd,60050,-9%,01 March – 31 March\n120000,10%,01 March – 31 March";
            var          csv              = new CsvInputFile(contents, new[] { '\n' }, new[] { ',' });
            var          payslipGenerator = new EmployeePayslipGenerator(csv);

            var expectedReturnTuple = (
                new List <BaseValidPayslip>(),
                new List <BaseInvalidPayslip>
            {
                new InvalidEmployeeInformationEntity("David,Rudd,60050,-9%,01 March – 31 March", "AnnualSalary must be between 0 - 100%!"),
                new InvalidEmployeeInformationEntity("120000,10%,01 March – 31 March", "Missing fields!")
            }
                );

            var payslips = payslipGenerator.ProcessPayslips();

            CollectionAssert.AreEqual(expectedReturnTuple.Item1, payslips.validPayslips);
            CollectionAssert.AreEqual(expectedReturnTuple.Item2, payslips.invalidPayslips);
        }