diff --git a/resources/ext.popups/actions.js b/resources/ext.popups/actions.js index eb611ef9c..37e267beb 100644 --- a/resources/ext.popups/actions.js +++ b/resources/ext.popups/actions.js @@ -200,17 +200,21 @@ * @return {Object} */ actions.linkAbandon = function ( el ) { - return function ( dispatch ) { + return function ( dispatch, getState ) { + var token = getState().preview.activeToken; + dispatch( timedAction( { type: types.LINK_ABANDON_START, - el: el + el: el, + token: token } ) ); mw.popups.wait( ABANDON_END_DELAY ) .then( function () { dispatch( { type: types.LINK_ABANDON_END, - el: el + el: el, + token: token } ); } ); }; diff --git a/tests/qunit/ext.popups/actions.test.js b/tests/qunit/ext.popups/actions.test.js index 6f5597baa..146c38767 100644 --- a/tests/qunit/ext.popups/actions.test.js +++ b/tests/qunit/ext.popups/actions.test.js @@ -276,16 +276,25 @@ QUnit.test( 'it should dispatch start and end actions', function ( assert ) { var that = this, dispatch = that.sandbox.spy(), + token = '0123456789', + getState = function () { + return { + preview: { + activeToken: token + } + }; + }, done = assert.async(); this.sandbox.stub( mw, 'now' ).returns( new Date() ); - mw.popups.actions.linkAbandon( that.el )( dispatch ); + mw.popups.actions.linkAbandon( that.el )( dispatch, getState ); assert.ok( dispatch.calledWith( { type: 'LINK_ABANDON_START', el: that.el, - timestamp: mw.now() + timestamp: mw.now(), + token: token } ) ); // --- @@ -296,10 +305,14 @@ ); that.waitPromise.then( function () { - assert.ok( dispatch.calledWith( { + assert.ok( + dispatch.calledWith( { type: 'LINK_ABANDON_END', - el: that.el - } ) ); + el: that.el, + token: token + } ), + 'LINK_ABANDON_* share the same token.' + ); done(); } );