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