diff --git a/src/JsonApiDotNetCore/Middleware/HeaderConstants.cs b/src/JsonApiDotNetCore/Middleware/HeaderConstants.cs index 0a93c9269c..c860204c52 100644 --- a/src/JsonApiDotNetCore/Middleware/HeaderConstants.cs +++ b/src/JsonApiDotNetCore/Middleware/HeaderConstants.cs @@ -1,7 +1,10 @@ +using JetBrains.Annotations; + #pragma warning disable AV1008 // Class should not be static namespace JsonApiDotNetCore.Middleware { + [PublicAPI] public static class HeaderConstants { public const string MediaType = "application/vnd.api+json"; diff --git a/src/JsonApiDotNetCore/Middleware/JsonApiRoutingConvention.cs b/src/JsonApiDotNetCore/Middleware/JsonApiRoutingConvention.cs index 80e2aa5dce..6063c81a3d 100644 --- a/src/JsonApiDotNetCore/Middleware/JsonApiRoutingConvention.cs +++ b/src/JsonApiDotNetCore/Middleware/JsonApiRoutingConvention.cs @@ -33,7 +33,7 @@ public class JsonApiRoutingConvention : IJsonApiRoutingConvention { private readonly IJsonApiOptions _options; private readonly IResourceContextProvider _resourceContextProvider; - private readonly HashSet _registeredTemplates = new HashSet(); + private readonly Dictionary _registeredControllerNameByTemplate = new Dictionary(); private readonly Dictionary _resourceContextPerControllerTypeMap = new Dictionary(); public JsonApiRoutingConvention(IJsonApiOptions options, IResourceContextProvider resourceContextProvider) @@ -89,11 +89,14 @@ public void Apply(ApplicationModel application) string template = TemplateFromResource(controller) ?? TemplateFromController(controller); - if (template == null) + if (_registeredControllerNameByTemplate.ContainsKey(template)) { - throw new InvalidConfigurationException($"Controllers with overlapping route templates detected: {controller.ControllerType.FullName}"); + throw new InvalidConfigurationException( + $"Cannot register '{controller.ControllerType.FullName}' for template '{template}' because '{_registeredControllerNameByTemplate[template]}' was already registered for this template."); } + _registeredControllerNameByTemplate.Add(template, controller.ControllerType.FullName); + controller.Selectors[0].AttributeRouteModel = new AttributeRouteModel { Template = template @@ -116,10 +119,7 @@ private string TemplateFromResource(ControllerModel model) { string template = $"{_options.Namespace}/{resourceContext.PublicName}"; - if (_registeredTemplates.Add(template)) - { - return template; - } + return template; } return null; @@ -133,12 +133,7 @@ private string TemplateFromController(ControllerModel model) string controllerName = _options.SerializerNamingStrategy.GetPropertyName(model.ControllerName, false); string template = $"{_options.Namespace}/{controllerName}"; - if (_registeredTemplates.Add(template)) - { - return template; - } - - return null; + return template; } /// diff --git a/src/JsonApiDotNetCore/Properties/AssemblyInfo.cs b/src/JsonApiDotNetCore/Properties/AssemblyInfo.cs index 6bd2e5a870..2c359f920d 100644 --- a/src/JsonApiDotNetCore/Properties/AssemblyInfo.cs +++ b/src/JsonApiDotNetCore/Properties/AssemblyInfo.cs @@ -4,3 +4,4 @@ [assembly: InternalsVisibleTo("JsonApiDotNetCoreExampleTests")] [assembly: InternalsVisibleTo("UnitTests")] [assembly: InternalsVisibleTo("DiscoveryTests")] +[assembly: InternalsVisibleTo("TestBuildingBlocks")] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Controllers/AtomicConstrainedOperationsControllerTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Controllers/AtomicConstrainedOperationsControllerTests.cs index ba68a661b0..243e07294d 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Controllers/AtomicConstrainedOperationsControllerTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Controllers/AtomicConstrainedOperationsControllerTests.cs @@ -19,7 +19,7 @@ public AtomicConstrainedOperationsControllerTests(ExampleIntegrationTestContext< { _testContext = testContext; - testContext.ConfigureServicesAfterStartup(services => services.AddControllersFromExampleProject()); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceTests.cs index af4fd37576..39d5378f21 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceTests.cs @@ -7,6 +7,7 @@ using FluentAssertions; using FluentAssertions.Extensions; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.EntityFrameworkCore; using TestBuildingBlocks; @@ -23,7 +24,7 @@ public AtomicCreateResourceTests(ExampleIntegrationTestContext services.AddControllersFromExampleProject()); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithClientGeneratedIdTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithClientGeneratedIdTests.cs index 0bb4edb8e0..9c88b14335 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithClientGeneratedIdTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithClientGeneratedIdTests.cs @@ -5,6 +5,7 @@ using FluentAssertions; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.Extensions.DependencyInjection; using TestBuildingBlocks; @@ -23,7 +24,7 @@ public AtomicCreateResourceWithClientGeneratedIdTests( { _testContext = testContext; - testContext.ConfigureServicesAfterStartup(services => services.AddControllersFromExampleProject()); + testContext.UseController(); var options = (JsonApiOptions)testContext.Factory.Services.GetRequiredService(); options.AllowClientGeneratedIds = true; diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithToManyRelationshipTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithToManyRelationshipTests.cs index dd6a0e90c6..abd177bfe8 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithToManyRelationshipTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithToManyRelationshipTests.cs @@ -5,6 +5,7 @@ using System.Threading.Tasks; using FluentAssertions; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.EntityFrameworkCore; using TestBuildingBlocks; @@ -23,7 +24,7 @@ public AtomicCreateResourceWithToManyRelationshipTests( { _testContext = testContext; - testContext.ConfigureServicesAfterStartup(services => services.AddControllersFromExampleProject()); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithToOneRelationshipTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithToOneRelationshipTests.cs index 21b1aff71b..9a1dceef3a 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithToOneRelationshipTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithToOneRelationshipTests.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using FluentAssertions; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; @@ -25,7 +26,7 @@ public AtomicCreateResourceWithToOneRelationshipTests( { _testContext = testContext; - testContext.ConfigureServicesAfterStartup(services => services.AddControllersFromExampleProject()); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Deleting/AtomicDeleteResourceTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Deleting/AtomicDeleteResourceTests.cs index ffb3342364..360a39de53 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Deleting/AtomicDeleteResourceTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Deleting/AtomicDeleteResourceTests.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using FluentAssertions; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.EntityFrameworkCore; using TestBuildingBlocks; @@ -22,7 +23,7 @@ public AtomicDeleteResourceTests(ExampleIntegrationTestContext services.AddControllersFromExampleProject()); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Links/AtomicAbsoluteLinksTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Links/AtomicAbsoluteLinksTests.cs index 15ebcab128..16bc2c68f3 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Links/AtomicAbsoluteLinksTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Links/AtomicAbsoluteLinksTests.cs @@ -4,6 +4,7 @@ using FluentAssertions; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.Extensions.DependencyInjection; using TestBuildingBlocks; @@ -22,10 +23,10 @@ public AtomicAbsoluteLinksTests(ExampleIntegrationTestContext(); + testContext.ConfigureServicesAfterStartup(services => { - services.AddControllersFromExampleProject(); - services.AddScoped(typeof(IResourceChangeTracker<>), typeof(NeverSameResourceChangeTracker<>)); }); } diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Links/AtomicRelativeLinksWithNamespaceTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Links/AtomicRelativeLinksWithNamespaceTests.cs index 3fea795b67..dafe56cc1e 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Links/AtomicRelativeLinksWithNamespaceTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Links/AtomicRelativeLinksWithNamespaceTests.cs @@ -5,6 +5,7 @@ using FluentAssertions; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.Extensions.DependencyInjection; using TestBuildingBlocks; @@ -22,10 +23,10 @@ public AtomicRelativeLinksWithNamespaceTests( { _testContext = testContext; + testContext.UseController(); + testContext.ConfigureServicesAfterStartup(services => { - services.AddControllersFromExampleProject(); - services.AddScoped(typeof(IResourceChangeTracker<>), typeof(NeverSameResourceChangeTracker<>)); }); } diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/LocalIds/AtomicLocalIdTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/LocalIds/AtomicLocalIdTests.cs index af3c5ab285..0481b4c253 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/LocalIds/AtomicLocalIdTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/LocalIds/AtomicLocalIdTests.cs @@ -5,6 +5,7 @@ using System.Threading.Tasks; using FluentAssertions; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.EntityFrameworkCore; using TestBuildingBlocks; @@ -21,7 +22,7 @@ public AtomicLocalIdTests(ExampleIntegrationTestContext services.AddControllersFromExampleProject()); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Meta/AtomicResourceMetaTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Meta/AtomicResourceMetaTests.cs index 5e33b822e5..de71c07d49 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Meta/AtomicResourceMetaTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Meta/AtomicResourceMetaTests.cs @@ -6,6 +6,7 @@ using FluentAssertions.Extensions; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.Extensions.DependencyInjection; using TestBuildingBlocks; @@ -22,10 +23,10 @@ public AtomicResourceMetaTests(ExampleIntegrationTestContext(); + testContext.ConfigureServicesAfterStartup(services => { - services.AddControllersFromExampleProject(); - services.AddScoped, MusicTrackMetaDefinition>(); services.AddScoped, TextLanguageMetaDefinition>(); }); diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Meta/AtomicResponseMetaTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Meta/AtomicResponseMetaTests.cs index ae24a50a4a..facb8dc4a9 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Meta/AtomicResponseMetaTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Meta/AtomicResponseMetaTests.cs @@ -6,6 +6,7 @@ using FluentAssertions; using JsonApiDotNetCore.Serialization; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.Extensions.DependencyInjection; using Newtonsoft.Json.Linq; @@ -23,10 +24,10 @@ public AtomicResponseMetaTests(ExampleIntegrationTestContext(); + testContext.ConfigureServicesAfterStartup(services => { - services.AddControllersFromExampleProject(); - services.AddSingleton(); }); } diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Mixed/AtomicRequestBodyTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Mixed/AtomicRequestBodyTests.cs index 7e9453fcd0..8b7084b4fe 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Mixed/AtomicRequestBodyTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Mixed/AtomicRequestBodyTests.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using FluentAssertions; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.EntityFrameworkCore; using TestBuildingBlocks; @@ -19,7 +20,7 @@ public AtomicRequestBodyTests(ExampleIntegrationTestContext services.AddControllersFromExampleProject()); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Mixed/MaximumOperationsPerRequestTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Mixed/MaximumOperationsPerRequestTests.cs index 84c9f239b7..fcc49f7c2e 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Mixed/MaximumOperationsPerRequestTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Mixed/MaximumOperationsPerRequestTests.cs @@ -5,6 +5,7 @@ using FluentAssertions; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.Extensions.DependencyInjection; using TestBuildingBlocks; @@ -21,7 +22,7 @@ public MaximumOperationsPerRequestTests(ExampleIntegrationTestContext services.AddControllersFromExampleProject()); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/ModelStateValidation/AtomicModelStateValidationTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/ModelStateValidation/AtomicModelStateValidationTests.cs index 24d3f851dc..a86bef8595 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/ModelStateValidation/AtomicModelStateValidationTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/ModelStateValidation/AtomicModelStateValidationTests.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using FluentAssertions; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.EntityFrameworkCore; using TestBuildingBlocks; @@ -20,7 +21,7 @@ public AtomicModelStateValidationTests(ExampleIntegrationTestContext services.AddControllersFromExampleProject()); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/QueryStrings/AtomicQueryStringTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/QueryStrings/AtomicQueryStringTests.cs index 2e41befd2e..ebcf1fe882 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/QueryStrings/AtomicQueryStringTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/QueryStrings/AtomicQueryStringTests.cs @@ -8,6 +8,7 @@ using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.AspNetCore.Authentication; using Microsoft.Extensions.DependencyInjection; @@ -27,10 +28,11 @@ public AtomicQueryStringTests(ExampleIntegrationTestContext(); + testContext.UseController(); + testContext.ConfigureServicesAfterStartup(services => { - services.AddControllersFromExampleProject(); - services.AddSingleton(new FrozenSystemClock { UtcNow = FrozenTime diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/ResourceDefinitions/AtomicSparseFieldSetResourceDefinitionTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/ResourceDefinitions/AtomicSparseFieldSetResourceDefinitionTests.cs index de4c1ecaaf..144c0df61a 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/ResourceDefinitions/AtomicSparseFieldSetResourceDefinitionTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/ResourceDefinitions/AtomicSparseFieldSetResourceDefinitionTests.cs @@ -5,6 +5,7 @@ using FluentAssertions; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.Extensions.DependencyInjection; using TestBuildingBlocks; @@ -22,10 +23,10 @@ public AtomicSparseFieldSetResourceDefinitionTests(ExampleIntegrationTestContext { _testContext = testContext; + testContext.UseController(); + testContext.ConfigureServicesAfterStartup(services => { - services.AddControllersFromExampleProject(); - services.AddSingleton(); services.AddScoped, LyricTextDefinition>(); services.AddScoped(typeof(IResourceChangeTracker<>), typeof(NeverSameResourceChangeTracker<>)); diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Transactions/AtomicRollbackTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Transactions/AtomicRollbackTests.cs index e3ff40fb65..2f01f4aaa2 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Transactions/AtomicRollbackTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Transactions/AtomicRollbackTests.cs @@ -5,6 +5,7 @@ using System.Threading.Tasks; using FluentAssertions; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.EntityFrameworkCore; using TestBuildingBlocks; @@ -21,7 +22,7 @@ public AtomicRollbackTests(ExampleIntegrationTestContext services.AddControllersFromExampleProject()); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Transactions/AtomicTransactionConsistencyTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Transactions/AtomicTransactionConsistencyTests.cs index 899ee2510d..4f6508fe4c 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Transactions/AtomicTransactionConsistencyTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Transactions/AtomicTransactionConsistencyTests.cs @@ -5,6 +5,7 @@ using FluentAssertions; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; @@ -22,10 +23,10 @@ public AtomicTransactionConsistencyTests(ExampleIntegrationTestContext(); + testContext.ConfigureServicesAfterStartup(services => { - services.AddControllersFromExampleProject(); - services.AddResourceRepository(); services.AddResourceRepository(); services.AddResourceRepository(); diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicAddToToManyRelationshipTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicAddToToManyRelationshipTests.cs index 87c407cd41..98d15f5459 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicAddToToManyRelationshipTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicAddToToManyRelationshipTests.cs @@ -6,6 +6,7 @@ using FluentAssertions; using JsonApiDotNetCore; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.EntityFrameworkCore; using TestBuildingBlocks; @@ -23,7 +24,7 @@ public AtomicAddToToManyRelationshipTests(ExampleIntegrationTestContext services.AddControllersFromExampleProject()); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicRemoveFromToManyRelationshipTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicRemoveFromToManyRelationshipTests.cs index 4ba1b44634..f09d85cf36 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicRemoveFromToManyRelationshipTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicRemoveFromToManyRelationshipTests.cs @@ -6,6 +6,7 @@ using FluentAssertions; using JsonApiDotNetCore; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.EntityFrameworkCore; using TestBuildingBlocks; @@ -23,7 +24,7 @@ public AtomicRemoveFromToManyRelationshipTests(ExampleIntegrationTestContext services.AddControllersFromExampleProject()); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicReplaceToManyRelationshipTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicReplaceToManyRelationshipTests.cs index 9eca84249c..17606bd01d 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicReplaceToManyRelationshipTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicReplaceToManyRelationshipTests.cs @@ -6,6 +6,7 @@ using FluentAssertions; using JsonApiDotNetCore; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.EntityFrameworkCore; using TestBuildingBlocks; @@ -23,7 +24,7 @@ public AtomicReplaceToManyRelationshipTests(ExampleIntegrationTestContext services.AddControllersFromExampleProject()); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicUpdateToOneRelationshipTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicUpdateToOneRelationshipTests.cs index 54365fd4da..a8bec2eaae 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicUpdateToOneRelationshipTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicUpdateToOneRelationshipTests.cs @@ -5,6 +5,7 @@ using System.Threading.Tasks; using FluentAssertions; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.EntityFrameworkCore; using TestBuildingBlocks; @@ -22,7 +23,7 @@ public AtomicUpdateToOneRelationshipTests(ExampleIntegrationTestContext services.AddControllersFromExampleProject()); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicReplaceToManyRelationshipTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicReplaceToManyRelationshipTests.cs index b356585dd2..004b3e777f 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicReplaceToManyRelationshipTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicReplaceToManyRelationshipTests.cs @@ -6,6 +6,7 @@ using FluentAssertions; using JsonApiDotNetCore; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.EntityFrameworkCore; using TestBuildingBlocks; @@ -23,7 +24,7 @@ public AtomicReplaceToManyRelationshipTests(ExampleIntegrationTestContext services.AddControllersFromExampleProject()); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicUpdateResourceTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicUpdateResourceTests.cs index 23d106dc3e..5e6e328dc1 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicUpdateResourceTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicUpdateResourceTests.cs @@ -7,6 +7,7 @@ using FluentAssertions; using FluentAssertions.Extensions; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.EntityFrameworkCore; using TestBuildingBlocks; @@ -23,7 +24,7 @@ public AtomicUpdateResourceTests(ExampleIntegrationTestContext services.AddControllersFromExampleProject()); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicUpdateToOneRelationshipTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicUpdateToOneRelationshipTests.cs index 52f58e2506..0460f5e2e5 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicUpdateToOneRelationshipTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicUpdateToOneRelationshipTests.cs @@ -5,6 +5,7 @@ using System.Threading.Tasks; using FluentAssertions; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using Microsoft.EntityFrameworkCore; using TestBuildingBlocks; @@ -22,7 +23,7 @@ public AtomicUpdateToOneRelationshipTests(ExampleIntegrationTestContext services.AddControllersFromExampleProject()); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/CompositeKeys/CompositeKeyTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/CompositeKeys/CompositeKeyTests.cs index f4453b50c7..c541f86a39 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/CompositeKeys/CompositeKeyTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/CompositeKeys/CompositeKeyTests.cs @@ -22,6 +22,10 @@ public CompositeKeyTests(ExampleIntegrationTestContext(); + testContext.UseController(); + testContext.UseController(); + testContext.ConfigureServicesAfterStartup(services => { services.AddResourceRepository(); diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ContentNegotiation/AcceptHeaderTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ContentNegotiation/AcceptHeaderTests.cs index 25ad63189e..107464ba36 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ContentNegotiation/AcceptHeaderTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ContentNegotiation/AcceptHeaderTests.cs @@ -5,6 +5,7 @@ using FluentAssertions; using JsonApiDotNetCore.Middleware; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using TestBuildingBlocks; using Xunit; @@ -19,7 +20,8 @@ public AcceptHeaderTests(ExampleIntegrationTestContext services.AddControllersFromExampleProject()); + testContext.UseController(); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ContentNegotiation/ContentTypeHeaderTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ContentNegotiation/ContentTypeHeaderTests.cs index 3aba63977a..8a2a831eca 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ContentNegotiation/ContentTypeHeaderTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ContentNegotiation/ContentTypeHeaderTests.cs @@ -4,6 +4,7 @@ using FluentAssertions; using JsonApiDotNetCore.Middleware; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExampleTests.Startups; using TestBuildingBlocks; using Xunit; @@ -18,7 +19,8 @@ public ContentTypeHeaderTests(ExampleIntegrationTestContext services.AddControllersFromExampleProject()); + testContext.UseController(); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ControllerActionResults/ActionResultTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ControllerActionResults/ActionResultTests.cs index dc1d6e3670..2e23a8746c 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ControllerActionResults/ActionResultTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ControllerActionResults/ActionResultTests.cs @@ -16,6 +16,8 @@ public sealed class ActionResultTests : IClassFixture, ActionResultDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/CustomRoutes/ApiControllerAttributeTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/CustomRoutes/ApiControllerAttributeTests.cs index 8bf3ab0a72..ecba79c327 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/CustomRoutes/ApiControllerAttributeTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/CustomRoutes/ApiControllerAttributeTests.cs @@ -16,6 +16,8 @@ public sealed class ApiControllerAttributeTests : IClassFixture, CustomRouteDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/CustomRoutes/CustomRouteTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/CustomRoutes/CustomRouteTests.cs index 9663c6c830..d974d38503 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/CustomRoutes/CustomRouteTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/CustomRoutes/CustomRouteTests.cs @@ -21,6 +21,9 @@ public sealed class CustomRouteTests : IClassFixture, CustomRouteDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/EagerLoading/EagerLoadingTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/EagerLoading/EagerLoadingTests.cs index 862c6d12fd..317c114978 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/EagerLoading/EagerLoadingTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/EagerLoading/EagerLoadingTests.cs @@ -20,6 +20,10 @@ public EagerLoadingTests(ExampleIntegrationTestContext(); + testContext.UseController(); + testContext.UseController(); + testContext.ConfigureServicesAfterStartup(services => { services.AddResourceRepository(); diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ExceptionHandling/ExceptionHandlerTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ExceptionHandling/ExceptionHandlerTests.cs index 93801ce51c..1a9a272c03 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ExceptionHandling/ExceptionHandlerTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ExceptionHandling/ExceptionHandlerTests.cs @@ -24,6 +24,9 @@ public ExceptionHandlerTests(ExampleIntegrationTestContext(); + testContext.UseController(); + FakeLoggerFactory loggerFactory = null; testContext.ConfigureLogging(options => diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/HostingInIIS/HostingTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/HostingInIIS/HostingTests.cs index 954b59fa5f..e326e41805 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/HostingInIIS/HostingTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/HostingInIIS/HostingTests.cs @@ -19,6 +19,9 @@ public sealed class HostingTests : IClassFixture, HostingDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/IdObfuscation/IdObfuscationTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/IdObfuscation/IdObfuscationTests.cs index 99e569f724..b941ff28f4 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/IdObfuscation/IdObfuscationTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/IdObfuscation/IdObfuscationTests.cs @@ -19,6 +19,9 @@ public sealed class IdObfuscationTests : IClassFixture, ObfuscationDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Links/AbsoluteLinksWithNamespaceTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Links/AbsoluteLinksWithNamespaceTests.cs index fdca0b77dd..c54d868a17 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Links/AbsoluteLinksWithNamespaceTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Links/AbsoluteLinksWithNamespaceTests.cs @@ -25,6 +25,9 @@ public AbsoluteLinksWithNamespaceTests(ExampleIntegrationTestContext(); + testContext.UseController(); + testContext.ConfigureServicesAfterStartup(services => { services.AddScoped(typeof(IResourceChangeTracker<>), typeof(NeverSameResourceChangeTracker<>)); diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Links/AbsoluteLinksWithoutNamespaceTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Links/AbsoluteLinksWithoutNamespaceTests.cs index e625ae5c55..db26b78f09 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Links/AbsoluteLinksWithoutNamespaceTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Links/AbsoluteLinksWithoutNamespaceTests.cs @@ -25,6 +25,9 @@ public AbsoluteLinksWithoutNamespaceTests(ExampleIntegrationTestContext(); + testContext.UseController(); + testContext.ConfigureServicesAfterStartup(services => { services.AddScoped(typeof(IResourceChangeTracker<>), typeof(NeverSameResourceChangeTracker<>)); diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Links/LinkInclusionTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Links/LinkInclusionTests.cs index b7838e77e1..c93426d464 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Links/LinkInclusionTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Links/LinkInclusionTests.cs @@ -17,6 +17,8 @@ public sealed class LinkInclusionTests : IClassFixture, LinksDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Links/RelativeLinksWithNamespaceTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Links/RelativeLinksWithNamespaceTests.cs index 91fa367b04..e77685caec 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Links/RelativeLinksWithNamespaceTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Links/RelativeLinksWithNamespaceTests.cs @@ -23,6 +23,9 @@ public RelativeLinksWithNamespaceTests(ExampleIntegrationTestContext(); + testContext.UseController(); + testContext.ConfigureServicesAfterStartup(services => { services.AddScoped(typeof(IResourceChangeTracker<>), typeof(NeverSameResourceChangeTracker<>)); diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Links/RelativeLinksWithoutNamespaceTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Links/RelativeLinksWithoutNamespaceTests.cs index 13acd8c735..4d03d34dd7 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Links/RelativeLinksWithoutNamespaceTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Links/RelativeLinksWithoutNamespaceTests.cs @@ -23,6 +23,9 @@ public RelativeLinksWithoutNamespaceTests(ExampleIntegrationTestContext(); + testContext.UseController(); + testContext.ConfigureServicesAfterStartup(services => { services.AddScoped(typeof(IResourceChangeTracker<>), typeof(NeverSameResourceChangeTracker<>)); diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Logging/LoggingTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Logging/LoggingTests.cs index 9e9c1085df..11311d5ebf 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Logging/LoggingTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Logging/LoggingTests.cs @@ -20,6 +20,8 @@ public LoggingTests(ExampleIntegrationTestContext(); + FakeLoggerFactory loggerFactory = null; testContext.ConfigureLogging(options => diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Meta/ResourceMetaTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Meta/ResourceMetaTests.cs index c47ab9aaa2..0378db3434 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Meta/ResourceMetaTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Meta/ResourceMetaTests.cs @@ -21,6 +21,9 @@ public ResourceMetaTests(ExampleIntegrationTestContext(); + testContext.UseController(); + testContext.ConfigureServicesAfterStartup(services => { services.AddScoped, SupportTicketDefinition>(); diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Meta/ResponseMetaTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Meta/ResponseMetaTests.cs index 5edbc027ee..e10b383a33 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Meta/ResponseMetaTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Meta/ResponseMetaTests.cs @@ -19,6 +19,9 @@ public ResponseMetaTests(ExampleIntegrationTestContext(); + testContext.UseController(); + testContext.ConfigureServicesAfterStartup(services => { services.AddSingleton(); diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Meta/TopLevelCountTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Meta/TopLevelCountTests.cs index 15df5c055c..176a526774 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Meta/TopLevelCountTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Meta/TopLevelCountTests.cs @@ -21,6 +21,9 @@ public TopLevelCountTests(ExampleIntegrationTestContext(); + testContext.UseController(); + testContext.ConfigureServicesAfterStartup(services => { services.AddScoped(typeof(IResourceChangeTracker<>), typeof(NeverSameResourceChangeTracker<>)); diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ModelStateValidation/ModelStateValidationTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ModelStateValidation/ModelStateValidationTests.cs index 84c3bc694c..ac56b7c0fe 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ModelStateValidation/ModelStateValidationTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ModelStateValidation/ModelStateValidationTests.cs @@ -18,6 +18,9 @@ public sealed class ModelStateValidationTests public ModelStateValidationTests(ExampleIntegrationTestContext, ModelStateDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ModelStateValidation/NoModelStateValidationTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ModelStateValidation/NoModelStateValidationTests.cs index 56e600e6e0..cf30a79101 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ModelStateValidation/NoModelStateValidationTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ModelStateValidation/NoModelStateValidationTests.cs @@ -16,6 +16,9 @@ public sealed class NoModelStateValidationTests : IClassFixture, ModelStateDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/NamingConventions/KebabCasingTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/NamingConventions/KebabCasingTests.cs index 1f96742ed1..9d9bd9feb1 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/NamingConventions/KebabCasingTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/NamingConventions/KebabCasingTests.cs @@ -17,6 +17,9 @@ public sealed class KebabCasingTests : IClassFixture, SwimmingDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Filtering/FilterDataTypeTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Filtering/FilterDataTypeTests.cs index e916a303b2..648de3fd31 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Filtering/FilterDataTypeTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Filtering/FilterDataTypeTests.cs @@ -24,6 +24,8 @@ public FilterDataTypeTests(ExampleIntegrationTestContext(); + var options = (JsonApiOptions)testContext.Factory.Services.GetRequiredService(); options.EnableLegacyFilterNotation = false; } diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Filtering/FilterDepthTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Filtering/FilterDepthTests.cs index fbb02ea6bb..08eacbcde1 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Filtering/FilterDepthTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Filtering/FilterDepthTests.cs @@ -23,6 +23,9 @@ public FilterDepthTests(ExampleIntegrationTestContext(); + testContext.UseController(); + var options = (JsonApiOptions)testContext.Factory.Services.GetRequiredService(); options.EnableLegacyFilterNotation = false; diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Filtering/FilterOperatorTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Filtering/FilterOperatorTests.cs index 4ee104179e..a0979ff162 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Filtering/FilterOperatorTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Filtering/FilterOperatorTests.cs @@ -24,6 +24,8 @@ public FilterOperatorTests(ExampleIntegrationTestContext(); + var options = (JsonApiOptions)testContext.Factory.Services.GetRequiredService(); options.EnableLegacyFilterNotation = false; } diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Filtering/FilterTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Filtering/FilterTests.cs index 8d45d10ebf..c2437b3084 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Filtering/FilterTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Filtering/FilterTests.cs @@ -21,6 +21,8 @@ public FilterTests(ExampleIntegrationTestContext(); + var options = (JsonApiOptions)testContext.Factory.Services.GetRequiredService(); options.EnableLegacyFilterNotation = false; } diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Includes/IncludeTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Includes/IncludeTests.cs index e9909382e9..c7981f3ea7 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Includes/IncludeTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Includes/IncludeTests.cs @@ -22,6 +22,11 @@ public IncludeTests(ExampleIntegrationTestContext(); + testContext.UseController(); + testContext.UseController(); + testContext.UseController(); + var options = (JsonApiOptions)testContext.Factory.Services.GetRequiredService(); options.MaximumIncludeDepth = null; } diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Pagination/PaginationWithTotalCountTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Pagination/PaginationWithTotalCountTests.cs index 648d858d5d..338bd2d843 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Pagination/PaginationWithTotalCountTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Pagination/PaginationWithTotalCountTests.cs @@ -26,6 +26,10 @@ public PaginationWithTotalCountTests(ExampleIntegrationTestContext(); + testContext.UseController(); + testContext.UseController(); + var options = (JsonApiOptions)testContext.Factory.Services.GetRequiredService(); options.IncludeTotalResourceCount = true; options.DefaultPageSize = new PageSize(DefaultPageSize); diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Pagination/PaginationWithoutTotalCountTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Pagination/PaginationWithoutTotalCountTests.cs index f45e44daf8..7a2b94dbee 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Pagination/PaginationWithoutTotalCountTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Pagination/PaginationWithoutTotalCountTests.cs @@ -25,6 +25,9 @@ public PaginationWithoutTotalCountTests(ExampleIntegrationTestContext(); + testContext.UseController(); + var options = (JsonApiOptions)testContext.Factory.Services.GetRequiredService(); options.IncludeTotalResourceCount = false; options.DefaultPageSize = new PageSize(DefaultPageSize); diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Pagination/RangeValidationTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Pagination/RangeValidationTests.cs index 3858e78d3f..8e31b58d15 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Pagination/RangeValidationTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Pagination/RangeValidationTests.cs @@ -22,6 +22,8 @@ public RangeValidationTests(ExampleIntegrationTestContext(); + var options = (JsonApiOptions)testContext.Factory.Services.GetRequiredService(); options.DefaultPageSize = new PageSize(DefaultPageSize); options.MaximumPageSize = null; diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Pagination/RangeValidationWithMaximumTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Pagination/RangeValidationWithMaximumTests.cs index b419b9a72e..0e3833afac 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Pagination/RangeValidationWithMaximumTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Pagination/RangeValidationWithMaximumTests.cs @@ -22,6 +22,8 @@ public RangeValidationWithMaximumTests(ExampleIntegrationTestContext(); + var options = (JsonApiOptions)testContext.Factory.Services.GetRequiredService(); options.DefaultPageSize = new PageSize(5); options.MaximumPageSize = new PageSize(MaximumPageSize); diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/QueryStringTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/QueryStringTests.cs index e909ddb443..d7a346d6a1 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/QueryStringTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/QueryStringTests.cs @@ -18,6 +18,8 @@ public sealed class QueryStringTests : IClassFixture, QueryStringDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/SerializerDefaultValueHandlingTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/SerializerDefaultValueHandlingTests.cs index 992fc2ed3c..09d62b9acd 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/SerializerDefaultValueHandlingTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/SerializerDefaultValueHandlingTests.cs @@ -22,6 +22,8 @@ public sealed class SerializerDefaultValueHandlingTests public SerializerDefaultValueHandlingTests(ExampleIntegrationTestContext, QueryStringDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/SerializerNullValueHandlingTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/SerializerNullValueHandlingTests.cs index fb23b1b858..87294c7f53 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/SerializerNullValueHandlingTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/SerializerNullValueHandlingTests.cs @@ -22,6 +22,8 @@ public sealed class SerializerNullValueHandlingTests public SerializerNullValueHandlingTests(ExampleIntegrationTestContext, QueryStringDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Sorting/SortTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Sorting/SortTests.cs index fd41caa604..baf2bb4e61 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Sorting/SortTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/Sorting/SortTests.cs @@ -20,6 +20,10 @@ public sealed class SortTests : IClassFixture, QueryStringDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); + testContext.UseController(); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/SparseFieldSets/SparseFieldSetTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/SparseFieldSets/SparseFieldSetTests.cs index ca7052a4ab..8518a9237b 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/SparseFieldSets/SparseFieldSetTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/QueryStrings/SparseFieldSets/SparseFieldSetTests.cs @@ -22,6 +22,10 @@ public SparseFieldSetTests(ExampleIntegrationTestContext(); + testContext.UseController(); + testContext.UseController(); + testContext.ConfigureServicesAfterStartup(services => { services.AddSingleton(); @@ -143,21 +147,22 @@ await _testContext.RunOnDatabaseAsync(async dbContext => } [Fact] - public async Task Can_select_fields_in_primary_resource_by_ID() + public async Task Can_select_fields_in_secondary_resources() { // Arrange var store = _testContext.Factory.Services.GetRequiredService(); store.Clear(); - BlogPost post = _fakers.BlogPost.Generate(); + Blog blog = _fakers.Blog.Generate(); + blog.Posts = _fakers.BlogPost.Generate(1); await _testContext.RunOnDatabaseAsync(async dbContext => { - dbContext.Posts.Add(post); + dbContext.Blogs.Add(blog); await dbContext.SaveChangesAsync(); }); - string route = $"/blogPosts/{post.StringId}?fields[blogPosts]=url,author"; + string route = $"/blogs/{blog.StringId}/posts?fields[blogPosts]=caption,labels"; // Act (HttpResponseMessage httpResponse, Document responseDocument) = await _testContext.ExecuteGetAsync(route); @@ -165,37 +170,40 @@ await _testContext.RunOnDatabaseAsync(async dbContext => // Assert httpResponse.Should().HaveStatusCode(HttpStatusCode.OK); - responseDocument.SingleData.Should().NotBeNull(); - responseDocument.SingleData.Id.Should().Be(post.StringId); - responseDocument.SingleData.Attributes.Should().HaveCount(1); - responseDocument.SingleData.Attributes["url"].Should().Be(post.Url); - responseDocument.SingleData.Relationships.Should().HaveCount(1); - responseDocument.SingleData.Relationships["author"].Data.Should().BeNull(); - responseDocument.SingleData.Relationships["author"].Links.Self.Should().NotBeNull(); - responseDocument.SingleData.Relationships["author"].Links.Related.Should().NotBeNull(); + responseDocument.ManyData.Should().HaveCount(1); + responseDocument.ManyData[0].Id.Should().Be(blog.Posts[0].StringId); + responseDocument.ManyData[0].Attributes.Should().HaveCount(1); + responseDocument.ManyData[0].Attributes["caption"].Should().Be(blog.Posts[0].Caption); + responseDocument.ManyData[0].Relationships.Should().HaveCount(1); + responseDocument.ManyData[0].Relationships["labels"].Data.Should().BeNull(); + responseDocument.ManyData[0].Relationships["labels"].Links.Self.Should().NotBeNull(); + responseDocument.ManyData[0].Relationships["labels"].Links.Related.Should().NotBeNull(); - var postCaptured = (BlogPost)store.Resources.Should().ContainSingle(resource => resource is BlogPost).And.Subject.Single(); - postCaptured.Url.Should().Be(post.Url); - postCaptured.Caption.Should().BeNull(); + var blogCaptured = (Blog)store.Resources.Should().ContainSingle(resource => resource is Blog).And.Subject.Single(); + blogCaptured.Id.Should().Be(blog.Id); + blogCaptured.Title.Should().BeNull(); + + blogCaptured.Posts.Should().HaveCount(1); + blogCaptured.Posts[0].Caption.Should().Be(blog.Posts[0].Caption); + blogCaptured.Posts[0].Url.Should().BeNull(); } [Fact] - public async Task Can_select_fields_in_secondary_resources() + public async Task Can_select_fields_in_primary_resource_by_ID() { // Arrange var store = _testContext.Factory.Services.GetRequiredService(); store.Clear(); - Blog blog = _fakers.Blog.Generate(); - blog.Posts = _fakers.BlogPost.Generate(1); + BlogPost post = _fakers.BlogPost.Generate(); await _testContext.RunOnDatabaseAsync(async dbContext => { - dbContext.Blogs.Add(blog); + dbContext.Posts.Add(post); await dbContext.SaveChangesAsync(); }); - string route = $"/blogs/{blog.StringId}/posts?fields[blogPosts]=caption,labels"; + string route = $"/blogPosts/{post.StringId}?fields[blogPosts]=url,author"; // Act (HttpResponseMessage httpResponse, Document responseDocument) = await _testContext.ExecuteGetAsync(route); @@ -203,22 +211,18 @@ await _testContext.RunOnDatabaseAsync(async dbContext => // Assert httpResponse.Should().HaveStatusCode(HttpStatusCode.OK); - responseDocument.ManyData.Should().HaveCount(1); - responseDocument.ManyData[0].Id.Should().Be(blog.Posts[0].StringId); - responseDocument.ManyData[0].Attributes.Should().HaveCount(1); - responseDocument.ManyData[0].Attributes["caption"].Should().Be(blog.Posts[0].Caption); - responseDocument.ManyData[0].Relationships.Should().HaveCount(1); - responseDocument.ManyData[0].Relationships["labels"].Data.Should().BeNull(); - responseDocument.ManyData[0].Relationships["labels"].Links.Self.Should().NotBeNull(); - responseDocument.ManyData[0].Relationships["labels"].Links.Related.Should().NotBeNull(); - - var blogCaptured = (Blog)store.Resources.Should().ContainSingle(resource => resource is Blog).And.Subject.Single(); - blogCaptured.Id.Should().Be(blog.Id); - blogCaptured.Title.Should().BeNull(); + responseDocument.SingleData.Should().NotBeNull(); + responseDocument.SingleData.Id.Should().Be(post.StringId); + responseDocument.SingleData.Attributes.Should().HaveCount(1); + responseDocument.SingleData.Attributes["url"].Should().Be(post.Url); + responseDocument.SingleData.Relationships.Should().HaveCount(1); + responseDocument.SingleData.Relationships["author"].Data.Should().BeNull(); + responseDocument.SingleData.Relationships["author"].Links.Self.Should().NotBeNull(); + responseDocument.SingleData.Relationships["author"].Links.Related.Should().NotBeNull(); - blogCaptured.Posts.Should().HaveCount(1); - blogCaptured.Posts[0].Caption.Should().Be(blog.Posts[0].Caption); - blogCaptured.Posts[0].Url.Should().BeNull(); + var postCaptured = (BlogPost)store.Resources.Should().ContainSingle(resource => resource is BlogPost).And.Subject.Single(); + postCaptured.Url.Should().Be(post.Url); + postCaptured.Caption.Should().BeNull(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Creating/CreateResourceTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Creating/CreateResourceTests.cs index c5f09dea5b..9e3c4084e2 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Creating/CreateResourceTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Creating/CreateResourceTests.cs @@ -26,6 +26,11 @@ public CreateResourceTests(ExampleIntegrationTestContext(); + testContext.UseController(); + testContext.UseController(); + testContext.UseController(); + var options = (JsonApiOptions)testContext.Factory.Services.GetRequiredService(); options.UseRelativeLinks = false; options.AllowClientGeneratedIds = false; diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithClientGeneratedIdTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithClientGeneratedIdTests.cs index 95990a7a98..24bc72bcdc 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithClientGeneratedIdTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithClientGeneratedIdTests.cs @@ -24,6 +24,9 @@ public CreateResourceWithClientGeneratedIdTests(ExampleIntegrationTestContext(); + testContext.UseController(); + var options = (JsonApiOptions)testContext.Factory.Services.GetRequiredService(); options.AllowClientGeneratedIds = true; } diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithToManyRelationshipTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithToManyRelationshipTests.cs index 7083851c00..240c0447cd 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithToManyRelationshipTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithToManyRelationshipTests.cs @@ -21,6 +21,9 @@ public sealed class CreateResourceWithToManyRelationshipTests public CreateResourceWithToManyRelationshipTests(ExampleIntegrationTestContext, ReadWriteDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithToOneRelationshipTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithToOneRelationshipTests.cs index a6bfc7e262..8b5fc0844f 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithToOneRelationshipTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithToOneRelationshipTests.cs @@ -25,6 +25,10 @@ public CreateResourceWithToOneRelationshipTests(ExampleIntegrationTestContext(); + testContext.UseController(); + testContext.UseController(); + var options = (JsonApiOptions)testContext.Factory.Services.GetRequiredService(); options.AllowClientGeneratedIds = true; } diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Deleting/DeleteResourceTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Deleting/DeleteResourceTests.cs index 1221029f9b..1a13fdea64 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Deleting/DeleteResourceTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Deleting/DeleteResourceTests.cs @@ -20,6 +20,10 @@ public sealed class DeleteResourceTests : IClassFixture, ReadWriteDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); + testContext.UseController(); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Fetching/FetchRelationshipTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Fetching/FetchRelationshipTests.cs index de26c720e5..7a0d98d607 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Fetching/FetchRelationshipTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Fetching/FetchRelationshipTests.cs @@ -19,6 +19,9 @@ public sealed class FetchRelationshipTests : IClassFixture, ReadWriteDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Fetching/FetchResourceTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Fetching/FetchResourceTests.cs index 683c7bbb30..bf1cef5374 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Fetching/FetchResourceTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Fetching/FetchResourceTests.cs @@ -19,6 +19,9 @@ public sealed class FetchResourceTests : IClassFixture, ReadWriteDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Relationships/AddToToManyRelationshipTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Relationships/AddToToManyRelationshipTests.cs index fbdd633e95..7e61c97934 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Relationships/AddToToManyRelationshipTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Relationships/AddToToManyRelationshipTests.cs @@ -20,6 +20,8 @@ public sealed class AddToToManyRelationshipTests : IClassFixture, ReadWriteDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Relationships/RemoveFromToManyRelationshipTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Relationships/RemoveFromToManyRelationshipTests.cs index 61e6c7e887..e716cdf1c1 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Relationships/RemoveFromToManyRelationshipTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Relationships/RemoveFromToManyRelationshipTests.cs @@ -21,6 +21,8 @@ public sealed class RemoveFromToManyRelationshipTests public RemoveFromToManyRelationshipTests(ExampleIntegrationTestContext, ReadWriteDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Relationships/ReplaceToManyRelationshipTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Relationships/ReplaceToManyRelationshipTests.cs index 251e5da1ee..05fc7db25b 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Relationships/ReplaceToManyRelationshipTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Relationships/ReplaceToManyRelationshipTests.cs @@ -20,6 +20,8 @@ public sealed class ReplaceToManyRelationshipTests : IClassFixture, ReadWriteDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Relationships/UpdateToOneRelationshipTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Relationships/UpdateToOneRelationshipTests.cs index 011bef4e29..84c8ee134d 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Relationships/UpdateToOneRelationshipTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Relationships/UpdateToOneRelationshipTests.cs @@ -20,6 +20,10 @@ public sealed class UpdateToOneRelationshipTests : IClassFixture, ReadWriteDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); + testContext.UseController(); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Resources/ReplaceToManyRelationshipTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Resources/ReplaceToManyRelationshipTests.cs index 361e77b851..8b0f453e11 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Resources/ReplaceToManyRelationshipTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Resources/ReplaceToManyRelationshipTests.cs @@ -21,6 +21,8 @@ public sealed class ReplaceToManyRelationshipTests : IClassFixture, ReadWriteDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Resources/UpdateResourceTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Resources/UpdateResourceTests.cs index 7a9e43d216..5e3ef5e8d2 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Resources/UpdateResourceTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Resources/UpdateResourceTests.cs @@ -23,6 +23,11 @@ public sealed class UpdateResourceTests : IClassFixture, ReadWriteDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); + testContext.UseController(); + testContext.UseController(); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Resources/UpdateToOneRelationshipTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Resources/UpdateToOneRelationshipTests.cs index e2f65d0587..3494ae303f 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Resources/UpdateToOneRelationshipTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ReadWrite/Updating/Resources/UpdateToOneRelationshipTests.cs @@ -20,6 +20,10 @@ public sealed class UpdateToOneRelationshipTests : IClassFixture, ReadWriteDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); + testContext.UseController(); + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RequiredRelationships/DefaultBehaviorTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RequiredRelationships/DefaultBehaviorTests.cs index 063d9ed40a..fb5e465329 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RequiredRelationships/DefaultBehaviorTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RequiredRelationships/DefaultBehaviorTests.cs @@ -21,6 +21,10 @@ public DefaultBehaviorTests(ExampleIntegrationTestContext(); + testContext.UseController(); + testContext.UseController(); + var options = (JsonApiOptions)testContext.Factory.Services.GetRequiredService(); options.UseRelativeLinks = true; } diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ResourceConstructorInjection/ResourceInjectionTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ResourceConstructorInjection/ResourceInjectionTests.cs index 103ce6eb59..1ccbdd5469 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ResourceConstructorInjection/ResourceInjectionTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ResourceConstructorInjection/ResourceInjectionTests.cs @@ -24,6 +24,9 @@ public ResourceInjectionTests(ExampleIntegrationTestContext(); + testContext.UseController(); + testContext.ConfigureServicesBeforeStartup(services => { services.AddSingleton(); diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ResourceDefinitions/ResourceDefinitionQueryCallbackTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ResourceDefinitions/ResourceDefinitionQueryCallbackTests.cs index 88fe7d09bb..204154325a 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ResourceDefinitions/ResourceDefinitionQueryCallbackTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ResourceDefinitions/ResourceDefinitionQueryCallbackTests.cs @@ -23,6 +23,8 @@ public ResourceDefinitionQueryCallbackTests(ExampleIntegrationTestContext(); + testContext.ConfigureServicesAfterStartup(services => { services.AddScoped, CallableResourceDefinition>(); diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ResourceHooks/ResourceHookTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ResourceHooks/ResourceHookTests.cs index 60bd69352c..374ab674eb 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ResourceHooks/ResourceHookTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ResourceHooks/ResourceHookTests.cs @@ -10,6 +10,7 @@ using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Client.Internal; using JsonApiDotNetCore.Serialization.Objects; +using JsonApiDotNetCoreExample.Controllers; using JsonApiDotNetCoreExample.Data; using JsonApiDotNetCoreExample.Definitions; using JsonApiDotNetCoreExample.Models; @@ -29,6 +30,13 @@ public ResourceHookTests(ExampleIntegrationTestContext(); + testContext.UseController(); + testContext.UseController(); + testContext.UseController(); + testContext.UseController(); + testContext.UseController(); + testContext.ConfigureServicesAfterStartup(services => { services.AddScoped, ArticleHooksDefinition>(); diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ResourceHooks/ResourceHooksStartup.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ResourceHooks/ResourceHooksStartup.cs index 57974b5ede..51f0a08c51 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ResourceHooks/ResourceHooksStartup.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ResourceHooks/ResourceHooksStartup.cs @@ -13,8 +13,6 @@ public sealed class ResourceHooksStartup : TestableStartup, InheritanceDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RestrictedControllers/DisableQueryStringTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RestrictedControllers/DisableQueryStringTests.cs index 20e77d2573..c959863bca 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RestrictedControllers/DisableQueryStringTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RestrictedControllers/DisableQueryStringTests.cs @@ -19,6 +19,9 @@ public DisableQueryStringTests(ExampleIntegrationTestContext(); + testContext.UseController(); + testContext.ConfigureServicesAfterStartup(services => { services.AddScoped(); diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RestrictedControllers/HttpReadOnlyTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RestrictedControllers/HttpReadOnlyTests.cs index 9270ad8f0c..ae1534ecdb 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RestrictedControllers/HttpReadOnlyTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RestrictedControllers/HttpReadOnlyTests.cs @@ -17,6 +17,8 @@ public sealed class HttpReadOnlyTests : IClassFixture, RestrictionDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RestrictedControllers/NoHttpDeleteTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RestrictedControllers/NoHttpDeleteTests.cs index 79f3686404..8a0015329b 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RestrictedControllers/NoHttpDeleteTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RestrictedControllers/NoHttpDeleteTests.cs @@ -17,6 +17,8 @@ public sealed class NoHttpDeleteTests : IClassFixture, RestrictionDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RestrictedControllers/NoHttpPatchTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RestrictedControllers/NoHttpPatchTests.cs index 4822ab9198..bca55551d5 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RestrictedControllers/NoHttpPatchTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RestrictedControllers/NoHttpPatchTests.cs @@ -17,6 +17,8 @@ public sealed class NoHttpPatchTests : IClassFixture, RestrictionDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RestrictedControllers/NoHttpPostTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RestrictedControllers/NoHttpPostTests.cs index b4a5ef5ef6..b4036eba21 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RestrictedControllers/NoHttpPostTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/RestrictedControllers/NoHttpPostTests.cs @@ -17,6 +17,8 @@ public sealed class NoHttpPostTests : IClassFixture, RestrictionDbContext> testContext) { _testContext = testContext; + + testContext.UseController(); } [Fact] diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Serialization/SerializationTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Serialization/SerializationTests.cs index 787c37bbef..c9e5c821d7 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Serialization/SerializationTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/Serialization/SerializationTests.cs @@ -26,6 +26,9 @@ public SerializationTests(ExampleIntegrationTestContext(); + testContext.UseController(); + testContext.ConfigureServicesAfterStartup(services => { services.AddScoped(typeof(IResourceChangeTracker<>), typeof(NeverSameResourceChangeTracker<>)); diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/SoftDeletion/SoftDeletionTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/SoftDeletion/SoftDeletionTests.cs index 975a11483a..8128d02d29 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/SoftDeletion/SoftDeletionTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/SoftDeletion/SoftDeletionTests.cs @@ -21,6 +21,9 @@ public SoftDeletionTests(ExampleIntegrationTestContext(); + testContext.UseController(); + testContext.ConfigureServicesAfterStartup(services => { services.AddScoped, SoftDeletionResourceDefinition>(); diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ZeroKeys/EmptyGuidAsKeyTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ZeroKeys/EmptyGuidAsKeyTests.cs index 3ce89f3399..fe47d09f52 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ZeroKeys/EmptyGuidAsKeyTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ZeroKeys/EmptyGuidAsKeyTests.cs @@ -24,6 +24,10 @@ public EmptyGuidAsKeyTests(ExampleIntegrationTestContext(); + testContext.UseController(); + testContext.UseController(); + var options = (JsonApiOptions)testContext.Factory.Services.GetRequiredService(); options.UseRelativeLinks = true; options.AllowClientGeneratedIds = true; diff --git a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ZeroKeys/ZeroAsKeyTests.cs b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ZeroKeys/ZeroAsKeyTests.cs index 23c890f1d3..cf29af7672 100644 --- a/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ZeroKeys/ZeroAsKeyTests.cs +++ b/test/JsonApiDotNetCoreExampleTests/IntegrationTests/ZeroKeys/ZeroAsKeyTests.cs @@ -23,6 +23,10 @@ public ZeroAsKeyTests(ExampleIntegrationTestContext(); + testContext.UseController(); + testContext.UseController(); + var options = (JsonApiOptions)testContext.Factory.Services.GetRequiredService(); options.UseRelativeLinks = true; options.AllowClientGeneratedIds = true; diff --git a/test/JsonApiDotNetCoreExampleTests/ServiceCollectionExtensions.cs b/test/JsonApiDotNetCoreExampleTests/ServiceCollectionExtensions.cs deleted file mode 100644 index b0ec80ebe3..0000000000 --- a/test/JsonApiDotNetCoreExampleTests/ServiceCollectionExtensions.cs +++ /dev/null @@ -1,15 +0,0 @@ -using JsonApiDotNetCoreExample.Startups; -using Microsoft.AspNetCore.Mvc.ApplicationParts; -using Microsoft.Extensions.DependencyInjection; - -namespace JsonApiDotNetCoreExampleTests -{ - internal static class ServiceCollectionExtensions - { - public static void AddControllersFromExampleProject(this IServiceCollection services) - { - var part = new AssemblyPart(typeof(EmptyStartup).Assembly); - services.AddMvcCore().ConfigureApplicationPartManager(apm => apm.ApplicationParts.Add(part)); - } - } -} diff --git a/test/TestBuildingBlocks/BaseIntegrationTestContext.cs b/test/TestBuildingBlocks/BaseIntegrationTestContext.cs index f4f19af14e..9274e4c52a 100644 --- a/test/TestBuildingBlocks/BaseIntegrationTestContext.cs +++ b/test/TestBuildingBlocks/BaseIntegrationTestContext.cs @@ -2,6 +2,7 @@ using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Testing; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; @@ -30,6 +31,7 @@ public abstract class BaseIntegrationTestContext> _lazyFactory; + private readonly TestControllerProvider _testControllerProvider = new TestControllerProvider(); private Action _loggingConfiguration; private Action _beforeServicesConfiguration; private Action _afterServicesConfiguration; @@ -41,6 +43,12 @@ protected BaseIntegrationTestContext() _lazyFactory = new Lazy>(CreateFactory); } + public void UseController() + where TController : ControllerBase + { + _testControllerProvider.AddController(typeof(TController)); + } + protected override HttpClient CreateClient() { return Factory.CreateClient(); @@ -59,6 +67,8 @@ private WebApplicationFactory CreateFactory() { _beforeServicesConfiguration?.Invoke(services); + services.ReplaceControllers(_testControllerProvider); + services.AddDbContext(options => { options.UseNpgsql(dbConnectionString, postgresOptions => postgresOptions.SetPostgresVersion(new Version(9, 6))); diff --git a/test/TestBuildingBlocks/ServiceCollectionExtensions.cs b/test/TestBuildingBlocks/ServiceCollectionExtensions.cs new file mode 100644 index 0000000000..d3ede9b68c --- /dev/null +++ b/test/TestBuildingBlocks/ServiceCollectionExtensions.cs @@ -0,0 +1,40 @@ +using System.Linq; +using System.Reflection; +using JsonApiDotNetCore; +using Microsoft.AspNetCore.Mvc.ApplicationParts; +using Microsoft.AspNetCore.Mvc.Controllers; +using Microsoft.Extensions.DependencyInjection; + +namespace TestBuildingBlocks +{ + internal static class ServiceCollectionExtensions + { + public static void ReplaceControllers(this IServiceCollection services, TestControllerProvider provider) + { + ArgumentGuard.NotNull(services, nameof(services)); + + services.AddMvcCore().ConfigureApplicationPartManager(manager => + { + RemoveExistingControllerFeatureProviders(manager); + + foreach (Assembly assembly in provider.ControllerAssemblies) + { + manager.ApplicationParts.Add(new AssemblyPart(assembly)); + } + + manager.FeatureProviders.Add(provider); + }); + } + + private static void RemoveExistingControllerFeatureProviders(ApplicationPartManager manager) + { + IApplicationFeatureProvider[] providers = manager.FeatureProviders.OfType>() + .ToArray(); + + foreach (IApplicationFeatureProvider provider in providers) + { + manager.FeatureProviders.Remove(provider); + } + } + } +} diff --git a/test/TestBuildingBlocks/TestControllerProvider.cs b/test/TestBuildingBlocks/TestControllerProvider.cs new file mode 100644 index 0000000000..d8790269ef --- /dev/null +++ b/test/TestBuildingBlocks/TestControllerProvider.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using Microsoft.AspNetCore.Mvc.Controllers; + +namespace TestBuildingBlocks +{ + internal sealed class TestControllerProvider : ControllerFeatureProvider + { + private readonly ISet _allowedControllerTypes = new HashSet(); + + internal ISet ControllerAssemblies { get; } = new HashSet(); + + public void AddController(Type controller) + { + _allowedControllerTypes.Add(controller); + ControllerAssemblies.Add(controller.Assembly); + } + + protected override bool IsController(TypeInfo typeInfo) + { + return _allowedControllerTypes.Contains(typeInfo); + } + } +}