@@ -621,13 +621,15 @@ public function testUpsertDocumentsAttributeMismatch(): void
621621 'first ' => 'second ' ,
622622 ]);
623623
624+ // Ensure missing optionals on new document is allowed
624625 $ docs = $ database ->createOrUpdateDocuments (__FUNCTION__ , [
625626 $ existingDocument ->setAttribute ('first ' , 'updated ' ),
626627 $ newDocument ,
627628 ]);
628629
629630 $ this ->assertEquals (2 , $ docs );
630631 $ this ->assertEquals ('updated ' , $ existingDocument ->getAttribute ('first ' ));
632+ $ this ->assertEquals ('last ' , $ existingDocument ->getAttribute ('last ' ));
631633 $ this ->assertEquals ('second ' , $ newDocument ->getAttribute ('first ' ));
632634 $ this ->assertEquals ('' , $ newDocument ->getAttribute ('last ' ));
633635
@@ -640,6 +642,36 @@ public function testUpsertDocumentsAttributeMismatch(): void
640642 } catch (Throwable $ e ) {
641643 $ this ->assertTrue ($ e instanceof StructureException, $ e ->getMessage ());
642644 }
645+
646+ // Ensure missing optionals on existing document is allowed
647+ $ docs = $ database ->createOrUpdateDocuments (__FUNCTION__ , [
648+ $ existingDocument
649+ ->setAttribute ('first ' , 'first ' )
650+ ->removeAttribute ('last ' ),
651+ $ newDocument
652+ ->setAttribute ('last ' , 'last ' )
653+ ]);
654+
655+ $ this ->assertEquals (2 , $ docs );
656+ $ this ->assertEquals ('first ' , $ existingDocument ->getAttribute ('first ' ));
657+ $ this ->assertEquals ('last ' , $ existingDocument ->getAttribute ('last ' ));
658+ $ this ->assertEquals ('second ' , $ newDocument ->getAttribute ('first ' ));
659+ $ this ->assertEquals ('last ' , $ newDocument ->getAttribute ('last ' ));
660+
661+ // Ensure set null on existing document is allowed
662+ $ docs = $ database ->createOrUpdateDocuments (__FUNCTION__ , [
663+ $ existingDocument
664+ ->setAttribute ('first ' , 'first ' )
665+ ->setAttribute ('last ' , null ),
666+ $ newDocument
667+ ->setAttribute ('last ' , 'last ' )
668+ ]);
669+
670+ $ this ->assertEquals (1 , $ docs );
671+ $ this ->assertEquals ('first ' , $ existingDocument ->getAttribute ('first ' ));
672+ $ this ->assertEquals (null , $ existingDocument ->getAttribute ('last ' ));
673+ $ this ->assertEquals ('second ' , $ newDocument ->getAttribute ('first ' ));
674+ $ this ->assertEquals ('last ' , $ newDocument ->getAttribute ('last ' ));
643675 }
644676
645677 public function testUpsertDocumentsNoop (): void
0 commit comments