diff options
Diffstat (limited to 'spec/javascripts/sidebar/sidebar_move_issue_spec.js')
-rw-r--r-- | spec/javascripts/sidebar/sidebar_move_issue_spec.js | 166 |
1 files changed, 0 insertions, 166 deletions
diff --git a/spec/javascripts/sidebar/sidebar_move_issue_spec.js b/spec/javascripts/sidebar/sidebar_move_issue_spec.js deleted file mode 100644 index ec712450f2e..00000000000 --- a/spec/javascripts/sidebar/sidebar_move_issue_spec.js +++ /dev/null @@ -1,166 +0,0 @@ -import $ from 'jquery'; -import MockAdapter from 'axios-mock-adapter'; -import axios from '~/lib/utils/axios_utils'; -import SidebarMediator from '~/sidebar/sidebar_mediator'; -import SidebarStore from '~/sidebar/stores/sidebar_store'; -import SidebarService from '~/sidebar/services/sidebar_service'; -import SidebarMoveIssue from '~/sidebar/lib/sidebar_move_issue'; -import Mock from './mock_data'; - -describe('SidebarMoveIssue', function() { - let mock; - - beforeEach(() => { - mock = new MockAdapter(axios); - const mockData = Mock.responseMap.GET['/autocomplete/projects?project_id=15']; - mock.onGet('/autocomplete/projects?project_id=15').reply(200, mockData); - this.mediator = new SidebarMediator(Mock.mediator); - this.$content = $(` - <div class="dropdown"> - <div class="js-toggle"></div> - <div class="dropdown-menu"> - <div class="dropdown-content"></div> - </div> - <div class="js-confirm-button"></div> - </div> - `); - this.$toggleButton = this.$content.find('.js-toggle'); - this.$confirmButton = this.$content.find('.js-confirm-button'); - - this.sidebarMoveIssue = new SidebarMoveIssue( - this.mediator, - this.$toggleButton, - this.$confirmButton, - ); - this.sidebarMoveIssue.init(); - }); - - afterEach(() => { - SidebarService.singleton = null; - SidebarStore.singleton = null; - SidebarMediator.singleton = null; - - this.sidebarMoveIssue.destroy(); - mock.restore(); - }); - - describe('init', () => { - it('should initialize the dropdown and listeners', () => { - spyOn(this.sidebarMoveIssue, 'initDropdown'); - spyOn(this.sidebarMoveIssue, 'addEventListeners'); - - this.sidebarMoveIssue.init(); - - expect(this.sidebarMoveIssue.initDropdown).toHaveBeenCalled(); - expect(this.sidebarMoveIssue.addEventListeners).toHaveBeenCalled(); - }); - }); - - describe('destroy', () => { - it('should remove the listeners', () => { - spyOn(this.sidebarMoveIssue, 'removeEventListeners'); - - this.sidebarMoveIssue.destroy(); - - expect(this.sidebarMoveIssue.removeEventListeners).toHaveBeenCalled(); - }); - }); - - describe('initDropdown', () => { - it('should initialize the gl_dropdown', () => { - spyOn($.fn, 'glDropdown'); - - this.sidebarMoveIssue.initDropdown(); - - expect($.fn.glDropdown).toHaveBeenCalled(); - }); - - it('escapes html from project name', done => { - this.$toggleButton.dropdown('toggle'); - - setTimeout(() => { - expect(this.$content.find('.js-move-issue-dropdown-item')[1].innerHTML.trim()).toEqual( - '<img src=x onerror=alert(document.domain)> foo / bar', - ); - done(); - }); - }); - }); - - describe('onConfirmClicked', () => { - it('should move the issue with valid project ID', () => { - spyOn(this.mediator, 'moveIssue').and.returnValue(Promise.resolve()); - this.mediator.setMoveToProjectId(7); - - this.sidebarMoveIssue.onConfirmClicked(); - - expect(this.mediator.moveIssue).toHaveBeenCalled(); - expect(this.$confirmButton.prop('disabled')).toBeTruthy(); - expect(this.$confirmButton.hasClass('is-loading')).toBe(true); - }); - - it('should remove loading state from confirm button on failure', done => { - spyOn(window, 'Flash'); - spyOn(this.mediator, 'moveIssue').and.returnValue(Promise.reject()); - this.mediator.setMoveToProjectId(7); - - this.sidebarMoveIssue.onConfirmClicked(); - - expect(this.mediator.moveIssue).toHaveBeenCalled(); - // Wait for the move issue request to fail - setTimeout(() => { - expect(window.Flash).toHaveBeenCalled(); - expect(this.$confirmButton.prop('disabled')).toBeFalsy(); - expect(this.$confirmButton.hasClass('is-loading')).toBe(false); - done(); - }); - }); - - it('should not move the issue with id=0', () => { - spyOn(this.mediator, 'moveIssue'); - this.mediator.setMoveToProjectId(0); - - this.sidebarMoveIssue.onConfirmClicked(); - - expect(this.mediator.moveIssue).not.toHaveBeenCalled(); - }); - }); - - it('should set moveToProjectId on dropdown item "No project" click', done => { - spyOn(this.mediator, 'setMoveToProjectId'); - - // Open the dropdown - this.$toggleButton.dropdown('toggle'); - - // Wait for the autocomplete request to finish - setTimeout(() => { - this.$content - .find('.js-move-issue-dropdown-item') - .eq(0) - .trigger('click'); - - expect(this.mediator.setMoveToProjectId).toHaveBeenCalledWith(0); - expect(this.$confirmButton.prop('disabled')).toBeTruthy(); - done(); - }, 0); - }); - - it('should set moveToProjectId on dropdown item click', done => { - spyOn(this.mediator, 'setMoveToProjectId'); - - // Open the dropdown - this.$toggleButton.dropdown('toggle'); - - // Wait for the autocomplete request to finish - setTimeout(() => { - this.$content - .find('.js-move-issue-dropdown-item') - .eq(1) - .trigger('click'); - - expect(this.mediator.setMoveToProjectId).toHaveBeenCalledWith(20); - expect(this.$confirmButton.attr('disabled')).toBe(undefined); - done(); - }, 0); - }); -}); |