<?php
+use Wikimedia\TestingAccessWrapper;
+
/**
* @group ContentHandler
*/
/**
* @dataProvider provideConstructFromArray
+ * @covers Revision::__construct
+ * @covers Revision::constructFromRowArray
*/
- public function testConstructFromArray( $rowArray ) {
+ public function testConstructFromArray( array $rowArray ) {
$rev = new Revision( $rowArray );
$this->assertNotNull( $rev->getContent(), 'no content object available' );
$this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContent()->getModel() );
/**
* @dataProvider provideConstructFromArrayThrowsExceptions
+ * @covers Revision::__construct
+ * @covers Revision::constructFromRowArray
*/
public function testConstructFromArrayThrowsExceptions( $rowArray, Exception $expectedException ) {
$this->setExpectedException(
new Revision( $rowArray );
}
+ public function provideConstructFromRow() {
+ yield 'Full construction' => [
+ [
+ 'rev_id' => '2',
+ 'rev_page' => '1',
+ 'rev_text_id' => '2',
+ 'rev_timestamp' => '20171017114835',
+ 'rev_user_text' => '127.0.0.1',
+ 'rev_user' => '0',
+ 'rev_minor_edit' => '0',
+ 'rev_deleted' => '0',
+ 'rev_len' => '46',
+ 'rev_parent_id' => '1',
+ 'rev_sha1' => 'rdqbbzs3pkhihgbs8qf2q9jsvheag5z',
+ 'rev_comment_text' => 'Goat Comment!',
+ 'rev_comment_data' => null,
+ 'rev_comment_cid' => null,
+ 'rev_content_format' => 'GOATFORMAT',
+ 'rev_content_model' => 'GOATMODEL',
+ ],
+ function ( RevisionUnitTest $testCase, Revision $rev ) {
+ $testCase->assertSame( 2, $rev->getId() );
+ $testCase->assertSame( 1, $rev->getPage() );
+ $testCase->assertSame( 2, $rev->getTextId() );
+ $testCase->assertSame( '20171017114835', $rev->getTimestamp() );
+ $testCase->assertSame( '127.0.0.1', $rev->getUserText() );
+ $testCase->assertSame( 0, $rev->getUser() );
+ $testCase->assertSame( false, $rev->isMinor() );
+ $testCase->assertSame( false, $rev->isDeleted( Revision::DELETED_TEXT ) );
+ $testCase->assertSame( 46, $rev->getSize() );
+ $testCase->assertSame( 1, $rev->getParentId() );
+ $testCase->assertSame( 'rdqbbzs3pkhihgbs8qf2q9jsvheag5z', $rev->getSha1() );
+ $testCase->assertSame( 'Goat Comment!', $rev->getComment() );
+ $testCase->assertSame( 'GOATFORMAT', $rev->getContentFormat() );
+ $testCase->assertSame( 'GOATMODEL', $rev->getContentModel() );
+ }
+ ];
+ yield 'null fields' => [
+ [
+ 'rev_id' => '2',
+ 'rev_page' => '1',
+ 'rev_text_id' => '2',
+ 'rev_timestamp' => '20171017114835',
+ 'rev_user_text' => '127.0.0.1',
+ 'rev_user' => '0',
+ 'rev_minor_edit' => '0',
+ 'rev_deleted' => '0',
+ 'rev_comment_text' => 'Goat Comment!',
+ 'rev_comment_data' => null,
+ 'rev_comment_cid' => null,
+ ],
+ function ( RevisionUnitTest $testCase, Revision $rev ) {
+ $testCase->assertNull( $rev->getSize() );
+ $testCase->assertNull( $rev->getParentId() );
+ $testCase->assertNull( $rev->getSha1() );
+ $testCase->assertSame( 'text/x-wiki', $rev->getContentFormat() );
+ $testCase->assertSame( 'wikitext', $rev->getContentModel() );
+ }
+ ];
+ }
+
+ /**
+ * @dataProvider provideConstructFromRow
+ * @covers Revision::__construct
+ * @covers Revision::constructFromDbRowObject
+ */
+ public function testConstructFromRow( array $arrayData, $assertions ) {
+ $row = (object)$arrayData;
+ $rev = new Revision( $row );
+ $assertions( $this, $rev );
+ }
+
public function provideGetRevisionText() {
yield 'Generic test' => [
'This is a goat of revision text.',
];
}
+ public function provideGetId() {
+ yield [
+ [],
+ null
+ ];
+ yield [
+ [ 'id' => 998 ],
+ 998
+ ];
+ }
+
+ /**
+ * @dataProvider provideGetId
+ * @covers Revision::getId
+ */
+ public function testGetId( $rowArray, $expectedId ) {
+ $rev = new Revision( $rowArray );
+ $this->assertEquals( $expectedId, $rev->getId() );
+ }
+
+ public function provideSetId() {
+ yield [ '123', 123 ];
+ yield [ 456, 456 ];
+ }
+
+ /**
+ * @dataProvider provideSetId
+ * @covers Revision::setId
+ */
+ public function testSetId( $input, $expected ) {
+ $rev = new Revision( [] );
+ $rev->setId( $input );
+ $this->assertSame( $expected, $rev->getId() );
+ }
+
+ public function provideSetUserIdAndName() {
+ yield [ '123', 123, 'GOaT' ];
+ yield [ 456, 456, 'GOaT' ];
+ }
+
+ /**
+ * @dataProvider provideSetUserIdAndName
+ * @covers Revision::setUserIdAndName
+ */
+ public function testSetUserIdAndName( $inputId, $expectedId, $name ) {
+ $rev = new Revision( [] );
+ $rev->setUserIdAndName( $inputId, $name );
+ $this->assertSame( $expectedId, $rev->getUser( Revision::RAW ) );
+ $this->assertEquals( $name, $rev->getUserText( Revision::RAW ) );
+ }
+
+ public function provideGetTextId() {
+ yield [ [], null ];
+ yield [ [ 'text_id' => '123' ], 123 ];
+ yield [ [ 'text_id' => 456 ], 456 ];
+ }
+
+ /**
+ * @dataProvider provideGetTextId
+ * @covers Revision::getTextId()
+ */
+ public function testGetTextId( $rowArray, $expected ) {
+ $rev = new Revision( $rowArray );
+ $this->assertSame( $expected, $rev->getTextId() );
+ }
+
+ public function provideGetParentId() {
+ yield [ [], null ];
+ yield [ [ 'parent_id' => '123' ], 123 ];
+ yield [ [ 'parent_id' => 456 ], 456 ];
+ }
+
+ /**
+ * @dataProvider provideGetParentId
+ * @covers Revision::getParentId()
+ */
+ public function testGetParentId( $rowArray, $expected ) {
+ $rev = new Revision( $rowArray );
+ $this->assertSame( $expected, $rev->getParentId() );
+ }
+
/**
* @covers Revision::getRevisionText
* @dataProvider provideGetRevisionText
Revision::getRevisionText( $row ), "getRevisionText" );
}
+ public function provideFetchFromConds() {
+ yield [ 0, [] ];
+ yield [ Revision::READ_LOCKING, [ 'FOR UPDATE' ] ];
+ }
+
+ /**
+ * @dataProvider provideFetchFromConds
+ * @covers Revision::fetchFromConds
+ */
+ public function testFetchFromConds( $flags, array $options ) {
+ $conditions = [ 'conditionsArray' ];
+
+ $db = $this->getMock( IDatabase::class );
+ $db->expects( $this->once() )
+ ->method( 'selectRow' )
+ ->with(
+ $this->equalTo( [ 'revision', 'page', 'user' ] ),
+ // We don't really care about the fields are they come from the selectField methods
+ $this->isType( 'array' ),
+ $this->equalTo( $conditions ),
+ // Method name
+ $this->equalTo( 'Revision::fetchFromConds' ),
+ $this->equalTo( $options ),
+ // We don't really care about the join conds are they come from the joinCond methods
+ $this->isType( 'array' )
+ )
+ ->willReturn( 'RETURNVALUE' );
+
+ $wrapper = TestingAccessWrapper::newFromClass( Revision::class );
+ $result = $wrapper->fetchFromConds( $db, $conditions, $flags );
+
+ $this->assertEquals( 'RETURNVALUE', $result );
+ }
}