right_sidebar_spec.js 3.8 KB
Newer Older
1
/* eslint-disable space-before-function-paren, no-var, one-var, one-var-declaration-per-line, new-parens, no-return-assign, new-cap, vars-on-top, max-len */
2
/* global Sidebar */
F
Fatih Acet 已提交
3

4 5
import '~/commons/bootstrap';
import '~/right_sidebar';
C
Clement Ho 已提交
6

F
Fatih Acet 已提交
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
(function() {
  var $aside, $icon, $labelsIcon, $page, $toggle, assertSidebarState;

  this.sidebar = null;

  $aside = null;

  $toggle = null;

  $icon = null;

  $page = null;

  $labelsIcon = null;

  assertSidebarState = function(state) {
    var shouldBeCollapsed, shouldBeExpanded;
    shouldBeExpanded = state === 'expanded';
    shouldBeCollapsed = state === 'collapsed';
    expect($aside.hasClass('right-sidebar-expanded')).toBe(shouldBeExpanded);
    expect($page.hasClass('right-sidebar-expanded')).toBe(shouldBeExpanded);
    expect($icon.hasClass('fa-angle-double-right')).toBe(shouldBeExpanded);
    expect($aside.hasClass('right-sidebar-collapsed')).toBe(shouldBeCollapsed);
    expect($page.hasClass('right-sidebar-collapsed')).toBe(shouldBeCollapsed);
    return expect($icon.hasClass('fa-angle-double-left')).toBe(shouldBeCollapsed);
  };

  describe('RightSidebar', function() {
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
    describe('fixture tests', () => {
      var fixtureName = 'issues/open-issue.html.raw';
      preloadFixtures(fixtureName);
      loadJSONFixtures('todos/todos.json');

      beforeEach(function() {
        loadFixtures(fixtureName);
        this.sidebar = new Sidebar;
        $aside = $('.right-sidebar');
        $page = $('.page-with-sidebar');
        $icon = $aside.find('i');
        $toggle = $aside.find('.js-sidebar-toggle');
        return $labelsIcon = $aside.find('.sidebar-collapsed-icon');
      });
      it('should expand/collapse the sidebar when arrow is clicked', function() {
        assertSidebarState('expanded');
        $toggle.click();
        assertSidebarState('collapsed');
        $toggle.click();
        assertSidebarState('expanded');
      });
      it('should float over the page and when sidebar icons clicked', function() {
        $labelsIcon.click();
        return assertSidebarState('expanded');
      });
      it('should collapse when the icon arrow clicked while it is floating on page', function() {
        $labelsIcon.click();
        assertSidebarState('expanded');
        $toggle.click();
        return assertSidebarState('collapsed');
      });

      it('should broadcast todo:toggle event when add todo clicked', function() {
        var todos = getJSONFixture('todos/todos.json');
        spyOn(jQuery, 'ajax').and.callFake(function() {
          var d = $.Deferred();
          var response = todos;
          d.resolve(response);
          return d.promise();
        });

        var todoToggleSpy = spyOnEvent(document, 'todo:toggle');

        $('.issuable-sidebar-header .js-issuable-todo').click();

        expect(todoToggleSpy.calls.count()).toEqual(1);
      });

      it('should not hide collapsed icons', () => {
        [].forEach.call(document.querySelectorAll('.sidebar-collapsed-icon'), (el) => {
          expect(el.querySelector('.fa, svg').classList.contains('hidden')).toBeFalsy();
        });
      });
F
Fatih Acet 已提交
88
    });
C
Clement Ho 已提交
89

90 91 92 93 94 95 96 97 98
    describe('sidebarToggleClicked', () => {
      const event = jasmine.createSpyObj('event', ['preventDefault']);

      beforeEach(() => {
        spyOn($.fn, 'hasClass').and.returnValue(false);
      });

      afterEach(() => {
        gl.lazyLoader = undefined;
C
Clement Ho 已提交
99 100
      });

101 102
      it('calls loadCheck if lazyLoader is set', () => {
        gl.lazyLoader = jasmine.createSpyObj('lazyLoader', ['loadCheck']);
C
Clement Ho 已提交
103

104
        Sidebar.prototype.sidebarToggleClicked(event);
C
Clement Ho 已提交
105

106 107 108 109 110 111 112
        expect(gl.lazyLoader.loadCheck).toHaveBeenCalled();
      });

      it('does not throw if lazyLoader is not defined', () => {
        gl.lazyLoader = undefined;

        const toggle = Sidebar.prototype.sidebarToggleClicked.bind(null, event);
113

114
        expect(toggle).not.toThrow();
115 116
      });
    });
F
Fatih Acet 已提交
117
  });
118
}).call(window);