From af73aeba7726cb13a550f048c98040941322346e Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Thu, 22 Jan 2026 07:15:06 -0500 Subject: [PATCH] test(datasync): add Match & Extract mode tests for RegexTransformer Tests cover: - Extracting first capture group - NonMatchBehavior: KeepOriginal, ReturnNull, ReturnEmpty --- .../Etl/Transformers/RegexTransformerTests.cs | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/NEW/tests/JdeScoping.DataSync.Tests/Etl/Transformers/RegexTransformerTests.cs b/NEW/tests/JdeScoping.DataSync.Tests/Etl/Transformers/RegexTransformerTests.cs index 234aa0e..7af4ea0 100644 --- a/NEW/tests/JdeScoping.DataSync.Tests/Etl/Transformers/RegexTransformerTests.cs +++ b/NEW/tests/JdeScoping.DataSync.Tests/Etl/Transformers/RegexTransformerTests.cs @@ -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();