Current File : /home/jvzmxxx/wiki/extensions/Wikibase/client/tests/phpunit/includes/DataAccess/SnaksFinderTest.php
<?php

namespace Wikibase\Client\Tests\DataAccess;

use DataValues\StringValue;
use Wikibase\Client\DataAccess\SnaksFinder;
use Wikibase\DataModel\Entity\Item;
use Wikibase\DataModel\Entity\ItemId;
use Wikibase\DataModel\Entity\PropertyId;
use Wikibase\DataModel\Snak\PropertyValueSnak;
use Wikibase\DataModel\Statement\Statement;
use Wikibase\DataModel\Statement\StatementListProvider;

/**
 * @covers Wikibase\Client\DataAccess\SnaksFinder
 *
 * @group Wikibase
 * @group WikibaseClient
 * @group WikibaseDataAccess
 * @group PropertyParserFunctionTest
 *
 * @license GPL-2.0+
 * @author Katie Filbert < aude.wiki@gmail.com >
 * @author Marius Hoch < hoo@online.de >
 */
class SnaksFinderTest extends \PHPUnit_Framework_TestCase {

	/**
	 * @dataProvider findSnaksProvider
	 */
	public function testFindSnaks(
		array $expected,
		StatementListProvider $statementListProvider,
		PropertyId $propertyId,
		array $acceptableRanks = null
	) {
		$snaksFinder = new SnaksFinder();

		$snakList = $snaksFinder->findSnaks( $statementListProvider, $propertyId, $acceptableRanks );
		$this->assertEquals( $expected, $snakList );
	}

	public function findSnaksProvider() {
		$propertyId = new PropertyId( 'P1337' );

		$statement1 = new Statement( new PropertyValueSnak(
			$propertyId,
			new StringValue( 'a kitten!' )
		) );
		$statement1->setGuid( 'Q42$1' );

		$statement2 = new Statement( new PropertyValueSnak(
			$propertyId,
			new StringValue( 'two kittens!!' )
		) );
		$statement2->setGuid( 'Q42$2' );

		// A Statement with a lower rank which should not affect the output
		$statement3 = new Statement( new PropertyValueSnak(
			$propertyId,
			new StringValue( 'three kittens!!!' )
		) );
		$statement3->setGuid( 'Q42$3' );
		$statement3->setRank( Statement::RANK_DEPRECATED );

		$item = new Item( new ItemId( 'Q42' ) );
		$item->getStatements()->addStatement( $statement1 );
		$item->getStatements()->addStatement( $statement2 );
		$item->getStatements()->addStatement( $statement3 );

		$snaksNormal = array(
			new PropertyValueSnak( $propertyId, new StringValue( 'a kitten!' ) ),
			new PropertyValueSnak( $propertyId, new StringValue( 'two kittens!!' ) )
		);
		$snakDeprecated = array( new PropertyValueSnak( $propertyId, new StringValue( 'three kittens!!!' ) ) );

		return array(
			array( $snaksNormal, $item, new PropertyId( 'P1337' ) ),
			array( array(), $item, new PropertyId( 'P90001' ) ),
			array(
				$snakDeprecated,
				$item,
				new PropertyId( 'P1337' ),
				array( Statement::RANK_DEPRECATED )
			),
		);
	}

}