Soeren.oldag has submitted this change and it was merged. Change subject: Add status for partial compliance. CompareResult has now a status (returned by comparer) instead of a mismatch boolean. ......................................................................
Add status for partial compliance. CompareResult has now a status (returned by comparer) instead of a mismatch boolean. Change-Id: I29aada30641e6539a1306f7062537a2e3c75c812 --- M includes/CrossCheck/Comparer/EntityIdValueComparer.php M includes/CrossCheck/Comparer/GlobeCoordinateValueComparer.php M includes/CrossCheck/Comparer/MonolingualTextValueComparer.php M includes/CrossCheck/Comparer/MultilingualTextValueComparer.php M includes/CrossCheck/Comparer/QuantityValueComparer.php M includes/CrossCheck/Comparer/StringComparer.php M includes/CrossCheck/Comparer/StringValueComparer.php M includes/CrossCheck/Comparer/TimeValueComparer.php M includes/CrossCheck/Result/CompareResult.php M includes/CrossCheck/Result/CrossCheckResult.php M includes/CrossCheck/Result/CrossCheckResultList.php M includes/Serializer/CompareResultSerializer.php M tests/phpunit/CheckForCrossCheckViolationsJobTest.php M tests/phpunit/CrossCheck/Comparer/EntityIdValueComparerTest.php M tests/phpunit/CrossCheck/Comparer/GlobeCoordinateValueComparerTest.php M tests/phpunit/CrossCheck/Comparer/MonolingualTextValueComparerTest.php M tests/phpunit/CrossCheck/Comparer/MultilingualTextValueComparerTest.php M tests/phpunit/CrossCheck/Comparer/QuantityValueComparerTest.php M tests/phpunit/CrossCheck/Comparer/StringComparerTest.php M tests/phpunit/CrossCheck/Comparer/StringValueComparerTest.php M tests/phpunit/CrossCheck/Comparer/TimeValueComparerTest.php M tests/phpunit/CrossCheck/Result/CompareResultTest.php M tests/phpunit/CrossCheck/Result/CrossCheckResultListTest.php M tests/phpunit/CrossCheck/Result/CrossCheckResultTest.php M tests/phpunit/Serializer/CompareResultSerializerTest.php M tests/phpunit/Serializer/SerializerFactoryTest.php 26 files changed, 202 insertions(+), 135 deletions(-) Approvals: Soeren.oldag: Verified; Looks good to me, approved diff --git a/includes/CrossCheck/Comparer/EntityIdValueComparer.php b/includes/CrossCheck/Comparer/EntityIdValueComparer.php index fdff06a..0f5eda7 100755 --- a/includes/CrossCheck/Comparer/EntityIdValueComparer.php +++ b/includes/CrossCheck/Comparer/EntityIdValueComparer.php @@ -46,6 +46,7 @@ * @param DataValue $localValue * @param array $externalValues * @param DumpMetaInformation $dumpMetaInformation + * @throws InvalidArgumentException * @return CompareResult */ public function compare( DataValue $localValue, array $externalValues, DumpMetaInformation $dumpMetaInformation ) { @@ -58,10 +59,10 @@ $terms = $this->getTerms( $entityId, $language ); if ( !empty( $terms ) ) { - $match = $this->stringComparer->compareArrays( $terms, $externalValues ); + $status = $this->stringComparer->compareArrays( $terms, $externalValues ); $externalValues = $this->parseExternalValues( $externalValues, $dumpMetaInformation ); - return new CompareResult( $localValue, $externalValues, !$match ); + return new CompareResult( $localValue, $externalValues, $status ); } } diff --git a/includes/CrossCheck/Comparer/GlobeCoordinateValueComparer.php b/includes/CrossCheck/Comparer/GlobeCoordinateValueComparer.php old mode 100644 new mode 100755 index 952316a..d973fea --- a/includes/CrossCheck/Comparer/GlobeCoordinateValueComparer.php +++ b/includes/CrossCheck/Comparer/GlobeCoordinateValueComparer.php @@ -26,6 +26,7 @@ * @param DataValue $localValue * @param array $externalValues * @param DumpMetaInformation $dumpMetaInformation + * @throws InvalidArgumentException * @return CompareResult */ public function compare( DataValue $localValue, array $externalValues, DumpMetaInformation $dumpMetaInformation ) { @@ -38,16 +39,16 @@ $externalValues = $this->parseExternalValues( $externalValues, $dumpMetaInformation ); - $dataMismatch = true; + $status = CompareResult::STATUS_MISMATCH; foreach ( $externalValues as $externalValue ) { $formattedExternalValue = $globeFormatter->format( $externalValue ); if ( $formattedLocalValue === $formattedExternalValue ) { - $dataMismatch = false; + $status = CompareResult::STATUS_COMPLIANCE; break; } } - return new CompareResult( $localValue, $externalValues, $dataMismatch ); + return new CompareResult( $localValue, $externalValues, $status ); } /** diff --git a/includes/CrossCheck/Comparer/MonolingualTextValueComparer.php b/includes/CrossCheck/Comparer/MonolingualTextValueComparer.php index b01990f..c39f0db 100755 --- a/includes/CrossCheck/Comparer/MonolingualTextValueComparer.php +++ b/includes/CrossCheck/Comparer/MonolingualTextValueComparer.php @@ -36,6 +36,7 @@ * @param DataValue $localValue * @param array $externalValues * @param DumpMetaInformation $dumpMetaInformation + * @throws InvalidArgumentException * @return CompareResult */ public function compare( DataValue $localValue, array $externalValues, DumpMetaInformation $dumpMetaInformation ) { @@ -44,11 +45,11 @@ } $rawLocalValue = $localValue->getText(); - $match = $this->stringComparer->compareArray( $rawLocalValue, $externalValues ); + $status = $this->stringComparer->compareArray( $rawLocalValue, $externalValues ); $externalValues = $this->parseExternalValues( $externalValues, $dumpMetaInformation ); - return new CompareResult( $localValue, $externalValues, !$match ); + return new CompareResult( $localValue, $externalValues, $status ); } /** diff --git a/includes/CrossCheck/Comparer/MultilingualTextValueComparer.php b/includes/CrossCheck/Comparer/MultilingualTextValueComparer.php index 0accd91..be52bdd 100755 --- a/includes/CrossCheck/Comparer/MultilingualTextValueComparer.php +++ b/includes/CrossCheck/Comparer/MultilingualTextValueComparer.php @@ -36,6 +36,7 @@ * @param DataValue $localValue * @param array $externalValues * @param DumpMetaInformation $dumpMetaInformation + * @throws InvalidArgumentException * @return CompareResult */ public function compare( DataValue $localValue, array $externalValues, DumpMetaInformation $dumpMetaInformation ) { @@ -46,11 +47,11 @@ foreach ( $localValue->getTexts() as $textValue ) { if ( $textValue->getLanguageCode() === $dumpMetaInformation->getLanguage() ) { $rawLocalValue = $textValue->getText(); - $match = $this->stringComparer->compareArray( $rawLocalValue, $externalValues ); + $status = $this->stringComparer->compareArray( $rawLocalValue, $externalValues ); $externalValues = $this->parseExternalValues( $externalValues, $dumpMetaInformation ); - return new CompareResult( $localValue, $externalValues, !$match ); + return new CompareResult( $localValue, $externalValues, $status ); } } diff --git a/includes/CrossCheck/Comparer/QuantityValueComparer.php b/includes/CrossCheck/Comparer/QuantityValueComparer.php old mode 100644 new mode 100755 index 6d79630..c9281db --- a/includes/CrossCheck/Comparer/QuantityValueComparer.php +++ b/includes/CrossCheck/Comparer/QuantityValueComparer.php @@ -27,6 +27,7 @@ * @param DataValue $localValue * @param array $externalValues * @param DumpMetaInformation $dumpMetaInformation + * @throws InvalidArgumentException * @return CompareResult */ public function compare( DataValue $localValue, array $externalValues, DumpMetaInformation $dumpMetaInformation ) { @@ -36,17 +37,17 @@ $externalValues = $this->parseExternalValues( $externalValues, $dumpMetaInformation ); - $dataMismatch = true; + $status = CompareResult::STATUS_MISMATCH; foreach ( $externalValues as $externalValue ) { if ( $externalValue->getLowerBound() <= $localValue->getUpperBound() && $externalValue->getUpperBound() >= $localValue->getLowerBound() ) { - $dataMismatch = false; + $status = CompareResult::STATUS_COMPLIANCE; break; } } - return new CompareResult( $localValue, $externalValues, $dataMismatch ); + return new CompareResult( $localValue, $externalValues, $status ); } /** diff --git a/includes/CrossCheck/Comparer/StringComparer.php b/includes/CrossCheck/Comparer/StringComparer.php old mode 100644 new mode 100755 index 22bec2b..bae001c --- a/includes/CrossCheck/Comparer/StringComparer.php +++ b/includes/CrossCheck/Comparer/StringComparer.php @@ -3,6 +3,7 @@ namespace WikidataQuality\ExternalValidation\CrossCheck\Comparer; use Doctrine\Instantiator\Exception\InvalidArgumentException; +use WikidataQuality\ExternalValidation\CrossCheck\Result\CompareResult; /** * Class StringComparer @@ -23,13 +24,19 @@ * * @param string $value * @param string $comparativeValue - * @return bool + * @return string */ public function compare( $value, $comparativeValue ) { $this->assertIsString( $value, '$value' ); $this->assertIsString( $comparativeValue, '$comparativeValue' ); - return $value === $comparativeValue || $this->checkSimilarity( $value, $comparativeValue ); + if ( $value === $comparativeValue ) { + return CompareResult::STATUS_COMPLIANCE; + } elseif ( $this->checkSimilarity( $value, $comparativeValue ) ) { + return CompareResult::STATUS_PARTIAL_COMPLIANCE; + } else { + return CompareResult::STATUS_MISMATCH; + } } /** @@ -37,49 +44,49 @@ * * @param string $value * @param array $comparativeValues - * @return bool + * @return string */ public function compareArray( $value, array $comparativeValues ) { $this->assertIsString( $value, '$value' ); $this->assertIsArrayOfStrings( $comparativeValues, '$comparativeValues' ); if ( in_array( $value, $comparativeValues ) ) { - return true; + return CompareResult::STATUS_COMPLIANCE; } foreach ( $comparativeValues as $comparativeValue ) { if ( $this->checkSimilarity( $value, $comparativeValue ) ) { - return true; + return CompareResult::STATUS_PARTIAL_COMPLIANCE; } } - return false; + return CompareResult::STATUS_MISMATCH; } /** * Compares two arrays of strings with each other. * - * @param array $localValue - * @param array $values2 - * @return bool + * @param array $values + * @param array $comparativeValues + * @return string */ public function compareArrays( array $values, array $comparativeValues ) { $this->assertIsArrayOfStrings( $values, '$values' ); $this->assertIsArrayOfStrings( $comparativeValues, '$comparativeValues' ); if ( count( array_intersect( $values, $comparativeValues ) ) > 0 ) { - return true; + return CompareResult::STATUS_COMPLIANCE; } foreach ( $values as $value ) { foreach ( $comparativeValues as $comparativeValue ) { if ( $this->checkSimilarity( $value, $comparativeValue ) ) { - return true; + return CompareResult::STATUS_PARTIAL_COMPLIANCE; } } } - return false; + return CompareResult::STATUS_MISMATCH; } /** diff --git a/includes/CrossCheck/Comparer/StringValueComparer.php b/includes/CrossCheck/Comparer/StringValueComparer.php index 2f4116c..7c0a6b2 100755 --- a/includes/CrossCheck/Comparer/StringValueComparer.php +++ b/includes/CrossCheck/Comparer/StringValueComparer.php @@ -36,6 +36,7 @@ * @param DataValue $localValue * @param array $externalValues * @param DumpMetaInformation $dumpMetaInformation + * @throws \InvalidArgumentException * @return CompareResult */ public function compare( DataValue $localValue, array $externalValues, DumpMetaInformation $dumpMetaInformation ) { @@ -44,11 +45,11 @@ } $rawLocalValue = $localValue->getValue(); - $match = $this->stringComparer->compareArray( $rawLocalValue, $externalValues ); + $status = $this->stringComparer->compareArray( $rawLocalValue, $externalValues ); $externalValues = $this->parseExternalValues( $externalValues, $dumpMetaInformation ); - return new CompareResult( $localValue, $externalValues, !$match ); + return new CompareResult( $localValue, $externalValues, $status ); } /** diff --git a/includes/CrossCheck/Comparer/TimeValueComparer.php b/includes/CrossCheck/Comparer/TimeValueComparer.php old mode 100644 new mode 100755 index d3a62c3..0683e6c --- a/includes/CrossCheck/Comparer/TimeValueComparer.php +++ b/includes/CrossCheck/Comparer/TimeValueComparer.php @@ -29,6 +29,8 @@ * * @param DataValue $localValue * @param array $externalValues + * @param DumpMetaInformation $dumpMetaInformation + * @throws InvalidArgumentException * @return CompareResult */ public function compare( DataValue $localValue, array $externalValues, DumpMetaInformation $dumpMetaInformation ) { @@ -43,16 +45,16 @@ $externalValues = $this->parseExternalValues( $externalValues, $dumpMetaInformation ); - $dataMismatch = true; + $status = CompareResult::STATUS_MISMATCH; foreach ( $externalValues as $externalValue ) { $formattedExternalValue = $timeFormatter->format( $externalValue ); if ( $formattedDataValue === $formattedExternalValue ) { - $dataMismatch = false; + $status = CompareResult::STATUS_COMPLIANCE; break; } } - return new CompareResult( $localValue, $externalValues, $dataMismatch ); + return new CompareResult( $localValue, $externalValues, $status ); } /** diff --git a/includes/CrossCheck/Result/CompareResult.php b/includes/CrossCheck/Result/CompareResult.php old mode 100644 new mode 100755 index 6346c5b..83649ec --- a/includes/CrossCheck/Result/CompareResult.php +++ b/includes/CrossCheck/Result/CompareResult.php @@ -4,7 +4,6 @@ use DataValues\DataValue; use Wikibase\DataModel\Entity\PropertyId; -use WikidataQuality\ExternalValidation\DumpMetaInformation\DumpMetaInformation; use Doctrine\Instantiator\Exception\InvalidArgumentException; @@ -16,6 +15,10 @@ * @license GNU GPL v2+ */ class CompareResult { + + const STATUS_COMPLIANCE = 'compliance'; + const STATUS_PARTIAL_COMPLIANCE = 'partial-compliance'; + const STATUS_MISMATCH = 'mismatch'; /** * Wikibase data value @@ -32,32 +35,32 @@ private $externalValues; /** - * Determines, whether a data mismatch occurred + * Status of check for match/mismatch * - * @var bool + * @var string */ - private $dataMismatch; + private $status; /** * @param DataValue $localValue * @param array $externalValues - * @param bool $dataMismatch + * @param string $status * * @throws InvalidArgumentException */ - public function __construct( DataValue $localValue, array $externalValues, $dataMismatch ) { + public function __construct( DataValue $localValue, array $externalValues, $status ) { foreach ( $externalValues as $externalValue ) { if ( !( $externalValue instanceof DataValue ) ) { throw new InvalidArgumentException( 'Items in $externalValues must be instance of DataValue.' ); } } - if ( !is_bool( $dataMismatch ) ) { - throw new InvalidArgumentException( '$dataMismatch must be boolean.' ); + if ( !is_string( $status ) ) { + throw new InvalidArgumentException( '$status must be a string.' ); } $this->localValue = $localValue; $this->externalValues = $externalValues; - $this->dataMismatch = $dataMismatch; + $this->status = $status; } /** @@ -75,9 +78,9 @@ } /** - * @return boolean + * @return string */ - public function hasDataMismatchOccurred() { - return $this->dataMismatch; + public function getStatus() { + return $this->status; } } \ No newline at end of file diff --git a/includes/CrossCheck/Result/CrossCheckResult.php b/includes/CrossCheck/Result/CrossCheckResult.php index 639f331..944da61 100755 --- a/includes/CrossCheck/Result/CrossCheckResult.php +++ b/includes/CrossCheck/Result/CrossCheckResult.php @@ -21,6 +21,7 @@ const STATUS_DATA_MISMATCH = 'violation'; const STATUS_REFERENCES_MISSING = 'references-missing'; const STATUS_COMPLIANCE = 'compliance'; + const STATUS_PARTIAL_COMPLIANCE = 'partial-compliance'; /** * Id of the property of the claim, that was checked @@ -71,6 +72,7 @@ * @param DumpMetaInformation $dumpMetaInformation * @param CompareResult $compareResult * @param ReferenceResult $referenceResult + * @throws InvalidArgumentException */ public function __construct( PropertyId $propertyId, $claimGuid, $externalId, DumpMetaInformation $dumpMetaInformation, CompareResult $compareResult, ReferenceResult $referenceResult ) { if( !is_string( $claimGuid ) ) { @@ -136,9 +138,11 @@ * @return string */ public function getStatus() { - if ( $this->getCompareResult()->hasDataMismatchOccurred() ) { + if ( $this->getCompareResult()->getStatus() === CompareResult::STATUS_MISMATCH ) { return self::STATUS_DATA_MISMATCH; - } elseif ( $this->getReferenceResult()->areReferencesMissing() ) { + } elseif ( $this->getCompareResult()->getStatus() === CompareResult::STATUS_PARTIAL_COMPLIANCE ) { + return self::STATUS_PARTIAL_COMPLIANCE; + } elseif ( $this->getReferenceResult()->areReferencesMissing() && $this->getCompareResult()->getStatus() === CompareResult::STATUS_COMPLIANCE ) { return self::STATUS_REFERENCES_MISSING; } else { return self::STATUS_COMPLIANCE; diff --git a/includes/CrossCheck/Result/CrossCheckResultList.php b/includes/CrossCheck/Result/CrossCheckResultList.php old mode 100644 new mode 100755 index f2588df..8834c74 --- a/includes/CrossCheck/Result/CrossCheckResultList.php +++ b/includes/CrossCheck/Result/CrossCheckResultList.php @@ -25,6 +25,7 @@ /** * @param array $results + * @throws InvalidArgumentException */ public function __construct( array $results = array () ) { foreach ( $results as $result ) { @@ -61,7 +62,7 @@ */ public function hasDataMismatchOccurred() { foreach ( $this->results as $result ) { - if ( $result->getCompareResult()->hasDataMismatchOccurred() ) { + if ( $result->getCompareResult()->getStatus() === CompareResult::STATUS_MISMATCH ) { return true; } } diff --git a/includes/Serializer/CompareResultSerializer.php b/includes/Serializer/CompareResultSerializer.php old mode 100644 new mode 100755 index c6e8864..9f8dcc6 --- a/includes/Serializer/CompareResultSerializer.php +++ b/includes/Serializer/CompareResultSerializer.php @@ -77,7 +77,7 @@ return array ( 'localValue' => $this->dataValueSerializer->serialize( $compareResult->getLocalValue() ), 'externalValues' => $externalValues, - 'result' => $compareResult->hasDataMismatchOccurred() ? 'mismatch' : 'match' + 'result' => $compareResult->getStatus() ); } } \ No newline at end of file diff --git a/tests/phpunit/CheckForCrossCheckViolationsJobTest.php b/tests/phpunit/CheckForCrossCheckViolationsJobTest.php index fe68997..bd0320d 100755 --- a/tests/phpunit/CheckForCrossCheckViolationsJobTest.php +++ b/tests/phpunit/CheckForCrossCheckViolationsJobTest.php @@ -55,8 +55,8 @@ $dateTime = new DateTime(); $dumpMetaInformation = new DumpMetaInformation( 'dumpId', $itemId, $dateTime, 'irrelevent', 'irrelevant.org', 100, $itemId ); - $compareResultViolation = new CompareResult( new StringValue( 'foo' ), array( new StringValue( 'bar' ) ), true ); - $compareResultCompliance = new CompareResult( new StringValue( 'foo' ), array( new StringValue( 'bar' ) ), false ); + $compareResultViolation = new CompareResult( new StringValue( 'foo' ), array( new StringValue( 'bar' ) ), CompareResult::STATUS_MISMATCH ); + $compareResultCompliance = new CompareResult( new StringValue( 'foo' ), array( new StringValue( 'foo' ) ), CompareResult::STATUS_COMPLIANCE ); $referenceResultMissing = new ReferenceResult( true, new Reference() ); $referenceResultExisting = new ReferenceResult( false, new Reference() ); @@ -75,9 +75,7 @@ } protected function tearDown() { - unset( $this->results ); - unset( $this->entity ); - unset( $this->checkTimestamp ); + unset( $this->results, $this->entity, $this->checkTimestamp ); parent::tearDown(); } diff --git a/tests/phpunit/CrossCheck/Comparer/EntityIdValueComparerTest.php b/tests/phpunit/CrossCheck/Comparer/EntityIdValueComparerTest.php index 486697c..b2e883d 100755 --- a/tests/phpunit/CrossCheck/Comparer/EntityIdValueComparerTest.php +++ b/tests/phpunit/CrossCheck/Comparer/EntityIdValueComparerTest.php @@ -52,7 +52,7 @@ array( new MonolingualTextValue( 'en', 'foo' ) ), - false + CompareResult::STATUS_COMPLIANCE ), $localValueQ1, array( 'foo' ), @@ -64,7 +64,7 @@ array( new MonolingualTextValue( 'en', 'baz' ) ), - true + CompareResult::STATUS_MISMATCH ), $localValueQ1, array( 'baz' ), @@ -76,7 +76,7 @@ array( new MonolingualTextValue( 'de', 'Fubar' ) ), - false + CompareResult::STATUS_COMPLIANCE ), $localValueQ1, array( 'Fubar' ), @@ -106,7 +106,11 @@ ->method( 'compareArrays' ) ->willReturnCallback( function ( array $values1, array $values2 ) { - return count( array_intersect( $values1, $values2 ) ) > 0; + if ( count( array_intersect( $values1, $values2 ) ) > 0 ) { + return CompareResult::STATUS_COMPLIANCE; + } else { + return CompareResult::STATUS_MISMATCH; + } } ); diff --git a/tests/phpunit/CrossCheck/Comparer/GlobeCoordinateValueComparerTest.php b/tests/phpunit/CrossCheck/Comparer/GlobeCoordinateValueComparerTest.php old mode 100644 new mode 100755 index 2354ceb..7165ea2 --- a/tests/phpunit/CrossCheck/Comparer/GlobeCoordinateValueComparerTest.php +++ b/tests/phpunit/CrossCheck/Comparer/GlobeCoordinateValueComparerTest.php @@ -47,7 +47,7 @@ array( new GlobeCoordinateValue( new LatLongValue( 64, 26 ), 1 ) ), - false + CompareResult::STATUS_COMPLIANCE ), $localValue, array( '64.000000 N, 26.000000 E' ) @@ -58,7 +58,7 @@ array( new GlobeCoordinateValue( new LatLongValue( 64, 26 ), 1 ) ), - false + CompareResult::STATUS_COMPLIANCE ), $localValue, array( '64 N, 26 E' ) @@ -69,7 +69,7 @@ array( new GlobeCoordinateValue( new LatLongValue( 42, 32 ), 1 ) ), - true + CompareResult::STATUS_MISMATCH ), $localValue, array( '42.000000 N, 32.000000 E' ) diff --git a/tests/phpunit/CrossCheck/Comparer/MonolingualTextValueComparerTest.php b/tests/phpunit/CrossCheck/Comparer/MonolingualTextValueComparerTest.php index dfccf7b..e4d8d1f 100755 --- a/tests/phpunit/CrossCheck/Comparer/MonolingualTextValueComparerTest.php +++ b/tests/phpunit/CrossCheck/Comparer/MonolingualTextValueComparerTest.php @@ -50,7 +50,7 @@ new MonolingualTextValue( 'en', 'foo' ), new MonolingualTextValue( 'en', 'bar' ) ), - false + CompareResult::STATUS_COMPLIANCE ), $localValue, array( 'foo', 'bar' ), @@ -63,7 +63,7 @@ new MonolingualTextValue( 'en', 'foobar' ), new MonolingualTextValue( 'en', 'bar' ) ), - true + CompareResult::STATUS_MISMATCH ), $localValue, array( 'foobar', 'bar' ), @@ -76,7 +76,7 @@ new MonolingualTextValue( 'de', 'foo' ), new MonolingualTextValue( 'de', 'bar' ) ), - false + CompareResult::STATUS_COMPLIANCE ), $localValue, array( 'foo', 'bar' ), @@ -93,7 +93,11 @@ ->method( 'compareArray' ) ->willReturnCallback( function ( $values1, array $values2 ) { - return in_array( $values1, $values2 ); + if ( in_array( $values1, $values2 ) ) { + return CompareResult::STATUS_COMPLIANCE; + } else { + return CompareResult::STATUS_MISMATCH; + } } ); diff --git a/tests/phpunit/CrossCheck/Comparer/MultilingualTextValueComparerTest.php b/tests/phpunit/CrossCheck/Comparer/MultilingualTextValueComparerTest.php index 660a5b1..a78a01a 100755 --- a/tests/phpunit/CrossCheck/Comparer/MultilingualTextValueComparerTest.php +++ b/tests/phpunit/CrossCheck/Comparer/MultilingualTextValueComparerTest.php @@ -55,7 +55,7 @@ new MonolingualTextValue( 'en', 'foobar' ), new MonolingualTextValue( 'en', 'bar' ) ), - true + CompareResult::STATUS_MISMATCH ), $localValueEn, array( 'foobar', 'bar' ), @@ -69,7 +69,7 @@ new MonolingualTextValue( 'en', 'foo' ), new MonolingualTextValue( 'en', 'bar' ) ), - false + CompareResult::STATUS_COMPLIANCE ), $localValueEn, array( 'foo', 'bar' ), @@ -99,7 +99,11 @@ ->method( 'compareArray' ) ->willReturnCallback( function ( $values1, array $values2 ) { - return in_array( $values1, $values2 ); + if ( in_array( $values1, $values2 ) ) { + return CompareResult::STATUS_COMPLIANCE; + } else { + return CompareResult::STATUS_MISMATCH; + } } ); diff --git a/tests/phpunit/CrossCheck/Comparer/QuantityValueComparerTest.php b/tests/phpunit/CrossCheck/Comparer/QuantityValueComparerTest.php old mode 100644 new mode 100755 index b69bd32..1eb3c6f --- a/tests/phpunit/CrossCheck/Comparer/QuantityValueComparerTest.php +++ b/tests/phpunit/CrossCheck/Comparer/QuantityValueComparerTest.php @@ -45,7 +45,7 @@ array( QuantityValue::newFromNumber( 42, '1', 43, 41 ) ), - false + CompareResult::STATUS_COMPLIANCE ), QuantityValue::newFromNumber( 42, '1', 44, 40 ), array( '42' ) @@ -56,7 +56,7 @@ array( QuantityValue::newFromNumber( 41, '1', 42, 40 ) ), - false + CompareResult::STATUS_COMPLIANCE ), QuantityValue::newFromNumber( 42, '1', 44, 40 ), array( '41' ) @@ -67,7 +67,7 @@ array( QuantityValue::newFromNumber( 23, '1', 24, 22 ) ), - true + CompareResult::STATUS_MISMATCH ), QuantityValue::newFromNumber( 42, '1' ), array( '23' ) @@ -78,7 +78,7 @@ array( QuantityValue::newFromNumber( 42, '1', 43, 41 ) ), - false + CompareResult::STATUS_COMPLIANCE ), QuantityValue::newFromNumber( 42, '1' ), array( '42' ) @@ -89,7 +89,7 @@ array( QuantityValue::newFromNumber( 44, '1', 45, 43 ) ), - true + CompareResult::STATUS_MISMATCH ), QuantityValue::newFromNumber( 42, '1' ), array( '44' ) diff --git a/tests/phpunit/CrossCheck/Comparer/StringComparerTest.php b/tests/phpunit/CrossCheck/Comparer/StringComparerTest.php old mode 100644 new mode 100755 index 6f9fe80..0a34b38 --- a/tests/phpunit/CrossCheck/Comparer/StringComparerTest.php +++ b/tests/phpunit/CrossCheck/Comparer/StringComparerTest.php @@ -3,6 +3,7 @@ namespace WikidataQuality\ExternalValidation\Tests\CrossCheck\Comparer; use WikidataQuality\ExternalValidation\CrossCheck\Comparer\StringComparer; +use WikidataQuality\ExternalValidation\CrossCheck\Result\CompareResult; /** * @covers WikidataQuality\ExternalValidation\CrossCheck\Comparer\StringComparer @@ -46,52 +47,52 @@ array( 'foobar', 'foobar', - true + CompareResult::STATUS_COMPLIANCE ), array( 'foobar', 'foobaz', - true + CompareResult::STATUS_PARTIAL_COMPLIANCE ), array( 'fooba', 'foobar', - true + CompareResult::STATUS_PARTIAL_COMPLIANCE ), array( 'foobar', 'fooba', - true + CompareResult::STATUS_PARTIAL_COMPLIANCE ), array( 'foobar', 'goobar', - true + CompareResult::STATUS_PARTIAL_COMPLIANCE ), array( 'oobar', 'foobar', - true + CompareResult::STATUS_PARTIAL_COMPLIANCE ), array( 'foobar', 'oobar', - true + CompareResult::STATUS_PARTIAL_COMPLIANCE ), array( 'fo', 'foobar', - false + CompareResult::STATUS_MISMATCH ), array( 'ar', 'foobar', - false + CompareResult::STATUS_MISMATCH ), array( 'foo', 'baz', - false + CompareResult::STATUS_MISMATCH ) ); } @@ -145,32 +146,32 @@ array( 'foobar', array( 'foobar', 'fo' ), - true + CompareResult::STATUS_COMPLIANCE ), array( 'foobar', array( 'fo', 'foobar' ), - true + CompareResult::STATUS_COMPLIANCE ), array( 'foobar', array( 'goobaz', 'foobaz' ), - true + CompareResult::STATUS_PARTIAL_COMPLIANCE ), array( 'foobar', array( 'foobaz', 'goobaz' ), - true + CompareResult::STATUS_PARTIAL_COMPLIANCE ), array( 'foobar', array( 'goo', 'baz' ), - false + CompareResult::STATUS_MISMATCH ), array( 'foobar', array( 'baz', 'goo' ), - false + CompareResult::STATUS_MISMATCH ) ); } @@ -224,22 +225,22 @@ array( array( 'foobar', 'fubar' ), array( 'bar', 'foobar' ), - true + CompareResult::STATUS_COMPLIANCE ), array( array( 'foobar', 'fubar' ), array( 'bar', 'foobaz' ), - true + CompareResult::STATUS_PARTIAL_COMPLIANCE ), array( array( 'foobar', 'foo' ), array( 'fubar', 'baz' ), - false + CompareResult::STATUS_MISMATCH ), array( array( 'foo', 'foobar' ), array( 'goobaz', 'fubar' ), - false + CompareResult::STATUS_MISMATCH ) ); } diff --git a/tests/phpunit/CrossCheck/Comparer/StringValueComparerTest.php b/tests/phpunit/CrossCheck/Comparer/StringValueComparerTest.php index 03ac691..66f07bc 100755 --- a/tests/phpunit/CrossCheck/Comparer/StringValueComparerTest.php +++ b/tests/phpunit/CrossCheck/Comparer/StringValueComparerTest.php @@ -49,7 +49,7 @@ new MonolingualTextValue( 'en', 'foo' ), new MonolingualTextValue( 'en', 'bar' ) ), - false + CompareResult::STATUS_COMPLIANCE ), new StringValue( 'foo' ), array( 'foo', 'bar' ), @@ -62,7 +62,7 @@ new MonolingualTextValue( 'en', 'foobar' ), new MonolingualTextValue( 'en', 'bar' ) ), - true + CompareResult::STATUS_MISMATCH ), new StringValue( 'foo' ), array( 'foobar', 'bar' ), @@ -75,7 +75,7 @@ new MonolingualTextValue( 'de', 'foobar' ), new MonolingualTextValue( 'de', 'bar' ) ), - false + CompareResult::STATUS_COMPLIANCE ), new StringValue( 'foobar' ), array( 'foobar', 'bar' ), @@ -92,7 +92,11 @@ ->method( 'compareArray' ) ->willReturnCallback( function ( $values1, array $values2 ) { - return in_array( $values1, $values2 ); + if (in_array($values1, $values2)) { + return CompareResult::STATUS_COMPLIANCE; + } else { + return CompareResult::STATUS_MISMATCH; + } } ); diff --git a/tests/phpunit/CrossCheck/Comparer/TimeValueComparerTest.php b/tests/phpunit/CrossCheck/Comparer/TimeValueComparerTest.php old mode 100644 new mode 100755 index 5dbf0ee..ea11d41 --- a/tests/phpunit/CrossCheck/Comparer/TimeValueComparerTest.php +++ b/tests/phpunit/CrossCheck/Comparer/TimeValueComparerTest.php @@ -47,7 +47,7 @@ array( new TimeValue( '+0000000000001955-03-11T00:00:00Z', 0, 0, 0, 11, 'http://www.wikidata.org/entity/Q1985727' ) ), - false + CompareResult::STATUS_COMPLIANCE ), $localValue1955, array( '11.03.1955' ) @@ -58,7 +58,7 @@ array( new TimeValue( '+0000000000001955-03-11T00:00:00Z', 0, 0, 0, 11, 'http://www.wikidata.org/entity/Q1985727' ) ), - false + CompareResult::STATUS_COMPLIANCE ), $localValue1955, array( '1955-03-11' ) @@ -69,7 +69,7 @@ array( new TimeValue( '+0000000000001991-05-23T00:00:00Z', 0, 0, 0, 11, 'http://www.wikidata.org/entity/Q1985727' ) ), - true + CompareResult::STATUS_MISMATCH ), $localValue1955, array( '1991-05-23' ) @@ -80,7 +80,7 @@ array( new TimeValue( '+0000000000002015-00-00T00:00:00Z', 0, 0, 0, 9, 'http://www.wikidata.org/entity/Q1985727' ) ), - false + CompareResult::STATUS_COMPLIANCE ), $localValue2015, array( '2015' ) diff --git a/tests/phpunit/CrossCheck/Result/CompareResultTest.php b/tests/phpunit/CrossCheck/Result/CompareResultTest.php old mode 100644 new mode 100755 index 5992680..0f1e426 --- a/tests/phpunit/CrossCheck/Result/CompareResultTest.php +++ b/tests/phpunit/CrossCheck/Result/CompareResultTest.php @@ -16,13 +16,13 @@ /** * @dataProvider constructValidArgumentsDataProvider */ - public function testConstructValidArguments( $localValue, $externalValues, $dataMismatch ) + public function testConstructValidArguments( $localValue, $externalValues, $status ) { - $compareResult = new CompareResult( $localValue, $externalValues, $dataMismatch ); + $compareResult = new CompareResult( $localValue, $externalValues, $status ); $this->assertEquals( $localValue, $compareResult->getLocalValue() ); $this->assertEquals( $externalValues, $compareResult->getExternalValues() ); - $this->assertEquals( $dataMismatch, $compareResult->hasDataMismatchOccurred() ); + $this->assertEquals( $status, $compareResult->getStatus() ); } /** @@ -35,17 +35,22 @@ array( $this->getDataValueMock(), array( $this->getDataValueMock() ), - true + CompareResult::STATUS_MISMATCH ), array( $this->getDataValueMock(), array( $this->getDataValueMock() ), - false + CompareResult::STATUS_COMPLIANCE + ), + array( + $this->getDataValueMock(), + array( $this->getDataValueMock() ), + CompareResult::STATUS_PARTIAL_COMPLIANCE ), array( $this->getDataValueMock(), array( $this->getDataValueMock(), $this->getDataValueMock() ), - true + CompareResult::STATUS_MISMATCH ) ); } @@ -53,11 +58,11 @@ /** * @dataProvider constructInvalidArgumentsDataProvider */ - public function testConstructInvalidArguments( $localValue, $externalValues, $dataMismatch ) + public function testConstructInvalidArguments( $localValue, $externalValues, $status ) { $this->setExpectedException( 'InvalidArgumentException' ); - new CompareResult( $localValue, $externalValues, $dataMismatch ); + new CompareResult( $localValue, $externalValues, $status ); } /** @@ -75,7 +80,7 @@ array( $this->getDataValueMock(), array( 42 ), - true + CompareResult::STATUS_MISMATCH ) ); } diff --git a/tests/phpunit/CrossCheck/Result/CrossCheckResultListTest.php b/tests/phpunit/CrossCheck/Result/CrossCheckResultListTest.php old mode 100644 new mode 100755 index 9b6cb66..b8903c9 --- a/tests/phpunit/CrossCheck/Result/CrossCheckResultListTest.php +++ b/tests/phpunit/CrossCheck/Result/CrossCheckResultListTest.php @@ -3,6 +3,7 @@ namespace WikidataQuality\ExternalValidation\Tests\CrossCheck\Result; use Wikibase\DataModel\Entity\PropertyId; +use WikidataQuality\ExternalValidation\CrossCheck\Result\CompareResult; use WikidataQuality\ExternalValidation\CrossCheck\Result\CrossCheckResultList; @@ -24,19 +25,19 @@ parent::setUp(); // Generate test data - $this->singleCrossCheckResult = $this->getCrossCheckResultMock( new PropertyId( 'P7' ), false, false ); + $this->singleCrossCheckResult = $this->getCrossCheckResultMock( new PropertyId( 'P7' ), CompareResult::STATUS_COMPLIANCE, false ); $this->crossCheckResults = array( - $this->getCrossCheckResultMock( new PropertyId( 'P1' ), true, false ), - $this->getCrossCheckResultMock( new PropertyId( 'P2' ), false, false ), - $this->getCrossCheckResultMock( new PropertyId( 'P3' ), true, false ) + $this->getCrossCheckResultMock( new PropertyId( 'P1' ), CompareResult::STATUS_MISMATCH, false ), + $this->getCrossCheckResultMock( new PropertyId( 'P2' ), CompareResult::STATUS_COMPLIANCE, false ), + $this->getCrossCheckResultMock( new PropertyId( 'P3' ), CompareResult::STATUS_MISMATCH, false ) ); $this->crossCheckResultList = new CrossCheckResultList( $this->crossCheckResults ); $this->anotherCrossCheckResults = array( - $this->getCrossCheckResultMock( new PropertyId( 'P4' ), false, true ), - $this->getCrossCheckResultMock( new PropertyId( 'P5' ), false, false ), - $this->getCrossCheckResultMock( new PropertyId( 'P5' ), false, true ), - $this->getCrossCheckResultMock( new PropertyId( 'P6' ), false, false ) + $this->getCrossCheckResultMock( new PropertyId( 'P4' ), CompareResult::STATUS_COMPLIANCE, true ), + $this->getCrossCheckResultMock( new PropertyId( 'P5' ), CompareResult::STATUS_COMPLIANCE, false ), + $this->getCrossCheckResultMock( new PropertyId( 'P5' ), CompareResult::STATUS_COMPLIANCE, true ), + $this->getCrossCheckResultMock( new PropertyId( 'P6' ), CompareResult::STATUS_COMPLIANCE, false ) ); $this->anotherCrossCheckResultList = new CrossCheckResultList( $this->anotherCrossCheckResults ); } @@ -75,7 +76,7 @@ array(), array( array( - $this->getCrossCheckResultMock( new PropertyId( 'P7' ), false, false ) + $this->getCrossCheckResultMock( new PropertyId( 'P7' ), CompareResult::STATUS_COMPLIANCE, false ) ) ), array( @@ -145,14 +146,14 @@ $this->assertArrayEquals( $this->anotherCrossCheckResults, $actual ); } - private function getCrossCheckResultMock( PropertyId $propertyId, $dataMismatch, $referencesMissing ) { + private function getCrossCheckResultMock( PropertyId $propertyId, $status, $referencesMissing ) { // Mock CompareResult $compareResultMock = $this->getMockBuilder( 'WikidataQuality\ExternalValidation\CrossCheck\Result\CompareResult' ) ->disableOriginalConstructor() ->getMock(); $compareResultMock->expects( $this->any() ) - ->method( 'hasDataMismatchOccurred' ) - ->willReturn( $dataMismatch ); + ->method( 'getStatus' ) + ->willReturn( $status ); // Mock ReferenceResult $referenceResult = $this->getMockBuilder( 'WikidataQuality\ExternalValidation\CrossCheck\Result\ReferenceResult' ) diff --git a/tests/phpunit/CrossCheck/Result/CrossCheckResultTest.php b/tests/phpunit/CrossCheck/Result/CrossCheckResultTest.php index 3ae594c..a82176f 100755 --- a/tests/phpunit/CrossCheck/Result/CrossCheckResultTest.php +++ b/tests/phpunit/CrossCheck/Result/CrossCheckResultTest.php @@ -3,6 +3,7 @@ namespace WikidataQuality\ExternalValidation\Tests\CrossCheck\Result; use Wikibase\DataModel\Entity\PropertyId; +use WikidataQuality\ExternalValidation\CrossCheck\Result\CompareResult; use WikidataQuality\ExternalValidation\CrossCheck\Result\CrossCheckResult; /** @@ -110,7 +111,7 @@ 'Q42$fccafc70-07a0-4e82-807f-288a4b21c13c', 'foobar', $this->getDumpMetaInformationMock(), - $this->getCompareResultMock( true ), + $this->getCompareResultMock( CompareResult::STATUS_MISMATCH ), $this->getReferenceResultMock( true ) ) ), @@ -121,7 +122,7 @@ 'Q42$fccafc70-07a0-4e82-807f-288a4b21c13c', 'foobar', $this->getDumpMetaInformationMock(), - $this->getCompareResultMock( true ), + $this->getCompareResultMock( CompareResult::STATUS_MISMATCH ), $this->getReferenceResultMock( false ) ) ), @@ -132,7 +133,7 @@ 'Q42$fccafc70-07a0-4e82-807f-288a4b21c13c', 'foobar', $this->getDumpMetaInformationMock(), - $this->getCompareResultMock( false ), + $this->getCompareResultMock( CompareResult::STATUS_COMPLIANCE ), $this->getReferenceResultMock( true ) ) ), @@ -143,7 +144,29 @@ 'Q42$fccafc70-07a0-4e82-807f-288a4b21c13c', 'foobar', $this->getDumpMetaInformationMock(), - $this->getCompareResultMock( false ), + $this->getCompareResultMock( CompareResult::STATUS_COMPLIANCE ), + $this->getReferenceResultMock( false ) + ) + ), + array( + CrossCheckResult::STATUS_COMPLIANCE, + new CrossCheckResult( + new PropertyId( 'P42' ), + 'Q42$fccafc70-07a0-4e82-807f-288a4b21c13c', + 'foobar', + $this->getDumpMetaInformationMock(), + $this->getCompareResultMock( CompareResult::STATUS_PARTIAL_COMPLIANCE ), + $this->getReferenceResultMock( true ) + ) + ), + array( + CrossCheckResult::STATUS_COMPLIANCE, + new CrossCheckResult( + new PropertyId( 'P42' ), + 'Q42$fccafc70-07a0-4e82-807f-288a4b21c13c', + 'foobar', + $this->getDumpMetaInformationMock(), + $this->getCompareResultMock( CompareResult::STATUS_PARTIAL_COMPLIANCE ), $this->getReferenceResultMock( false ) ) ) @@ -161,14 +184,14 @@ return $mock; } - private function getCompareResultMock( $dataMismatch = true ) { + private function getCompareResultMock( $status = CompareResult::STATUS_MISMATCH ) { $mock = $this ->getMockBuilder( 'WikidataQuality\ExternalValidation\CrossCheck\Result\CompareResult' ) ->disableOriginalConstructor() ->getMock(); $mock->expects( $this->any() ) - ->method( 'hasDataMismatchOccurred' ) - ->willReturn( $dataMismatch ); + ->method( 'getStatus' ) + ->willReturn( $status ); return $mock; } diff --git a/tests/phpunit/Serializer/CompareResultSerializerTest.php b/tests/phpunit/Serializer/CompareResultSerializerTest.php old mode 100644 new mode 100755 index 7d97a4c..2093590 --- a/tests/phpunit/Serializer/CompareResultSerializerTest.php +++ b/tests/phpunit/Serializer/CompareResultSerializerTest.php @@ -34,7 +34,7 @@ array( $this->getDataValueMock() ), - true + CompareResult::STATUS_MISMATCH ) ) ); @@ -59,14 +59,14 @@ 'externalValues' => array( 'foobar' ), - 'result' => 'mismatch' + 'result' => CompareResult::STATUS_MISMATCH ), new CompareResult( $this->getDataValueMock(), array( $this->getDataValueMock() ), - true + CompareResult::STATUS_MISMATCH ) ), array( @@ -76,7 +76,7 @@ 'foobar', 'foobar' ), - 'result' => 'match' + 'result' => CompareResult::STATUS_COMPLIANCE ), new CompareResult( $this->getDataValueMock(), @@ -84,7 +84,7 @@ $this->getDataValueMock(), $this->getDataValueMock() ), - false + CompareResult::STATUS_COMPLIANCE ) ), array( @@ -94,14 +94,14 @@ 'foobar', '_element' => 'dataValue' ), - 'result' => 'mismatch' + 'result' => CompareResult::STATUS_MISMATCH ), new CompareResult( $this->getDataValueMock(), array( $this->getDataValueMock() ), - true + CompareResult::STATUS_MISMATCH ), array( 'shouldIndexTags' => true @@ -115,7 +115,7 @@ 1 => 'foobar', '_element' => 'dataValue' ), - 'result' => 'match' + 'result' => CompareResult::STATUS_COMPLIANCE ), new CompareResult( $this->getDataValueMock(), @@ -123,7 +123,7 @@ $this->getDataValueMock(), $this->getDataValueMock() ), - false + CompareResult::STATUS_COMPLIANCE ), array( 'shouldIndexTags' => true diff --git a/tests/phpunit/Serializer/SerializerFactoryTest.php b/tests/phpunit/Serializer/SerializerFactoryTest.php index 22bcd24..d346a1d 100755 --- a/tests/phpunit/Serializer/SerializerFactoryTest.php +++ b/tests/phpunit/Serializer/SerializerFactoryTest.php @@ -66,7 +66,7 @@ array( new StringValue( 'foobar' ) ), - false + CompareResult::STATUS_COMPLIANCE ); $this->referenceResult = new ReferenceResult( true, -- To view, visit https://gerrit.wikimedia.org/r/208948 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I29aada30641e6539a1306f7062537a2e3c75c812 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/WikidataQualityExternalValidation Gerrit-Branch: v1 Gerrit-Owner: Dominic.sauer <dominic.sa...@yahoo.de> Gerrit-Reviewer: Soeren.oldag <soeren_ol...@freenet.de> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits