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 { 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 { 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(); retrieved.ShouldBe(map); } [Fact] public void GetMap_UnregisteredType_ThrowsInvalidOperationException() { var registry = new ExcelMapRegistry(); Should.Throw(() => registry.GetMap()); } [Fact] public void HasMap_RegisteredType_ReturnsTrue() { var registry = new ExcelMapRegistry(); registry.Register(new DummyMap()); registry.HasMap().ShouldBeTrue(); } [Fact] public void HasMap_UnregisteredType_ReturnsFalse() { var registry = new ExcelMapRegistry(); registry.HasMap().ShouldBeFalse(); } }