wiki.techinc.nl/tests/phpunit/unit/includes/libs/rdbms/database/DatabaseSqliteRdbmsTest.php
Thiemo Kreuz b95a07380a Remove meaningless ->expects( $this->any() ) from all tests
It is not entirely meaningless. It might be an indicator that
the number of calls to a method is intentionally unlimited.
This is similar to e.g. an @inheritDoc PHPDoc comment that
marks a method as being "intentionally undocumented".

However, what's the meaning of being "intentionally
unconstrained"? Let's just not have any constraint then.

I feel all these ->expects( $this->any() ) bloat the test
code so much that it's never worth it.

Change-Id: I9925e7706bd03e1666f6eb0b284cb42b0dd3be23
2021-04-23 11:58:58 +02:00

141 lines
3.3 KiB
PHP

<?php
use PHPUnit\Framework\MockObject\MockObject;
use Wikimedia\Rdbms\DatabaseSqlite;
/**
* DatabaseSqliteTest is already defined in mediawiki core hence the 'Rdbms' included in this
* class name.
* The test in core should have mediawiki specific stuff removed and the tests moved to this
* rdbms libs test.
*/
class DatabaseSqliteRdbmsTest extends PHPUnit\Framework\TestCase {
use MediaWikiCoversValidator;
/**
* @return MockObject|DatabaseSqlite
*/
private function getMockDb() {
$db = $this->getMockBuilder( DatabaseSqlite::class )
->disableOriginalConstructor()
->onlyMethods( [ 'open', 'query', 'addQuotes' ] )
->getMock();
$db->method( 'addQuotes' )->willReturnCallback(
static function ( $s ) {
return "'$s'";
}
);
return $db;
}
public function provideBuildSubstring() {
yield [ 'someField', 1, 2, 'SUBSTR(someField,1,2)' ];
yield [ 'someField', 1, null, 'SUBSTR(someField,1)' ];
}
/**
* @covers Wikimedia\Rdbms\DatabaseSqlite::buildSubstring
* @dataProvider provideBuildSubstring
*/
public function testBuildSubstring( $input, $start, $length, $expected ) {
$dbMock = $this->getMockDb();
$output = $dbMock->buildSubstring( $input, $start, $length );
$this->assertSame( $expected, $output );
}
public function provideBuildSubstring_invalidParams() {
yield [ -1, 1 ];
yield [ 1, -1 ];
yield [ 1, 'foo' ];
yield [ 'foo', 1 ];
yield [ null, 1 ];
yield [ 0, 1 ];
}
/**
* @covers Wikimedia\Rdbms\DatabaseSqlite::buildSubstring
* @dataProvider provideBuildSubstring_invalidParams
*/
public function testBuildSubstring_invalidParams( $start, $length ) {
$dbMock = $this->getMockDb();
$this->expectException( InvalidArgumentException::class );
$dbMock->buildSubstring( 'foo', $start, $length );
}
/**
* @dataProvider provideGreatest
* @covers Wikimedia\Rdbms\DatabaseSqlite::buildGreatest
*/
public function testBuildGreatest( $fields, $values, $sqlText ) {
$dbMock = $this->getMockDb();
$this->assertEquals(
$sqlText,
trim( $dbMock->buildGreatest( $fields, $values ) )
);
}
public static function provideGreatest() {
return [
[
'field',
'value',
"MAX(\"field\",'value')"
],
[
[ 'field' ],
[ 'value' ],
"MAX(\"field\",'value')"
],
[
[ 'field', 'field2' ],
[ 'value', 'value2', 3, 7.6 ],
"MAX(\"field\",\"field2\",'value','value2',3,7.6)"
],
[
[ 'field', 'a' => "\"field2\"+1" ],
[ 'value', 'value2', 3, 7.6 ],
"MAX(\"field\",\"field2\"+1,'value','value2',3,7.6)"
],
];
}
/**
* @dataProvider provideLeast
* @covers Wikimedia\Rdbms\DatabaseSqlite::buildLeast
*/
public function testBuildLeast( $fields, $values, $sqlText ) {
$dbMock = $this->getMockDb();
$this->assertEquals(
$sqlText,
trim( $dbMock->buildLeast( $fields, $values ) )
);
}
public static function provideLeast() {
return [
[
'field',
'value',
"MIN(\"field\",'value')"
],
[
[ 'field' ],
[ 'value' ],
"MIN(\"field\",'value')"
],
[
[ 'field', 'field2' ],
[ 'value', 'value2', 3, 7.6 ],
"MIN(\"field\",\"field2\",'value','value2',3,7.6)"
],
[
[ 'field', 'a' => "\"field2\"+1" ],
[ 'value', 'value2', 3, 7.6 ],
"MIN(\"field\",\"field2\"+1,'value','value2',3,7.6)"
],
];
}
}