mediawiki-skins-Vector/tests/jest/skins.vector.js/menuTabs.test.js
Nicholas Ray 97147857b2 Add vector-tab-noicon class to tabbed menus when menu items are added by gadgets
* Removes server rendered vector-tab-noicon class from legacy Vector as it is
not currently used.

* Adds menuTabs.js responsible for adding the vector-tab-noicon class when menu
items are added to tabbed menus. This is only used in vector-22.

* Adds unit test

Bug: T320691
Change-Id: Iffad86125f8754305f592ddc19d894866bd6dedc
2022-10-20 18:21:58 -06:00

77 lines
1.9 KiB
JavaScript

const menuTabs = require( '../../../resources/skins.vector.js/menuTabs.js' );
describe( 'menuTabs', () => {
beforeEach( () => {
/** @type {Function} */
let callback;
// @ts-ignore
jest.spyOn( mw, 'hook' ).mockImplementation( () => {
return {
add: function ( fn ) {
callback = fn;
return this;
},
fire: ( data ) => {
if ( callback ) {
callback( data );
}
}
};
} );
} );
afterEach( () => {
jest.restoreAllMocks();
} );
test( 'adds vector-tab-noicon class to li element when part of tabs', () => {
document.body.innerHTML = `
<div id="p-views" class="vector-menu mw-portlet mw-portlet-views vector-menu-tabs">
<div class="vector-menu-content">
<ul class="vector-menu-content-list">
<li class="mw-list-item mw-list-item-js" id="test-id">
<a href="#test-href">
<span>
test link content
</span>
</a>
</li>
</ul>
</div>
</div>
`;
const menuItem = document.getElementById( 'test-id' );
menuTabs();
// @ts-ignore
mw.hook( 'util' ).fire( menuItem, { id: 'test-id' } );
expect( document.body.innerHTML ).toMatchSnapshot();
} );
test( 'does not add vector-tab-noicon class to li element when not part of tabs', () => {
document.body.innerHTML = `
<div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants vector-menu-dropdown-noicon vector-menu-dropdown">
<div class="vector-menu-content">
<ul class="vector-menu-content-list">
<li class="mw-list-item mw-list-item-js" id="test-id">
<a href="#test-href">
<span>
test link content
</span>
</a>
</li>
</ul>
</div>
</div>
`;
const menuItem = document.getElementById( 'test-id' );
menuTabs();
// @ts-ignore
mw.hook( 'util' ).fire( menuItem, { id: 'test-id' } );
expect( document.body.innerHTML ).toMatchSnapshot();
} );
} );