Skip to content

Commit 0f32672

Browse files
committedSep 16, 2016
added tests for related / improvements
1 parent 0459ed8 commit 0f32672

File tree

7 files changed

+89
-6
lines changed

7 files changed

+89
-6
lines changed
 

‎JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/FetchingResourcesQueryResolverTests.cs

+15
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,20 @@ public async Task GetWithSearchFilter() // this enables logic in Query resolver
5050
}
5151
}
5252

53+
54+
[TestMethod]
55+
[DeploymentItem(@"Data\CommentSearch.csv", @"Data")]
56+
[DeploymentItem(@"Data\PostSearch.csv", @"Data")]
57+
[DeploymentItem(@"Data\User.csv", @"Data")]
58+
public async Task GetWithSearchFilter_related_to_many() // this enables logic in Query resolver for related
59+
{
60+
using (var effortConnection = GetEffortConnection())
61+
{
62+
var response = await SubmitGet(effortConnection, "post-searchs/201/comments?searchterm=efg");
63+
64+
await AssertResponseContent(response, @"Fixtures\FetchingResourcesQueryResolver\GetWithSearchFilter_related_to_many_Response.json", HttpStatusCode.OK);
65+
}
66+
}
67+
5368
}
5469
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"data": [
3+
{
4+
"type": "comment-searchs",
5+
"id": "102",
6+
"attributes": {
7+
"created": "2015-01-31T14:35:00.0000000+00:00",
8+
"text": "efgComment"
9+
},
10+
"relationships": {
11+
"post": {
12+
"links": {
13+
"self": "https://www.example.com/comment-searchs/102/relationships/post",
14+
"related": "https://www.example.com/comment-searchs/102/post"
15+
}
16+
}
17+
}
18+
}
19+
]
20+
}

‎JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Tests.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,7 @@
291291
<EmbeddedResource Include="Fixtures\Pagination\GetFilterPaged-1-2-sorted.json" />
292292
<EmbeddedResource Include="Fixtures\Pagination\GetFilterPaged-1-2-sorted-desc.json" />
293293
<EmbeddedResource Include="Fixtures\FetchingResources\Get_related_to_many_include_external_response.json" />
294+
<EmbeddedResource Include="Fixtures\FetchingResourcesQueryResolver\GetWithSearchFilter_related_to_many_Response.json" />
294295
<None Include="packages.config" />
295296
</ItemGroup>
296297
<ItemGroup />
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using System;
2+
using System.Linq;
3+
using System.Net.Http;
4+
using System.Text.RegularExpressions;
5+
using System.Threading;
6+
using System.Threading.Tasks;
7+
using JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Helper;
8+
using JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.Models;
9+
using JSONAPI.QueryableResolvers;
10+
11+
namespace JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp
12+
{
13+
public class CommentSearchResourceQueryResolver : IResourceCollectionResolver<CommentSearch>
14+
{
15+
public Task<IQueryable<CommentSearch>> GetQueryForResourceCollection(IQueryable<CommentSearch> queryable, HttpRequestMessage request, CancellationToken cancellationToken)
16+
{
17+
var queryPairs = request.GetQueryNameValuePairs();
18+
foreach (var queryPair in queryPairs)
19+
{
20+
if (String.IsNullOrWhiteSpace(queryPair.Key))
21+
continue;
22+
23+
if (!queryPair.Key.StartsWith("searchterm"))
24+
continue;
25+
26+
var searchTerm = queryPair.Value;
27+
var predicate = PredicateBuilder.False<CommentSearch>();
28+
29+
foreach (var str in Regex.Split(searchTerm, "\\s+"))
30+
{
31+
predicate = predicate.Or(y => y.Text.Contains(str));
32+
}
33+
queryable= queryable.Where(predicate);
34+
}
35+
return Task.FromResult(queryable);
36+
}
37+
}
38+
}

‎JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp/JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@
157157
<Compile Include="Models\TestDbContext.cs" />
158158
<Compile Include="Models\User.cs" />
159159
<Compile Include="Models\UserGroup.cs" />
160+
<Compile Include="CommentSearchResourceQueryResolver.cs" />
160161
<Compile Include="PostSearchResourceQueryResolver.cs" />
161162
<Compile Include="Properties\AssemblyInfo.cs" />
162163
<Compile Include="Startup.cs" />

‎JSONAPI.AcceptanceTests.EntityFrameworkTestWebApp/Startup.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ internal JsonApiConfiguration BuildConfiguration()
9494
configuration.RegisterEntityFrameworkResourceType<Master>();
9595
configuration.RegisterEntityFrameworkResourceType<Child>();
9696
configuration.RegisterResourceType<PostSearch>().ResolveCollectionWith<PostSearchResourceQueryResolver>();
97-
configuration.RegisterEntityFrameworkResourceType<CommentSearch>();
97+
configuration.RegisterResourceType<CommentSearch>().ResolveCollectionWith<CommentSearchResourceQueryResolver>();
9898
return configuration;
9999
}
100100

‎JSONAPI.Autofac/JsonApiAutofacModule.cs

+13-5
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,14 @@ protected override void Load(ContainerBuilder builder)
9292
var configuration = context.ResolveKeyed<IResourceTypeConfiguration>(clrType);
9393
var registration = registry.GetRegistrationForType(clrType);
9494
var parameters = new List<Parameter> { new TypedParameter(typeof(IResourceTypeRegistration), registration)};
95+
96+
// add parameter for collectionResolver
9597
if (configuration.ResourceCollectionResolverType != null)
9698
{
9799
var collectionResolver = context.Resolve(configuration.ResourceCollectionResolverType, parameters);
98100
parameters.Add(new NamedParameter("collectionResolver", collectionResolver));
99101
}
102+
100103
if (configuration.DocumentMaterializerType != null)
101104
return (IDocumentMaterializer)context.Resolve(configuration.DocumentMaterializerType, parameters);
102105
return context.Resolve<IDocumentMaterializer>(parameters);
@@ -120,12 +123,17 @@ protected override void Load(ContainerBuilder builder)
120123
new TypedParameter(typeof(IResourceTypeRegistration), registration),
121124
new TypedParameter(typeof(ResourceTypeRelationship), relationship)
122125
};
123-
var relConfiguration = context.ResolveKeyed<IResourceTypeConfiguration>(relationshipName);
124-
if (relConfiguration.ResourceCollectionResolverType != null)
125-
{
126-
var collectionResolver = context.Resolve(relConfiguration.ResourceCollectionResolverType, parameters);
127-
parameters.Add(new NamedParameter("collectionResolver", collectionResolver));
126+
127+
// add parameter for collectionResolver
128+
if (context.IsRegisteredWithKey<IResourceTypeConfiguration>(relationship.RelatedType)) {
129+
var relConfiguration = context.ResolveKeyed<IResourceTypeConfiguration>(relationship.RelatedType);
130+
if (relConfiguration.ResourceCollectionResolverType != null)
131+
{
132+
var collectionResolver = context.Resolve(relConfiguration.ResourceCollectionResolverType, parameters);
133+
parameters.Add(new NamedParameter("collectionResolver", collectionResolver));
134+
}
128135
}
136+
129137
// First, see if they have set an explicit materializer for this relationship
130138
IResourceTypeRelationshipConfiguration relationshipConfiguration;
131139
if (configuration.RelationshipConfigurations.TryGetValue(relationship.Property.Name,

0 commit comments

Comments
 (0)
Please sign in to comment.