@@ -5846,4 +5846,61 @@ public function testUpdateDocumentsCount(): void
58465846
58475847 $ database ->deleteCollection ($ collectionName );
58485848 }
5849+
5850+ public function testCreateUpdateDocumentsMismatch (): void
5851+ {
5852+ /** @var Database $database */
5853+ $ database = static ::getDatabase ();
5854+
5855+ // with different set of attributes
5856+ $ colName = "docs_with_diff " ;
5857+ $ database ->createCollection ($ colName );
5858+ $ database ->createAttribute ($ colName , 'key ' , Database::VAR_STRING , 50 , true );
5859+ $ database ->createAttribute ($ colName , 'value ' , Database::VAR_STRING , 50 , false , 'value ' );
5860+ $ permissions = [Permission::read (Role::any ()), Permission::write (Role::any ()),Permission::update (Role::any ())];
5861+ $ docs = [
5862+ new Document ([
5863+ '$id ' => 'doc1 ' ,
5864+ 'key ' => 'doc1 ' ,
5865+ ]),
5866+ new Document ([
5867+ '$id ' => 'doc2 ' ,
5868+ 'key ' => 'doc2 ' ,
5869+ 'value ' => 'test ' ,
5870+ ]),
5871+ new Document ([
5872+ '$id ' => 'doc3 ' ,
5873+ '$permissions ' => $ permissions ,
5874+ 'key ' => 'doc3 '
5875+ ]),
5876+ ];
5877+ $ this ->assertEquals (3 , $ database ->createDocuments ($ colName , $ docs ));
5878+ // we should get only one document as read permission provided to the last document only
5879+ $ addedDocs = $ database ->find ($ colName );
5880+ $ this ->assertCount (1 , $ addedDocs );
5881+ $ doc = $ addedDocs [0 ];
5882+ $ this ->assertEquals ('doc3 ' , $ doc ->getId ());
5883+ $ this ->assertNotEmpty ($ doc ->getPermissions ());
5884+ $ this ->assertCount (3 , $ doc ->getPermissions ());
5885+
5886+ $ database ->createDocument ($ colName , new Document ([
5887+ '$id ' => 'doc4 ' ,
5888+ '$permissions ' => $ permissions ,
5889+ 'key ' => 'doc4 '
5890+ ]));
5891+
5892+ $ this ->assertEquals (2 , $ database ->updateDocuments ($ colName , new Document (['key ' => 'new doc ' ])));
5893+ $ doc = $ database ->getDocument ($ colName , 'doc4 ' );
5894+ $ this ->assertEquals ('doc4 ' , $ doc ->getId ());
5895+ $ this ->assertEquals ('value ' , $ doc ->getAttribute ('value ' ));
5896+
5897+ $ addedDocs = $ database ->find ($ colName );
5898+ $ this ->assertCount (2 , $ addedDocs );
5899+ foreach ($ addedDocs as $ doc ) {
5900+ $ this ->assertNotEmpty ($ doc ->getPermissions ());
5901+ $ this ->assertCount (3 , $ doc ->getPermissions ());
5902+ $ this ->assertEquals ('value ' , $ doc ->getAttribute ('value ' ));
5903+ }
5904+ $ database ->deleteCollection ($ colName );
5905+ }
58495906}
0 commit comments