Skip to content

Commit

Permalink
Enable the PropertyTransform to modify the resource ID
Browse files Browse the repository at this point in the history
  • Loading branch information
Vincent Wilms committed Jan 14, 2025
1 parent 1791466 commit eb46df3
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 87 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
172 changes: 86 additions & 86 deletions tests/Nexus.Sources.Transform.Tests/TransformDataSourceTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<IReadOnlyDictionary<string, JsonElement>>(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 */
Expand Down Expand Up @@ -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<IReadOnlyDictionary<string, JsonElement>>(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()
{
Expand Down Expand Up @@ -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<TransformOperation>(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
);

Expand All @@ -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")
Expand All @@ -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<TransformOperation>(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
);

Expand All @@ -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")
Expand All @@ -446,6 +446,6 @@ string expected
var actual = actualCatalog.Resources![0].Properties!
.GetStringValue([DataModelExtensions.UnitKey]);

Assert.Equal(expected, actual);
Assert.Null(actual);
}
}
2 changes: 1 addition & 1 deletion version.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"version": "2.0.0",
"suffix": "beta.43"
"suffix": "beta.44"
}

0 comments on commit eb46df3

Please sign in to comment.