Files
jdescopingtool/NEW/tests/JdeScoping.DataSync.Tests/Etl/Transformers/RegexTransformerTests.cs
T
Joseph Doherty cb41e42bb7 feat(datasync): add RegexTransformer with Find & Replace mode
Initial implementation supporting:
- Find & Replace mode with regex pattern and replacement string
- Case-insensitive option
- NonMatchBehavior enum for handling non-matches
2026-01-22 07:14:08 -05:00

48 lines
1.5 KiB
C#

using System.Data;
using JdeScoping.DataSync.Etl.Transformers;
using NSubstitute;
namespace JdeScoping.DataSync.Tests.Etl.Transformers;
public class RegexTransformerTests
{
[Fact]
public void FindReplace_RemovesPrefix()
{
// Arrange
var source = CreateMockReader(
columns: new[] { "BatchID", "Name" },
values: new object[] { "IIS_12345", "Test" });
var transformer = new RegexTransformer(
columnName: "BatchID",
pattern: "^IIS_",
replacement: "");
// Act
var reader = transformer.Transform(source);
source.Read().Returns(true);
reader.Read();
// Assert
Assert.Equal("12345", reader.GetValue(0));
Assert.Equal("Test", reader.GetValue(1)); // Other column unchanged
}
private static IDataReader CreateMockReader(string[] columns, object[] values)
{
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);
reader.GetFieldType(index).Returns(values[index]?.GetType() ?? typeof(object));
reader.GetValue(index).Returns(values[index]);
reader.IsDBNull(index).Returns(values[index] == null || values[index] == DBNull.Value);
}
return reader;
}
}