gplx/mediawiki/extensions/SemanticMediaWiki/tests/phpunit/SQLStore/PropertyTableUpdaterTest.php

221 lines
5.1 KiB
PHP

<?php
namespace SMW\Tests\SQLStore;
use SMW\Parameters;
use SMW\SQLStore\PropertyTableUpdater;
use SMW\Tests\PHPUnitCompat;
/**
* @covers \SMW\SQLStore\PropertyTableUpdater
* @group semantic-mediawiki
*
* @license GPL-2.0-or-later
* @since 3.0
*
* @author mwjames
*/
class PropertyTableUpdaterTest extends \PHPUnit\Framework\TestCase {
use PHPUnitCompat;
private $store;
private $idTable;
private $connection;
private $propertyTable;
private $propertyStatisticsStore;
private $propertyChangeListener;
protected function setUp(): void {
parent::setUp();
$this->connection = $this->getMockBuilder( '\SMW\MediaWiki\Connection\Database' )
->disableOriginalConstructor()
->getMock();
$this->idTable = $this->getMockBuilder( '\SMW\SQLStore\EntityStore\EntityIdManager' )
->disableOriginalConstructor()
->getMock();
$this->store = $this->getMockBuilder( '\SMW\SQLStore\SQLStore' )
->disableOriginalConstructor()
->getMock();
$this->store->expects( $this->any() )
->method( 'getObjectIds' )
->willReturn( $this->idTable );
$this->store->expects( $this->any() )
->method( 'getConnection' )
->willReturn( $this->connection );
$this->propertyTable = $this->getMockBuilder( '\SMW\SQLStore\PropertyTableDefinition' )
->disableOriginalConstructor()
->getMock();
$this->propertyStatisticsStore = $this->getMockBuilder( '\SMW\SQLStore\PropertyStatisticsStore' )
->disableOriginalConstructor()
->getMock();
$this->propertyChangeListener = $this->getMockBuilder( '\SMW\Listener\ChangeListener\ChangeListeners\PropertyChangeListener' )
->disableOriginalConstructor()
->getMock();
}
public function testCanConstruct() {
$this->assertInstanceOf(
PropertyTableUpdater::class,
new PropertyTableUpdater( $this->store, $this->propertyStatisticsStore )
);
}
public function testUpdate_OnEmptyInsertRows() {
$this->store->expects( $this->any() )
->method( 'getPropertyTables' )
->willReturn( [] );
$this->propertyStatisticsStore->expects( $this->once() )
->method( 'addToUsageCounts' );
$instance = new PropertyTableUpdater(
$this->store,
$this->propertyStatisticsStore
);
$params = new Parameters(
[
'insert_rows' => [],
'delete_rows' => [],
'new_hashes' => []
]
);
$instance->update( 42, $params );
}
public function testUpdate_WithInsertRows() {
$this->connection->expects( $this->once() )
->method( 'insert' );
$this->connection->expects( $this->once() )
->method( 'delete' );
$this->idTable->expects( $this->once() )
->method( 'setPropertyTableHashes' );
$this->propertyTable->expects( $this->any() )
->method( 'usesIdSubject' )
->willReturn( true );
$this->store->expects( $this->any() )
->method( 'getPropertyTables' )
->willReturn( [ 'table_foo' => $this->propertyTable ] );
$this->propertyStatisticsStore->expects( $this->once() )
->method( 'addToUsageCounts' )
->with( $this->equalTo( [ 99998 => -1, 99999 => 1 ] ) );
$instance = new PropertyTableUpdater(
$this->store,
$this->propertyStatisticsStore
);
$instance->setPropertyChangeListener(
$this->propertyChangeListener
);
$params = new Parameters(
[
'insert_rows' => [
'table_foo' => [
[ 's_id' => 1001, 'p_id' => 99999 ]
]
],
'delete_rows' => [
'table_foo' => [
[ 's_id' => 1001, 'p_id' => 99998 ]
]
],
'new_hashes' => []
]
);
$instance->update( 42, $params );
}
public function testUpdate_Touched() {
$this->connection->expects( $this->once() )
->method( 'timestamp' )
->willReturn( '19700101000000' );
$this->connection->expects( $this->once() )
->method( 'update' )
->with(
$this->anything(),
[ 'smw_touched' => '19700101000000' ],
$this->equalTo( [ 'smw_id' => [ 1001, 99999, 99998 ] ] ) );
$this->propertyTable->expects( $this->any() )
->method( 'usesIdSubject' )
->willReturn( true );
$this->store->expects( $this->any() )
->method( 'getPropertyTables' )
->willReturn( [ 'table_foo' => $this->propertyTable ] );
$instance = new PropertyTableUpdater(
$this->store,
$this->propertyStatisticsStore
);
$instance->setPropertyChangeListener(
$this->propertyChangeListener
);
$params = new Parameters(
[
'insert_rows' => [
'table_foo' => [
[ 's_id' => 1001, 'p_id' => 99999 ]
]
],
'delete_rows' => [
'table_foo' => [
[ 's_id' => 1001, 'p_id' => 99998 ]
]
],
'new_hashes' => []
]
);
$instance->update( 42, $params );
}
public function testUpdate_WithInsertRowsButMissingIdFieldThrowsException() {
$this->store->expects( $this->any() )
->method( 'getPropertyTables' )
->willReturn( [ 'table_foo' => $this->propertyTable ] );
$instance = new PropertyTableUpdater(
$this->store,
$this->propertyStatisticsStore
);
$params = new Parameters(
[
'insert_rows' => [
'table_foo' => []
],
'delete_rows' => [
'table_foo' => []
],
'new_hashes' => []
]
);
$this->expectException( '\SMW\SQLStore\Exception\TableMissingIdFieldException' );
$instance->update( 42, $params );
}
}