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