Skip to content

Commit

Permalink
fix: support for lazy loading proxies
Browse files Browse the repository at this point in the history
  • Loading branch information
mrnkr committed Jul 26, 2020
1 parent 9d7614f commit 9323342
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/JsonApiDotNetCore/Internal/ResourceGraph.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public ResourceContext GetResourceContext(string resourceName)
=> Resources.SingleOrDefault(e => e.ResourceName == resourceName);
/// <inheritdoc />
public ResourceContext GetResourceContext(Type resourceType)
=> Resources.SingleOrDefault(e => e.ResourceType == resourceType);
=> Resources.SingleOrDefault(e => e.ResourceType == resourceType) ?? Resources.SingleOrDefault(e => e.ResourceType.IsAssignableFrom(resourceType));
/// <inheritdoc />
public ResourceContext GetResourceContext<TResource>() where TResource : class, IIdentifiable
=> GetResourceContext(typeof(TResource));
Expand Down
38 changes: 38 additions & 0 deletions test/UnitTests/Internal/ResourceGraphBuilder_Tests.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
using System;
using JsonApiDotNetCore.Builders;
using JsonApiDotNetCore.Configuration;
using JsonApiDotNetCore.Internal;
using JsonApiDotNetCore.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
Expand Down Expand Up @@ -41,12 +43,48 @@ public void Adding_DbContext_Members_That_Do_Not_Implement_IIdentifiable_Logs_Wa
Assert.Equal("Entity 'UnitTests.Internal.ResourceGraphBuilder_Tests+TestContext' does not implement 'IIdentifiable'.", loggerFactory.Logger.Messages[0].Text);
}

[Fact]
public void GetResourceContext_Yields_Right_Type_For_Proxy()
{
// Arrange
var resourceGraphBuilder = new ResourceGraphBuilder(new JsonApiOptions(), NullLoggerFactory.Instance);
resourceGraphBuilder.AddResource<Bar>();
var resourceGraph = (ResourceGraph)resourceGraphBuilder.Build();

// Act
var result = resourceGraph.GetResourceContext(typeof(DummyProxy));

// Assert
Assert.Equal(typeof(Bar), result.ResourceType);
}

[Fact]
public void GetResourceContext_Yields_Right_Type_For_IIdentifiable()
{
// Arrange
var resourceGraphBuilder = new ResourceGraphBuilder(new JsonApiOptions(), NullLoggerFactory.Instance);
resourceGraphBuilder.AddResource<Bar>();
var resourceGraph = (ResourceGraph)resourceGraphBuilder.Build();

// Act
var result = resourceGraph.GetResourceContext(typeof(Bar));

// Assert
Assert.Equal(typeof(Bar), result.ResourceType);
}

private class Foo { }

private class TestContext : DbContext
{
public DbSet<Foo> Foos { get; set; }
}

private class Bar : Identifiable { }

// Used to simulate a lazy loading proxy
private class DummyProxy : Bar { }

}

}

0 comments on commit 9323342

Please sign in to comment.