/** * */ public function testWrite_WriteObjects_ObjectsWritten() { $batchSizes = array(10, 30, 100, 300); foreach ($batchSizes as $size) { $owners = array(); $dogs = array(); $cats = array(); $writer = new \BatchedWriter($size); for ($i = 0; $i < 100; $i++) { $owner = new Human(); $owner->Name = 'Human ' . $i; $dog = new Dog(); $dog->Name = 'Dog ' . $i; $cat = new Cat(); $cat->Name = 'Cat ' . $i; $owner->onAfterExistsCallback(function ($owner) use($dog, $writer) { $dog->OwnerID = $owner->ID; $writer->write($dog); }); $dog->onAfterExistsCallback(function ($dog) use($cat, $writer) { $cat->EnemyID = $dog->ID; $writer->write($cat); }); $owners[] = $owner; $dogs[] = $dog; $cats[] = $cat; } // writes dogs first time $writer->write($dogs); // dogs written again from owner callback $writer->write($owners); $writer->finish(); $owners = Human::get(); $dogs = Dog::get(); $cats = Cat::get(); $this->assertEquals(100, $owners->Count()); $this->assertEquals(100, $dogs->Count()); $this->assertEquals(100, $cats->Count()); for ($i = 0; $i < 100; $i++) { $owner = $owners[$i]; $dog = $dogs[$i]; $cat = $cats[$i]; $this->assertEquals($owner->ID, $dog->OwnerID); $this->assertEquals($dog->ID, $cat->EnemyID); } $writer->delete($owners); $writer->delete($dogs); $writer->delete($cats); $writer->finish(); $this->assertEquals(0, Human::get()->Count()); $this->assertEquals(0, Dog::get()->Count()); $this->assertEquals(0, Cat::get()->Count()); } }
/** * @throws \ValidationException * @throws null */ public function testCallback_SetOnAfterExistsCallback_CallbackCalled() { $dog1 = new Dog(); $dog1->Name = 'Jim bob'; $dog2 = new Dog(); $dog2->Name = 'Super Dog'; $owner = new Human(); $owner->Name = 'Hilly Stewart'; $owner->write(); $owner->onAfterExistsCallback(function ($owner) use($dog1) { $dog1->OwnerID = $owner->ID; $dog1->write(); }); $owner->write(); $owner->onAfterExistsCallback(function ($owner) use($dog2) { $dog2->OwnerID = $owner->ID; $dog2->write(); }); $this->assertTrue($owner->exists()); $this->assertTrue($dog1->exists()); $this->assertTrue($dog2->exists()); $this->assertEquals(1, Human::get()->Count()); $this->assertEquals(2, Dog::get()->Count()); $this->assertEquals($owner->ID, $dog1->OwnerID); $this->assertEquals($owner->ID, $dog2->OwnerID); }