gitlab-org--gitlab-foss/spec/frontend/right_sidebar_spec.js

93 lines
3 KiB
JavaScript
Raw Normal View History

import $ from 'jquery';
import MockAdapter from 'axios-mock-adapter';
import '~/commons/bootstrap';
import axios from '~/lib/utils/axios_utils';
2017-12-15 07:57:08 -05:00
import Sidebar from '~/right_sidebar';
2016-08-08 17:19:46 -04:00
2018-10-17 03:13:26 -04:00
let $aside = null;
let $toggle = null;
let $toggleContainer = null;
let $expandIcon = null;
let $collapseIcon = null;
2018-10-17 03:13:26 -04:00
let $page = null;
let $labelsIcon = null;
const assertSidebarState = (state) => {
2018-10-17 03:13:26 -04:00
const shouldBeExpanded = state === 'expanded';
const shouldBeCollapsed = state === 'collapsed';
expect($aside.hasClass('right-sidebar-expanded')).toBe(shouldBeExpanded);
expect($page.hasClass('right-sidebar-expanded')).toBe(shouldBeExpanded);
expect($toggleContainer.data('is-expanded')).toBe(shouldBeExpanded);
expect($expandIcon.hasClass('hidden')).toBe(shouldBeExpanded);
2018-10-17 03:13:26 -04:00
expect($aside.hasClass('right-sidebar-collapsed')).toBe(shouldBeCollapsed);
expect($page.hasClass('right-sidebar-collapsed')).toBe(shouldBeCollapsed);
expect($collapseIcon.hasClass('hidden')).toBe(shouldBeCollapsed);
2018-10-17 03:13:26 -04:00
};
describe('RightSidebar', () => {
2018-10-17 03:13:26 -04:00
describe('fixture tests', () => {
const fixtureName = 'issues/open-issue.html';
2018-10-17 03:13:26 -04:00
preloadFixtures(fixtureName);
let mock;
beforeEach(() => {
2018-10-17 03:13:26 -04:00
loadFixtures(fixtureName);
mock = new MockAdapter(axios);
new Sidebar(); // eslint-disable-line no-new
$aside = $('.right-sidebar');
$page = $('.layout-page');
$toggleContainer = $('.js-sidebar-toggle-container');
$expandIcon = $aside.find('.js-sidebar-expand');
$collapseIcon = $aside.find('.js-sidebar-collapse');
2018-10-17 03:13:26 -04:00
$toggle = $aside.find('.js-sidebar-toggle');
$labelsIcon = $aside.find('.sidebar-collapsed-icon');
});
2018-10-17 03:13:26 -04:00
afterEach(() => {
mock.restore();
});
it('should expand/collapse the sidebar when arrow is clicked', () => {
2018-10-17 03:13:26 -04:00
assertSidebarState('expanded');
$toggle.click();
assertSidebarState('collapsed');
$toggle.click();
assertSidebarState('expanded');
});
it('should float over the page and when sidebar icons clicked', () => {
2018-10-17 03:13:26 -04:00
$labelsIcon.click();
assertSidebarState('expanded');
});
it('should collapse when the icon arrow clicked while it is floating on page', () => {
2018-10-17 03:13:26 -04:00
$labelsIcon.click();
assertSidebarState('expanded');
$toggle.click();
assertSidebarState('collapsed');
});
it('should broadcast todo:toggle event when add todo clicked', (done) => {
2018-10-17 03:13:26 -04:00
const todos = getJSONFixture('todos/todos.json');
mock.onPost(/(.*)\/todos$/).reply(200, todos);
const todoToggleSpy = jest.fn();
$(document).on('todo:toggle', todoToggleSpy);
2018-10-17 03:13:26 -04:00
$('.issuable-sidebar-header .js-issuable-todo').click();
setImmediate(() => {
expect(todoToggleSpy.mock.calls.length).toEqual(1);
2018-10-17 03:13:26 -04:00
done();
});
2018-10-17 03:13:26 -04:00
});
2018-10-17 03:13:26 -04:00
it('should not hide collapsed icons', () => {
[].forEach.call(document.querySelectorAll('.sidebar-collapsed-icon'), (el) => {
2018-10-17 03:13:26 -04:00
expect(el.querySelector('.fa, svg').classList.contains('hidden')).toBeFalsy();
});
2016-07-24 16:45:11 -04:00
});
});
2018-10-17 03:13:26 -04:00
});