Current File : /home/jvzmxxx/wiki1/extensions/Wikibase/repo/tests/phpunit/includes/ClaimSummaryBuilderTest.php
<?php

namespace Wikibase\Test;

use DataValues\StringValue;
use Diff\Comparer\ComparableComparer;
use Diff\Differ\OrderedListDiffer;
use Wikibase\ClaimSummaryBuilder;
use Wikibase\DataModel\Reference;
use Wikibase\DataModel\Snak\PropertyNoValueSnak;
use Wikibase\DataModel\Snak\PropertySomeValueSnak;
use Wikibase\DataModel\Snak\PropertyValueSnak;
use Wikibase\DataModel\Snak\Snak;
use Wikibase\DataModel\Snak\SnakList;
use Wikibase\DataModel\Statement\Statement;
use Wikibase\Repo\Diff\ClaimDiffer;
use Wikibase\Summary;

/**
 * @covers Wikibase\ClaimSummaryBuilder
 *
 * @group Wikibase
 * @group WikibaseRepo
 * @group ClaimSummaryBuilder
 *
 * @license GPL-2.0+
 * @author Tobias Gritschacher < tobias.gritschacher@wikimedia.de >
 * @author Daniel Kinzler
 */
class ClaimSummaryBuilderTest extends \PHPUnit_Framework_TestCase {

	/**
	 * @return Snak[]
	 */
	protected function snakProvider() {
		$snaks = array();

		$snaks[] = new PropertyNoValueSnak( 42 );
		$snaks[] = new PropertySomeValueSnak( 9001 );
		$snaks[] = new PropertyValueSnak( 7201010, new StringValue( 'o_O' ) );

		return $snaks;
	}

	/**
	 * @return Statement[]
	 */
	protected function statementProvider() {
		$statements = array();

		$mainSnak = new PropertyValueSnak( 112358, new StringValue( "don't panic" ) );
		$statement = new Statement( $mainSnak );
		$statements[] = $statement;

		foreach ( $this->snakProvider() as $snak ) {
			$statement = clone $statement;
			$snaks = new SnakList( array( $snak ) );
			$statement->getReferences()->addReference( new Reference( $snaks ) );
			$statements[] = $statement;
		}

		$statement = clone $statement;
		$snaks = new SnakList( $this->snakProvider() );
		$statement->getReferences()->addReference( new Reference( $snaks ) );
		$statements[] = $statement;

		/**
		 * @var Statement[] $statements
		 */

		$i = 0;
		foreach ( $statements as &$statement ) {
			$i++;
			$guid = "Q{$i}\$7{$i}d";

			$statement->setGuid( $guid );
			$statement->setRank( Statement::RANK_NORMAL );
		}

		return $statements;
	}

	public function buildUpdateClaimSummaryProvider() {
		$arguments = array();

		foreach ( $this->statementProvider() as $statement ) {
			$testCaseArgs = array();

			//change mainsnak
			$modifiedStatement = clone $statement;
			$modifiedStatement->setMainSnak(
				new PropertyValueSnak( 112358, new StringValue( "let's panic!!!" ) )
			);
			$testCaseArgs[] = $statement;
			$testCaseArgs[] = $modifiedStatement;
			$testCaseArgs[] = 'update';
			$arguments[] = $testCaseArgs;

			//change qualifiers
			$modifiedStatement = clone $statement;
			$modifiedStatement->setQualifiers( new SnakList( $this->snakProvider() ) );
			$testCaseArgs[] = $statement;
			$testCaseArgs[] = $modifiedStatement;
			$testCaseArgs[] = 'update-qualifiers';
			$arguments[] = $testCaseArgs;

			//change rank
			$modifiedStatement = clone $statement;
			$modifiedStatement->setRank( Statement::RANK_PREFERRED );
			$testCaseArgs[] = $statement;
			$testCaseArgs[] = $modifiedStatement;
			$testCaseArgs[] = 'update-rank';
			$arguments[] = $testCaseArgs;

			//change mainsnak & qualifiers
			$modifiedStatement = clone $statement;
			$modifiedStatement->setMainSnak(
				new PropertyValueSnak( 112358, new StringValue( "let's panic!!!" ) )
			);
			$modifiedStatement->setQualifiers( new SnakList( $this->snakProvider() ) );
			$testCaseArgs[] = $statement;
			$testCaseArgs[] = $modifiedStatement;
			$testCaseArgs[] = 'update-rank';
			$arguments[] = $testCaseArgs;
		}

		return $arguments;
	}

	public function testBuildCreateClaimSummary() {
		$claimSummaryBuilder = new ClaimSummaryBuilder(
			'wbsetclaim',
			new ClaimDiffer( new OrderedListDiffer( new ComparableComparer() ) )
		);

		$newStatements = $this->statementProvider();

		foreach ( $newStatements as $newStatement ) {
			$summary = $claimSummaryBuilder->buildClaimSummary( null, $newStatement );
			$this->assertInstanceOf( Summary::class, $summary, 'this should return a Summary object' );
			$this->assertEquals( 'wbsetclaim', $summary->getModuleName() );
			$this->assertEquals( 'create', $summary->getActionName() );
		}
	}

	/**
	 * @dataProvider buildUpdateClaimSummaryProvider
	 */
	public function testBuildUpdateClaimSummary(
		Statement $originalStatement,
		Statement $modifiedStatement,
		$action
	) {
		$claimSummaryBuilder = new ClaimSummaryBuilder(
			'wbsetclaim',
			new ClaimDiffer( new OrderedListDiffer( new ComparableComparer() ) )
		);

		$summary = $claimSummaryBuilder->buildClaimSummary( $originalStatement, $modifiedStatement );
		$this->assertInstanceOf( Summary::class, $summary, 'this should return a Summary object' );
		$this->assertEquals( 'wbsetclaim', $summary->getModuleName() );
		$this->assertEquals( $action, $summary->getActionName() );
	}

}