WMDE-leszek has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/401538 )

Change subject: Update IDs of statements on forms in convert lexeme data 
"maintenance" script
......................................................................

Update IDs of statements on forms in convert lexeme data "maintenance" script

Statement IDs should use form ID. some of early demo
statements use the property ID instead.

Change-Id: I03eab80d7f806399a1921c2947b855a7ba04294a
---
M devMaintenance/LexemeSerializationUpdater.php
M 
tests/phpunit/mediawiki/DevelopmentMaintenance/LexemeSerializationUpdaterTest.php
2 files changed, 87 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikibaseLexeme 
refs/changes/38/401538/1

diff --git a/devMaintenance/LexemeSerializationUpdater.php 
b/devMaintenance/LexemeSerializationUpdater.php
index 1eaf29a..40e188d 100644
--- a/devMaintenance/LexemeSerializationUpdater.php
+++ b/devMaintenance/LexemeSerializationUpdater.php
@@ -104,6 +104,7 @@
                        $this->addSensesField( $blobData );
 
                        $this->prependFormIds( $blobData );
+                       $this->useFormIdInStatementId( $blobData );
 
                        $this->addNextFormIdField( $blobData );
 
@@ -192,4 +193,23 @@
                }
        }
 
+       /**
+        * Use form ID in IDs of all statementents on a form.
+        * This change has been made to the data in the commit
+        * 699517bbb992e8a73c20955603f3aafb998183f033f4.
+        */
+       private function useFormIdInStatementId( array &$data ) {
+               foreach ( $data['forms'] as &$formData ) {
+                       $formId = $formData['id'];
+                       foreach ( $formData['claims'] as 
&$statementsPerProperty ) {
+                               foreach ( $statementsPerProperty as 
&$statementData ) {
+                                       list ( $entityId, $guid ) = explode( 
'$', $statementData['id'], 2 );
+                                       if ( $entityId !== $formId ) {
+                                               $statementData['id'] = $formId 
. '$' . $guid;
+                                       }
+                               }
+                       }
+               }
+       }
+
 }
diff --git 
a/tests/phpunit/mediawiki/DevelopmentMaintenance/LexemeSerializationUpdaterTest.php
 
b/tests/phpunit/mediawiki/DevelopmentMaintenance/LexemeSerializationUpdaterTest.php
index 421e402..6200b4f 100644
--- 
a/tests/phpunit/mediawiki/DevelopmentMaintenance/LexemeSerializationUpdaterTest.php
+++ 
b/tests/phpunit/mediawiki/DevelopmentMaintenance/LexemeSerializationUpdaterTest.php
@@ -82,6 +82,25 @@
                );
        }
 
+       public function 
testGivenLexemeDataWithInvalidFormStatementId_statementIdsIsUpdated() {
+               $lexemeDataWithFormIdsPrependedWithLexemeId = 
$this->getLexemeDataWithStatementOnForm();
+
+               $db = $this->getDB( [ 
$this->getLexemeDataWithFormStatementIdNotContainingFormId() ] );
+
+               $updater = $this->newUpdater( $db );
+
+               $updater->update();
+
+               $updatedData = $db->getUpdateData();
+
+               $this->assertCount( 1, $updatedData );
+               $this->assertEquals( [ 'old_id' => 1 ], 
$updatedData[0]['conds'] );
+               $this->assertEquals(
+                       $lexemeDataWithFormIdsPrependedWithLexemeId,
+                       json_decode( $updatedData[0]['new']['old_text'], true )
+               );
+       }
+
        public function testGivenLexemeDataStructureIsUpToDate_noUpdateDone() {
                $db = $this->getDB( [ $this->getLexemeDataWithNextFormId() ] );
 
@@ -201,6 +220,54 @@
                return $data;
        }
 
+       private function getLexemeDataWithStatementOnForm() {
+               return [
+                       'id' => 'L1',
+                       'type' => 'lexeme',
+                       'lemmas' => [
+                               [ 'en' => [ 'language' => 'en', 'value' => 
'goat' ] ],
+                       ],
+                       'language' => 'Q1',
+                       'lexicalCategory' => 'Q2',
+                       'claims' => [],
+                       'nextFormId' => 3,
+                       'forms' => [
+                               [
+                                       'id' => 'L1-F2',
+                                       'representations' => [
+                                               [ 'en' => [ 'language' => 'en', 
'value' => 'goat' ] ],
+                                       ],
+                                       'grammaticalFeatures' => 'Q3',
+                                       'claims' => [
+                                               'P1' => [ [
+                                                       'mainsnak' => [
+                                                               'snaktype' => 
'value',
+                                                               'property' => 
'P1',
+                                                               'hash' => 
'0123456789012345678901234567890123456789',
+                                                               'datavalue' => [
+                                                                       'value' 
=> 'turbo goat',
+                                                                       'type' 
=> 'string',
+                                                               ],
+                                                       ],
+                                                       'type' => 'statement',
+                                                       'id' => 
'L1-F2$abcdef01-0123-3210-6666-0123456789abc',
+                                                       'rank' => 'normal',
+                                               ] ]
+                                       ],
+                               ]
+                       ],
+                       'senses' => [],
+               ];
+       }
+
+       private function getLexemeDataWithFormStatementIdNotContainingFormId() {
+               $data = $this->getLexemeDataWithStatementOnForm();
+
+               $data['forms'][0]['claims']['P1'][0]['id'] = 
'P1$abcdef01-0123-3210-6666-0123456789abc';
+
+               return $data;
+       }
+
        private function newUpdater( IDatabase $db ) {
                return new LexemeSerializationUpdater( $db, 666 );
        }

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I03eab80d7f806399a1921c2947b855a7ba04294a
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikibaseLexeme
Gerrit-Branch: master
Gerrit-Owner: WMDE-leszek <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to