From eb46df377cdc74e90f83a5cf96bcf75eaa310462 Mon Sep 17 00:00:00 2001 From: Vincent Wilms Date: Tue, 14 Jan 2025 16:35:17 +0100 Subject: [PATCH] Enable the `PropertyTransform` to modify the resource ID --- CHANGELOG.md | 4 + .../TransformDataSourceTests.cs | 172 +++++++++--------- version.json | 2 +- 3 files changed, 91 insertions(+), 87 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 364fd71..65c6ef4 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## v2.0.0-beta.44 - 2025-01-14 + +- Enabled the `PropertyTransform` to modify the resource ID. + ## v2.0.0-beta.43 - 2025-01-14 - Fixed a bug in the core algorithm diff --git a/tests/Nexus.Sources.Transform.Tests/TransformDataSourceTests.cs b/tests/Nexus.Sources.Transform.Tests/TransformDataSourceTests.cs index dc87ca6..875520a 100644 --- a/tests/Nexus.Sources.Transform.Tests/TransformDataSourceTests.cs +++ b/tests/Nexus.Sources.Transform.Tests/TransformDataSourceTests.cs @@ -67,6 +67,62 @@ public async Task CanTransformResourceIdInTwoSteps() Assert.Equal(expected, actual); } + [Fact] + public async Task CanDeriveIdFromOriginalName() + { + // Arrange + var originalName = "v_horz_100m_blue_avg in m/s"; + var sourcePattern = @"(.*)\sin .*"; + var expected = "v_horz_100m_blue_avg"; + + /* data source setup */ + var transform = new PropertyTransform( + Operation: default, + SourcePath: DataModelExtensions.OriginalNameKey, + SourcePattern: sourcePattern, + TargetProperty: default, + TargetTemplate: default, + Separator: default + ); + + var settings = new TransformSettings( + IdTransforms: [], + PropertyTransforms: [transform] + ); + + var sourceConfiguration = JsonSerializer + .Deserialize>(JsonSerializer.SerializeToElement(settings)); + + var context = new DataSourceContext( + ResourceLocator: default, + SystemConfiguration: default, + SourceConfiguration: sourceConfiguration, + RequestConfiguration: default + ); + + var dataSource = new Transform(); + + await dataSource.SetContextAsync(context, NullLogger.Instance, CancellationToken.None); + + /* catalog setup */ + var resource = new ResourceBuilder(id: "foo") + .WithOriginalName(originalName) + .Build(); + + var catalog = new ResourceCatalogBuilder(id: "/bar") + .AddResource(resource) + .Build(); + + // Act + var actualCatalog = await dataSource + .EnrichCatalogAsync(catalog, CancellationToken.None); + + // Assert + var actual = actualCatalog.Resources![0].Id; + + Assert.Equal(expected, actual); + } + [Theory] /* test the default target template ($1) which requires a single regex capture group */ @@ -212,62 +268,6 @@ public async Task CanDeriveUnitFromOriginalNameInTwoSteps() Assert.Equal(expected, actual); } - [Fact] - public async Task DoesNotModifyPropertiesIfNoMatch() - { - // Arrange - var originalName = "foo in meters per second"; - var sourcePattern = ".^"; - - /* data source setup */ - var transform = new PropertyTransform( - Operation: default, - SourcePath: DataModelExtensions.OriginalNameKey, - SourcePattern: sourcePattern, - TargetProperty: DataModelExtensions.UnitKey, - TargetTemplate: default, - Separator: default - ); - - var settings = new TransformSettings( - IdTransforms: [], - PropertyTransforms: [transform] - ); - - var sourceConfiguration = JsonSerializer - .Deserialize>(JsonSerializer.SerializeToElement(settings)); - - var context = new DataSourceContext( - ResourceLocator: default, - SystemConfiguration: default, - SourceConfiguration: sourceConfiguration, - RequestConfiguration: default - ); - - var dataSource = new Transform(); - - await dataSource.SetContextAsync(context, NullLogger.Instance, CancellationToken.None); - - /* catalog setup */ - var resource = new ResourceBuilder(id: "foo") - .WithOriginalName(originalName) - .Build(); - - var catalog = new ResourceCatalogBuilder(id: "/bar") - .AddResource(resource) - .Build(); - - // Act - var actualCatalog = await dataSource - .EnrichCatalogAsync(catalog, CancellationToken.None); - - // Assert - var actual = actualCatalog.Resources![0].Properties! - .GetStringValue([DataModelExtensions.UnitKey]); - - Assert.Null(actual); - } - [Fact] public async Task CanDeriveGroupsFromOriginalName() { @@ -327,21 +327,29 @@ public async Task CanDeriveGroupsFromOriginalName() Assert.Equal(expected, actual); } - [Fact] - public async Task CanDeriveIdFromOriginalName() + [Theory] + + /* test creation of missing value or replacement of wrong value */ + [InlineData([nameof(TransformOperation.SetAlways), "foobar"])] + + /* test setting a default value (this is useful for default groups as well) */ + [InlineData([nameof(TransformOperation.SetIfNotExists), "m/s"])] + + public async Task CanHandleDifferentTransformOperations( + string operationString, + string expected + ) { // Arrange - var originalName = "v_horz_100m_blue_avg in m/s"; - var sourcePattern = @"(.*)\sin .*"; - var expected = "v_horz_100m_blue_avg"; + var operation = Enum.Parse(operationString); /* data source setup */ var transform = new PropertyTransform( - Operation: default, + Operation: operation, SourcePath: DataModelExtensions.OriginalNameKey, - SourcePattern: sourcePattern, - TargetProperty: default, - TargetTemplate: default, + SourcePattern: ".*", + TargetProperty: DataModelExtensions.UnitKey, + TargetTemplate: "$0", Separator: default ); @@ -366,7 +374,8 @@ public async Task CanDeriveIdFromOriginalName() /* catalog setup */ var resource = new ResourceBuilder(id: "foo") - .WithOriginalName(originalName) + .WithOriginalName("foobar") + .WithUnit("m/s") .Build(); var catalog = new ResourceCatalogBuilder(id: "/bar") @@ -378,34 +387,26 @@ public async Task CanDeriveIdFromOriginalName() .EnrichCatalogAsync(catalog, CancellationToken.None); // Assert - var actual = actualCatalog.Resources![0].Id; + var actual = actualCatalog.Resources![0].Properties! + .GetStringValue([DataModelExtensions.UnitKey]); Assert.Equal(expected, actual); } - [Theory] - - /* test creation of missing value or replacement of wrong value */ - [InlineData([nameof(TransformOperation.SetAlways), "foobar"])] - - /* test setting a default value (this is useful for default groups as well) */ - [InlineData([nameof(TransformOperation.SetIfNotExists), "m/s"])] - - public async Task CanHandleDifferentTransformOperations( - string operationString, - string expected - ) + [Fact] + public async Task DoesNotModifyPropertiesIfNoMatch() { // Arrange - var operation = Enum.Parse(operationString); + var originalName = "foo in meters per second"; + var sourcePattern = ".^"; /* data source setup */ var transform = new PropertyTransform( - Operation: operation, + Operation: default, SourcePath: DataModelExtensions.OriginalNameKey, - SourcePattern: ".*", + SourcePattern: sourcePattern, TargetProperty: DataModelExtensions.UnitKey, - TargetTemplate: "$0", + TargetTemplate: default, Separator: default ); @@ -430,8 +431,7 @@ string expected /* catalog setup */ var resource = new ResourceBuilder(id: "foo") - .WithOriginalName("foobar") - .WithUnit("m/s") + .WithOriginalName(originalName) .Build(); var catalog = new ResourceCatalogBuilder(id: "/bar") @@ -446,6 +446,6 @@ string expected var actual = actualCatalog.Resources![0].Properties! .GetStringValue([DataModelExtensions.UnitKey]); - Assert.Equal(expected, actual); + Assert.Null(actual); } } \ No newline at end of file diff --git a/version.json b/version.json index df2462b..3b804a5 100755 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { "version": "2.0.0", - "suffix": "beta.43" + "suffix": "beta.44" } \ No newline at end of file