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

Reply via email to