@@ -381,6 +381,113 @@ public function it_enables_soft_deletes()
381
381
$ this ->assertEquals ([], $ columns ['id ' ]->modifiers ());
382
382
}
383
383
384
+ /**
385
+ * @test
386
+ */
387
+ public function it_converts_foreign_shorthand_to_id ()
388
+ {
389
+ $ tokens = [
390
+ 'models ' => [
391
+ 'Model ' => [
392
+ 'post_id ' => 'foreign ' ,
393
+ 'author_id ' => 'foreign:user ' ,
394
+ ],
395
+ ],
396
+ ];
397
+
398
+ $ actual = $ this ->subject ->analyze ($ tokens );
399
+
400
+ $ this ->assertIsArray ($ actual ['models ' ]);
401
+ $ this ->assertCount (1 , $ actual ['models ' ]);
402
+
403
+ $ model = $ actual ['models ' ]['Model ' ];
404
+ $ this ->assertEquals ('Model ' , $ model ->name ());
405
+ $ this ->assertTrue ($ model ->usesTimestamps ());
406
+ $ this ->assertFalse ($ model ->usesSoftDeletes ());
407
+
408
+ $ columns = $ model ->columns ();
409
+ $ this ->assertCount (3 , $ columns );
410
+ $ this ->assertEquals ('id ' , $ columns ['id ' ]->name ());
411
+ $ this ->assertEquals ('id ' , $ columns ['id ' ]->dataType ());
412
+ $ this ->assertEquals ([], $ columns ['id ' ]->modifiers ());
413
+ $ this ->assertEquals ('post_id ' , $ columns ['post_id ' ]->name ());
414
+ $ this ->assertEquals ('id ' , $ columns ['post_id ' ]->dataType ());
415
+ $ this ->assertEquals (['foreign ' ], $ columns ['post_id ' ]->modifiers ());
416
+ $ this ->assertEquals ('author_id ' , $ columns ['author_id ' ]->name ());
417
+ $ this ->assertEquals ('id ' , $ columns ['author_id ' ]->dataType ());
418
+ $ this ->assertEquals ([['foreign ' => 'user ' ]], $ columns ['author_id ' ]->modifiers ());
419
+ }
420
+
421
+ /**
422
+ * @test
423
+ */
424
+ public function it_sets_belongs_to_with_foreign_attributes ()
425
+ {
426
+ $ tokens = [
427
+ 'models ' => [
428
+ 'Model ' => [
429
+ 'post_id ' => 'id foreign ' ,
430
+ 'author_id ' => 'id foreign:users ' ,
431
+ 'uid ' => 'id:user foreign:users.id ' ,
432
+ 'cntry_id ' => 'foreign:countries ' ,
433
+ 'ccid ' => 'foreign:countries.code ' ,
434
+ ],
435
+ ],
436
+ ];
437
+
438
+ $ actual = $ this ->subject ->analyze ($ tokens );
439
+
440
+ $ this ->assertIsArray ($ actual ['models ' ]);
441
+ $ this ->assertCount (1 , $ actual ['models ' ]);
442
+
443
+ $ model = $ actual ['models ' ]['Model ' ];
444
+ $ this ->assertEquals ('Model ' , $ model ->name ());
445
+ $ this ->assertTrue ($ model ->usesTimestamps ());
446
+ $ this ->assertFalse ($ model ->usesSoftDeletes ());
447
+
448
+ $ columns = $ model ->columns ();
449
+ $ this ->assertCount (6 , $ columns );
450
+ $ this ->assertEquals ('id ' , $ columns ['id ' ]->name ());
451
+ $ this ->assertEquals ('id ' , $ columns ['id ' ]->dataType ());
452
+ $ this ->assertEquals ([], $ columns ['id ' ]->attributes ());
453
+ $ this ->assertEquals ([], $ columns ['id ' ]->modifiers ());
454
+
455
+ $ this ->assertEquals ('post_id ' , $ columns ['post_id ' ]->name ());
456
+ $ this ->assertEquals ('id ' , $ columns ['post_id ' ]->dataType ());
457
+ $ this ->assertEquals ([], $ columns ['post_id ' ]->attributes ());
458
+ $ this ->assertEquals (['foreign ' ], $ columns ['post_id ' ]->modifiers ());
459
+
460
+ $ this ->assertEquals ('author_id ' , $ columns ['author_id ' ]->name ());
461
+ $ this ->assertEquals ('id ' , $ columns ['author_id ' ]->dataType ());
462
+ $ this ->assertEquals ([], $ columns ['author_id ' ]->attributes ());
463
+ $ this ->assertEquals ([['foreign ' => 'users ' ]], $ columns ['author_id ' ]->modifiers ());
464
+
465
+ $ this ->assertEquals ('uid ' , $ columns ['uid ' ]->name ());
466
+ $ this ->assertEquals ('id ' , $ columns ['uid ' ]->dataType ());
467
+ $ this ->assertEquals (['user ' ], $ columns ['uid ' ]->attributes ());
468
+ $ this ->assertEquals ([['foreign ' => 'users.id ' ]], $ columns ['uid ' ]->modifiers ());
469
+
470
+ $ this ->assertEquals ('cntry_id ' , $ columns ['cntry_id ' ]->name ());
471
+ $ this ->assertEquals ('id ' , $ columns ['cntry_id ' ]->dataType ());
472
+ $ this ->assertEquals ([], $ columns ['cntry_id ' ]->attributes ());
473
+ $ this ->assertEquals ([['foreign ' => 'countries ' ]], $ columns ['cntry_id ' ]->modifiers ());
474
+
475
+ $ this ->assertEquals ('ccid ' , $ columns ['ccid ' ]->name ());
476
+ $ this ->assertEquals ('id ' , $ columns ['ccid ' ]->dataType ());
477
+ $ this ->assertEquals ([], $ columns ['ccid ' ]->attributes ());
478
+ $ this ->assertEquals ([['foreign ' => 'countries.code ' ]], $ columns ['ccid ' ]->modifiers ());
479
+
480
+ $ relationships = $ model ->relationships ();
481
+ $ this ->assertCount (1 , $ relationships );
482
+ $ this ->assertEquals ([
483
+ 'post_id ' ,
484
+ 'user:author_id ' ,
485
+ 'user:uid ' ,
486
+ 'country:cntry_id ' ,
487
+ 'country.code:ccid ' ,
488
+ ], $ relationships ['belongsTo ' ]);
489
+ }
490
+
384
491
/**
385
492
* @test
386
493
*/
0 commit comments