From 912a49489adeb7d45230eda316113bd25a2f3e42 Mon Sep 17 00:00:00 2001 From: Greg Date: Mon, 14 Feb 2022 09:23:31 -0500 Subject: [PATCH 1/4] Do not consider abstract classes in configuration options --- .../Resolvers/OpenApiConfigurationResolver.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core/Resolvers/OpenApiConfigurationResolver.cs b/src/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core/Resolvers/OpenApiConfigurationResolver.cs index 0f8f296f..83949e19 100644 --- a/src/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core/Resolvers/OpenApiConfigurationResolver.cs +++ b/src/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core/Resolvers/OpenApiConfigurationResolver.cs @@ -23,6 +23,7 @@ public static IOpenApiConfigurationOptions Resolve(Assembly assembly) { var type = assembly.GetLoadableTypes() .SingleOrDefault(p => p.GetInterface("IOpenApiConfigurationOptions", ignoreCase: true).IsNullOrDefault() == false + && p.IsAbstract == false && p.GetCustomAttribute(inherit: false).IsNullOrDefault() == true); if (type.IsNullOrDefault()) { From 8802b33401d4d9d18cab134022688043091dd3d0 Mon Sep 17 00:00:00 2001 From: Greg Date: Tue, 15 Feb 2022 16:53:00 -0500 Subject: [PATCH 2/4] Update OpenApiConfigurationResolverTests.cs --- .../Resolvers/OpenApiConfigurationResolverTests.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests/Resolvers/OpenApiConfigurationResolverTests.cs b/test/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests/Resolvers/OpenApiConfigurationResolverTests.cs index 10c274f5..86f5f7fd 100644 --- a/test/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests/Resolvers/OpenApiConfigurationResolverTests.cs +++ b/test/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests/Resolvers/OpenApiConfigurationResolverTests.cs @@ -39,5 +39,10 @@ public void Given_Assembly_When_Resolve_Invoked_Then_It_Should_Return_Result() result.Should().BeOfType(); } + + // NOTE: this abstract class is referenced via the OpenApiConfigurationResolver.Resolve method (and will be ignored) + public abstract class TestOpenApiConfigurationOptionsBase : DefaultOpenApiConfigurationOptions + { + } } } From 4349a103c7cde5dfb9c3200a9b297e53ada9964e Mon Sep 17 00:00:00 2001 From: Greg Date: Mon, 21 Feb 2022 16:36:57 -0500 Subject: [PATCH 3/4] add fakes --- .../FakeOpenApiConfigurationOptions.cs | 6 ++++++ .../FakeOpenApiConfigurationOptionsBase.cs | 9 +++++++++ .../Resolvers/OpenApiConfigurationResolverTests.cs | 11 +++++++++-- 3 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 test/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests.Fakes/FakeOpenApiConfigurationOptions.cs create mode 100644 test/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests.Fakes/FakeOpenApiConfigurationOptionsBase.cs diff --git a/test/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests.Fakes/FakeOpenApiConfigurationOptions.cs b/test/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests.Fakes/FakeOpenApiConfigurationOptions.cs new file mode 100644 index 00000000..ae808c76 --- /dev/null +++ b/test/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests.Fakes/FakeOpenApiConfigurationOptions.cs @@ -0,0 +1,6 @@ +namespace Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests.Fakes +{ + public class FakeOpenApiConfigurationOptions : FakeOpenApiConfigurationOptionsBase + { + } +} diff --git a/test/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests.Fakes/FakeOpenApiConfigurationOptionsBase.cs b/test/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests.Fakes/FakeOpenApiConfigurationOptionsBase.cs new file mode 100644 index 00000000..7cb4c2ef --- /dev/null +++ b/test/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests.Fakes/FakeOpenApiConfigurationOptionsBase.cs @@ -0,0 +1,9 @@ +using Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Configurations; + +namespace Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests.Fakes +{ + // NOTE: this abstract class is for testing the OpenApiConfigurationResolver.Resolve method (and will be ignored) + public abstract class FakeOpenApiConfigurationOptionsBase : DefaultOpenApiConfigurationOptions + { + } +} diff --git a/test/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests/Resolvers/OpenApiConfigurationResolverTests.cs b/test/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests/Resolvers/OpenApiConfigurationResolverTests.cs index 86f5f7fd..c35c0a0f 100644 --- a/test/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests/Resolvers/OpenApiConfigurationResolverTests.cs +++ b/test/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests/Resolvers/OpenApiConfigurationResolverTests.cs @@ -5,6 +5,7 @@ using Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Abstractions; using Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Configurations; using Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Resolvers; +using Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests.Fakes; using Microsoft.VisualStudio.TestTools.UnitTesting; namespace Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests.Resolvers @@ -40,9 +41,15 @@ public void Given_Assembly_When_Resolve_Invoked_Then_It_Should_Return_Result() result.Should().BeOfType(); } - // NOTE: this abstract class is referenced via the OpenApiConfigurationResolver.Resolve method (and will be ignored) - public abstract class TestOpenApiConfigurationOptionsBase : DefaultOpenApiConfigurationOptions + [TestMethod] + public void Given_An_Assembly_With_An_Abstract_Base_Configuration_Then_It_Should_Return_Result() { + var assembly = Assembly.GetAssembly(typeof(FakeOpenApiConfigurationOptions)); + + var result = OpenApiConfigurationResolver.Resolve(assembly); + + result.Should().BeOfType(); + result.GetType().BaseType.Should().Be(typeof(FakeOpenApiConfigurationOptionsBase)); // This verifies the abstract type was considered in the resolution } } } From f2ffe91e692bedbc8da9b7ed876dfcef58d495c7 Mon Sep 17 00:00:00 2001 From: Greg Date: Mon, 21 Feb 2022 16:56:48 -0500 Subject: [PATCH 4/4] remove comment --- .../FakeOpenApiConfigurationOptionsBase.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/test/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests.Fakes/FakeOpenApiConfigurationOptionsBase.cs b/test/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests.Fakes/FakeOpenApiConfigurationOptionsBase.cs index 7cb4c2ef..92d97c0b 100644 --- a/test/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests.Fakes/FakeOpenApiConfigurationOptionsBase.cs +++ b/test/Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests.Fakes/FakeOpenApiConfigurationOptionsBase.cs @@ -2,7 +2,6 @@ namespace Microsoft.Azure.WebJobs.Extensions.OpenApi.Core.Tests.Fakes { - // NOTE: this abstract class is for testing the OpenApiConfigurationResolver.Resolve method (and will be ignored) public abstract class FakeOpenApiConfigurationOptionsBase : DefaultOpenApiConfigurationOptions { }