Henning Snater has submitted this change and it was merged.
Change subject: RepoApi.getClaims() added
......................................................................
RepoApi.getClaims() added
Change-Id: Id25b789ff605b655b4e467fdc20a2b6c643980cc
---
M lib/resources/wikibase.RepoApi/wikibase.RepoApi.js
M lib/tests/qunit/wikibase.RepoApi/wikibase.RepoApi.tests.js
M repo/includes/api/GetClaims.php
3 files changed, 147 insertions(+), 26 deletions(-)
Approvals:
Henning Snater: Verified; Looks good to me, approved
jenkins-bot: Verified
diff --git a/lib/resources/wikibase.RepoApi/wikibase.RepoApi.js
b/lib/resources/wikibase.RepoApi/wikibase.RepoApi.js
index 21856c4..12edd5b 100644
--- a/lib/resources/wikibase.RepoApi/wikibase.RepoApi.js
+++ b/lib/resources/wikibase.RepoApi/wikibase.RepoApi.js
@@ -243,11 +243,11 @@
/**
* Creates a claim.
*
- * @param {String} entityId Entity id
- * @param {Number} baseRevId revision id
- * @param {string} snaktype The type of the snak
+ * @param {string} entityId Entity id
+ * @param {number} baseRevId revision id
+ * @param {string} snakType The type of the snak
* @param {string} property Id of the snak's property
- * @param {object} value The value to set the datavalue of the the main
snak of the claim to
+ * @param {Object|string} value The value to set the datavalue of the
claim's main snak to
* @return {jQuery.Promise}
*/
createClaim: function( entityId, baseRevId, snakType, property, value )
{
@@ -280,6 +280,31 @@
},
/**
+ * Returns claims of a specific entity by providing an entity id or a
specific claim by
+ * providing a claim GUID.
+ *
+ * @param {string} entityId Entity id
+ * @param {string} [propertyId] Only return claims featuring this
property
+ * @param {string} claimGuid GUID of the claim to return. Either
claimGuid or entityID has to be
+ * provided.
+ * @param {string} [rank] Only return claims of this rank
+ * @param {string} [props] Optional parts of the claims to return
+ * @return {jQuery.Promise}
+ */
+ getClaims: function( entityId, propertyId, claimGuid, rank, props ) {
+ var params = {
+ action: 'wbgetclaims',
+ entity: entityId,
+ property: propertyId,
+ claim: claimGuid,
+ rank: rank,
+ props: props
+ };
+
+ return this.get( params );
+ },
+
+ /**
* Changes the Main Snak of an existing claim.
*
* @param {String} claimGuid The GUID of the Claim to be changed
(wb.Claim.getGuid)
diff --git a/lib/tests/qunit/wikibase.RepoApi/wikibase.RepoApi.tests.js
b/lib/tests/qunit/wikibase.RepoApi/wikibase.RepoApi.tests.js
index f1f4eb5..488a70c 100644
--- a/lib/tests/qunit/wikibase.RepoApi/wikibase.RepoApi.tests.js
+++ b/lib/tests/qunit/wikibase.RepoApi/wikibase.RepoApi.tests.js
@@ -37,11 +37,11 @@
var qkey = 'asyncTests';
/**
- * Since jQuery.queue does not allow passing parameters, this variable
will cache an entity's.
- * data structure.
+ * Since jQuery.queue does not allow passing parameters, this variable
will cache the data
+ * structures of entities.
* @var {Object}
*/
- var entity = null;
+ var entityStack = [];
/**
* Triggers running the tests attached to the test queue.
@@ -71,30 +71,41 @@
/**
* Creates an entity via the API.
*
- * @param {Object} [data] Stringified JSON representing the item content
+ * @param {string} [entityType] Either "item" or "property"
+ * @param {Object} [data] Stringified JSON representing the entity
content
*/
- var createItem = function( data ) {
+ var createEntity = function( entityType, data ) {
data = data || {};
- api.createEntity( 'item', data ).done( function( response ) {
+ api.createEntity( entityType, data ).done( function( response )
{
QUnit.assert.equal(
response.success,
1,
- 'Created item.'
+ 'Created ' + entityType + '.'
);
- entity = response.entity;
+ entityStack.push( response.entity );
testrun.dequeue( qkey );
} ).fail( onFail );
};
-
- QUnit.module( 'wikibase.RepoApi', QUnit.newWbEnvironment() );
+ QUnit.module( 'wikibase.RepoApi', QUnit.newWbEnvironment( {
+ teardown: function() {
+ entityStack = [];
+ }
+ } ) );
// This test does nothing more than creating an empty entity. It would
not need to invoke a
// queue but can be used as basic template for creating other API tests.
QUnit.test( 'Create an empty entity', function( assert ) {
- testrun.queue( qkey, function() { createItem(); } );
+ testrun.queue( qkey, function() { createEntity( 'item' ); } );
// testrun.queue( qkey, function() { ...; testrun.dequeue( qkey
); } );
+ runTest();
+ } );
+
+ QUnit.test( 'Create an empty property', function( assert ) {
+ testrun.queue( qkey, function() {
+ createEntity( 'property', { datatype: 'string' } );
+ } );
runTest();
} );
@@ -106,7 +117,7 @@
} }
};
- testrun.queue( qkey, function() { createItem( data ); } );
+ testrun.queue( qkey, function() { createEntity( 'item', data );
} );
testrun.queue( qkey, function() {
api.searchEntities( data.labels.de.value,
data.labels.de.language, 'item', 2, 0 )
@@ -132,9 +143,11 @@
});
QUnit.test( 'Edit an entity', function( assert ) {
- testrun.queue( qkey, function() { createItem(); } );
+ testrun.queue( qkey, function() { createEntity( 'item' ); } );
testrun.queue( qkey, function() {
+ var entity = entityStack[0];
+
var data = {
labels: {
de: {
@@ -171,6 +184,86 @@
} );
+ QUnit.test( 'Create a claim (string value)', function( assert ) {
+
+ testrun.queue( qkey, function() { createEntity( 'item' ); } );
+ testrun.queue( qkey, function() { createEntity( 'property', {
datatype: 'string' } ); } );
+
+ testrun.queue( qkey, function() {
+ var entity = entityStack[0],
+ property = entityStack[1];
+
+ api.createClaim(
+ entity.id,
+ entity.lastrevid,
+ 'value',
+ property.id,
+ 'This claim is true'
+ ).done( function( response ) {
+
+ assert.equal(
+ response.claim.mainsnak.property,
+ property.id,
+ 'Verified claim\'s property id.'
+ );
+
+ testrun.dequeue( qkey );
+
+ } ).fail( onFail );
+
+ } );
+
+ runTest();
+
+ } );
+
+ QUnit.test( 'Get claim (string value)', function( assert ) {
+
+ var answer = '42', entity, property;
+
+ testrun.queue( qkey, function() { createEntity( 'item' ); } );
+ testrun.queue( qkey, function() { createEntity( 'property', {
datatype: 'string' } ); } );
+
+ testrun.queue( qkey, function() {
+ entity = entityStack[0];
+ property = entityStack[1];
+
+ api.createClaim(
+ entity.id,
+ entity.lastrevid,
+ 'value',
+ property.id,
+ answer
+ ).done( function( response ) {
+ testrun.dequeue( qkey );
+ } ).fail( onFail );
+
+ } );
+
+ testrun.queue( qkey, function() {
+ api.getClaims( entity.id, property.id ).done( function(
response ) {
+
+ assert.ok(
+ property.id in response.claims,
+ 'Claim data for given property found.'
+ );
+
+ assert.equal(
+
response.claims[property.id][0].mainsnak.datavalue.value,
+ answer,
+ 'Claim value verified.'
+ );
+
+ testrun.dequeue( qkey );
+
+ } ).fail( onFail );
+
+ } );
+
+ runTest();
+
+ } );
+
/**
* Will test the RepoApi's function to set one of the multilingual
basic values, e.g. label or
* description.
@@ -180,13 +273,16 @@
* @param {string} apiFnName The name of the wb.RepoApi function to set
the value
*/
function testSetBasicMultiLingualValue( assert, type, apiFnName ) {
- var typesApiPropName = type + 's', // API uses plural form of
the type: 'label' -> 'labels'
+ var entity,
+ typesApiPropName = type + 's', // API uses plural form
of the type: 'label' -> 'labels'
language = 'en',
value = language + '-' + type; // could be anything
really
- testrun.queue( qkey, function() { createItem(); } );
+ testrun.queue( qkey, function() { createEntity( 'item' ); } );
testrun.queue( qkey, function() {
+ entity = entityStack[0];
+
api[ apiFnName ](
entity.id, entity.lastrevid, value, language
).done( function( response ) {
@@ -284,7 +380,7 @@
}
};
- testrun.queue( qkey, function() { createItem(); } );
+ testrun.queue( qkey, function() { createEntity( 'item' ); } );
testrun.queue( qkey, function() {
api.setSitelink(
@@ -373,11 +469,11 @@
} );
*/
QUnit.test( 'Set aliases', function( assert ) {
- testrun.queue( qkey, function() { createItem(); } );
+ testrun.queue( qkey, function() { createEntity( 'item' ); } );
testrun.queue( qkey, function() {
api.setAliases(
- entity.id, entity.lastrevid, [ 'alias1',
'alias2' ], [], 'en'
+ entityStack[0].id, entityStack[0].lastrevid, [
'alias1', 'alias2' ], [], 'en'
).done( function( response ) {
assert.deepEqual(
@@ -395,7 +491,7 @@
testrun.queue( qkey, function() {
api.setAliases(
- entity.id, entity.lastrevid, [ 'alias1',
'alias2' ], [], 'doesnotexist'
+ entityStack[0].id, entityStack[0].lastrevid, [
'alias1', 'alias2' ], [], 'doesnotexist'
).done( function( response ) {
assert.ok(
@@ -419,7 +515,7 @@
/*
testrun.queue( qkey, function() {
api.setAliases(
- entity.id, entity.lastrevid, 'alias3',
'alias1', 'en'
+ entityStack[0].id, entityStack[0].lastrevid,
'alias3', 'alias1', 'en'
).done( function( response ) {
assert.deepEqual(
@@ -437,7 +533,7 @@
testrun.queue( qkey, function() {
api.setAliases(
- entity.id, entity.lastrevid, '', [ 'alias2',
'alias3' ], 'en'
+ entityStack[0].id, entityStack[0].lastrevid,
'', [ 'alias2', 'alias3' ], 'en'
).done( function( response ) {
assert.equal(
diff --git a/repo/includes/api/GetClaims.php b/repo/includes/api/GetClaims.php
index 68ca8cc..c7fa9aa 100644
--- a/repo/includes/api/GetClaims.php
+++ b/repo/includes/api/GetClaims.php
@@ -250,7 +250,7 @@
*/
public function getParamDescription() {
return array(
- 'entity' => 'Id of the entity from which to obtain
claims. Required unless key is provided.',
+ 'entity' => 'Id of the entity from which to obtain
claims. Required unless claim GUID is provided.',
'property' => 'Optional filter to only return claims
with a main snak that has the specified property.',
'claim' => 'A GUID identifying the claim. Required
unless entity is provided.',
'rank' => 'Optional filter to return only the claims
that have the specified rank',
--
To view, visit https://gerrit.wikimedia.org/r/74127
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Id25b789ff605b655b4e467fdc20a2b6c643980cc
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: LivingShadow <[email protected]>
Gerrit-Reviewer: Daniel Werner <[email protected]>
Gerrit-Reviewer: Henning Snater <[email protected]>
Gerrit-Reviewer: Hoo man <[email protected]>
Gerrit-Reviewer: Tobias Gritschacher <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits