Adrian Heine has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/297753

Change subject: Return null in SiteLinksChanger on remove
......................................................................

Return null in SiteLinksChanger on remove

Change-Id: I5034eb3a83c4aba7c402c24879c634cff1d30148
---
M view/resources/wikibase/entityChangers/SiteLinksChanger.js
M view/tests/qunit/wikibase/entityChangers/SiteLinksChanger.tests.js
2 files changed, 67 insertions(+), 12 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/53/297753/1

diff --git a/view/resources/wikibase/entityChangers/SiteLinksChanger.js 
b/view/resources/wikibase/entityChangers/SiteLinksChanger.js
index fe9a428..e7144ad 100644
--- a/view/resources/wikibase/entityChangers/SiteLinksChanger.js
+++ b/view/resources/wikibase/entityChangers/SiteLinksChanger.js
@@ -54,24 +54,26 @@
                                siteLink.getBadges()
                        )
                        .done( function( result ) {
-                               var siteId = siteLink.getSiteId(),
-                                       resultData = 
result.entity.sitelinks[siteId];
-                               var savedSiteLink = new wb.datamodel.SiteLink(
-                                       siteId,
-                                       resultData.title,
-                                       resultData.badges
-                               );
+                               var siteId = siteLink.getSiteId();
 
-                               // Update revision store:
-                               self._revisionStore.setSitelinksRevision(
-                                       result.entity.lastrevid,
-                                       siteLink.getSiteId()
-                               );
+                               // Update revision store
+                               self._revisionStore.setSitelinksRevision( 
result.entity.lastrevid, siteId );
 
                                // FIXME: Maybe check API's return value?
 
                                // FIXME: Introduce Item.setSiteLinks
 
+                               var resultData = 
result.entity.sitelinks[siteId];
+                               var savedSiteLink;
+                               if ( resultData.removed === '' ) {
+                                       savedSiteLink = null;
+                               } else {
+                                       savedSiteLink = new 
wb.datamodel.SiteLink(
+                                               siteId,
+                                               resultData.title,
+                                               resultData.badges
+                                       );
+                               }
                                deferred.resolve( savedSiteLink );
                        } )
                        .fail( function( errorCode, error ) {
diff --git a/view/tests/qunit/wikibase/entityChangers/SiteLinksChanger.tests.js 
b/view/tests/qunit/wikibase/entityChangers/SiteLinksChanger.tests.js
index 28d1ecc..1184bc8 100644
--- a/view/tests/qunit/wikibase/entityChangers/SiteLinksChanger.tests.js
+++ b/view/tests/qunit/wikibase/entityChangers/SiteLinksChanger.tests.js
@@ -136,4 +136,57 @@
                } );
        } );
 
+       QUnit.test( 'setSiteLink performs correct API call for remove', 
function( assert ) {
+               assert.expect( 1 );
+               var api = {
+                       setSitelink: sinon.spy( function() {
+                               return $.Deferred().promise();
+                       } )
+               };
+               var siteLinksChanger = new SUBJECT(
+                       api,
+                       { getSitelinksRevision: function() { return 0; } },
+                       new wb.datamodel.Item( 'Q1' )
+               );
+
+               siteLinksChanger.setSiteLink( new wb.datamodel.SiteLink( 
'siteId', '' ) );
+
+               assert.ok( api.setSitelink.calledOnce );
+       } );
+
+       QUnit.test( 'setSiteLink correctly handles API response for remove', 
function( assert ) {
+               assert.expect( 1 );
+               var api = {
+                       setSitelink: sinon.spy( function() {
+                               return $.Deferred().resolve( {
+                                       entity: {
+                                               sitelinks: {
+                                                       siteId: {
+                                                               title: 
'pageName',
+                                                               removed: ''
+                                                       },
+                                                       lastrevid: 'lastrevid'
+                                               }
+                                       }
+                               } ).promise();
+                       } )
+               };
+               var siteLinksChanger = new SUBJECT(
+                       api,
+                       { getSitelinksRevision: function() { return 0; }, 
setSitelinksRevision: function() {} },
+                       new wb.datamodel.Item( 'Q1' )
+               );
+
+               QUnit.stop();
+
+               siteLinksChanger.setSiteLink( new wb.datamodel.SiteLink( 
'siteId', '' ) )
+               .done( function( savedSiteLink ) {
+                       QUnit.start();
+                       assert.strictEqual( savedSiteLink, null );
+               } )
+               .fail( function() {
+                       assert.ok( false, 'setSiteLink failed' );
+               } );
+       } );
+
 } )( sinon, wikibase, jQuery );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I5034eb3a83c4aba7c402c24879c634cff1d30148
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Adrian Heine <[email protected]>

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

Reply via email to