gplx/mediawiki/extensions/SemanticMediaWiki/tests/phpunit/SQLStore/ChangeOp/ChangeOpTest.php

407 lines
6.6 KiB
PHP

<?php
namespace SMW\Tests\SQLStore\ChangeOp;
use SMW\DIWikiPage;
use SMW\SQLStore\ChangeOp\ChangeOp;
use SMW\Tests\PHPUnitCompat;
/**
* @covers \SMW\SQLStore\ChangeOp\ChangeOp
* @group semantic-mediawiki
*
* @license GPL-2.0-or-later
* @since 2.3
*
* @author mwjames
*/
class ChangeOpTest extends \PHPUnit\Framework\TestCase {
use PHPUnitCompat;
public function testCanConstruct() {
$this->assertInstanceOf(
ChangeOp::class,
new ChangeOp()
);
}
public function testSerialize() {
$instance = new ChangeOp(
DIWikiPage::newFromText( __METHOD__ ),
[]
);
$data = serialize( $instance );
$this->assertInstanceOf(
ChangeOp::class,
unserialize( $data )
);
}
/**
* @dataProvider diffDataProvider
*/
public function testDiff( $diff, $fixedPropertyRecord, $expectedOrdered, $expectedList ) {
$instance = new ChangeOp(
DIWikiPage::newFromText( __METHOD__ ),
$diff
);
$instance->addFixedPropertyRecord(
$fixedPropertyRecord[0],
$fixedPropertyRecord[1]
);
$this->assertIsArray(
$instance->getFixedPropertyRecords()
);
$this->assertEquals(
$expectedOrdered,
$instance->getOrderedDiffByTable()
);
$this->assertEquals(
$expectedList,
$instance->getChangedEntityIdSummaryList()
);
}
public function testGetTableChangeOps() {
$diff = [
0 => [
'insert' => [
'smw_di_number' => [
0 => [
's_id' => 3668,
'p_id' => 61,
'o_serialized' => '123',
'o_sortkey' => '123',
],
1 => [
's_id' => 3668,
'p_id' => 62,
'o_serialized' => '1234',
'o_sortkey' => '1234',
],
],
'smw_fpt_mdat' => [
0 => [
's_id' => 3668,
'o_serialized' => '1/2015/8/16/9/28/39',
'o_sortkey' => '2457250.8948958',
],
],
],
'delete' => [
'smw_di_number' => [],
'smw_fpt_mdat' => [],
]
]
];
$instance = new ChangeOp(
DIWikiPage::newFromText( __METHOD__ ),
$diff
);
$this->assertCount(
1,
$instance->getTableChangeOps( 'smw_di_number' )
);
$this->assertIsArray(
$instance->getTableChangeOps()
);
}
public function testGetListOfChangedEntitiesByType() {
$diff = [
0 => [
'insert' => [
'smw_di_number' => [
0 => [
's_id' => 3668,
'p_id' => 61,
'o_serialized' => '123',
'o_sortkey' => '123',
],
1 => [
's_id' => 3668,
'p_id' => 62,
'o_serialized' => '1234',
'o_sortkey' => '1234',
],
],
'smw_fpt_mdat' => [
0 => [
's_id' => 3668,
'o_serialized' => '1/2015/8/16/9/28/39',
'o_sortkey' => '2457250.8948958',
],
],
],
'delete' => [
'smw_di_number' => [],
'smw_fpt_mdat' => [
0 => [
's_id' => 3667,
'o_serialized' => '1/2015/8/16/9/28/39',
'o_sortkey' => '2457250.8948958',
]
],
]
]
];
$instance = new ChangeOp(
DIWikiPage::newFromText( __METHOD__ ),
$diff
);
$this->assertEquals(
[
3667 => true
],
$instance->getChangedEntityIdListByType( $instance::OP_DELETE )
);
$this->assertEquals(
[
61 => true,
3668 => true,
62 => true
],
$instance->getChangedEntityIdListByType( $instance::OP_INSERT )
);
}
public function testTryToGetTableChangeOpForSingleTable() {
$diff = [];
$instance = new ChangeOp(
DIWikiPage::newFromText( __METHOD__ ),
$diff
);
$this->assertEmpty(
$instance->getTableChangeOps( 'smw_di_number' )
);
}
public function testGetHash() {
$diff = [];
$instance = new ChangeOp(
DIWikiPage::newFromText( __METHOD__ ),
$diff
);
$this->assertIsString(
$instance->getHash()
);
}
public function diffDataProvider() {
$provider[] = [
[],
[ 'foo', [] ],
[],
[],
];
// Insert
$provider[] = [
[
0 => [
'insert' => [
'smw_di_number' =>
[ 0 => [
's_id' => 3668,
'p_id' => 61,
'o_serialized' => '123',
'o_sortkey' => '123',
],
],
'smw_fpt_mdat' =>
[ 0 => [
's_id' => 3668,
'o_serialized' => '1/2015/8/16/9/28/39',
'o_sortkey' => '2457250.8948958',
],
],
],
'delete' => [
'smw_di_number' =>
[],
'smw_fpt_mdat' =>
[],
],
],
],
[
'smw_fpt_mdat',
[
'key' => '_MDAT',
'p_id' => 29,
],
],
[
'smw_di_number' => [
'insert' =>
[ 0 => [
's_id' => 3668,
'p_id' => 61,
'o_serialized' => '123',
'o_sortkey' => '123',
],
],
],
'smw_fpt_mdat' => [
'property' =>
[
'key' => '_MDAT',
'p_id' => 29,
],
'insert' => [
0 => [
's_id' => 3668,
'o_serialized' => '1/2015/8/16/9/28/39',
'o_sortkey' => '2457250.8948958',
],
],
],
],
[
0 => 61,
1 => 3668,
2 => 29,
]
];
// Insert / Delete
$provider[] = [
[
0 =>
[
'insert' =>
[
'smw_di_number' =>
[
0 =>
[
's_id' => 3668,
'p_id' => 61,
'o_serialized' => '1001',
'o_sortkey' => '1001',
],
],
'smw_fpt_mdat' =>
[
0 =>
[
's_id' => 3668,
'o_serialized' => '1/2015/8/16/9/56/53',
'o_sortkey' => '2457250.9145023',
],
],
],
'delete' =>
[
'smw_di_number' =>
[
0 =>
[
's_id' => 3668,
'p_id' => 61,
'o_serialized' => '123',
'o_sortkey' => '123',
],
],
'smw_fpt_mdat' =>
[
0 =>
[
's_id' => 3668,
'o_serialized' => '1/2015/8/16/9/28/39',
'o_sortkey' => '2457250.8948958',
],
],
],
],
],
[
'smw_fpt_mdat',
[
'key' => '_MDAT',
'p_id' => 29,
],
],
[
'smw_di_number' =>
[
'insert' =>
[
0 =>
[
's_id' => 3668,
'p_id' => 61,
'o_serialized' => '1001',
'o_sortkey' => '1001',
],
],
'delete' =>
[
0 =>
[
's_id' => 3668,
'p_id' => 61,
'o_serialized' => '123',
'o_sortkey' => '123',
],
],
],
'smw_fpt_mdat' =>
[
'property' =>
[
'key' => '_MDAT',
'p_id' => 29,
],
'insert' =>
[
0 =>
[
's_id' => 3668,
'o_serialized' => '1/2015/8/16/9/56/53',
'o_sortkey' => '2457250.9145023',
],
],
'delete' =>
[
0 =>
[
's_id' => 3668,
'o_serialized' => '1/2015/8/16/9/28/39',
'o_sortkey' => '2457250.8948958',
],
],
],
],
[
0 => 61,
1 => 3668,
2 => 29,
]
];
return $provider;
}
}