using JdeScoping.ExcelIO.Generators; using JdeScoping.ExcelIO.Tests.Fixtures; using Shouldly; using Xunit; namespace JdeScoping.ExcelIO.Tests; public class DataEntryTemplateGeneratorTests { private readonly DataEntryTemplateGenerator _generator = new(); [Fact] public void Generate_SingleColumn_ReturnsValidExcel() { var result = _generator.Generate(null, "Test Header"); result.ShouldNotBeNull(); result.Length.ShouldBeGreaterThan(0); using var workbook = ExcelTestHelpers.OpenWorkbook(result); workbook.NumberOfSheets.ShouldBe(1); } [Fact] public void Generate_SingleColumn_HasCorrectHeader() { var result = _generator.Generate(null, "Item Numbers"); using var workbook = ExcelTestHelpers.OpenWorkbook(result); var worksheet = workbook.GetSheetAt(0); ExcelTestHelpers.GetCellText(worksheet, 1, 1).ShouldBe("Item Numbers"); } [Fact] public void Generate_SingleColumn_HasHeaderFormatting() { var result = _generator.Generate(null, "Test Header"); using var workbook = ExcelTestHelpers.OpenWorkbook(result); var worksheet = workbook.GetSheetAt(0); var headerCell = ExcelTestHelpers.GetCell(worksheet, 1, 1)!; (headerCell.CellStyle.FontIndex >= 0 && workbook.GetFontAt(headerCell.CellStyle.FontIndex).IsBold).ShouldBeTrue(); ExcelTestHelpers.GetFillForegroundRgb(headerCell).ShouldBe([0xDC, 0xDC, 0xDC]); } [Fact] public void Generate_SingleColumn_WithData_PopulatesRows() { var data = new List { "Item1", "Item2", "Item3" }; var result = _generator.Generate(data, "Items"); using var workbook = ExcelTestHelpers.OpenWorkbook(result); var worksheet = workbook.GetSheetAt(0); ExcelTestHelpers.GetCellText(worksheet, 2, 1).ShouldBe("Item1"); ExcelTestHelpers.GetCellText(worksheet, 3, 1).ShouldBe("Item2"); ExcelTestHelpers.GetCellText(worksheet, 4, 1).ShouldBe("Item3"); } [Fact] public void Generate_SingleColumn_SetsTextFormat() { var result = _generator.Generate(null, "Test"); using var workbook = ExcelTestHelpers.OpenWorkbook(result); var worksheet = workbook.GetSheetAt(0); worksheet.GetColumnStyle(0).GetDataFormatString().ShouldBe("@"); } [Fact] public void Generate_MultiColumn_ReturnsValidExcel() { var headers = new[] { "Column A", "Column B", "Column C" }; var result = _generator.Generate(null, headers); result.ShouldNotBeNull(); using var workbook = ExcelTestHelpers.OpenWorkbook(result); var worksheet = workbook.GetSheetAt(0); ExcelTestHelpers.GetCellText(worksheet, 1, 1).ShouldBe("Column A"); ExcelTestHelpers.GetCellText(worksheet, 1, 2).ShouldBe("Column B"); ExcelTestHelpers.GetCellText(worksheet, 1, 3).ShouldBe("Column C"); } [Fact] public void Generate_MultiColumn_WithData_PopulatesRows() { var headers = new[] { "Name", "Value" }; var data = new[] { new object[] { "Row1", 100 }, new object[] { "Row2", 200 } }; var result = _generator.Generate(data, headers); using var workbook = ExcelTestHelpers.OpenWorkbook(result); var worksheet = workbook.GetSheetAt(0); ExcelTestHelpers.GetCellText(worksheet, 2, 1).ShouldBe("Row1"); ExcelTestHelpers.GetCellNumber(worksheet, 2, 2).ShouldBe(100); ExcelTestHelpers.GetCellText(worksheet, 3, 1).ShouldBe("Row2"); ExcelTestHelpers.GetCellNumber(worksheet, 3, 2).ShouldBe(200); } [Fact] public void Generate_MultiColumn_SetsColumnWidth() { var headers = new[] { "Column A", "Column B" }; var result = _generator.Generate(null, headers); using var workbook = ExcelTestHelpers.OpenWorkbook(result); var worksheet = workbook.GetSheetAt(0); ExcelTestHelpers.GetColumnWidthChars(worksheet, 1).ShouldBe(65); ExcelTestHelpers.GetColumnWidthChars(worksheet, 2).ShouldBe(65); } [Fact] public void Generate_SingleColumn_SetsColumnWidth() { var result = _generator.Generate(null, "Test"); using var workbook = ExcelTestHelpers.OpenWorkbook(result); var worksheet = workbook.GetSheetAt(0); ExcelTestHelpers.GetColumnWidthChars(worksheet, 1).ShouldBe(45); } }