mediawiki-skins-Vector/tests/jest/skins.vector.clientPreferences.test.js
Ed Sanders 7e7486c4a5 build: Update eslint-config-wikimedia to 0.28.0 and autofix
Change-Id: I350941a711d2304fc968b3ba1f1e0afa5878578e
2024-06-06 16:22:05 +01:00

80 lines
2.3 KiB
JavaScript

const clientPreferences = require( '../../resources/skins.vector.clientPreferences/clientPreferences.js' );
let cp;
describe( 'clientPreferences', () => {
beforeEach( () => {
document.body.innerHTML = '';
cp = document.createElement( 'div' );
cp.id = 'cp';
document.body.appendChild( cp );
mw.requestIdleCallback = ( callback ) => callback();
mw.user.clientPrefs = {
get: jest.fn( () => '1' )
};
const portlet = document.createElement( 'div' );
portlet.innerHTML = `
<div class="vector-menu-heading">Width</div>
<div class="vector-menu-content">
<ul class="vector-menu-content-list"></ul>
</div>
`;
mw.util.addPortlet = jest.fn( () => portlet );
mw.util.addPortletLink = jest.fn( () => {
const li = document.createElement( 'li' );
const a = document.createElement( 'a' );
li.appendChild( a );
portlet.appendChild( li );
return li;
} );
mw.message = jest.fn( ( key ) => ( {
text: () => `msg:${ key }`,
exists: () => true
} ) );
} );
test( 'render empty', () => clientPreferences.render( '#cp', {} ).then( () => {
expect( cp.innerHTML ).toMatchSnapshot();
} ) );
test( 'render font size', () => {
document.documentElement.setAttribute( 'class', 'vector-feature-custom-font-size-clientpref-2' );
return clientPreferences.render( '#cp', {
'vector-feature-custom-font-size': {
options: [ '0', '1', '2' ],
preferenceKey: 'vector-font-size'
}
} ).then( () => {
expect( cp.innerHTML ).toMatchSnapshot();
} );
} );
test( 'doesnt render exclusion notice if the msg key doesnt exist', () => {
mw.message = jest.fn( ( key ) => ( {
text: () => `msg:${ key }`,
exists: () => key !== 'vector-feature-limited-width-exclusion-notice'
} ) );
document.documentElement.setAttribute( 'class', 'vector-feature-limited-width-clientpref-0' );
return clientPreferences.render( '#cp', {
'vector-feature-limited-width': {
options: [ '1', '0' ],
preferenceKey: 'vector-limited-width'
}
} ).then( () => {
expect( cp.innerHTML ).toMatchSnapshot();
} );
} );
test( 'render toggle', () => {
document.documentElement.setAttribute( 'class', 'expandAll-clientpref-1' );
return clientPreferences.render( '#cp', {
expandAll: {
options: [ '0', '1' ],
preferenceKey: 'expandAll',
type: 'switch'
}
} ).then( () => {
expect( cp.innerHTML ).toMatchSnapshot();
} );
} );
} );