mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Popups
synced 2024-11-24 15:44:09 +00:00
Merge "Test: Migrate reducers/preview.test.js to node-qunit"
This commit is contained in:
commit
51f39da9d3
223
tests/node-qunit/reducers/preview.test.js
Normal file
223
tests/node-qunit/reducers/preview.test.js
Normal file
|
@ -0,0 +1,223 @@
|
|||
var preview = require( '../../../src/reducers/preview' );
|
||||
|
||||
QUnit.module( 'ext.popups/reducers#preview', {
|
||||
setup: function () {
|
||||
this.el = 'active link';
|
||||
}
|
||||
} );
|
||||
|
||||
QUnit.test( '@@INIT', function ( assert ) {
|
||||
var state = preview( undefined, { type: '@@INIT' } );
|
||||
|
||||
assert.expect( 1 );
|
||||
|
||||
assert.deepEqual(
|
||||
state,
|
||||
{
|
||||
enabled: undefined,
|
||||
activeLink: undefined,
|
||||
activeEvent: undefined,
|
||||
activeToken: '',
|
||||
shouldShow: false,
|
||||
isUserDwelling: false
|
||||
}
|
||||
);
|
||||
} );
|
||||
|
||||
QUnit.test( 'BOOT', function ( assert ) {
|
||||
var action = {
|
||||
type: 'BOOT',
|
||||
isEnabled: true
|
||||
};
|
||||
|
||||
assert.expect( 1 );
|
||||
|
||||
assert.deepEqual(
|
||||
preview( {}, action ),
|
||||
{
|
||||
enabled: true
|
||||
},
|
||||
'It should set whether or not previews are enabled.'
|
||||
);
|
||||
} );
|
||||
|
||||
QUnit.test( 'SETTINGS_CHANGE', function ( assert ) {
|
||||
var action = {
|
||||
type: 'SETTINGS_CHANGE',
|
||||
enabled: true
|
||||
};
|
||||
|
||||
assert.expect( 1 );
|
||||
|
||||
assert.deepEqual(
|
||||
preview( {}, action ),
|
||||
{
|
||||
enabled: true
|
||||
},
|
||||
'It should set whether or not previews are enabled when settings change.'
|
||||
);
|
||||
} );
|
||||
|
||||
QUnit.test( 'LINK_DWELL initializes the state for a new link', function ( assert ) {
|
||||
var action = {
|
||||
type: 'LINK_DWELL',
|
||||
el: this.el,
|
||||
event: {},
|
||||
token: '1234567890'
|
||||
};
|
||||
|
||||
assert.deepEqual(
|
||||
preview( {}, action ),
|
||||
{
|
||||
activeLink: action.el,
|
||||
activeEvent: action.event,
|
||||
activeToken: action.token,
|
||||
shouldShow: false,
|
||||
isUserDwelling: true
|
||||
},
|
||||
'It should set active link and event as well as interaction info and hide the preview.'
|
||||
);
|
||||
} );
|
||||
|
||||
QUnit.test( 'LINK_DWELL on an active link only updates dwell state', function ( assert ) {
|
||||
var action = {
|
||||
type: 'LINK_DWELL',
|
||||
el: this.el,
|
||||
event: {},
|
||||
token: '1234567890'
|
||||
},
|
||||
state = {
|
||||
activeLink: this.el,
|
||||
isUserDwelling: false
|
||||
};
|
||||
|
||||
assert.deepEqual(
|
||||
preview( state, action ),
|
||||
{
|
||||
activeLink: this.el,
|
||||
isUserDwelling: true
|
||||
},
|
||||
'It should only set isUserDwelling to true'
|
||||
);
|
||||
} );
|
||||
|
||||
QUnit.test( 'ABANDON_END', function ( assert ) {
|
||||
var action = {
|
||||
type: 'ABANDON_END',
|
||||
token: 'bananas'
|
||||
},
|
||||
state = {
|
||||
activeToken: 'bananas',
|
||||
isUserDwelling: false
|
||||
};
|
||||
|
||||
assert.deepEqual(
|
||||
preview( state, action ),
|
||||
{
|
||||
activeLink: undefined,
|
||||
activeToken: undefined,
|
||||
activeEvent: undefined,
|
||||
fetchResponse: undefined,
|
||||
isUserDwelling: false,
|
||||
shouldShow: false
|
||||
},
|
||||
'ABANDON_END should hide the preview and reset the interaction info.'
|
||||
);
|
||||
|
||||
// ---
|
||||
|
||||
state = {
|
||||
activeToken: 'apples',
|
||||
isUserDwelling: true
|
||||
};
|
||||
|
||||
assert.equal(
|
||||
preview( state, action ),
|
||||
state,
|
||||
'ABANDON_END should NOOP if the current interaction has changed.'
|
||||
);
|
||||
|
||||
// ---
|
||||
|
||||
state = {
|
||||
activeToken: 'bananas',
|
||||
isUserDwelling: true
|
||||
};
|
||||
|
||||
assert.equal(
|
||||
preview( state, action ),
|
||||
state,
|
||||
'ABANDON_END should NOOP if the user is dwelling on the preview.'
|
||||
);
|
||||
} );
|
||||
|
||||
QUnit.test( 'FETCH_END', function ( assert ) {
|
||||
var state = {
|
||||
activeLink: this.el
|
||||
},
|
||||
action = {
|
||||
type: 'FETCH_END',
|
||||
el: this.el,
|
||||
result: {}
|
||||
};
|
||||
|
||||
assert.expect( 2 );
|
||||
|
||||
assert.deepEqual(
|
||||
preview( state, action ),
|
||||
{
|
||||
activeLink: state.activeLink, // Previous state.
|
||||
|
||||
fetchResponse: action.result,
|
||||
shouldShow: true
|
||||
},
|
||||
'It should store the result and signal that a preview should be rendered.'
|
||||
);
|
||||
|
||||
// ---
|
||||
|
||||
state = {
|
||||
activeLink: 'another active link'
|
||||
};
|
||||
action = {
|
||||
type: 'FETCH_END',
|
||||
el: this.el,
|
||||
result: {}
|
||||
};
|
||||
|
||||
assert.deepEqual(
|
||||
preview( state, action ),
|
||||
state,
|
||||
'It should NOOP if the user has interacted with another link since the request was dispatched via the gateway.'
|
||||
);
|
||||
} );
|
||||
|
||||
QUnit.test( 'PREVIEW_DWELL', function ( assert ) {
|
||||
var action = {
|
||||
type: 'PREVIEW_DWELL'
|
||||
};
|
||||
|
||||
assert.expect( 1 );
|
||||
|
||||
assert.deepEqual(
|
||||
preview( {}, action ),
|
||||
{
|
||||
isUserDwelling: true
|
||||
},
|
||||
'It should mark the preview as being dwelled on.'
|
||||
);
|
||||
} );
|
||||
|
||||
QUnit.test( 'ABANDON_START', function ( assert ) {
|
||||
var action = {
|
||||
type: 'ABANDON_START'
|
||||
};
|
||||
|
||||
assert.deepEqual(
|
||||
preview( {}, action ),
|
||||
{
|
||||
isUserDwelling: false
|
||||
},
|
||||
'ABANDON_START should mark the preview having been abandoned.'
|
||||
);
|
||||
} );
|
|
@ -1,225 +0,0 @@
|
|||
( function ( mw, $ ) {
|
||||
|
||||
QUnit.module( 'ext.popups/reducers#preview', {
|
||||
setup: function () {
|
||||
this.el = $( '<a>' );
|
||||
}
|
||||
} );
|
||||
|
||||
QUnit.test( '@@INIT', function ( assert ) {
|
||||
var state = mw.popups.reducers.preview( undefined, { type: '@@INIT' } );
|
||||
|
||||
assert.expect( 1 );
|
||||
|
||||
assert.deepEqual(
|
||||
state,
|
||||
{
|
||||
enabled: undefined,
|
||||
activeLink: undefined,
|
||||
activeEvent: undefined,
|
||||
activeToken: '',
|
||||
shouldShow: false,
|
||||
isUserDwelling: false
|
||||
}
|
||||
);
|
||||
} );
|
||||
|
||||
QUnit.test( 'BOOT', function ( assert ) {
|
||||
var action = {
|
||||
type: 'BOOT',
|
||||
isEnabled: true
|
||||
};
|
||||
|
||||
assert.expect( 1 );
|
||||
|
||||
assert.deepEqual(
|
||||
mw.popups.reducers.preview( {}, action ),
|
||||
{
|
||||
enabled: true
|
||||
},
|
||||
'It should set whether or not previews are enabled.'
|
||||
);
|
||||
} );
|
||||
|
||||
QUnit.test( 'SETTINGS_CHANGE', function ( assert ) {
|
||||
var action = {
|
||||
type: 'SETTINGS_CHANGE',
|
||||
enabled: true
|
||||
};
|
||||
|
||||
assert.expect( 1 );
|
||||
|
||||
assert.deepEqual(
|
||||
mw.popups.reducers.preview( {}, action ),
|
||||
{
|
||||
enabled: true
|
||||
},
|
||||
'It should set whether or not previews are enabled when settings change.'
|
||||
);
|
||||
} );
|
||||
|
||||
QUnit.test( 'LINK_DWELL initializes the state for a new link', function ( assert ) {
|
||||
var action = {
|
||||
type: 'LINK_DWELL',
|
||||
el: this.el,
|
||||
event: {},
|
||||
token: '1234567890'
|
||||
};
|
||||
|
||||
assert.deepEqual(
|
||||
mw.popups.reducers.preview( {}, action ),
|
||||
{
|
||||
activeLink: action.el,
|
||||
activeEvent: action.event,
|
||||
activeToken: action.token,
|
||||
shouldShow: false,
|
||||
isUserDwelling: true
|
||||
},
|
||||
'It should set active link and event as well as interaction info and hide the preview.'
|
||||
);
|
||||
} );
|
||||
|
||||
QUnit.test( 'LINK_DWELL on an active link only updates dwell state', function ( assert ) {
|
||||
var action = {
|
||||
type: 'LINK_DWELL',
|
||||
el: this.el,
|
||||
event: {},
|
||||
token: '1234567890'
|
||||
},
|
||||
state = {
|
||||
activeLink: this.el,
|
||||
isUserDwelling: false
|
||||
};
|
||||
|
||||
assert.deepEqual(
|
||||
mw.popups.reducers.preview( state, action ),
|
||||
{
|
||||
activeLink: this.el,
|
||||
isUserDwelling: true
|
||||
},
|
||||
'It should only set isUserDwelling to true'
|
||||
);
|
||||
} );
|
||||
|
||||
QUnit.test( 'ABANDON_END', function ( assert ) {
|
||||
var action = {
|
||||
type: 'ABANDON_END',
|
||||
token: 'bananas'
|
||||
},
|
||||
state = {
|
||||
activeToken: 'bananas',
|
||||
isUserDwelling: false
|
||||
};
|
||||
|
||||
assert.deepEqual(
|
||||
mw.popups.reducers.preview( state, action ),
|
||||
{
|
||||
activeLink: undefined,
|
||||
activeToken: undefined,
|
||||
activeEvent: undefined,
|
||||
fetchResponse: undefined,
|
||||
isUserDwelling: false,
|
||||
shouldShow: false
|
||||
},
|
||||
'ABANDON_END should hide the preview and reset the interaction info.'
|
||||
);
|
||||
|
||||
// ---
|
||||
|
||||
state = {
|
||||
activeToken: 'apples',
|
||||
isUserDwelling: true
|
||||
};
|
||||
|
||||
assert.equal(
|
||||
mw.popups.reducers.preview( state, action ),
|
||||
state,
|
||||
'ABANDON_END should NOOP if the current interaction has changed.'
|
||||
);
|
||||
|
||||
// ---
|
||||
|
||||
state = {
|
||||
activeToken: 'bananas',
|
||||
isUserDwelling: true
|
||||
};
|
||||
|
||||
assert.equal(
|
||||
mw.popups.reducers.preview( state, action ),
|
||||
state,
|
||||
'ABANDON_END should NOOP if the user is dwelling on the preview.'
|
||||
);
|
||||
} );
|
||||
|
||||
QUnit.test( 'FETCH_END', function ( assert ) {
|
||||
var state = {
|
||||
activeLink: this.el
|
||||
},
|
||||
action = {
|
||||
type: 'FETCH_END',
|
||||
el: this.el,
|
||||
result: {}
|
||||
};
|
||||
|
||||
assert.expect( 2 );
|
||||
|
||||
assert.deepEqual(
|
||||
mw.popups.reducers.preview( state, action ),
|
||||
{
|
||||
activeLink: state.activeLink, // Previous state.
|
||||
|
||||
fetchResponse: action.result,
|
||||
shouldShow: true
|
||||
},
|
||||
'It should store the result and signal that a preview should be rendered.'
|
||||
);
|
||||
|
||||
// ---
|
||||
|
||||
state = {
|
||||
activeLink: $( '<a>' )
|
||||
};
|
||||
action = {
|
||||
type: 'FETCH_END',
|
||||
el: this.el,
|
||||
result: {}
|
||||
};
|
||||
|
||||
assert.deepEqual(
|
||||
mw.popups.reducers.preview( state, action ),
|
||||
state,
|
||||
'It should NOOP if the user has interacted with another link since the request was dispatched via the gateway.'
|
||||
);
|
||||
} );
|
||||
|
||||
QUnit.test( 'PREVIEW_DWELL', function ( assert ) {
|
||||
var action = {
|
||||
type: 'PREVIEW_DWELL'
|
||||
};
|
||||
|
||||
assert.expect( 1 );
|
||||
|
||||
assert.deepEqual(
|
||||
mw.popups.reducers.preview( {}, action ),
|
||||
{
|
||||
isUserDwelling: true
|
||||
},
|
||||
'It should mark the preview as being dwelled on.'
|
||||
);
|
||||
} );
|
||||
|
||||
QUnit.test( 'ABANDON_START', function ( assert ) {
|
||||
var action = {
|
||||
type: 'ABANDON_START'
|
||||
};
|
||||
|
||||
assert.deepEqual(
|
||||
mw.popups.reducers.preview( {}, action ),
|
||||
{
|
||||
isUserDwelling: false
|
||||
},
|
||||
'ABANDON_START should mark the preview having been abandoned.'
|
||||
);
|
||||
} );
|
||||
|
||||
}( mediaWiki, jQuery ) );
|
Loading…
Reference in a new issue