/** * */ 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()); } }
/** * */ public function testBatchWrite_DifferentClasses_WritesObjects() { $dog = new Dog(); $dog->Name = 'Snuffins'; $dog->Color = 'Red'; $cat = new Cat(); $cat->Name = 'Puff daddy'; $cat->HasClaws = true; $batch = new \Batch(); $batch->write(array($dog, $cat)); $this->assertTrue($dog->exists()); $this->assertTrue($cat->exists()); $dog = Dog::get()->first(); $this->assertEquals('Snuffins', $dog->Name); $this->assertEquals('Red', $dog->Color); $cat = Cat::get()->first(); $this->assertEquals('Puff daddy', $cat->Name); $this->assertEquals(1, $cat->HasClaws); }