Files
2026-02-06 17:27:09 -05:00

138 lines
4.4 KiB
C#

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<string>(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<string>(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<string>(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<string> { "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<string>(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<string>(null, "Test");
using var workbook = ExcelTestHelpers.OpenWorkbook(result);
var worksheet = workbook.GetSheetAt(0);
ExcelTestHelpers.GetColumnWidthChars(worksheet, 1).ShouldBe(45);
}
}