jenkins-bot has submitted this change and it was merged.

Change subject: Use DM Serialization in RB for labels & Descs
......................................................................


Use DM Serialization in RB for labels & Descs

Bug: T104180
Change-Id: Iabe3a0df79f88c56d465629f84f6c94e2c62b1c3
---
M repo/includes/api/EditEntity.php
M repo/includes/api/ResultBuilder.php
M repo/includes/api/SetDescription.php
M repo/includes/api/SetLabel.php
M repo/tests/phpunit/includes/api/ResultBuilderTest.php
5 files changed, 134 insertions(+), 20 deletions(-)

Approvals:
  Daniel Kinzler: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/repo/includes/api/EditEntity.php b/repo/includes/api/EditEntity.php
index bb22bdd..79801a7 100644
--- a/repo/includes/api/EditEntity.php
+++ b/repo/includes/api/EditEntity.php
@@ -555,8 +555,8 @@
                if ( $entity instanceof FingerprintProvider ) {
                        $fingerprint = $entity->getFingerprint();
 
-                       $builder->addLabels( 
$fingerprint->getLabels()->toTextArray(), 'entity' );
-                       $builder->addDescriptions( 
$fingerprint->getDescriptions()->toTextArray(), 'entity' );
+                       $builder->addLabels( $fingerprint->getLabels(), 
'entity' );
+                       $builder->addDescriptions( 
$fingerprint->getDescriptions(), 'entity' );
                        $builder->addAliases( 
$fingerprint->getAliasGroups()->toTextArray(), 'entity' );
                }
 
diff --git a/repo/includes/api/ResultBuilder.php 
b/repo/includes/api/ResultBuilder.php
index 3263509..054e610 100644
--- a/repo/includes/api/ResultBuilder.php
+++ b/repo/includes/api/ResultBuilder.php
@@ -11,6 +11,8 @@
 use Wikibase\DataModel\Entity\EntityId;
 use Wikibase\DataModel\Reference;
 use Wikibase\DataModel\SerializerFactory;
+use Wikibase\DataModel\Term\Term;
+use Wikibase\DataModel\Term\TermList;
 use Wikibase\EntityRevision;
 use Wikibase\Lib\Serializers\EntitySerializer;
 use Wikibase\Lib\Serializers\SerializationOptions;
@@ -377,14 +379,23 @@
         *
         * @since 0.5
         *
-        * @param array $labels the labels to set in the result
+        * @param TermList $labels the labels to insert in the result
         * @param array|string $path where the data is located
         */
