test(datasync): add Match & Extract mode tests for RegexTransformer
Tests cover: - Extracting first capture group - NonMatchBehavior: KeepOriginal, ReturnNull, ReturnEmpty
This commit is contained in:
@@ -29,6 +29,97 @@ public class RegexTransformerTests
|
|||||||
Assert.Equal("Test", reader.GetValue(1)); // Other column unchanged
|
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)
|
private static IDataReader CreateMockReader(string[] columns, object[] values)
|
||||||
{
|
{
|
||||||
var reader = Substitute.For<IDataReader>();
|
var reader = Substitute.For<IDataReader>();
|
||||||
|
|||||||
Reference in New Issue
Block a user