using ClosedXML.Excel; using JdeScoping.ExcelIO.Templates; using Shouldly; using Xunit; namespace JdeScoping.ExcelIO.Tests.Templates; public class ExcelTemplateServiceTests { private readonly ExcelTemplateService _service = new(); [Fact] public void GenerateSingleColumn_CreatesValidExcel() { // Arrange var data = new[] { 12345L, 67890L }; // Act var result = _service.GenerateSingleColumn(data, "Work Order Number"); // Assert result.ShouldNotBeNull(); result.Length.ShouldBeGreaterThan(0); // Verify content using var stream = new MemoryStream(result); using var workbook = new XLWorkbook(stream); var worksheet = workbook.Worksheet(1); worksheet.Cell(1, 1).GetString().ShouldBe("Work Order Number"); worksheet.Cell(2, 1).GetString().ShouldBe("12345"); worksheet.Cell(3, 1).GetString().ShouldBe("67890"); } [Fact] public void GenerateMultiColumn_CreatesValidExcel() { // Arrange var data = new[] { new object?[] { "ITEM-001", "Description 1" }, new object?[] { "ITEM-002", "Description 2" } }; var headers = new[] { "Item Number", "Description" }; // Act var result = _service.GenerateMultiColumn(data, headers); // Assert result.ShouldNotBeNull(); result.Length.ShouldBeGreaterThan(0); // Verify content using var stream = new MemoryStream(result); using var workbook = new XLWorkbook(stream); var worksheet = workbook.Worksheet(1); worksheet.Cell(1, 1).GetString().ShouldBe("Item Number"); worksheet.Cell(1, 2).GetString().ShouldBe("Description"); worksheet.Cell(2, 1).GetString().ShouldBe("ITEM-001"); worksheet.Cell(2, 2).GetString().ShouldBe("Description 1"); } [Fact] public void GenerateSingleColumn_HandlesEmptyData() { // Act var result = _service.GenerateSingleColumn(Array.Empty(), "Header"); // Assert result.ShouldNotBeNull(); result.Length.ShouldBeGreaterThan(0); } [Fact] public void GenerateMultiColumn_HandlesNullValues() { // Arrange var data = new[] { new object?[] { "ITEM-001", null } }; var headers = new[] { "Item", "Value" }; // Act var result = _service.GenerateMultiColumn(data, headers); // Assert result.ShouldNotBeNull(); using var stream = new MemoryStream(result); using var workbook = new XLWorkbook(stream); var worksheet = workbook.Worksheet(1); worksheet.Cell(2, 2).GetString().ShouldBe(string.Empty); } }