-       public function addLabels( array $labels, $path ) {
-               $labelSerializer = 
$this->libSerializerFactory->newLabelSerializer( $this->getOptions() );
+       public function addLabels( TermList $labels, $path ) {
+               $this->addTermList( $labels, 'labels', 'label', $path );
+       }
 
-               $values = $labelSerializer->getSerialized( $labels );
-               $this->setList( $path, 'labels', $values, 'label' );
+       /**
+        * Adds fake serialization to show a label has been removed
+        *
+        * @since 0.5
+        *
+        * @param string $language
+        * @param array|string $path where the data is located
+        */
+       public function addRemovedLabel( $language, $path ) {
+               $this->addRemovedTerm( $language, 'labels', 'label', $path );
        }
 
        /**
@@ -392,14 +403,53 @@
         *
         * @since 0.5
         *
-        * @param array $descriptions the descriptions to insert in the result
+        * @param TermList $descriptions the descriptions to insert in the 
result
         * @param array|string $path where the data is located
         */
-       public function addDescriptions( array $descriptions, $path ) {
-               $descriptionSerializer = 
$this->libSerializerFactory->newDescriptionSerializer( $this->getOptions() );
+       public function addDescriptions( TermList $descriptions, $path ) {
+               $this->addTermList( $descriptions, 'descriptions', 
'description', $path );
+       }
 
-               $values = $descriptionSerializer->getSerialized( $descriptions 
);
-               $this->setList( $path, 'descriptions', $values, 'description' );
+       /**
+        * Adds fake serialization to show a label has been removed
+        *
+        * @since 0.5
+        *
+        * @param string $language
+        * @param array|string $path where the data is located
+        */
+       public function addRemovedDescription( $language, $path ) {
+               $this->addRemovedTerm( $language, 'descriptions', 
'description', $path );
+       }
+
+       /**
+        * Get serialized TermList and add it to the result
+        *
+        * @param TermList $termList
+        * @param string $name
+        * @param string $tag
+        * @param array|string $path where the data is located
+        */
+       private function addTermList( TermList $termList, $name, $tag, $path ) {
+               $serializer = $this->serializerFactory->newTermListSerializer();
+               $value = $serializer->serialize( $termList );
+               $this->setList( $path, $name, $value, $tag );
+       }
+
+       /**
+        * Adds fake serialization to show a term has been removed
+        *
+        * @param string $language
+        * @param array|string $path where the data is located
+        */
+       private function addRemovedTerm( $language, $name, $tag, $path ) {
+               $value = array(
+                       $language => array(
+                               'language' => $language,
+                               'removed' => '',
+                       )
+               );
+               $this->setList( $path, $name, $value, $tag );
        }
 
        /**
diff --git a/repo/includes/api/SetDescription.php 
b/repo/includes/api/SetDescription.php
index 5a293f4..75c7962 100644
--- a/repo/includes/api/SetDescription.php
+++ b/repo/includes/api/SetDescription.php
@@ -48,9 +48,13 @@
                $changeOp = $this->getChangeOp( $params );
                $this->applyChangeOp( $changeOp, $entity, $summary );
 
-               $descriptions = array( $language => ( $entity->getDescription( 
$language ) !== false ) ? $entity->getDescription( $language ) : "" );
-
-               $this->getResultBuilder()->addDescriptions( $descriptions, 
'entity' );
+               $resultBuilder = $this->getResultBuilder();
+               if ( $entity->getFingerprint()->hasDescription( $language ) ) {
+                       $termList = 
$entity->getFingerprint()->getDescriptions()->getWithLanguages( array( 
$language ) );
+                       $resultBuilder->addDescriptions( $termList, 'entity' );
+               } else {
+                       $resultBuilder->addRemovedDescription( $language, 
'entity' );
+               }
 
                return $summary;
        }
diff --git a/repo/includes/api/SetLabel.php b/repo/includes/api/SetLabel.php
index 46c6d70..d13a111 100644
--- a/repo/includes/api/SetLabel.php
+++ b/repo/includes/api/SetLabel.php
@@ -48,9 +48,13 @@
                $changeOp = $this->getChangeOp( $params );
                $this->applyChangeOp( $changeOp, $entity, $summary );
 
-               $labels = array( $language => ( $entity->getLabel( $language ) 
!== false ) ? $entity->getLabel( $language ) : "" );
-
-               $this->getResultBuilder()->addLabels( $labels, 'entity' );
+               $resultBuilder = $this->getResultBuilder();
+               if ( $entity->getFingerprint()->hasLabel( $language ) ) {
+                       $termList = 
$entity->getFingerprint()->getLabels()->getWithLanguages( array( $language ) );
+                       $resultBuilder->addLabels( $termList, 'entity' );
+               } else {
+                       $resultBuilder->addRemovedLabel( $language, 'entity' );
+               }
 
                return $summary;
        }
diff --git a/repo/tests/phpunit/includes/api/ResultBuilderTest.php 
b/repo/tests/phpunit/includes/api/ResultBuilderTest.php
index 5820084..b1af381 100644
--- a/repo/tests/phpunit/includes/api/ResultBuilderTest.php
+++ b/repo/tests/phpunit/includes/api/ResultBuilderTest.php
@@ -17,6 +17,8 @@
 use Wikibase\DataModel\Snak\PropertyValueSnak;
 use Wikibase\DataModel\Snak\SnakList;
 use Wikibase\DataModel\Statement\Statement;
+use Wikibase\DataModel\Term\Term;
+use Wikibase\DataModel\Term\TermList;
 use Wikibase\EntityRevision;
 use Wikibase\Lib\Serializers\SerializationOptions;
 use Wikibase\Lib\Serializers\LibSerializerFactory;
@@ -435,7 +437,10 @@
 
        public function testAddLabels() {
                $result = $this->getDefaultResult();
-               $labels = array( 'en' => 'foo', 'de' => 'bar' );
+               $labels = new TermList( array(
+                       new Term( 'en', 'foo' ),
+                       new Term( 'de', 'bar' ),
+               ) );
                $path = array( 'entities', 'Q1' );
                $expected = array(
                        'entities' => array(
@@ -462,9 +467,36 @@
                $this->assertEquals( $expected, $data );
        }
 
+       public function testAddRemovedLabel() {
+               $result = $this->getDefaultResult();
+               $path = array( 'entities', 'Q1' );
+               $expected = array(
+                       'entities' => array(
+                               'Q1' => array(
+                                       'labels' => array(
+                                               'en' => array(
+                                                       'language' => 'en',
+                                                       'removed' => '',
+                                               ),
+                                       ),
+                               ),
+                       ),
+               );
+
+               $resultBuilder = $this->getResultBuilder( $result );
+               $resultBuilder->addRemovedLabel( 'en', $path );
+
+               $data = $result->getResultData();
+               $this->removeElementsWithKeysRecursively( $data, array( '_type' 
) );
+               $this->assertEquals( $expected, $data );
+       }
+
        public function testAddDescriptions() {
                $result = $this->getDefaultResult();
-               $descriptions = array( 'en' => 'foo', 'de' => 'bar' );
+               $descriptions = new TermList( array(
+                       new Term( 'en', 'foo' ),
+                       new Term( 'de', 'bar' ),
+               ) );
                $path = array( 'entities', 'Q1' );
                $expected = array(
                        'entities' => array(
@@ -491,6 +523,30 @@
                $this->assertEquals( $expected, $data );
        }
 
+       public function testAddRemovedDescription() {
+               $result = $this->getDefaultResult();
+               $path = array( 'entities', 'Q1' );
+               $expected = array(
+                       'entities' => array(
+                               'Q1' => array(
+                                       'descriptions' => array(
+                                               'en' => array(
+                                                       'language' => 'en',
+                                                       'removed' => '',
+                                               ),
+                                       ),
+                               ),
+                       ),
+               );
+
+               $resultBuilder = $this->getResultBuilder( $result );
+               $resultBuilder->addRemovedDescription( 'en', $path );
+
+               $data = $result->getResultData();
+               $this->removeElementsWithKeysRecursively( $data, array( '_type' 
) );
+               $this->assertEquals( $expected, $data );
+       }
+
        public function testAddAliases() {
                $result = $this->getDefaultResult();
                $aliases = array( 'en' => array( 'boo', 'hoo' ), 'de' => array( 
'ham', 'cheese' ) );

-- 
To view, visit https://gerrit.wikimedia.org/r/222602
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Iabe3a0df79f88c56d465629f84f6c94e2c62b1c3
Gerrit-PatchSet: 16
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Addshore <addshorew...@gmail.com>
Gerrit-Reviewer: Addshore <addshorew...@gmail.com>
Gerrit-Reviewer: Aude <aude.w...@gmail.com>
Gerrit-Reviewer: Bene <benestar.wikime...@gmail.com>
Gerrit-Reviewer: Daniel Kinzler <daniel.kinz...@wikimedia.de>
Gerrit-Reviewer: Jeroen De Dauw <jeroended...@gmail.com>
Gerrit-Reviewer: Thiemo Mättig (WMDE) <thiemo.maet...@wikimedia.de>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to