gplx/mediawiki/extensions/SemanticMediaWiki/tests/phpunit/Query/Result/FieldItemFinderTest.php

324 lines
7.9 KiB
PHP

<?php
namespace SMW\Tests\Query\Result;
use SMW\DataItemFactory;
use SMW\DataValueFactory;
use SMW\Query\PrintRequest;
use SMW\Query\Result\FieldItemFinder;
/**
* @covers SMW\Query\Result\FieldItemFinder
* @group semantic-mediawiki
*
* @license GPL-2.0-or-later
* @since 2.5
*
* @author mwjames
*/
class FieldItemFinderTest extends \PHPUnit\Framework\TestCase {
private $dataItemFactory;
private $dataValueFactory;
private $store;
private $itemFetcher;
private $printRequest;
protected function setUp(): void {
parent::setUp();
$this->dataItemFactory = new DataItemFactory();
$this->dataValueFactory = DataValueFactory::getInstance();
$this->store = $this->getMockBuilder( '\SMW\Store' )
->disableOriginalConstructor()
->getMockForAbstractClass();
$this->itemFetcher = $this->getMockBuilder( '\SMW\Query\Result\ItemFetcher' )
->disableOriginalConstructor()
->getMock();
$this->printRequest = $this->getMockBuilder( '\SMW\Query\PrintRequest' )
->disableOriginalConstructor()
->getMock();
}
public function testCanConstruct() {
$this->assertInstanceOf(
FieldItemFinder::class,
new FieldItemFinder( $this->store, $this->itemFetcher, $this->printRequest )
);
}
public function testGetRequestOptions() {
$this->printRequest->expects( $this->any() )
->method( 'getParameter' )
->willReturn( 42 );
$instance = new FieldItemFinder(
$this->store,
$this->itemFetcher,
$this->printRequest
);
$this->assertInstanceOf(
'SMW\RequestOptions',
$instance->getRequestOptions()
);
}
public function testFindFor_THIS() {
$dataItem = $this->dataItemFactory->newDIWikiPage( 'Foo' );
$this->printRequest->expects( $this->any() )
->method( 'isMode' )
->with( PrintRequest::PRINT_THIS )
->willReturn( true );
$instance = new FieldItemFinder(
$this->store,
$this->itemFetcher,
$this->printRequest
);
$this->assertEquals(
[ $dataItem ],
$instance->findFor( $dataItem )
);
}
public function testFindFor_CATS() {
$dataItem = $this->dataItemFactory->newDIWikiPage( 'Foo' );
$expected = $this->dataItemFactory->newDIWikiPage( __METHOD__ );
$this->itemFetcher->expects( $this->once() )
->method( 'fetch' )
->with(
[ $dataItem ],
$this->dataItemFactory->newDIProperty( '_INST' ) )
->willReturn( [ $expected ] );
$this->printRequest->expects( $this->at( 1 ) )
->method( 'isMode' )
->with( PrintRequest::PRINT_CATS )
->willReturn( true );
$instance = new FieldItemFinder(
$this->store,
$this->itemFetcher,
$this->printRequest
);
$this->assertEquals(
[ $expected ],
$instance->findFor( $dataItem )
);
}
public function testFindFor_CCAT() {
$dataItem = $this->dataItemFactory->newDIWikiPage( 'Bar' );
$expected = $this->dataItemFactory->newDIWikiPage( __METHOD__ );
$this->store->expects( $this->once() )
->method( 'getPropertyValues' )
->with(
$dataItem,
$this->dataItemFactory->newDIProperty( '_INST' ) )
->willReturn( [ $expected ] );
$this->printRequest->expects( $this->at( 2 ) )
->method( 'isMode' )
->with( PrintRequest::PRINT_CCAT )
->willReturn( true );
$this->printRequest->expects( $this->once() )
->method( 'getData' )
->willReturn( $expected );
$instance = new FieldItemFinder(
$this->store,
$this->itemFetcher,
$this->printRequest
);
$this->assertEquals(
[ $this->dataItemFactory->newDIBoolean( true ) ],
$instance->findFor( $dataItem )
);
}
public function testFindFor_PROP() {
$dataItem = $this->dataItemFactory->newDIWikiPage( 'Bar' );
$expected = $this->dataItemFactory->newDIWikiPage( __METHOD__ );
$this->itemFetcher->expects( $this->once() )
->method( 'fetch' )
->with(
[ $dataItem ],
$this->dataItemFactory->newDIProperty( 'Prop' ),
$this->anything() )
->willReturn( [ $expected ] );
$this->printRequest->expects( $this->at( 3 ) )
->method( 'isMode' )
->with( PrintRequest::PRINT_PROP )
->willReturn( true );
$this->printRequest->expects( $this->any() )
->method( 'getParameter' )
->willReturn( false );
$this->printRequest->expects( $this->any() )
->method( 'getTypeID' )
->willReturn( '' );
$this->printRequest->expects( $this->once() )
->method( 'getData' )
->willReturn( $this->dataValueFactory->newPropertyValueByLabel( 'Prop' ) );
$instance = new FieldItemFinder(
$this->store,
$this->itemFetcher,
$this->printRequest
);
$this->assertEquals(
[ $expected ],
$instance->findFor( $dataItem )
);
}
public function testFindForWithIteratorAsValueResultOnPRINT_PROP() {
$dataItem = $this->dataItemFactory->newDIWikiPage( 'Bar' );
$expected = $this->dataItemFactory->newDIWikiPage( __METHOD__ );
$this->itemFetcher->expects( $this->once() )
->method( 'fetch' )
->with(
[ $dataItem ],
$this->dataItemFactory->newDIProperty( 'Prop' ),
$this->anything() )
->willReturn( [ $expected ] );
$this->printRequest->expects( $this->at( 3 ) )
->method( 'isMode' )
->with( PrintRequest::PRINT_PROP )
->willReturn( true );
$this->printRequest->expects( $this->any() )
->method( 'getParameter' )
->willReturn( false );
$this->printRequest->expects( $this->any() )
->method( 'getTypeID' )
->willReturn( '' );
$this->printRequest->expects( $this->once() )
->method( 'getData' )
->willReturn(
$this->dataValueFactory->newPropertyValueByLabel( 'Prop' ) );
$instance = new FieldItemFinder(
$this->store,
$this->itemFetcher,
$this->printRequest
);
$this->assertEquals(
[ $expected ],
$instance->findFor( $dataItem )
);
}
public function testFindForWithBlobValueResultAndRemovedLink() {
$dataItem = $this->dataItemFactory->newDIWikiPage( 'Bar' );
$expected = $this->dataItemFactory->newDIBlob( 'bar' );
$propertyValue = $this->dataValueFactory->newPropertyValueByLabel( 'Prop' );
$this->itemFetcher->expects( $this->once() )
->method( 'fetch' )
->with(
[ $dataItem ],
$this->dataItemFactory->newDIProperty( 'Prop' ),
$this->anything() )
->willReturn( [ $expected ] );
$this->printRequest->expects( $this->at( 3 ) )
->method( 'isMode' )
->with( PrintRequest::PRINT_PROP )
->willReturn( true );
$this->printRequest->expects( $this->any() )
->method( 'getTypeID' )
->willReturn( '_txt' );
$this->printRequest->expects( $this->any() )
->method( 'getParameter' )
->willReturn( false );
$this->printRequest->expects( $this->once() )
->method( 'getData' )
->willReturn( $propertyValue );
$instance = new FieldItemFinder(
$this->store,
$this->itemFetcher,
$this->printRequest
);
$this->assertEquals(
[ $expected ],
$instance->findFor( $dataItem )
);
}
public function testFindForWithBlobValueResultAndRetainedLink() {
$dataItem = $this->dataItemFactory->newDIWikiPage( 'Bar' );
$text = $this->dataItemFactory->newDIBlob( '[[Foo::bar]]' );
$expected = $this->dataItemFactory->newDIBlob( '[[Foo::bar]]' );
$propertyValue = $this->dataValueFactory->newPropertyValueByLabel( 'Prop' );
$this->itemFetcher->expects( $this->once() )
->method( 'fetch' )
->with(
[ $dataItem ],
$this->dataItemFactory->newDIProperty( 'Prop' ),
$this->anything() )
->willReturn( [ $text ] );
$this->printRequest->expects( $this->at( 3 ) )
->method( 'isMode' )
->with( PrintRequest::PRINT_PROP )
->willReturn( true );
$this->printRequest->expects( $this->any() )
->method( 'getOutputFormat' )
->willReturn( '-raw' );
$this->printRequest->expects( $this->any() )
->method( 'getTypeID' )
->willReturn( '_txt' );
$this->printRequest->expects( $this->any() )
->method( 'getParameter' )
->willReturn( false );
$this->printRequest->expects( $this->once() )
->method( 'getData' )
->willReturn( $propertyValue );
$instance = new FieldItemFinder(
$this->store,
$this->itemFetcher,
$this->printRequest
);
$this->assertEquals(
[ $expected ],
$instance->findFor( $dataItem )
);
}
}