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
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user