Files
jdescopingtool/NEW/tests/JdeScoping.DataSync.Tests/Etl/Transformers/ColumnRenameTransformerTests.cs
T
Joseph Doherty 81cb0df6bf feat(etl): implement ColumnRenameTransformer
Add transformer for renaming columns in the data stream during ETL.
Supports case-insensitive column name matching and multiple renames.
2026-01-03 09:13:02 -05:00

70 lines
2.4 KiB
C#

using System.Data;
using JdeScoping.DataSync.Etl.Transformers;
using NSubstitute;
namespace JdeScoping.DataSync.Tests.Etl.Transformers;
public class ColumnRenameTransformerTests
{
[Fact]
public void GetName_ReturnsRenamedColumn()
{
var source = CreateMockReader(new[] { "OldName", "Other" });
var transformer = new ColumnRenameTransformer(("OldName", "NewName"));
var reader = transformer.Transform(source);
Assert.Equal("NewName", reader.GetName(0));
Assert.Equal("Other", reader.GetName(1));
}
[Fact]
public void GetOrdinal_FindsByNewName()
{
var source = CreateMockReader(new[] { "OldName", "Other" });
var transformer = new ColumnRenameTransformer(("OldName", "NewName"));
var reader = transformer.Transform(source);
Assert.Equal(0, reader.GetOrdinal("NewName"));
}
[Fact]
public void GetOrdinal_OldName_ThrowsIndexOutOfRange()
{
var source = CreateMockReader(new[] { "OldName", "Other" });
var transformer = new ColumnRenameTransformer(("OldName", "NewName"));
var reader = transformer.Transform(source);
Assert.Throws<IndexOutOfRangeException>(() => reader.GetOrdinal("OldName"));
}
[Fact]
public void FieldCount_Unchanged()
{
var source = CreateMockReader(new[] { "OldName", "Other" });
var transformer = new ColumnRenameTransformer(("OldName", "NewName"));
var reader = transformer.Transform(source);
Assert.Equal(2, reader.FieldCount);
}
[Fact]
public void MultipleRenames_AllApplied()
{
var source = CreateMockReader(new[] { "A", "B", "C" });
var transformer = new ColumnRenameTransformer(("A", "Alpha"), ("C", "Charlie"));
var reader = transformer.Transform(source);
Assert.Equal("Alpha", reader.GetName(0));
Assert.Equal("B", reader.GetName(1));
Assert.Equal("Charlie", reader.GetName(2));
}
private static IDataReader CreateMockReader(string[] columns)
{
var reader = Substitute.For<IDataReader>();
reader.FieldCount.Returns(columns.Length);
for (int i = 0; i < columns.Length; i++)
{
var index = i;
reader.GetName(index).Returns(columns[index]);
reader.GetOrdinal(columns[index]).Returns(index);
}
return reader;
}
}