@@ -74,6 +74,7 @@ public function testEmbedsManySave()
7474 $ user = User::find ($ user ->_id );
7575 $ user ->addresses ()->save (new Address (array ('city ' => 'Bruxelles ' )));
7676 $ this ->assertEquals (array ('London ' , 'New York ' , 'Bruxelles ' ), $ user ->addresses ->lists ('city ' ));
77+
7778 $ address = $ user ->addresses [1 ];
7879 $ address ->city = "Manhattan " ;
7980 $ user ->addresses ()->save ($ address );
@@ -83,6 +84,29 @@ public function testEmbedsManySave()
8384 $ this ->assertEquals (array ('London ' , 'Manhattan ' , 'Bruxelles ' ), $ freshUser ->addresses ->lists ('city ' ));
8485 }
8586
87+ public function testEmbedsManySaveModel ()
88+ {
89+ $ user = User::create (array ('name ' => 'John Doe ' ));
90+ $ address = new Address (array ('city ' => 'London ' ));
91+
92+ $ address ->setEventDispatcher ($ events = Mockery::mock ('Illuminate\Events\Dispatcher ' ));
93+ $ events ->shouldReceive ('until ' )->once ()->with ('eloquent.saving: ' .get_class ($ address ), $ address )->andReturn (true );
94+ $ events ->shouldReceive ('until ' )->once ()->with ('eloquent.creating: ' .get_class ($ address ), $ address )->andReturn (true );
95+ $ events ->shouldReceive ('fire ' )->once ()->with ('eloquent.created: ' .get_class ($ address ), $ address );
96+ $ events ->shouldReceive ('fire ' )->once ()->with ('eloquent.saved: ' .get_class ($ address ), $ address );
97+
98+ $ address ->save ();
99+
100+ $ address ->setEventDispatcher ($ events = Mockery::mock ('Illuminate\Events\Dispatcher ' ));
101+ $ events ->shouldReceive ('until ' )->once ()->with ('eloquent.saving: ' .get_class ($ address ), $ address )->andReturn (true );
102+ $ events ->shouldReceive ('until ' )->once ()->with ('eloquent.updating: ' .get_class ($ address ), $ address )->andReturn (true );
103+ $ events ->shouldReceive ('fire ' )->once ()->with ('eloquent.updated: ' .get_class ($ address ), $ address );
104+ $ events ->shouldReceive ('fire ' )->once ()->with ('eloquent.saved: ' .get_class ($ address ), $ address );
105+
106+ $ address ->city = 'Paris ' ;
107+ $ address ->save ();
108+ }
109+
86110 public function testEmbedsToArray ()
87111 {
88112 $ user = User::create (array ('name ' => 'John Doe ' ));
@@ -217,6 +241,32 @@ public function testEmbedsManyDestroy()
217241 $ this ->assertEquals (array ('Bristol ' ), $ user ->addresses ->lists ('city ' ));
218242 }
219243
244+ public function testEmbedsManyDelete ()
245+ {
246+ $ user = User::create (array ('name ' => 'John Doe ' ));
247+ $ user ->addresses ()->saveMany (array (new Address (array ('city ' => 'London ' )), new Address (array ('city ' => 'Bristol ' )), new Address (array ('city ' => 'Bruxelles ' ))));
248+
249+ $ address = $ user ->addresses ->first ();
250+
251+ $ address ->setEventDispatcher ($ events = Mockery::mock ('Illuminate\Events\Dispatcher ' ));
252+ $ events ->shouldReceive ('until ' )->once ()->with ('eloquent.deleting: ' .get_class ($ address ), Mockery::type ('Address ' ))->andReturn (true );
253+ $ events ->shouldReceive ('fire ' )->once ()->with ('eloquent.deleted: ' .get_class ($ address ), Mockery::type ('Address ' ));
254+
255+ $ address ->delete ();
256+
257+ $ this ->assertEquals (2 , $ user ->addresses ()->count ());
258+ $ this ->assertEquals (2 , $ user ->addresses ->count ());
259+
260+ $ address ->unsetEventDispatcher ();
261+
262+ $ address = $ user ->addresses ->first ();
263+ $ address ->delete ();
264+
265+ $ user = User::where ('name ' , 'John Doe ' )->first ();
266+ $ this ->assertEquals (1 , $ user ->addresses ()->count ());
267+ $ this ->assertEquals (1 , $ user ->addresses ->count ());
268+ }
269+
220270 public function testEmbedsManyDissociate ()
221271 {
222272 $ user = User::create (array ());
@@ -339,7 +389,7 @@ public function testEmbedsManyEagerLoading()
339389 $ this ->assertTrue (is_array ($ user ->toArray ()['addresses ' ]));
340390 }
341391
342- public function testEmbedsManyDelete ()
392+ public function testEmbedsManyDeleteAll ()
343393 {
344394 $ user1 = User::create (array ('name ' => 'John Doe ' ));
345395 $ user1 ->addresses ()->save (new Address (array ('city ' => 'New York ' )));
@@ -500,4 +550,77 @@ public function testEmbeddedSave()
500550 $ this ->assertEquals ('Mark Doe ' , $ user ->father ->name );
501551 }
502552
553+ public function testNestedEmbedsOne ()
554+ {
555+ $ user = User::create (array ('name ' => 'John Doe ' ));
556+ $ father = $ user ->father ()->create (array ('name ' => 'Mark Doe ' ));
557+ $ grandfather = $ father ->father ()->create (array ('name ' => 'Steve Doe ' ));
558+ $ greatgrandfather = $ grandfather ->father ()->create (array ('name ' => 'Tom Doe ' ));
559+
560+ $ user ->name = 'Tim Doe ' ;
561+ $ user ->save ();
562+
563+ $ father ->name = 'Sven Doe ' ;
564+ $ father ->save ();
565+
566+ $ greatgrandfather ->name = 'Ron Doe ' ;
567+ $ greatgrandfather ->save ();
568+
569+ $ this ->assertEquals ('Tim Doe ' , $ user ->name );
570+ $ this ->assertEquals ('Sven Doe ' , $ user ->father ->name );
571+ $ this ->assertEquals ('Steve Doe ' , $ user ->father ->father ->name );
572+ $ this ->assertEquals ('Ron Doe ' , $ user ->father ->father ->father ->name );
573+
574+ $ user = User::where ('name ' , 'Tim Doe ' )->first ();
575+ $ this ->assertEquals ('Tim Doe ' , $ user ->name );
576+ $ this ->assertEquals ('Sven Doe ' , $ user ->father ->name );
577+ $ this ->assertEquals ('Steve Doe ' , $ user ->father ->father ->name );
578+ $ this ->assertEquals ('Ron Doe ' , $ user ->father ->father ->father ->name );
579+ }
580+
581+ public function testNestedEmbedsMany ()
582+ {
583+ $ user = User::create (array ('name ' => 'John Doe ' ));
584+ $ country1 = $ user ->addresses ()->create (array ('country ' => 'France ' ));
585+ $ country2 = $ user ->addresses ()->create (array ('country ' => 'Belgium ' ));
586+ $ city1 = $ country1 ->addresses ()->create (array ('city ' => 'Paris ' ));
587+ $ city2 = $ country2 ->addresses ()->create (array ('city ' => 'Ghent ' ));
588+ $ city3 = $ country2 ->addresses ()->create (array ('city ' => 'Brussels ' ));
589+
590+ $ city3 ->city = 'Bruges ' ;
591+ $ city3 ->save ();
592+
593+ $ this ->assertEquals (2 , $ user ->addresses ()->count ());
594+ $ this ->assertEquals (1 , $ user ->addresses ()->first ()->addresses ()->count ());
595+ $ this ->assertEquals (2 , $ user ->addresses ()->last ()->addresses ()->count ());
596+
597+ $ user = User::where ('name ' , 'John Doe ' )->first ();
598+ $ this ->assertEquals (2 , $ user ->addresses ()->count ());
599+ $ this ->assertEquals (1 , $ user ->addresses ()->first ()->addresses ()->count ());
600+ $ this ->assertEquals (2 , $ user ->addresses ()->last ()->addresses ()->count ());
601+ }
602+
603+ public function testNestedMixedEmbeds ()
604+ {
605+ $ user = User::create (array ('name ' => 'John Doe ' ));
606+ $ father = $ user ->father ()->create (array ('name ' => 'Mark Doe ' ));
607+ $ country1 = $ father ->addresses ()->create (array ('country ' => 'France ' ));
608+ $ country2 = $ father ->addresses ()->create (array ('country ' => 'Belgium ' ));
609+
610+ $ country2 ->country = 'England ' ;
611+ $ country2 ->save ();
612+
613+ $ father ->name = 'Steve Doe ' ;
614+ $ father ->save ();
615+
616+ $ this ->assertEquals ('France ' , $ user ->father ->addresses ()->first ()->country );
617+ $ this ->assertEquals ('England ' , $ user ->father ->addresses ()->last ()->country );
618+ $ this ->assertEquals ('Steve Doe ' , $ user ->father ->name );
619+
620+ $ user = User::where ('name ' , 'John Doe ' )->first ();
621+ $ this ->assertEquals ('France ' , $ user ->father ->addresses ()->first ()->country );
622+ $ this ->assertEquals ('England ' , $ user ->father ->addresses ()->last ()->country );
623+ $ this ->assertEquals ('Steve Doe ' , $ user ->father ->name );
624+ }
625+
503626}
0 commit comments