*/ abstract class ORMRowTest extends \MediaWikiTestCase { /** * @since 1.20 * @return string */ protected abstract function getRowClass(); /** * @since 1.20 * @return IORMTable */ protected abstract function getTableInstance(); /** * @since 1.20 * @return array */ public abstract function constructorTestProvider(); /** * @since 1.20 * @param IORMRow $row * @param array $data */ protected function verifyFields( IORMRow $row, array $data ) { foreach ( array_keys( $data ) as $fieldName ) { $this->assertEquals( $data[$fieldName], $row->getField( $fieldName ) ); } } /** * @since 1.20 * @param array $data * @param boolean $loadDefaults * @return IORMRow */ protected function getRowInstance( array $data, $loadDefaults ) { $class = $this->getRowClass(); return new $class( $this->getTableInstance(), $data, $loadDefaults ); } /** * @dataProvider constructorTestProvider */ public function testConstructor( array $data, $loadDefaults ) { $this->verifyFields( $this->getRowInstance( $data, $loadDefaults ), $data ); } /** * @dataProvider constructorTestProvider */ public function testSave( array $data, $loadDefaults ) { $item = $this->getRowInstance( $data, $loadDefaults ); $this->assertTrue( $item->save() ); $this->assertTrue( $item->hasIdField() ); $this->assertTrue( is_integer( $item->getId() ) ); $id = $item->getId(); $this->assertTrue( $item->save() ); $this->assertEquals( $id, $item->getId() ); $this->verifyFields( $item, $data ); } /** * @dataProvider constructorTestProvider */ public function testRemove( array $data, $loadDefaults ) { $item = $this->getRowInstance( $data, $loadDefaults ); $this->assertTrue( $item->save() ); $this->assertTrue( $item->remove() ); $this->assertFalse( $item->hasIdField() ); $this->assertTrue( $item->save() ); $this->verifyFields( $item, $data ); $this->assertTrue( $item->remove() ); $this->assertFalse( $item->hasIdField() ); $this->verifyFields( $item, $data ); } // TODO: test all of the methods! }