jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/341802 )
Change subject: Consider statements (claims) in LexemeChangeOpDeserializer
......................................................................
Consider statements (claims) in LexemeChangeOpDeserializer
Bug: T155699
Change-Id: Iafb741d670b9a7eb5b1f8f71be98d5b2e7cf9f7d
---
M WikibaseLexeme.entitytypes.php
M src/ChangeOp/Deserialization/LexemeChangeOpDeserializer.php
M
tests/phpunit/mediawiki/ChangeOp/Deserialization/LexemeChangeOpDeserializerTest.php
3 files changed, 72 insertions(+), 3 deletions(-)
Approvals:
Ladsgroup: Looks good to me, approved
Aleksey Bekh-Ivanov (WMDE): Looks good to me, but someone else must approve
jenkins-bot: Verified
diff --git a/WikibaseLexeme.entitytypes.php b/WikibaseLexeme.entitytypes.php
index f5df89e..d3cd64e 100644
--- a/WikibaseLexeme.entitytypes.php
+++ b/WikibaseLexeme.entitytypes.php
@@ -19,6 +19,7 @@
use Wikibase\Lexeme\Rdf\LexemeRdfBuilder;
use Wikibase\Lexeme\Validators\LexemeValidatorFactory;
use Wikibase\Rdf\RdfVocabulary;
+use Wikibase\Repo\ChangeOp\Deserialization\ClaimsChangeOpDeserializer;
use Wikibase\Repo\ChangeOp\Deserialization\TermChangeOpSerializationValidator;
use Wikibase\Repo\MediaWikiLanguageDirectionalityLookup;
use Wikibase\Repo\ParserOutput\FallbackHintHtmlTermRenderer;
@@ -148,6 +149,10 @@
new LanguageChangeOpDeserializer(
$lexemeValidatorFactory,
$wikibaseRepo->getStringNormalizer()
+ ),
+ new ClaimsChangeOpDeserializer(
+
$wikibaseRepo->getExternalFormatStatementDeserializer(),
+
$wikibaseRepo->getChangeOpFactoryProvider()->getStatementChangeOpFactory()
)
);
},
diff --git a/src/ChangeOp/Deserialization/LexemeChangeOpDeserializer.php
b/src/ChangeOp/Deserialization/LexemeChangeOpDeserializer.php
index a9edf9b..1438c2b 100644
--- a/src/ChangeOp/Deserialization/LexemeChangeOpDeserializer.php
+++ b/src/ChangeOp/Deserialization/LexemeChangeOpDeserializer.php
@@ -5,6 +5,7 @@
use Wikibase\ChangeOp\ChangeOp;
use Wikibase\ChangeOp\ChangeOps;
use Wikibase\Repo\ChangeOp\ChangeOpDeserializer;
+use Wikibase\Repo\ChangeOp\Deserialization\ClaimsChangeOpDeserializer;
/**
* Class for creating ChangeOp for EditEntity API
@@ -29,14 +30,18 @@
*/
private $languageChangeOpDeserializer;
+ private $statementChangeOpDeserializer;
+
public function __construct(
LemmaChangeOpDeserializer $lemmaChangeOpDeserializer,
LexicalCategoryChangeOpDeserializer
$lexicalCategoryChangeOpDeserializer,
- LanguageChangeOpDeserializer $languageChangeOpDeserializer
+ LanguageChangeOpDeserializer $languageChangeOpDeserializer,
+ ClaimsChangeOpDeserializer $statementChangeOpDeserializer
) {
$this->lemmaChangeOpDeserializer = $lemmaChangeOpDeserializer;
$this->lexicalCategoryChangeOpDeserializer =
$lexicalCategoryChangeOpDeserializer;
$this->languageChangeOpDeserializer =
$languageChangeOpDeserializer;
+ $this->statementChangeOpDeserializer =
$statementChangeOpDeserializer;
}
/**
@@ -62,6 +67,10 @@
$changeOps->add(
$this->languageChangeOpDeserializer->createEntityChangeOp( $changeRequest ) );
}
+ if ( array_key_exists( 'claims', $changeRequest ) ) {
+ $changeOps->add(
$this->statementChangeOpDeserializer->createEntityChangeOp( $changeRequest ) );
+ }
+
return $changeOps;
}
diff --git
a/tests/phpunit/mediawiki/ChangeOp/Deserialization/LexemeChangeOpDeserializerTest.php
b/tests/phpunit/mediawiki/ChangeOp/Deserialization/LexemeChangeOpDeserializerTest.php
index 39907bf..36f1864 100644
---
a/tests/phpunit/mediawiki/ChangeOp/Deserialization/LexemeChangeOpDeserializerTest.php
+++
b/tests/phpunit/mediawiki/ChangeOp/Deserialization/LexemeChangeOpDeserializerTest.php
@@ -4,6 +4,10 @@
use Wikibase\DataModel\Entity\ItemId;
use Wikibase\DataModel\Entity\ItemIdParser;
+use Wikibase\DataModel\Entity\PropertyId;
+use Wikibase\DataModel\Snak\PropertyNoValueSnak;
+use Wikibase\DataModel\Statement\Statement;
+use Wikibase\DataModel\Statement\StatementList;
use Wikibase\DataModel\Term\Term;
use Wikibase\DataModel\Term\TermList;
use Wikibase\LabelDescriptionDuplicateDetector;
@@ -12,11 +16,14 @@
use Wikibase\Lexeme\ChangeOp\Deserialization\LexemeChangeOpDeserializer;
use
Wikibase\Lexeme\ChangeOp\Deserialization\LexicalCategoryChangeOpDeserializer;
use Wikibase\Lexeme\DataModel\Lexeme;
+use Wikibase\Lexeme\DataModel\LexemeId;
use Wikibase\Lexeme\Validators\LexemeValidatorFactory;
use Wikibase\Lib\StaticContentLanguages;
use Wikibase\Repo\ChangeOp\Deserialization\ChangeOpDeserializationException;
+use Wikibase\Repo\ChangeOp\Deserialization\ClaimsChangeOpDeserializer;
use Wikibase\Repo\ChangeOp\Deserialization\TermChangeOpSerializationValidator;
use Wikibase\Repo\Validators\TermValidatorFactory;
+use Wikibase\Repo\WikibaseRepo;
use Wikibase\StringNormalizer;
/**
@@ -56,13 +63,17 @@
$stringNormalizer
),
new LexicalCategoryChangeOpDeserializer(
$lexemeValidatorFactory, $stringNormalizer ),
- new LanguageChangeOpDeserializer(
$lexemeValidatorFactory, $stringNormalizer )
+ new LanguageChangeOpDeserializer(
$lexemeValidatorFactory, $stringNormalizer ),
+ new ClaimsChangeOpDeserializer(
+
WikibaseRepo::getDefaultInstance()->getExternalFormatStatementDeserializer(),
+
WikibaseRepo::getDefaultInstance()->getChangeOpFactoryProvider()->getStatementChangeOpFactory()
+ )
);
}
private function getEnglishLexeme() {
return new Lexeme(
- null,
+ new LexemeId( 'L500' ),
new TermList( [ new Term( 'en', 'apple' ) ] ),
new ItemId( 'Q1084' ),
new ItemId( 'Q1860' )
@@ -191,6 +202,50 @@
$this->assertEquals( 'worm',
$lexeme->getLemmas()->getByLanguage( 'en' )->getText() );
}
+ public function testGivenChangeRequestWithStatement_statementIsAdded() {
+ $lexeme = $this->getEnglishLexeme();
+
+ $deserializer = $this->getChangeOpDeserializer();
+ $changeOp = $deserializer->createEntityChangeOp( [ 'claims' => [
+ [
+ 'mainsnak' => [ 'snaktype' => 'novalue',
'property' => 'P1' ],
+ 'type' => 'statement',
+ 'rank' => 'normal'
+ ]
+ ] ] );
+
+ $changeOp->apply( $lexeme );
+
+ $this->assertCount( 1, $lexeme->getStatements()->toArray() );
+ $this->assertSame(
+ 'P1',
+
$lexeme->getStatements()->getMainSnaks()[0]->getPropertyId()->getSerialization()
+ );
+ }
+
+ public function
testGivenChangeRequestWithStatementRemove_statementIsRemoved() {
+ $lexeme = $this->getEnglishLexeme();
+
+ $statement = new Statement( new PropertyNoValueSnak( new
PropertyId( 'P2' ) ) );
+ $statement->setGuid( 'testguid' );
+
+ $lexeme->getStatements()->addNewStatement(
+ new PropertyNoValueSnak( new PropertyId( 'P2' ) ),
+ null,
+ null,
+ 'testguid'
+ );
+
+ $deserializer = $this->getChangeOpDeserializer();
+ $changeOp = $deserializer->createEntityChangeOp(
+ [ 'claims' => [ [ 'remove' => '', 'id' => 'testguid' ]
] ]
+ );
+
+ $changeOp->apply( $lexeme );
+
+ $this->assertTrue( $lexeme->getStatements()->isEmpty() );
+ }
+
public function testNonLexemeRelatedFieldsAreIgnored() {
$lexeme = $this->getEnglishLexeme();
--
To view, visit https://gerrit.wikimedia.org/r/341802
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Iafb741d670b9a7eb5b1f8f71be98d5b2e7cf9f7d
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/WikibaseLexeme
Gerrit-Branch: master
Gerrit-Owner: WMDE-leszek <[email protected]>
Gerrit-Reviewer: Aleksey Bekh-Ivanov (WMDE) <[email protected]>
Gerrit-Reviewer: Daniel Kinzler <[email protected]>
Gerrit-Reviewer: Jakob <[email protected]>
Gerrit-Reviewer: Ladsgroup <[email protected]>
Gerrit-Reviewer: Thiemo Mättig (WMDE) <[email protected]>
Gerrit-Reviewer: WMDE-leszek <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits