1+ using System . Collections . Generic ;
12using System . Net ;
23using System . Net . Http ;
34using System . Threading . Tasks ;
@@ -53,5 +54,85 @@ public async Task Can_Include_Nested_Relationships()
5354 Assert . NotNull ( responseTodoItem . Collection ) ;
5455 Assert . NotNull ( responseTodoItem . Collection . Owner ) ;
5556 }
57+
58+ [ Fact ]
59+ public async Task Can_Include_Nested_HasMany_Relationships ( )
60+ {
61+ // arrange
62+ const string route = "/api/v1/todo-items?include=collection.todo-items" ;
63+
64+ var todoItem = new TodoItem {
65+ Collection = new TodoItemCollection {
66+ Owner = new Person ( ) ,
67+ TodoItems = new List < TodoItem > {
68+ new TodoItem ( ) ,
69+ new TodoItem ( )
70+ }
71+ }
72+ } ;
73+
74+ var context = _fixture . GetService < AppDbContext > ( ) ;
75+ context . TodoItems . RemoveRange ( context . TodoItems ) ;
76+ context . TodoItems . Add ( todoItem ) ;
77+ await context . SaveChangesAsync ( ) ;
78+
79+ // act
80+ var response = await _fixture . Client . GetAsync ( route ) ;
81+
82+ // assert
83+ Assert . Equal ( HttpStatusCode . OK , response . StatusCode ) ;
84+
85+ var body = await response . Content . ReadAsStringAsync ( ) ;
86+ var todoItems = _fixture . DeSerializer . DeserializeList < TodoItem > ( body ) ;
87+
88+ var responseTodoItem = todoItems [ 0 ] ;
89+ Assert . NotNull ( responseTodoItem ) ;
90+ Assert . NotNull ( responseTodoItem . Collection ) ;
91+ Assert . NotNull ( responseTodoItem . Collection . TodoItems ) ;
92+ Assert . Equal ( 2 , responseTodoItem . Collection . TodoItems . Count ) ;
93+
94+ // TODO: assert number of things in included
95+ }
96+
97+ [ Fact ]
98+ public async Task Can_Include_Nested_HasMany_Relationships_BelongsTo ( )
99+ {
100+ // arrange
101+ const string route = "/api/v1/todo-items?include=collection.todo-items.owner" ;
102+
103+ var todoItem = new TodoItem {
104+ Collection = new TodoItemCollection {
105+ Owner = new Person ( ) ,
106+ TodoItems = new List < TodoItem > {
107+ new TodoItem {
108+ Owner = new Person ( )
109+ } ,
110+ new TodoItem ( )
111+ }
112+ }
113+ } ;
114+
115+ var context = _fixture . GetService < AppDbContext > ( ) ;
116+ context . TodoItems . RemoveRange ( context . TodoItems ) ;
117+ context . TodoItems . Add ( todoItem ) ;
118+ await context . SaveChangesAsync ( ) ;
119+
120+ // act
121+ var response = await _fixture . Client . GetAsync ( route ) ;
122+
123+ // assert
124+ Assert . Equal ( HttpStatusCode . OK , response . StatusCode ) ;
125+
126+ var body = await response . Content . ReadAsStringAsync ( ) ;
127+ var todoItems = _fixture . DeSerializer . DeserializeList < TodoItem > ( body ) ;
128+
129+ var responseTodoItem = todoItems [ 0 ] ;
130+ Assert . NotNull ( responseTodoItem ) ;
131+ Assert . NotNull ( responseTodoItem . Collection ) ;
132+ Assert . NotNull ( responseTodoItem . Collection . TodoItems ) ;
133+ Assert . Equal ( 2 , responseTodoItem . Collection . TodoItems . Count ) ;
134+
135+ // TODO: assert number of things in included
136+ }
56137 }
57138}
0 commit comments