test(ExcelIO): add unit tests for fluent mapping infrastructure

This commit is contained in:
Joseph Doherty
2026-01-06 23:26:11 -05:00
parent b48ef586ac
commit 671f8ce357
@@ -0,0 +1,134 @@
using JdeScoping.ExcelIO.Mapping;
using Shouldly;
using Xunit;
namespace JdeScoping.ExcelIO.Tests.Mapping;
public class ExcelClassMapTests
{
// Test model
private sealed class TestModel
{
public int Id { get; init; }
public string Name { get; init; } = string.Empty;
public DateTime CreatedAt { get; init; }
}
// Test map
private sealed class TestModelMap : ExcelClassMap<TestModel>
{
public TestModelMap()
{
Table("Test_Table", "Test Tab");
Map(x => x.Id).Order(10).Header("ID Number");
Map(x => x.Name).Order(20).Header("Full Name");
Map(x => x.CreatedAt).Order(30).Header("Created").Format(ExcelFormats.Timestamp);
}
}
[Fact]
public void MappedType_ReturnsCorrectType()
{
var map = new TestModelMap();
map.MappedType.ShouldBe(typeof(TestModel));
}
[Fact]
public void Table_SetsTableAndTabName()
{
var map = new TestModelMap();
map.TableName.ShouldBe("Test_Table");
map.TabName.ShouldBe("Test Tab");
}
[Fact]
public void Columns_ReturnsOrderedColumns()
{
var map = new TestModelMap();
var columns = map.Columns;
columns.Count.ShouldBe(3);
columns[0].PropertyName.ShouldBe("Id");
columns[1].PropertyName.ShouldBe("Name");
columns[2].PropertyName.ShouldBe("CreatedAt");
}
[Fact]
public void Map_SetsHeaderText()
{
var map = new TestModelMap();
var columns = map.Columns;
columns[0].HeaderText.ShouldBe("ID Number");
columns[1].HeaderText.ShouldBe("Full Name");
columns[2].HeaderText.ShouldBe("Created");
}
[Fact]
public void Map_SetsFormat()
{
var map = new TestModelMap();
var columns = map.Columns;
columns[2].Format.ShouldBe(ExcelFormats.Timestamp);
}
[Fact]
public void ValueGetter_ExtractsPropertyValue()
{
var map = new TestModelMap();
var columns = map.Columns;
var testObj = new TestModel { Id = 42, Name = "Test", CreatedAt = new DateTime(2024, 1, 15) };
columns[0].ValueGetter(testObj).ShouldBe(42);
columns[1].ValueGetter(testObj).ShouldBe("Test");
columns[2].ValueGetter(testObj).ShouldBe(new DateTime(2024, 1, 15));
}
}
public class ExcelMapRegistryTests
{
private sealed class DummyModel { public int Id { get; init; } }
private sealed class DummyMap : ExcelClassMap<DummyModel>
{
public DummyMap() { Map(x => x.Id).Order(1).Header("ID"); }
}
[Fact]
public void Register_AndGetMap_ReturnsMap()
{
var registry = new ExcelMapRegistry();
var map = new DummyMap();
registry.Register(map);
var retrieved = registry.GetMap<DummyModel>();
retrieved.ShouldBe(map);
}
[Fact]
public void GetMap_UnregisteredType_ThrowsInvalidOperationException()
{
var registry = new ExcelMapRegistry();
Should.Throw<InvalidOperationException>(() => registry.GetMap<DummyModel>());
}
[Fact]
public void HasMap_RegisteredType_ReturnsTrue()
{
var registry = new ExcelMapRegistry();
registry.Register(new DummyMap());
registry.HasMap<DummyModel>().ShouldBeTrue();
}
[Fact]
public void HasMap_UnregisteredType_ReturnsFalse()
{
var registry = new ExcelMapRegistry();
registry.HasMap<DummyModel>().ShouldBeFalse();
}
}