Skip to content

Commit

Permalink
Update ResourceManager.cs to better handle resources that don't speci…
Browse files Browse the repository at this point in the history
…fy a version (OrchardCMS#14992)
  • Loading branch information
mroskamp authored and giannik committed Jan 7, 2024
1 parent c9a4930 commit de5cbff
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -206,9 +206,8 @@ private static ResourceDefinition FindMatchingResource(
}
}

// Use the highest version of all matches.
if (resource == null
|| (resourceDefinition.Version != null && new Version(resource.Version) < version))
// Use the highest version of all matches. Resources that don't specify a version have the lowest priority.
if (resource?.Version is null || new Version(resource.Version) < version)
{
resource = resourceDefinition;
}
Expand Down
32 changes: 32 additions & 0 deletions test/OrchardCore.Tests/ResourceManagement/ResourceManagerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,38 @@ public void FindResourceFromManifestProviders()
Assert.Contains("attr", ((IDictionary<string, string>)resourceDefinition.Attributes).Keys);
}

[Fact]
public void FindHighestVersionedResourceFromManifest()
{
var options = new ResourceManagementOptions();
var manifest = new ResourceManifest();

manifest.DefineResource("foo", "bar")
.SetUrl("~/bar1.js");
manifest.DefineResource("foo", "bar")
.SetUrl("~/bar2.js")
.SetVersion("1.0.0");
manifest.DefineResource("foo", "bar")
.SetUrl("~/bar3.js")
.SetVersion("2.0.0");
manifest.DefineResource("foo", "bar")
.SetUrl("~/bar4.js");

options.ResourceManifests.Add(manifest);

var resourceManager = new ResourceManager(
new OptionsWrapper<ResourceManagementOptions>(options),
StubFileVersionProvider.Instance
);

var resourceDefinition = resourceManager.FindResource(new RequireSettings { Type = "foo", Name = "bar" });
Assert.NotNull(resourceDefinition);
Assert.Equal("foo", resourceDefinition.Type);
Assert.Equal("bar", resourceDefinition.Name);
Assert.Contains("~/bar3.js", resourceDefinition.Url);
Assert.Contains("2.0.0", resourceDefinition.Version);
}

[Fact]
public void RegisterResouceUrl()
{
Expand Down

0 comments on commit de5cbff

Please sign in to comment.