@@ -6185,4 +6185,45 @@ public function testCreateUpdateDocumentsMismatch(): void
61856185 $ database ->deleteCollection ($ colName );
61866186 }
61876187
6188+ public function testBypassStructureWithSupportForAttributes (): void
6189+ {
6190+ /** @var Database $database */
6191+ $ database = static ::getDatabase ();
6192+
6193+ $ collectionId = 'successive_update_single ' ;
6194+ Authorization::cleanRoles ();
6195+ Authorization::setRole (Role::any ()->toString ());
6196+
6197+ $ database ->createCollection ($ collectionId );
6198+ $ database ->createAttribute ($ collectionId , 'attrA ' , Database::VAR_STRING , 50 , true );
6199+ $ database ->createAttribute ($ collectionId , 'attrB ' , Database::VAR_STRING , 50 , true );
6200+
6201+ // bypass required
6202+ $ database ->disableValidation ();
6203+
6204+ $ permissions = [Permission::read (Role::any ()), Permission::write (Role::any ()), Permission::update (Role::any ()), Permission::delete (Role::any ())];
6205+ $ docs = $ database ->createDocuments ($ collectionId , [
6206+ new Document (['attrA ' => null ,'attrB ' => 'B ' ,'$permissions ' => $ permissions ])
6207+ ]);
6208+
6209+ $ docs = $ database ->find ($ collectionId );
6210+ foreach ($ docs as $ doc ) {
6211+ $ this ->assertArrayHasKey ('attrA ' , $ doc ->getAttributes ());
6212+ $ this ->assertNull ($ doc ->getAttribute ('attrA ' ));
6213+ $ this ->assertEquals ('B ' , $ doc ->getAttribute ('attrB ' ));
6214+ }
6215+ // reset
6216+ $ database ->enableValidation ();
6217+
6218+ try {
6219+ $ database ->createDocuments ($ collectionId , [
6220+ new Document (['attrA ' => null ,'attrB ' => 'B ' ,'$permissions ' => $ permissions ])
6221+ ]);
6222+ $ this ->fail ('Failed to throw exception ' );
6223+ } catch (Exception $ e ) {
6224+ $ this ->assertInstanceOf (StructureException::class, $ e );
6225+ }
6226+
6227+ $ database ->deleteCollection ($ collectionId );
6228+ }
61886229}
0 commit comments