using ClosedXML.Excel; using JdeScoping.ExcelIO.Generators; 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 stream = new MemoryStream(result); using var workbook = new XLWorkbook(stream); workbook.Worksheets.Count.ShouldBe(1); } [Fact] public void Generate_SingleColumn_HasCorrectHeader() { var result = _generator.Generate(null, "Item Numbers"); using var stream = new MemoryStream(result); using var workbook = new XLWorkbook(stream); var worksheet = workbook.Worksheets.First(); worksheet.Cell(1, 1).Value.GetText().ShouldBe("Item Numbers"); } [Fact] public void Generate_SingleColumn_HasHeaderFormatting() { var result = _generator.Generate(null, "Test Header"); using var stream = new MemoryStream(result); using var workbook = new XLWorkbook(stream); var worksheet = workbook.Worksheets.First(); var headerCell = worksheet.Cell(1, 1); headerCell.Style.Font.Bold.ShouldBeTrue(); headerCell.Style.Fill.BackgroundColor.ShouldBe(XLColor.Gainsboro); } [Fact] public void Generate_SingleColumn_WithData_PopulatesRows() { var data = new List { "Item1", "Item2", "Item3" }; var result = _generator.Generate(data, "Items"); using var stream = new MemoryStream(result); using var workbook = new XLWorkbook(stream); var worksheet = workbook.Worksheets.First(); worksheet.Cell(2, 1).Value.GetText().ShouldBe("Item1"); worksheet.Cell(3, 1).Value.GetText().ShouldBe("Item2"); worksheet.Cell(4, 1).Value.GetText().ShouldBe("Item3"); } [Fact] public void Generate_SingleColumn_SetsTextFormat() { var result = _generator.Generate(null, "Test"); using var stream = new MemoryStream(result); using var workbook = new XLWorkbook(stream); var worksheet = workbook.Worksheets.First(); worksheet.Column(1).Style.NumberFormat.Format.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 stream = new MemoryStream(result); using var workbook = new XLWorkbook(stream); var worksheet = workbook.Worksheets.First(); worksheet.Cell(1, 1).Value.GetText().ShouldBe("Column A"); worksheet.Cell(1, 2).Value.GetText().ShouldBe("Column B"); worksheet.Cell(1, 3).Value.GetText().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 stream = new MemoryStream(result); using var workbook = new XLWorkbook(stream); var worksheet = workbook.Worksheets.First(); worksheet.Cell(2, 1).Value.GetText().ShouldBe("Row1"); worksheet.Cell(2, 2).Value.GetNumber().ShouldBe(100); worksheet.Cell(3, 1).Value.GetText().ShouldBe("Row2"); worksheet.Cell(3, 2).Value.GetNumber().ShouldBe(200); } [Fact] public void Generate_MultiColumn_SetsColumnWidth() { var headers = new[] { "Column A", "Column B" }; var result = _generator.Generate(null, headers); using var stream = new MemoryStream(result); using var workbook = new XLWorkbook(stream); var worksheet = workbook.Worksheets.First(); worksheet.Column(1).Width.ShouldBe(65); worksheet.Column(2).Width.ShouldBe(65); } [Fact] public void Generate_SingleColumn_SetsColumnWidth() { var result = _generator.Generate(null, "Test"); using var stream = new MemoryStream(result); using var workbook = new XLWorkbook(stream); var worksheet = workbook.Worksheets.First(); worksheet.Column(1).Width.ShouldBe(45); } }