@@ -5903,4 +5903,180 @@ public function testCreateUpdateDocumentsMismatch(): void
59035903 }
59045904 $ database ->deleteCollection ($ colName );
59055905 }
5906+
5907+ public function testCreatedByUpdatedBy (): void
5908+ {
5909+ $ collection = 'test_created_updated_by ' ;
5910+ $ database = static ::getDatabase ();
5911+
5912+
5913+ $ database ->createCollection ($ collection );
5914+ $ database ->createAttribute ($ collection , 'string ' , Database::VAR_STRING , 128 , false );
5915+ $ database ->createAttribute ($ collection , 'number ' , Database::VAR_INTEGER , 0 , false );
5916+
5917+
5918+ Authorization::setRole ('user:test_user_1 ' );
5919+ $ doc1 = $ database ->createDocument ($ collection , new Document ([
5920+ '$id ' => 'test1 ' ,
5921+ 'string ' => 'test1 ' ,
5922+ 'number ' => 100 ,
5923+ '$permissions ' => [Permission::read (Role::any ()), Permission::write (Role::any ()), Permission::update (Role::any ())]
5924+ ]));
5925+
5926+
5927+ $ this ->assertEquals ('test_user_1 ' , $ doc1 ->getCreatedBy ());
5928+ $ this ->assertEquals ('test_user_1 ' , $ doc1 ->getUpdatedBy ());
5929+
5930+
5931+ $ retrievedDoc1 = $ database ->getDocument ($ collection , 'test1 ' );
5932+ $ this ->assertEquals ('test_user_1 ' , $ retrievedDoc1 ->getCreatedBy ());
5933+ $ this ->assertEquals ('test_user_1 ' , $ retrievedDoc1 ->getUpdatedBy ());
5934+
5935+
5936+ $ doc2 = $ database ->createDocument ($ collection , new Document ([
5937+ '$id ' => 'test2 ' ,
5938+ 'string ' => 'test2 ' ,
5939+ 'number ' => 200 ,
5940+ '$createdBy ' => 'explicit_creator ' ,
5941+ '$permissions ' => [Permission::read (Role::any ()), Permission::write (Role::any ()), Permission::update (Role::any ())]
5942+ ]));
5943+
5944+
5945+ $ this ->assertEquals ('explicit_creator ' , $ doc2 ->getCreatedBy ());
5946+ $ this ->assertEquals ('test_user_1 ' , $ doc2 ->getUpdatedBy ());
5947+
5948+
5949+ $ retrievedDoc2 = $ database ->getDocument ($ collection , 'test2 ' );
5950+ $ this ->assertEquals ('explicit_creator ' , $ retrievedDoc2 ->getCreatedBy ());
5951+ $ this ->assertEquals ('test_user_1 ' , $ retrievedDoc2 ->getUpdatedBy ());
5952+
5953+
5954+ $ doc3 = $ database ->createDocument ($ collection , new Document ([
5955+ '$id ' => 'test3 ' ,
5956+ 'string ' => 'test3 ' ,
5957+ 'number ' => 300 ,
5958+ '$updatedBy ' => 'explicit_updater ' ,
5959+ '$permissions ' => [Permission::read (Role::any ()), Permission::write (Role::any ()), Permission::update (Role::any ())]
5960+ ]));
5961+
5962+
5963+ $ this ->assertEquals ('test_user_1 ' , $ doc3 ->getCreatedBy ());
5964+ $ this ->assertEquals ('explicit_updater ' , $ doc3 ->getUpdatedBy ());
5965+
5966+
5967+ $ retrievedDoc3 = $ database ->getDocument ($ collection , 'test3 ' );
5968+ $ this ->assertEquals ('test_user_1 ' , $ retrievedDoc3 ->getCreatedBy ());
5969+ $ this ->assertEquals ('explicit_updater ' , $ retrievedDoc3 ->getUpdatedBy ());
5970+
5971+
5972+ $ doc4 = $ database ->createDocument ($ collection , new Document ([
5973+ '$id ' => 'test4 ' ,
5974+ 'string ' => 'test4 ' ,
5975+ 'number ' => 400 ,
5976+ '$createdBy ' => 'explicit_creator_2 ' ,
5977+ '$updatedBy ' => 'explicit_updater_2 ' ,
5978+ '$permissions ' => [Permission::read (Role::any ()), Permission::write (Role::any ()), Permission::update (Role::any ())]
5979+ ]));
5980+
5981+
5982+ $ this ->assertEquals ('explicit_creator_2 ' , $ doc4 ->getCreatedBy ());
5983+ $ this ->assertEquals ('explicit_updater_2 ' , $ doc4 ->getUpdatedBy ());
5984+
5985+
5986+ $ retrievedDoc4 = $ database ->getDocument ($ collection , 'test4 ' );
5987+ $ this ->assertEquals ('explicit_creator_2 ' , $ retrievedDoc4 ->getCreatedBy ());
5988+ $ this ->assertEquals ('explicit_updater_2 ' , $ retrievedDoc4 ->getUpdatedBy ());
5989+
5990+
5991+ $ allDocs = $ database ->find ($ collection );
5992+ $ this ->assertCount (4 , $ allDocs );
5993+
5994+
5995+ Authorization::setRole ('user:test_user_2 ' );
5996+ $ updateDoc = new Document ([
5997+ 'string ' => 'updated_test1 ' ,
5998+ 'number ' => 150
5999+ ]);
6000+ $ updatedDoc = $ database ->updateDocument ($ collection , 'test1 ' , $ updateDoc );
6001+
6002+ // Verify createdBy is preserved, updatedBy changes to current user
6003+ $ this ->assertEquals ('test_user_1 ' , $ updatedDoc ->getCreatedBy ()); // Should preserve original creator
6004+ $ this ->assertEquals ('test_user_2 ' , $ updatedDoc ->getUpdatedBy ()); // Should update to current user
6005+
6006+ $ retrievedUpdatedDoc = $ database ->getDocument ($ collection , 'test1 ' );
6007+ $ this ->assertEquals ('test_user_1 ' , $ retrievedUpdatedDoc ->getCreatedBy ());
6008+ $ this ->assertEquals ('test_user_2 ' , $ retrievedUpdatedDoc ->getUpdatedBy ());
6009+
6010+ $ upsertDoc = new Document ([
6011+ '$id ' => 'test2 ' ,
6012+ 'string ' => 'upserted_test2 ' ,
6013+ 'number ' => 250
6014+ ]);
6015+ $ upsertCount = $ database ->createOrUpdateDocuments ($ collection , [$ upsertDoc ]);
6016+ $ this ->assertEquals (1 , $ upsertCount );
6017+
6018+ $ upsertedDoc = $ database ->getDocument ($ collection , 'test2 ' );
6019+ $ this ->assertEquals ('explicit_creator ' , $ upsertedDoc ->getCreatedBy ()); // Should preserve original creator
6020+ $ this ->assertEquals ('test_user_2 ' , $ upsertedDoc ->getUpdatedBy ()); // Should update to current user
6021+
6022+ $ upsertNewDoc = new Document ([
6023+ '$id ' => 'test5 ' ,
6024+ 'string ' => 'new_test5 ' ,
6025+ 'number ' => 500 ,
6026+ '$createdBy ' => 'new_creator ' ,
6027+ '$permissions ' => [Permission::read (Role::any ()), Permission::write (Role::any ()), Permission::update (Role::any ())]
6028+ ]);
6029+ $ upsertNewCount = $ database ->createOrUpdateDocuments ($ collection , [$ upsertNewDoc ]);
6030+ $ this ->assertEquals (1 , $ upsertNewCount );
6031+
6032+ $ newUpsertedDoc = $ database ->getDocument ($ collection , 'test5 ' );
6033+ $ this ->assertEquals ('new_creator ' , $ newUpsertedDoc ->getCreatedBy ()); // Should use explicit creator
6034+ $ this ->assertEquals ('test_user_2 ' , $ newUpsertedDoc ->getUpdatedBy ()); // Should use current user
6035+
6036+
6037+ $ bulkDocs = [
6038+ new Document ([
6039+ '$id ' => 'bulk1 ' ,
6040+ 'string ' => 'bulk1 ' ,
6041+ 'number ' => 600 ,
6042+ '$permissions ' => [Permission::read (Role::any ()), Permission::write (Role::any ()), Permission::update (Role::any ())]
6043+ ]),
6044+ new Document ([
6045+ '$id ' => 'bulk2 ' ,
6046+ 'string ' => 'bulk2 ' ,
6047+ 'number ' => 700 ,
6048+ '$createdBy ' => 'bulk_creator ' ,
6049+ '$permissions ' => [Permission::read (Role::any ()), Permission::write (Role::any ()), Permission::update (Role::any ())]
6050+ ]),
6051+ new Document ([
6052+ '$id ' => 'bulk3 ' ,
6053+ 'string ' => 'bulk3 ' ,
6054+ 'number ' => 800 ,
6055+ '$updatedBy ' => 'bulk_updater ' ,
6056+ '$permissions ' => [Permission::read (Role::any ()), Permission::write (Role::any ()), Permission::update (Role::any ())]
6057+ ])
6058+ ];
6059+ $ bulkCount = $ database ->createDocuments ($ collection , $ bulkDocs );
6060+ $ this ->assertEquals (3 , $ bulkCount );
6061+
6062+ $ bulkDoc1 = $ database ->getDocument ($ collection , 'bulk1 ' );
6063+ $ bulkDoc2 = $ database ->getDocument ($ collection , 'bulk2 ' );
6064+ $ bulkDoc3 = $ database ->getDocument ($ collection , 'bulk3 ' );
6065+
6066+ $ this ->assertEquals ('test_user_2 ' , $ bulkDoc1 ->getCreatedBy ());
6067+ $ this ->assertEquals ('test_user_2 ' , $ bulkDoc1 ->getUpdatedBy ());
6068+
6069+ $ this ->assertEquals ('bulk_creator ' , $ bulkDoc2 ->getCreatedBy ());
6070+ $ this ->assertEquals ('test_user_2 ' , $ bulkDoc2 ->getUpdatedBy ());
6071+
6072+ $ this ->assertEquals ('test_user_2 ' , $ bulkDoc3 ->getCreatedBy ());
6073+ $ this ->assertEquals ('bulk_updater ' , $ bulkDoc3 ->getUpdatedBy ());
6074+
6075+ $ finalAllDocs = $ database ->find ($ collection );
6076+ $ this ->assertCount (8 , $ finalAllDocs );
6077+
6078+ $ database ->deleteCollection ($ collection );
6079+ }
6080+
6081+
59066082}
0 commit comments