private static void ProcessRow(IRow row, InputPoco input)
        {
            var properties = input.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);

            int j = 0;

            foreach (var prop in properties)
            {
                var value = prop.GetValue(input, null);
                row.CreateCell(j).SetCellValue((value != null)?  (string)value : null);

                j++;
            }
        }
        public void Test_Mapping_With_Some_Incorrect_Arbitrary_Labels()
        {
            //arrange

            var headerCol = new InputPoco()
            {
                Title      = "Content",
                ReportDate = "Date",
                ContractID = "report_type",
                Territory  = "Territorities",
                Fee        = "Total"
            };

            var input = new List <InputPoco> {
                new InputPoco
                {
                    Title      = "Movie I",
                    ReportDate = DateTime.Now.Date.ToString(),
                    ContractID = "xox",
                    Territory  = "DE",
                    Fee        = (2.99m).ToString()
                }
            };

            var workbook = CreateTestWorkbook(headerCol, input);
            var sheet    = workbook.GetSheetAt(0);
            var header   = sheet.GetRow(0);

            SimpleExcelMapper <LabeledPoco> simpleMapper = new SimpleExcelMapper <LabeledPoco>();
            List <LabeledPoco> result = simpleMapper.Map(sheet).ToList();

            var expectedResult = new LabeledPoco
            {
                Title      = "Movie I",
                ReportDate = DateTime.Now.Date,
                ContractID = "xox",
                Territory  = "DE",
                Fee        = 2.99m
            };


            result.First().Title.ShouldBe(expectedResult.Title);
            result.First().ReportDate.ShouldBe(expectedResult.ReportDate);

            result.First().ContractID.ShouldNotBe(expectedResult.ContractID);
            result.First().Territory.ShouldNotBe(expectedResult.Territory);

            result.First().Fee.ShouldBe(expectedResult.Fee);
        }
        public void Test_Generic_Mapping()
        {
            //arrange

            var headerCol = new InputPoco()
            {
                Title      = "Title",
                ReportDate = "Date",
                ContractID = "ContractId",
                Territory  = "Territory",
                Fee        = "Fee"
            };

            var input = new List <InputPoco> {
                new InputPoco
                {
                    Title      = "Movie I",
                    ReportDate = DateTime.Now.Date.ToString(),
                    ContractID = "xox",
                    Territory  = "DE",
                    Fee        = (2.99m).ToString()
                }
            };

            var workbook = CreateTestWorkbook(headerCol, input);
            var sheet    = workbook.GetSheetAt(0);
            var header   = sheet.GetRow(0);

            SimpleExcelMapper <LabeledPoco> simpleMapper = new SimpleExcelMapper <LabeledPoco>();
            List <LabeledPoco> result = simpleMapper.Map(sheet).ToList();

            var expectedResult = new LabeledPoco
            {
                Title      = "Movie I",
                ReportDate = DateTime.Now.Date,
                ContractID = "xox",
                Territory  = "DE",
                Fee        = 2.99m
            };

            result.Count().ShouldBe(1);

            result.First().Title.ShouldBe(expectedResult.Title);
            result.First().ReportDate.ShouldBe(expectedResult.ReportDate);
            result.First().ContractID.ShouldBe(expectedResult.ContractID);
            result.First().Territory.ShouldBe(expectedResult.Territory);
            result.First().Fee.ShouldBe(expectedResult.Fee);
        }
        private static XSSFWorkbook CreateTestWorkbook(InputPoco header, List <InputPoco> inputList)
        {
            //create Test Worksheet
            var workbook  = CreateBlankWorkbook();
            var sheet     = workbook.GetSheetAt(0);
            var headerRow = sheet.CreateRow(0);

            //header starts on zero
            ProcessRow(sheet.CreateRow(0), header);
            //then the rest starts
            int i = 1;

            foreach (var item in inputList)
            {
                ProcessRow(sheet.CreateRow(i), item);
                i++;
            }
            return(workbook);
        }