Skip to content

Commit bda10b8

Browse files
committed
hasMany.hasMany
1 parent 41ba2ed commit bda10b8

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

Diff for: test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/DeeplyNestedInclusionTests.cs

+47-1
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,6 @@ public async Task Included_Resources_Are_Correct()
228228
// 2 assigned todo items (including the primary resource)
229229
Assert.Equal(6, included.Count);
230230

231-
232231
var collectionDocument = included.FindResource("todo-collections", collection.Id);
233232
var ownerDocument = included.FindResource("people", collectionOwner.Id);
234233
var assigneeDocument = included.FindResource("people", assignee.Id);
@@ -254,5 +253,52 @@ public async Task Included_Resources_Are_Correct()
254253
Assert.NotNull(roleDocument);
255254
Assert.Equal(role.Id.ToString(), roleDocument.Id);
256255
}
256+
257+
[Fact]
258+
public async Task Can_Include_Doubly_HasMany_Relationships()
259+
{
260+
// arrange
261+
var person = new Person {
262+
TodoItemCollections = new List<TodoItemCollection> {
263+
new TodoItemCollection {
264+
TodoItems = new List<TodoItem> {
265+
new TodoItem(),
266+
new TodoItem()
267+
}
268+
},
269+
new TodoItemCollection {
270+
TodoItems = new List<TodoItem> {
271+
new TodoItem(),
272+
new TodoItem(),
273+
new TodoItem()
274+
}
275+
}
276+
}
277+
};
278+
279+
var context = _fixture.GetService<AppDbContext>();
280+
ResetContext(context);
281+
282+
context.People.Add(person);
283+
284+
await context.SaveChangesAsync();
285+
286+
string route = "/api/v1/people/" + person.Id + "?include=todo-collections.todo-items";
287+
288+
// act
289+
var response = await _fixture.Client.GetAsync(route);
290+
291+
// assert
292+
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
293+
294+
var body = await response.Content.ReadAsStringAsync();
295+
var documents = JsonConvert.DeserializeObject<Document>(body);
296+
var included = documents.Included;
297+
298+
Assert.Equal(7, included.Count);
299+
300+
Assert.Equal(5, included.CountOfType("todo-items"));
301+
Assert.Equal(2, included.CountOfType("todo-collections"));
302+
}
257303
}
258304
}

Diff for: test/JsonApiDotNetCoreExampleTests/Helpers/Extensions/DocumentExtensions.cs

+4
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,9 @@ public static DocumentData FindResource<TId>(this List<DocumentData> included, s
2222

2323
return document;
2424
}
25+
26+
public static int CountOfType(this List<DocumentData> included, string type) {
27+
return included.Where(documentData => documentData.Type == type).Count();
28+
}
2529
}
2630
}

0 commit comments

Comments
 (0)