2017-07-28 17:32:46 +00:00
|
|
|
import preview from '../../../src/reducers/preview';
|
2018-01-11 15:44:26 +00:00
|
|
|
import actionTypes from '../../../src/actionTypes';
|
2018-01-11 18:56:56 +00:00
|
|
|
import { createNullModel } from '../../../src/preview/model';
|
2017-02-15 15:00:16 +00:00
|
|
|
|
|
|
|
QUnit.module( 'ext.popups/reducers#preview', {
|
2018-03-14 22:04:59 +00:00
|
|
|
beforeEach() {
|
2017-02-15 15:00:16 +00:00
|
|
|
this.el = 'active link';
|
|
|
|
}
|
|
|
|
} );
|
|
|
|
|
2018-03-14 23:50:09 +00:00
|
|
|
QUnit.test( '@@INIT', ( assert ) => {
|
2018-03-15 16:30:11 +00:00
|
|
|
let state = preview( undefined, { type: '@@INIT' } );
|
2017-02-15 15:00:16 +00:00
|
|
|
|
|
|
|
assert.expect( 1 );
|
|
|
|
|
|
|
|
assert.deepEqual(
|
|
|
|
state,
|
|
|
|
{
|
|
|
|
enabled: undefined,
|
|
|
|
activeLink: undefined,
|
|
|
|
activeEvent: undefined,
|
|
|
|
activeToken: '',
|
|
|
|
shouldShow: false,
|
|
|
|
isUserDwelling: false
|
|
|
|
}
|
|
|
|
);
|
|
|
|
} );
|
|
|
|
|
2018-03-14 23:50:09 +00:00
|
|
|
QUnit.test( 'BOOT', ( assert ) => {
|
2018-03-15 16:30:11 +00:00
|
|
|
let action = {
|
2017-02-15 15:00:16 +00:00
|
|
|
type: 'BOOT',
|
|
|
|
isEnabled: true
|
|
|
|
};
|
|
|
|
|
|
|
|
assert.expect( 1 );
|
|
|
|
|
|
|
|
assert.deepEqual(
|
|
|
|
preview( {}, action ),
|
|
|
|
{
|
|
|
|
enabled: true
|
|
|
|
},
|
|
|
|
'It should set whether or not previews are enabled.'
|
|
|
|
);
|
|
|
|
} );
|
|
|
|
|
2018-03-14 23:50:09 +00:00
|
|
|
QUnit.test( 'SETTINGS_CHANGE', ( assert ) => {
|
2018-03-15 16:30:11 +00:00
|
|
|
let action = {
|
2017-02-15 15:00:16 +00:00
|
|
|
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 ) {
|
2018-03-15 16:30:11 +00:00
|
|
|
let action = {
|
2017-02-15 15:00:16 +00:00
|
|
|
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 ) {
|
2018-03-15 16:30:11 +00:00
|
|
|
let action = {
|
2017-02-15 15:00:16 +00:00
|
|
|
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'
|
|
|
|
);
|
|
|
|
} );
|
|
|
|
|
2018-03-14 23:50:09 +00:00
|
|
|
QUnit.test( 'ABANDON_END', ( assert ) => {
|
2018-03-15 16:30:11 +00:00
|
|
|
let action = {
|
2017-02-15 15:00:16 +00:00
|
|
|
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.'
|
|
|
|
);
|
|
|
|
} );
|
|
|
|
|
2018-03-14 23:50:09 +00:00
|
|
|
QUnit.test( 'FETCH_COMPLETE', ( assert ) => {
|
2018-03-15 16:30:11 +00:00
|
|
|
let token = '1234567890',
|
2017-04-07 12:40:55 +00:00
|
|
|
state = {
|
2017-04-21 10:59:38 +00:00
|
|
|
activeToken: token,
|
|
|
|
isUserDwelling: true
|
2017-02-15 15:00:16 +00:00
|
|
|
},
|
|
|
|
action = {
|
2017-03-26 18:19:24 +00:00
|
|
|
type: 'FETCH_COMPLETE',
|
2018-03-14 19:44:22 +00:00
|
|
|
token,
|
2017-02-15 15:00:16 +00:00
|
|
|
result: {}
|
|
|
|
};
|
|
|
|
|
2017-04-21 10:59:38 +00:00
|
|
|
assert.expect( 3 );
|
2017-02-15 15:00:16 +00:00
|
|
|
|
|
|
|
assert.deepEqual(
|
|
|
|
preview( state, action ),
|
|
|
|
{
|
2017-04-21 10:59:38 +00:00
|
|
|
// Previous state.
|
|
|
|
activeToken: state.activeToken,
|
|
|
|
isUserDwelling: true,
|
2017-02-15 15:00:16 +00:00
|
|
|
|
|
|
|
fetchResponse: action.result,
|
|
|
|
shouldShow: true
|
|
|
|
},
|
|
|
|
'It should store the result and signal that a preview should be rendered.'
|
|
|
|
);
|
|
|
|
|
|
|
|
// ---
|
|
|
|
|
2017-04-21 10:59:38 +00:00
|
|
|
state = preview( state, {
|
|
|
|
type: 'ABANDON_START',
|
2018-03-14 19:44:22 +00:00
|
|
|
token
|
2017-04-21 10:59:38 +00:00
|
|
|
} );
|
|
|
|
|
|
|
|
assert.deepEqual(
|
|
|
|
preview( state, action ),
|
|
|
|
{
|
|
|
|
activeToken: token,
|
|
|
|
isUserDwelling: false, // Set when ABANDON_START is reduced.
|
|
|
|
|
|
|
|
fetchResponse: action.result,
|
|
|
|
shouldShow: false
|
|
|
|
},
|
|
|
|
'It shouldn\'t signal that a preview should be rendered if the user has abandoned the link since the gateway request was made.'
|
|
|
|
);
|
|
|
|
|
|
|
|
// ---
|
|
|
|
|
2017-02-15 15:00:16 +00:00
|
|
|
action = {
|
2017-03-26 18:19:24 +00:00
|
|
|
type: 'FETCH_COMPLETE',
|
2017-04-07 12:40:55 +00:00
|
|
|
token: 'banana',
|
2017-02-15 15:00:16 +00:00
|
|
|
result: {}
|
|
|
|
};
|
|
|
|
|
|
|
|
assert.deepEqual(
|
|
|
|
preview( state, action ),
|
|
|
|
state,
|
2017-04-21 10:59:38 +00:00
|
|
|
'It should NOOP if the user has interacted with another link since the gateway request was made.'
|
2017-02-15 15:00:16 +00:00
|
|
|
);
|
2017-04-21 10:59:38 +00:00
|
|
|
|
2017-02-15 15:00:16 +00:00
|
|
|
} );
|
|
|
|
|
2018-03-14 23:50:09 +00:00
|
|
|
QUnit.test( actionTypes.FETCH_FAILED, ( assert ) => {
|
2018-03-15 16:30:11 +00:00
|
|
|
let token = '1234567890',
|
2018-01-11 15:44:26 +00:00
|
|
|
state = {
|
|
|
|
activeToken: token,
|
|
|
|
isUserDwelling: true
|
|
|
|
},
|
|
|
|
action = {
|
|
|
|
type: actionTypes.FETCH_FAILED,
|
2018-03-14 19:44:22 +00:00
|
|
|
token
|
2018-01-11 15:44:26 +00:00
|
|
|
};
|
|
|
|
|
2018-01-11 18:56:56 +00:00
|
|
|
assert.expect( 2 );
|
2018-01-11 15:44:26 +00:00
|
|
|
|
|
|
|
assert.deepEqual(
|
|
|
|
preview( state, action ),
|
|
|
|
{
|
|
|
|
activeToken: state.activeToken,
|
|
|
|
isUserDwelling: true
|
|
|
|
},
|
2018-01-11 18:56:56 +00:00
|
|
|
'It should not transition states.'
|
|
|
|
);
|
|
|
|
|
|
|
|
// ---
|
|
|
|
|
|
|
|
action = {
|
|
|
|
type: actionTypes.FETCH_COMPLETE,
|
2018-03-14 19:44:22 +00:00
|
|
|
token,
|
2018-01-11 18:56:56 +00:00
|
|
|
result: { title: createNullModel( 'Title', '/wiki/Title' ) }
|
|
|
|
};
|
|
|
|
|
|
|
|
assert.deepEqual(
|
|
|
|
preview( state, action ),
|
|
|
|
{
|
|
|
|
activeToken: state.activeToken,
|
|
|
|
isUserDwelling: true,
|
|
|
|
|
|
|
|
fetchResponse: action.result,
|
|
|
|
shouldShow: true
|
|
|
|
},
|
|
|
|
'It should store the result and signal that an error preview should be rendered.'
|
2018-01-11 15:44:26 +00:00
|
|
|
);
|
|
|
|
} );
|
|
|
|
|
2018-03-14 23:50:09 +00:00
|
|
|
QUnit.test( 'PREVIEW_DWELL', ( assert ) => {
|
2018-03-15 16:30:11 +00:00
|
|
|
let action = {
|
2017-02-15 15:00:16 +00:00
|
|
|
type: 'PREVIEW_DWELL'
|
|
|
|
};
|
|
|
|
|
|
|
|
assert.expect( 1 );
|
|
|
|
|
|
|
|
assert.deepEqual(
|
|
|
|
preview( {}, action ),
|
|
|
|
{
|
|
|
|
isUserDwelling: true
|
|
|
|
},
|
|
|
|
'It should mark the preview as being dwelled on.'
|
|
|
|
);
|
|
|
|
} );
|
|
|
|
|
2018-03-14 23:50:09 +00:00
|
|
|
QUnit.test( 'ABANDON_START', ( assert ) => {
|
2018-03-15 16:30:11 +00:00
|
|
|
let action = {
|
2017-02-15 15:00:16 +00:00
|
|
|
type: 'ABANDON_START'
|
|
|
|
};
|
|
|
|
|
|
|
|
assert.deepEqual(
|
|
|
|
preview( {}, action ),
|
|
|
|
{
|
|
|
|
isUserDwelling: false
|
|
|
|
},
|
|
|
|
'ABANDON_START should mark the preview having been abandoned.'
|
|
|
|
);
|
|
|
|
} );
|