@@ -106,7 +106,7 @@ public async Task Cannot_Create_Entity_With_Client_Generate_Id()
106
106
attributes = new
107
107
{
108
108
description = todoItem . Description ,
109
- ordinal = todoItem . Ordinal ,
109
+ ordinal = todoItem . Ordinal ,
110
110
createdDate = DateTime . Now
111
111
}
112
112
}
@@ -174,7 +174,7 @@ public async Task Can_Create_Guid_Identifiable_Entity_With_Client_Defined_Id_If_
174
174
var httpMethod = new HttpMethod ( "POST" ) ;
175
175
var server = new TestServer ( builder ) ;
176
176
var client = server . CreateClient ( ) ;
177
-
177
+
178
178
var context = _fixture . GetService < AppDbContext > ( ) ;
179
179
180
180
var owner = new JsonApiDotNetCoreExample . Models . Person ( ) ;
@@ -285,6 +285,63 @@ public async Task Can_Create_And_Set_HasMany_Relationships()
285
285
Assert . NotEmpty ( contextCollection . TodoItems ) ;
286
286
}
287
287
288
+ [ Fact ]
289
+ public async Task Can_Create_And_Set_HasOne_Relationships ( )
290
+ {
291
+ // arrange
292
+ var builder = new WebHostBuilder ( )
293
+ . UseStartup < Startup > ( ) ;
294
+ var httpMethod = new HttpMethod ( "POST" ) ;
295
+ var server = new TestServer ( builder ) ;
296
+ var client = server . CreateClient ( ) ;
297
+
298
+ var context = _fixture . GetService < AppDbContext > ( ) ;
299
+
300
+ var todoItem = new TodoItem ( ) ;
301
+ var owner = new JsonApiDotNetCoreExample . Models . Person ( ) ;
302
+ context . People . Add ( owner ) ;
303
+ await context . SaveChangesAsync ( ) ;
304
+
305
+ var route = "/api/v1/todo-items" ;
306
+ var request = new HttpRequestMessage ( httpMethod , route ) ;
307
+ var content = new
308
+ {
309
+ data = new
310
+ {
311
+ type = "todo-items" ,
312
+ relationships = new Dictionary < string , dynamic >
313
+ {
314
+ { "owner" , new {
315
+ data = new
316
+ {
317
+ type = "people" ,
318
+ id = owner . Id . ToString ( )
319
+ }
320
+ } }
321
+ }
322
+ }
323
+ } ;
324
+
325
+ request . Content = new StringContent ( JsonConvert . SerializeObject ( content ) ) ;
326
+ request . Content . Headers . ContentType = new MediaTypeHeaderValue ( "application/vnd.api+json" ) ;
327
+
328
+ // act
329
+ var response = await client . SendAsync ( request ) ;
330
+ var body = await response . Content . ReadAsStringAsync ( ) ;
331
+
332
+ // assert
333
+ Assert . Equal ( HttpStatusCode . Created , response . StatusCode ) ;
334
+ var deserializedBody = ( TodoItem ) _fixture . GetService < IJsonApiDeSerializer > ( ) . Deserialize ( body ) ;
335
+ var newId = deserializedBody . Id ;
336
+
337
+ context = _fixture . GetService < AppDbContext > ( ) ;
338
+ var todoItemResult = context . TodoItems
339
+ . Include ( c => c . Owner )
340
+ . SingleOrDefault ( c => c . Id == newId ) ;
341
+
342
+ Assert . Equal ( owner . Id , todoItemResult . OwnerId ) ;
343
+ }
344
+
288
345
[ Fact ]
289
346
public async Task ShouldReceiveLocationHeader_InResponse ( )
290
347
{
0 commit comments