From d4234c498ed5691b834d09c5b3b235064d3f3018 Mon Sep 17 00:00:00 2001 From: Brian Roskamp Date: Fri, 5 Jan 2024 11:39:17 -0500 Subject: [PATCH] Update ResourceManager.cs to better handle resources that don't specify a version (#14992) --- .../ResourceManager.cs | 5 ++- .../ResourceManagerTests.cs | 32 +++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/OrchardCore/OrchardCore.ResourceManagement/ResourceManager.cs b/src/OrchardCore/OrchardCore.ResourceManagement/ResourceManager.cs index b27a056f49f..739b8f8b932 100644 --- a/src/OrchardCore/OrchardCore.ResourceManagement/ResourceManager.cs +++ b/src/OrchardCore/OrchardCore.ResourceManagement/ResourceManager.cs @@ -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; } diff --git a/test/OrchardCore.Tests/ResourceManagement/ResourceManagerTests.cs b/test/OrchardCore.Tests/ResourceManagement/ResourceManagerTests.cs index b6efd08c3a4..f6f1a8a8dfc 100644 --- a/test/OrchardCore.Tests/ResourceManagement/ResourceManagerTests.cs +++ b/test/OrchardCore.Tests/ResourceManagement/ResourceManagerTests.cs @@ -43,6 +43,38 @@ public void FindResourceFromManifestProviders() Assert.Contains("attr", ((IDictionary)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(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() {