test(datasync): add Match & Extract mode tests for RegexTransformer

Tests cover:
- Extracting first capture group
- NonMatchBehavior: KeepOriginal, ReturnNull, ReturnEmpty
This commit is contained in:
Joseph Doherty
2026-01-22 07:15:06 -05:00
parent cb41e42bb7
commit af73aeba77
@@ -29,6 +29,97 @@ public class RegexTransformerTests
Assert.Equal("Test", reader.GetValue(1)); // Other column unchanged
}
[Fact]
public void MatchExtract_ExtractsFirstCaptureGroup()
{
// Arrange
var source = CreateMockReader(
columns: new[] { "Code" },
values: new object[] { "ID_12345" });
var transformer = new RegexTransformer(
columnName: "Code",
pattern: @"ID_(\d+)",
replacement: null); // null = Match & Extract mode
// Act
var reader = transformer.Transform(source);
source.Read().Returns(true);
reader.Read();
// Assert
Assert.Equal("12345", reader.GetValue(0));
}
[Fact]
public void MatchExtract_NoMatch_KeepOriginal()
{
// Arrange
var source = CreateMockReader(
columns: new[] { "Code" },
values: new object[] { "UNKNOWN" });
var transformer = new RegexTransformer(
columnName: "Code",
pattern: @"ID_(\d+)",
replacement: null,
nonMatchBehavior: NonMatchBehavior.KeepOriginal);
// Act
var reader = transformer.Transform(source);
source.Read().Returns(true);
reader.Read();
// Assert
Assert.Equal("UNKNOWN", reader.GetValue(0));
}
[Fact]
public void MatchExtract_NoMatch_ReturnNull()
{
// Arrange
var source = CreateMockReader(
columns: new[] { "Code" },
values: new object[] { "UNKNOWN" });
var transformer = new RegexTransformer(
columnName: "Code",
pattern: @"ID_(\d+)",
replacement: null,
nonMatchBehavior: NonMatchBehavior.ReturnNull);
// Act
var reader = transformer.Transform(source);
source.Read().Returns(true);
reader.Read();
// Assert
Assert.Equal(DBNull.Value, reader.GetValue(0));
}
[Fact]
public void MatchExtract_NoMatch_ReturnEmpty()
{
// Arrange
var source = CreateMockReader(
columns: new[] { "Code" },
values: new object[] { "UNKNOWN" });
var transformer = new RegexTransformer(
columnName: "Code",
pattern: @"ID_(\d+)",
replacement: null,
nonMatchBehavior: NonMatchBehavior.ReturnEmpty);
// Act
var reader = transformer.Transform(source);
source.Read().Returns(true);
reader.Read();
// Assert
Assert.Equal(string.Empty, reader.GetValue(0));
}
private static IDataReader CreateMockReader(string[] columns, object[] values)
{
var reader = Substitute.For<IDataReader>();