@@ -5995,4 +5995,180 @@ public function testCreateUpdateDocumentsMismatch(): void
59955995 }
59965996 $ database ->deleteCollection ($ colName );
59975997 }
5998+
5999+ public function testCreatedByUpdatedBy (): void
6000+ {
6001+ $ collection = 'test_created_updated_by ' ;
6002+ $ database = static ::getDatabase ();
6003+
6004+
6005+ $ database ->createCollection ($ collection );
6006+ $ database ->createAttribute ($ collection , 'string ' , Database::VAR_STRING , 128 , false );
6007+ $ database ->createAttribute ($ collection , 'number ' , Database::VAR_INTEGER , 0 , false );
6008+
6009+
6010+ Authorization::setRole ('user:test_user_1 ' );
6011+ $ doc1 = $ database ->createDocument ($ collection , new Document ([
6012+ '$id ' => 'test1 ' ,
6013+ 'string ' => 'test1 ' ,
6014+ 'number ' => 100 ,
6015+ '$permissions ' => [Permission::read (Role::any ()), Permission::write (Role::any ()), Permission::update (Role::any ())]
6016+ ]));
6017+
6018+
6019+ $ this ->assertEquals ('test_user_1 ' , $ doc1 ->getCreatedBy ());
6020+ $ this ->assertEquals ('test_user_1 ' , $ doc1 ->getUpdatedBy ());
6021+
6022+
6023+ $ retrievedDoc1 = $ database ->getDocument ($ collection , 'test1 ' );
6024+ $ this ->assertEquals ('test_user_1 ' , $ retrievedDoc1 ->getCreatedBy ());
6025+ $ this ->assertEquals ('test_user_1 ' , $ retrievedDoc1 ->getUpdatedBy ());
6026+
6027+
6028+ $ doc2 = $ database ->createDocument ($ collection , new Document ([
6029+ '$id ' => 'test2 ' ,
6030+ 'string ' => 'test2 ' ,
6031+ 'number ' => 200 ,
6032+ '$createdBy ' => 'explicit_creator ' ,
6033+ '$permissions ' => [Permission::read (Role::any ()), Permission::write (Role::any ()), Permission::update (Role::any ())]
6034+ ]));
6035+
6036+
6037+ $ this ->assertEquals ('explicit_creator ' , $ doc2 ->getCreatedBy ());
6038+ $ this ->assertEquals ('test_user_1 ' , $ doc2 ->getUpdatedBy ());
6039+
6040+
6041+ $ retrievedDoc2 = $ database ->getDocument ($ collection , 'test2 ' );
6042+ $ this ->assertEquals ('explicit_creator ' , $ retrievedDoc2 ->getCreatedBy ());
6043+ $ this ->assertEquals ('test_user_1 ' , $ retrievedDoc2 ->getUpdatedBy ());
6044+
6045+
6046+ $ doc3 = $ database ->createDocument ($ collection , new Document ([
6047+ '$id ' => 'test3 ' ,
6048+ 'string ' => 'test3 ' ,
6049+ 'number ' => 300 ,
6050+ '$updatedBy ' => 'explicit_updater ' ,
6051+ '$permissions ' => [Permission::read (Role::any ()), Permission::write (Role::any ()), Permission::update (Role::any ())]
6052+ ]));
6053+
6054+
6055+ $ this ->assertEquals ('test_user_1 ' , $ doc3 ->getCreatedBy ());
6056+ $ this ->assertEquals ('explicit_updater ' , $ doc3 ->getUpdatedBy ());
6057+
6058+
6059+ $ retrievedDoc3 = $ database ->getDocument ($ collection , 'test3 ' );
6060+ $ this ->assertEquals ('test_user_1 ' , $ retrievedDoc3 ->getCreatedBy ());
6061+ $ this ->assertEquals ('explicit_updater ' , $ retrievedDoc3 ->getUpdatedBy ());
6062+
6063+
6064+ $ doc4 = $ database ->createDocument ($ collection , new Document ([
6065+ '$id ' => 'test4 ' ,
6066+ 'string ' => 'test4 ' ,
6067+ 'number ' => 400 ,
6068+ '$createdBy ' => 'explicit_creator_2 ' ,
6069+ '$updatedBy ' => 'explicit_updater_2 ' ,
6070+ '$permissions ' => [Permission::read (Role::any ()), Permission::write (Role::any ()), Permission::update (Role::any ())]
6071+ ]));
6072+
6073+
6074+ $ this ->assertEquals ('explicit_creator_2 ' , $ doc4 ->getCreatedBy ());
6075+ $ this ->assertEquals ('explicit_updater_2 ' , $ doc4 ->getUpdatedBy ());
6076+
6077+
6078+ $ retrievedDoc4 = $ database ->getDocument ($ collection , 'test4 ' );
6079+ $ this ->assertEquals ('explicit_creator_2 ' , $ retrievedDoc4 ->getCreatedBy ());
6080+ $ this ->assertEquals ('explicit_updater_2 ' , $ retrievedDoc4 ->getUpdatedBy ());
6081+
6082+
6083+ $ allDocs = $ database ->find ($ collection );
6084+ $ this ->assertCount (4 , $ allDocs );
6085+
6086+
6087+ Authorization::setRole ('user:test_user_2 ' );
6088+ $ updateDoc = new Document ([
6089+ 'string ' => 'updated_test1 ' ,
6090+ 'number ' => 150
6091+ ]);
6092+ $ updatedDoc = $ database ->updateDocument ($ collection , 'test1 ' , $ updateDoc );
6093+
6094+ // Verify createdBy is preserved, updatedBy changes to current user
6095+ $ this ->assertEquals ('test_user_1 ' , $ updatedDoc ->getCreatedBy ()); // Should preserve original creator
6096+ $ this ->assertEquals ('test_user_2 ' , $ updatedDoc ->getUpdatedBy ()); // Should update to current user
6097+
6098+ $ retrievedUpdatedDoc = $ database ->getDocument ($ collection , 'test1 ' );
6099+ $ this ->assertEquals ('test_user_1 ' , $ retrievedUpdatedDoc ->getCreatedBy ());
6100+ $ this ->assertEquals ('test_user_2 ' , $ retrievedUpdatedDoc ->getUpdatedBy ());
6101+
6102+ $ upsertDoc = new Document ([
6103+ '$id ' => 'test2 ' ,
6104+ 'string ' => 'upserted_test2 ' ,
6105+ 'number ' => 250
6106+ ]);
6107+ $ upsertCount = $ database ->createOrUpdateDocuments ($ collection , [$ upsertDoc ]);
6108+ $ this ->assertEquals (1 , $ upsertCount );
6109+
6110+ $ upsertedDoc = $ database ->getDocument ($ collection , 'test2 ' );
6111+ $ this ->assertEquals ('explicit_creator ' , $ upsertedDoc ->getCreatedBy ()); // Should preserve original creator
6112+ $ this ->assertEquals ('test_user_2 ' , $ upsertedDoc ->getUpdatedBy ()); // Should update to current user
6113+
6114+ $ upsertNewDoc = new Document ([
6115+ '$id ' => 'test5 ' ,
6116+ 'string ' => 'new_test5 ' ,
6117+ 'number ' => 500 ,
6118+ '$createdBy ' => 'new_creator ' ,
6119+ '$permissions ' => [Permission::read (Role::any ()), Permission::write (Role::any ()), Permission::update (Role::any ())]
6120+ ]);
6121+ $ upsertNewCount = $ database ->createOrUpdateDocuments ($ collection , [$ upsertNewDoc ]);
6122+ $ this ->assertEquals (1 , $ upsertNewCount );
6123+
6124+ $ newUpsertedDoc = $ database ->getDocument ($ collection , 'test5 ' );
6125+ $ this ->assertEquals ('new_creator ' , $ newUpsertedDoc ->getCreatedBy ()); // Should use explicit creator
6126+ $ this ->assertEquals ('test_user_2 ' , $ newUpsertedDoc ->getUpdatedBy ()); // Should use current user
6127+
6128+
6129+ $ bulkDocs = [
6130+ new Document ([
6131+ '$id ' => 'bulk1 ' ,
6132+ 'string ' => 'bulk1 ' ,
6133+ 'number ' => 600 ,
6134+ '$permissions ' => [Permission::read (Role::any ()), Permission::write (Role::any ()), Permission::update (Role::any ())]
6135+ ]),
6136+ new Document ([
6137+ '$id ' => 'bulk2 ' ,
6138+ 'string ' => 'bulk2 ' ,
6139+ 'number ' => 700 ,
6140+ '$createdBy ' => 'bulk_creator ' ,
6141+ '$permissions ' => [Permission::read (Role::any ()), Permission::write (Role::any ()), Permission::update (Role::any ())]
6142+ ]),
6143+ new Document ([
6144+ '$id ' => 'bulk3 ' ,
6145+ 'string ' => 'bulk3 ' ,
6146+ 'number ' => 800 ,
6147+ '$updatedBy ' => 'bulk_updater ' ,
6148+ '$permissions ' => [Permission::read (Role::any ()), Permission::write (Role::any ()), Permission::update (Role::any ())]
6149+ ])
6150+ ];
6151+ $ bulkCount = $ database ->createDocuments ($ collection , $ bulkDocs );
6152+ $ this ->assertEquals (3 , $ bulkCount );
6153+
6154+ $ bulkDoc1 = $ database ->getDocument ($ collection , 'bulk1 ' );
6155+ $ bulkDoc2 = $ database ->getDocument ($ collection , 'bulk2 ' );
6156+ $ bulkDoc3 = $ database ->getDocument ($ collection , 'bulk3 ' );
6157+
6158+ $ this ->assertEquals ('test_user_2 ' , $ bulkDoc1 ->getCreatedBy ());
6159+ $ this ->assertEquals ('test_user_2 ' , $ bulkDoc1 ->getUpdatedBy ());
6160+
6161+ $ this ->assertEquals ('bulk_creator ' , $ bulkDoc2 ->getCreatedBy ());
6162+ $ this ->assertEquals ('test_user_2 ' , $ bulkDoc2 ->getUpdatedBy ());
6163+
6164+ $ this ->assertEquals ('test_user_2 ' , $ bulkDoc3 ->getCreatedBy ());
6165+ $ this ->assertEquals ('bulk_updater ' , $ bulkDoc3 ->getUpdatedBy ());
6166+
6167+ $ finalAllDocs = $ database ->find ($ collection );
6168+ $ this ->assertCount (8 , $ finalAllDocs );
6169+
6170+ $ database ->deleteCollection ($ collection );
6171+ }
6172+
6173+
59986174}
0 commit comments