@@ -54,7 +54,7 @@ public async Task Can_Create_Guid_Identifiable_Entity()
54
54
55
55
var context = _fixture . GetService < AppDbContext > ( ) ;
56
56
57
- var owner = new JsonApiDotNetCoreExample . Models . Person ( ) ;
57
+ var owner = new Person ( ) ;
58
58
context . People . Add ( owner ) ;
59
59
await context . SaveChangesAsync ( ) ;
60
60
@@ -212,7 +212,6 @@ public async Task Can_Create_And_Set_HasMany_Relationships()
212
212
var httpMethod = new HttpMethod ( "POST" ) ;
213
213
var server = new TestServer ( builder ) ;
214
214
var client = server . CreateClient ( ) ;
215
-
216
215
var context = _fixture . GetService < AppDbContext > ( ) ;
217
216
218
217
var owner = new Person ( ) ;
@@ -286,7 +285,7 @@ public async Task Can_Create_With_HasMany_Relationship_And_Include_Result()
286
285
287
286
var context = _fixture . GetService < AppDbContext > ( ) ;
288
287
289
- var owner = new JsonApiDotNetCoreExample . Models . Person ( ) ;
288
+ var owner = new Person ( ) ;
290
289
var todoItem = new TodoItem ( ) ;
291
290
todoItem . Owner = owner ;
292
291
todoItem . Description = "Description" ;
@@ -296,43 +295,21 @@ public async Task Can_Create_With_HasMany_Relationship_And_Include_Result()
296
295
297
296
var route = "/api/v1/todo-collections?include=todo-items" ;
298
297
var request = new HttpRequestMessage ( httpMethod , route ) ;
299
- var content = new
300
- {
301
- data = new
302
- {
303
- type = "todo-collections" ,
304
- relationships = new Dictionary < string , dynamic >
305
- {
306
- { "owner" , new {
307
- data = new
308
- {
309
- type = "people" ,
310
- id = owner . Id . ToString ( )
311
- }
312
- } } ,
313
- { "todo-items" , new {
314
- data = new dynamic [ ]
315
- {
316
- new {
317
- type = "todo-items" ,
318
- id = todoItem . Id . ToString ( )
319
- }
320
- }
321
- } }
322
- }
323
- }
324
- } ;
325
-
326
- request . Content = new StringContent ( JsonConvert . SerializeObject ( content ) ) ;
298
+ var todoItemCollection = new TodoItemCollection { Owner = owner , TodoItems = new List < TodoItem > { todoItem } } ;
299
+ var serializer = _fixture . GetSerializer < TodoItemCollection > ( tic => new { } , tic => new { tic . TodoItems , tic . Owner } ) ;
300
+ request . Content = new StringContent ( serializer . Serialize ( todoItemCollection ) ) ;
327
301
request . Content . Headers . ContentType = new MediaTypeHeaderValue ( "application/vnd.api+json" ) ;
328
302
303
+ var graph = new ResourceGraphBuilder ( ) . AddResource < TodoItemClient > ( "todo-items" ) . AddResource < Person > ( ) . AddResource < TodoItemCollectionClient , Guid > ( ) . Build ( ) ;
304
+ var deserializer = new ResponseDeserializer ( graph ) ;
305
+
329
306
// act
330
307
var response = await client . SendAsync ( request ) ;
331
308
332
309
// assert
333
310
Assert . Equal ( HttpStatusCode . Created , response . StatusCode ) ;
334
311
var body = await response . Content . ReadAsStringAsync ( ) ;
335
- var collectionResult = _fixture . GetDeserializer ( ) . DeserializeSingle < TodoItemCollection > ( body ) . Data ;
312
+ var collectionResult = deserializer . DeserializeSingle < TodoItemCollectionClient > ( body ) . Data ;
336
313
337
314
Assert . NotNull ( collectionResult ) ;
338
315
Assert . NotEmpty ( collectionResult . TodoItems ) ;
@@ -352,40 +329,28 @@ public async Task Can_Create_And_Set_HasOne_Relationships()
352
329
var context = _fixture . GetService < AppDbContext > ( ) ;
353
330
354
331
var todoItem = new TodoItem ( ) ;
355
- var owner = new JsonApiDotNetCoreExample . Models . Person ( ) ;
332
+ var owner = new Person ( ) ;
356
333
context . People . Add ( owner ) ;
357
334
await context . SaveChangesAsync ( ) ;
335
+ todoItem . Owner = owner ;
358
336
359
337
var route = "/api/v1/todo-items" ;
360
338
var request = new HttpRequestMessage ( httpMethod , route ) ;
361
- var content = new
362
- {
363
- data = new
364
- {
365
- type = "todo-items" ,
366
- relationships = new Dictionary < string , dynamic >
367
- {
368
- { "owner" , new {
369
- data = new
370
- {
371
- type = "people" ,
372
- id = owner . Id . ToString ( )
373
- }
374
- } }
375
- }
376
- }
377
- } ;
378
-
379
- request . Content = new StringContent ( JsonConvert . SerializeObject ( content ) ) ;
339
+ var serializer = _fixture . GetSerializer < TodoItem > ( attributes : ti => new { } , relationships : ti => new { ti . Owner } ) ;
340
+ var content = serializer . Serialize ( todoItem ) ;
341
+ request . Content = new StringContent ( content ) ;
380
342
request . Content . Headers . ContentType = new MediaTypeHeaderValue ( "application/vnd.api+json" ) ;
381
343
344
+ var graph = new ResourceGraphBuilder ( ) . AddResource < Person > ( ) . AddResource < TodoItemClient > ( "todo-items" ) . Build ( ) ;
345
+ var deserializer = new ResponseDeserializer ( graph ) ;
346
+
382
347
// act
383
348
var response = await client . SendAsync ( request ) ;
384
349
var body = await response . Content . ReadAsStringAsync ( ) ;
385
350
386
351
// assert
387
352
Assert . Equal ( HttpStatusCode . Created , response . StatusCode ) ;
388
- var deserializedBody = _fixture . GetDeserializer ( ) . DeserializeSingle < TodoItem > ( body ) . Data ;
353
+ var deserializedBody = deserializer . DeserializeSingle < TodoItem > ( body ) . Data ;
389
354
var newId = deserializedBody . Id ;
390
355
391
356
context = _fixture . GetService < AppDbContext > ( ) ;
@@ -400,53 +365,38 @@ public async Task Can_Create_And_Set_HasOne_Relationships()
400
365
public async Task Can_Create_With_HasOne_Relationship_And_Include_Result ( )
401
366
{
402
367
// arrange
403
- var builder = new WebHostBuilder ( ) . UseStartup < Startup > ( ) ;
404
-
368
+ // arrange
369
+ var builder = new WebHostBuilder ( )
370
+ . UseStartup < Startup > ( ) ;
405
371
var httpMethod = new HttpMethod ( "POST" ) ;
406
372
var server = new TestServer ( builder ) ;
407
373
var client = server . CreateClient ( ) ;
408
374
409
375
var context = _fixture . GetService < AppDbContext > ( ) ;
410
376
411
377
var todoItem = new TodoItem ( ) ;
412
- var owner = new JsonApiDotNetCoreExample . Models . Person
413
- {
414
- FirstName = "Alice"
415
- } ;
378
+ var owner = new Person { FirstName = "Alice" } ;
416
379
context . People . Add ( owner ) ;
417
-
418
380
await context . SaveChangesAsync ( ) ;
381
+ todoItem . Owner = owner ;
419
382
420
383
var route = "/api/v1/todo-items?include=owner" ;
421
384
var request = new HttpRequestMessage ( httpMethod , route ) ;
422
- var content = new
423
- {
424
- data = new
425
- {
426
- type = "todo-items" ,
427
- relationships = new Dictionary < string , dynamic >
428
- {
429
- { "owner" , new {
430
- data = new
431
- {
432
- type = "people" ,
433
- id = owner . Id . ToString ( )
434
- }
435
- } }
436
- }
437
- }
438
- } ;
439
-
440
- request . Content = new StringContent ( JsonConvert . SerializeObject ( content ) ) ;
385
+ var serializer = _fixture . GetSerializer < TodoItem > ( attributes : ti => new { } , relationships : ti => new { ti . Owner } ) ;
386
+ var content = serializer . Serialize ( todoItem ) ;
387
+ request . Content = new StringContent ( content ) ;
441
388
request . Content . Headers . ContentType = new MediaTypeHeaderValue ( "application/vnd.api+json" ) ;
442
389
390
+ var graph = new ResourceGraphBuilder ( ) . AddResource < Person > ( ) . AddResource < TodoItemClient > ( "todo-items" ) . Build ( ) ;
391
+ var deserializer = new ResponseDeserializer ( graph ) ;
392
+
443
393
// act
444
394
var response = await client . SendAsync ( request ) ;
445
395
var body = await response . Content . ReadAsStringAsync ( ) ;
446
396
447
397
// assert
448
398
Assert . Equal ( HttpStatusCode . Created , response . StatusCode ) ;
449
- var todoItemResult = _fixture . GetDeserializer ( ) . DeserializeSingle < TodoItem > ( body ) . Data ;
399
+ var todoItemResult = deserializer . DeserializeSingle < TodoItem > ( body ) . Data ;
450
400
Assert . NotNull ( todoItemResult ) ;
451
401
Assert . NotNull ( todoItemResult . Owner ) ;
452
402
Assert . Equal ( owner . FirstName , todoItemResult . Owner . FirstName ) ;
@@ -464,33 +414,16 @@ public async Task Can_Create_And_Set_HasOne_Relationships_From_Independent_Side(
464
414
465
415
var context = _fixture . GetService < AppDbContext > ( ) ;
466
416
467
- var person = new JsonApiDotNetCoreExample . Models . Person ( ) ;
417
+ var person = new Person ( ) ;
468
418
context . People . Add ( person ) ;
469
419
await context . SaveChangesAsync ( ) ;
470
-
420
+ var personRole = new PersonRole { Person = person } ;
471
421
var route = "/api/v1/person-roles" ;
472
422
var request = new HttpRequestMessage ( httpMethod , route ) ;
473
423
var clientDefinedId = Guid . NewGuid ( ) ;
474
- var content = new
475
- {
476
- data = new
477
- {
478
- type = "person-roles" ,
479
- relationships = new
480
- {
481
- person = new
482
- {
483
- data = new
484
- {
485
- type = "people" ,
486
- id = person . Id . ToString ( )
487
- }
488
- }
489
- }
490
- }
491
- } ;
424
+ var content = _fixture . GetSerializer < PersonRole > ( pr => new { } , pr => new { pr . Person } ) . Serialize ( personRole ) ;
492
425
493
- request . Content = new StringContent ( JsonConvert . SerializeObject ( content ) ) ;
426
+ request . Content = new StringContent ( content ) ;
494
427
request . Content . Headers . ContentType = new MediaTypeHeaderValue ( "application/vnd.api+json" ) ;
495
428
496
429
// act
@@ -499,8 +432,13 @@ public async Task Can_Create_And_Set_HasOne_Relationships_From_Independent_Side(
499
432
500
433
// assert
501
434
Assert . Equal ( HttpStatusCode . Created , response . StatusCode ) ;
502
- var deserializedBody = _fixture . GetDeserializer ( ) . DeserializeSingle < PersonRole > ( body ) . Data ;
503
- Assert . Equal ( person . Id , deserializedBody . Person . Id ) ;
435
+ context = _fixture . GetService < AppDbContext > ( ) ;
436
+ var newId = _fixture . GetDeserializer ( ) . DeserializeSingle < PersonRole > ( body ) . Data . Id ;
437
+ Assert . NotEqual ( 0 , newId ) ;
438
+ var personRoleResult = context . PersonRoles
439
+ . Include ( c => c . Person )
440
+ . SingleOrDefault ( c => c . Id == newId ) ;
441
+ Assert . Equal ( person . Id , personRoleResult . Person . Id ) ;
504
442
}
505
443
506
444
[ Fact ]
@@ -515,26 +453,19 @@ public async Task ShouldReceiveLocationHeader_InResponse()
515
453
var client = server . CreateClient ( ) ;
516
454
var request = new HttpRequestMessage ( httpMethod , route ) ;
517
455
var todoItem = _todoItemFaker . Generate ( ) ;
518
- var content = new
519
- {
520
- data = new
521
- {
522
- type = "todo-items" ,
523
- attributes = new
524
- {
525
- description = todoItem . Description ,
526
- ordinal = todoItem . Ordinal ,
527
- createdDate = DateTime . Now
528
- }
529
- }
530
- } ;
531
- request . Content = new StringContent ( JsonConvert . SerializeObject ( content ) ) ;
456
+ todoItem . CreatedDate = DateTime . Now ;
457
+
458
+ var serializer = _fixture . GetSerializer < TodoItem > ( ti => new { ti . CreatedDate , ti . Description , ti . Ordinal } ) ;
459
+
460
+ request . Content = new StringContent ( serializer . Serialize ( todoItem ) ) ;
532
461
request . Content . Headers . ContentType = new MediaTypeHeaderValue ( "application/vnd.api+json" ) ;
533
462
534
463
// act
464
+ var graph = new ResourceGraphBuilder ( ) . AddResource < Person > ( ) . AddResource < TodoItemClient > ( "todo-items" ) . Build ( ) ;
465
+ var deserializer = new ResponseDeserializer ( graph ) ;
535
466
var response = await client . SendAsync ( request ) ;
536
467
var body = await response . Content . ReadAsStringAsync ( ) ;
537
- var deserializedBody = _fixture . GetDeserializer ( ) . DeserializeSingle < TodoItem > ( body ) . Data ;
468
+ var deserializedBody = deserializer . DeserializeSingle < TodoItemClient > ( body ) . Data ;
538
469
539
470
// assert
540
471
Assert . Equal ( HttpStatusCode . Created , response . StatusCode ) ;
0 commit comments