@@ -26,52 +26,96 @@ public function setUp(): void
2626
2727 public function testPersistNew (): void
2828 {
29- $ doc = new TypedDocument ();
30- $ doc ->setName ('Maciej ' );
31- $ doc ->setEmbedOne (new TypedEmbeddedDocument ('The answer ' , 42 ));
29+ $ ref = new TypedDocument ();
30+ $ ref ->name = 'alcaeus ' ;
31+ $ this ->dm ->persist ($ ref );
32+
33+ $ doc = new TypedDocument ();
34+ $ doc ->name = 'Maciej ' ;
35+ $ doc ->embedOne = new TypedEmbeddedDocument ('The answer ' , 42 );
36+ $ doc ->referenceOne = $ ref ;
3237 $ doc ->getEmbedMany ()->add (new TypedEmbeddedDocument ('Lucky number ' , 7 ));
3338 $ this ->dm ->persist ($ doc );
3439 $ this ->dm ->flush ();
3540 $ this ->dm ->clear ();
3641
37- $ saved = $ this ->dm ->find (TypedDocument::class, $ doc ->getId ());
42+ $ ref = $ this ->dm ->find (TypedDocument::class, $ ref ->id );
43+ $ saved = $ this ->dm ->find (TypedDocument::class, $ doc ->id );
3844 assert ($ saved instanceof TypedDocument);
39- $ this ->assertEquals ($ doc ->getId (), $ saved ->getId ());
40- $ this ->assertSame ($ doc ->getName (), $ saved ->getName ());
41- $ this ->assertEquals ($ doc ->getEmbedOne (), $ saved ->getEmbedOne ());
45+ $ this ->assertEquals ($ doc ->id , $ saved ->id );
46+ $ this ->assertSame ($ doc ->name , $ saved ->name );
47+ $ this ->assertEquals ($ doc ->embedOne , $ saved ->embedOne );
48+ $ this ->assertSame ($ ref , $ saved ->referenceOne );
4249 $ this ->assertEquals ($ doc ->getEmbedMany ()->getValues (), $ saved ->getEmbedMany ()->getValues ());
4350 }
4451
4552 public function testMerge (): void
4653 {
47- $ doc = new TypedDocument ();
48- $ doc ->setId ((string ) new ObjectId ());
49- $ doc ->setName ('Maciej ' );
50- $ doc ->setEmbedOne (new TypedEmbeddedDocument ('The answer ' , 42 ));
54+ $ ref = new TypedDocument ();
55+ $ ref ->name = 'alcaeus ' ;
56+ $ this ->dm ->persist ($ ref );
57+
58+ $ doc = new TypedDocument ();
59+ $ doc ->id = (string ) new ObjectId ();
60+ $ doc ->name = 'Maciej ' ;
61+ $ doc ->embedOne = new TypedEmbeddedDocument ('The answer ' , 42 );
62+ $ doc ->referenceOne = $ ref ;
63+ $ doc ->getEmbedMany ()->add (new TypedEmbeddedDocument ('Lucky number ' , 7 ));
64+
65+ $ merged = $ this ->dm ->merge ($ doc );
66+ assert ($ merged instanceof TypedDocument);
67+ $ this ->assertEquals ($ doc ->id , $ merged ->id );
68+ $ this ->assertSame ($ doc ->name , $ merged ->name );
69+ $ this ->assertEquals ($ doc ->embedOne , $ merged ->embedOne );
70+ $ this ->assertEquals ($ doc ->referenceOne , $ merged ->referenceOne );
71+ $ this ->assertEquals ($ doc ->getEmbedMany ()->getValues (), $ merged ->getEmbedMany ()->getValues ());
72+ }
73+
74+ public function testMergeWithUninitializedAssociations (): void
75+ {
76+ $ doc = new TypedDocument ();
77+ $ doc ->id = (string ) new ObjectId ();
78+ $ doc ->name = 'Maciej ' ;
5179 $ doc ->getEmbedMany ()->add (new TypedEmbeddedDocument ('Lucky number ' , 7 ));
5280
5381 $ merged = $ this ->dm ->merge ($ doc );
54- $ this -> assertEquals ( $ doc -> getId (), $ merged-> getId () );
55- $ this ->assertSame ($ doc ->getName () , $ merged ->getName () );
56- $ this ->assertEquals ($ doc ->getEmbedOne () , $ merged ->getEmbedOne () );
82+ assert ( $ merged instanceof TypedDocument );
83+ $ this ->assertEquals ($ doc ->id , $ merged ->id );
84+ $ this ->assertSame ($ doc ->name , $ merged ->name );
5785 $ this ->assertEquals ($ doc ->getEmbedMany ()->getValues (), $ merged ->getEmbedMany ()->getValues ());
5886 }
5987
6088 public function testProxying (): void
6189 {
62- $ doc = new TypedDocument ();
63- $ doc ->setName ( 'Maciej ' ) ;
64- $ doc ->setEmbedOne ( new TypedEmbeddedDocument ('The answer ' , 42 ) );
90+ $ doc = new TypedDocument ();
91+ $ doc ->name = 'Maciej ' ;
92+ $ doc ->embedOne = new TypedEmbeddedDocument ('The answer ' , 42 );
6593 $ doc ->getEmbedMany ()->add (new TypedEmbeddedDocument ('Lucky number ' , 7 ));
6694 $ this ->dm ->persist ($ doc );
6795 $ this ->dm ->flush ();
6896 $ this ->dm ->clear ();
6997
70- $ proxy = $ this ->dm ->getReference (TypedDocument::class, $ doc ->getId () );
98+ $ proxy = $ this ->dm ->getReference (TypedDocument::class, $ doc ->id );
7199 assert ($ proxy instanceof TypedDocument);
72- $ this ->assertEquals ($ doc ->getId () , $ proxy ->getId () );
73- $ this ->assertSame ($ doc ->getName () , $ proxy ->getName () );
74- $ this ->assertEquals ($ doc ->getEmbedOne () , $ proxy ->getEmbedOne () );
100+ $ this ->assertEquals ($ doc ->id , $ proxy ->id );
101+ $ this ->assertSame ($ doc ->name , $ proxy ->name );
102+ $ this ->assertEquals ($ doc ->embedOne , $ proxy ->embedOne );
75103 $ this ->assertEquals ($ doc ->getEmbedMany ()->getValues (), $ proxy ->getEmbedMany ()->getValues ());
76104 }
105+
106+ public function testNullableProperties (): void
107+ {
108+ $ doc = new TypedDocument ();
109+ $ doc ->name = 'webmozart ' ;
110+ $ this ->dm ->persist ($ doc );
111+ $ this ->dm ->flush ();
112+ $ this ->dm ->clear ();
113+
114+ $ saved = $ this ->dm ->find (TypedDocument::class, $ doc ->id );
115+ assert ($ saved instanceof TypedDocument);
116+ $ this ->assertNull ($ saved ->nullableEmbedOne );
117+ $ this ->assertNull ($ saved ->initializedNullableEmbedOne );
118+ $ this ->assertNull ($ saved ->nullableReferenceOne );
119+ $ this ->assertNull ($ saved ->initializedNullableReferenceOne );
120+ }
77121}
0 commit comments