gplx/mediawiki/extensions/SemanticMediaWiki/tests/phpunit/SQLStore/PropertyTableInfoFetcherTes...

205 lines
4.2 KiB
PHP

<?php
namespace SMW\Tests\SQLStore;
use SMW\DIProperty;
use SMW\SQLStore\PropertyTableInfoFetcher;
use SMW\Tests\PHPUnitCompat;
use SMWDataItem as DataItem;
/**
* @covers \SMW\SQLStore\PropertyTableInfoFetcher
* @group semantic-mediawiki
* @group Database
*
* @license GPL-2.0-or-later
* @since 2.2
*
* @author mwjames
*/
class PropertyTableInfoFetcherTest extends \PHPUnit\Framework\TestCase {
use PHPUnitCompat;
private $propertyTypeFinder;
protected function setUp(): void {
parent::setUp();
$this->propertyTypeFinder = $this->getMockBuilder( '\SMW\SQLStore\PropertyTypeFinder' )
->disableOriginalConstructor()
->getMock();
}
public function testCanConstruct() {
$this->assertInstanceOf(
'\SMW\SQLStore\PropertyTableInfoFetcher',
new PropertyTableInfoFetcher( $this->propertyTypeFinder )
);
}
public function testGetPropertyTableDefinitions() {
$instance = new PropertyTableInfoFetcher(
$this->propertyTypeFinder
);
$this->assertIsArray(
$instance->getPropertyTableDefinitions()
);
$instance->clearCache();
}
/**
* @dataProvider propertyProvider
*/
public function testFindTableIdForProperty( $property, $expected ) {
$property = DIProperty::newFromUserLabel( $property );
$instance = new PropertyTableInfoFetcher(
$this->propertyTypeFinder
);
$instance->setCustomSpecialPropertyList(
[ '_MDAT', '_MEDIA', '_MIME' ]
);
$this->assertEquals(
$expected,
$instance->findTableIdForProperty( $property )
);
}
/**
* @dataProvider defaultDiTypeProvider
*/
public function testFindTableIdForDataItemTypeId( $diType, $expected ) {
$instance = new PropertyTableInfoFetcher(
$this->propertyTypeFinder
);
$instance->setCustomSpecialPropertyList(
[ '_MDAT', '_MEDIA', '_MIME' ]
);
$this->assertEquals(
$expected,
$instance->findTableIdForDataItemTypeId( $diType )
);
}
/**
* @dataProvider dataTypeProvider
*/
public function testFindTableIdForDataTypeTypeId( $dataType, $expected ) {
$instance = new PropertyTableInfoFetcher(
$this->propertyTypeFinder
);
$instance->setCustomSpecialPropertyList(
[ '_MDAT', '_MEDIA', '_MIME' ]
);
$this->assertEquals(
$expected,
$instance->findTableIdForDataTypeTypeId( $dataType )
);
}
public function propertyProvider() {
$provider = [];
// Pre-defined property
$provider = [
[ '_MDAT', 'smw_fpt_mdat' ],
[ '_CDAT', 'smw_di_time' ],
[ '_NEWP', 'smw_di_bool' ],
[ '_LEDT', 'smw_di_wikipage' ],
[ '_MIME', 'smw_fpt_mime' ],
[ '_MEDIA', 'smw_fpt_media' ],
[ '_TYPE', 'smw_fpt_type' ],
[ '_UNIT', 'smw_fpt_unit' ],
[ '_CONV', 'smw_fpt_conv' ],
[ '_PVAL', 'smw_fpt_pval' ],
[ '_LIST', 'smw_fpt_list' ],
[ '_SERV', 'smw_fpt_serv' ],
[ '_ASK', 'smw_fpt_ask' ],
[ '_ASKDE', 'smw_fpt_askde' ],
[ '_ASKSI', 'smw_fpt_asksi' ],
[ '_ASKFO', 'smw_fpt_askfo' ],
[ '_ASKST', 'smw_fpt_askst' ],
[ '_ASKDU', 'smw_fpt_askdu' ],
[ '_SUBP', 'smw_fpt_subp' ],
[ '_SUBC', 'smw_fpt_subc' ],
[ '_INST', 'smw_fpt_inst' ],
[ '_REDI', 'smw_fpt_redi' ],
[ '_SOBJ', 'smw_fpt_sobj' ],
[ '_IMPO', 'smw_fpt_impo' ],
[ '_URI', 'smw_fpt_uri' ],
[ '_CONC', 'smw_fpt_conc' ],
];
$provider[] = [
'Modification date',
'smw_fpt_mdat'
];
// User-defined property
$provider[] = [
'Foo',
'smw_di_wikipage'
];
return $provider;
}
public function defaultDiTypeProvider() {
$provider = [];
// Known
$provider = [
[ DataItem::TYPE_NUMBER, 'smw_di_number' ],
[ DataItem::TYPE_BLOB, 'smw_di_blob' ],
[ DataItem::TYPE_BOOLEAN, 'smw_di_bool' ],
[ DataItem::TYPE_URI, 'smw_di_uri' ],
[ DataItem::TYPE_TIME, 'smw_di_time' ],
[ DataItem::TYPE_GEO, 'smw_di_coords' ],
[ DataItem::TYPE_WIKIPAGE, 'smw_di_wikipage' ],
[ DataItem::TYPE_CONCEPT, '' ],
];
// Unknown
$provider[] = [
'Foo',
''
];
return $provider;
}
public function dataTypeProvider() {
$provider = [];
// Known
$provider = [
[ '_num', 'smw_di_number' ],
[ '_txt', 'smw_di_blob' ],
[ '_boo', 'smw_di_bool' ],
[ '_uri', 'smw_di_uri' ],
[ '_dat', 'smw_di_time' ],
[ '_geo', 'smw_di_coords' ],
[ '_wpg', 'smw_di_wikipage' ],
];
// Unknown
$provider[] = [
'Foo',
''
];
return $provider;
}
}