| // Copyright 2019 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import {assert} from 'chai'; |
| import {MrChangeColumns} from './mr-change-columns.js'; |
| |
| |
| let element; |
| |
| describe('mr-change-columns', () => { |
| beforeEach(() => { |
| element = document.createElement('mr-change-columns'); |
| document.body.appendChild(element); |
| |
| element._page = sinon.stub(); |
| sinon.stub(element, '_currentPage').get(() => '/test'); |
| }); |
| |
| afterEach(() => { |
| document.body.removeChild(element); |
| }); |
| |
| it('initializes', () => { |
| assert.instanceOf(element, MrChangeColumns); |
| }); |
| |
| it('input initializes with currently set columns', async () => { |
| element.columns = ['ID', 'Summary']; |
| |
| await element.updateComplete; |
| |
| const input = element.shadowRoot.querySelector('#columnsInput'); |
| |
| assert.equal(input.value, 'ID Summary'); |
| }); |
| |
| it('editing input and saving updates columns in URL', async () => { |
| element.columns = ['ID', 'Summary']; |
| element.queryParams = {}; |
| |
| await element.updateComplete; |
| |
| const input = element.shadowRoot.querySelector('#columnsInput'); |
| input.value = 'ID Summary Owner'; |
| |
| element.save(); |
| |
| sinon.assert.calledWith(element._page, |
| '/test?colspec=ID%2BSummary%2BOwner'); |
| }); |
| |
| it('submitting form updates colspec', async () => { |
| element.columns = ['ID', 'Summary']; |
| element.queryParams = {}; |
| |
| await element.updateComplete; |
| |
| const input = element.shadowRoot.querySelector('#columnsInput'); |
| input.value = 'ID Summary Component'; |
| |
| // Note: HTMLFormElement.submit() does not fire event listeners. |
| const submitEvent = new Event('submit'); |
| sinon.spy(submitEvent, 'preventDefault'); |
| const form = element.shadowRoot.querySelector('form'); |
| form.dispatchEvent(submitEvent); |
| |
| // Preventing default is important to prevent native browser form submit |
| // from causing an additional navigation. |
| sinon.assert.calledOnce(submitEvent.preventDefault); |
| |
| sinon.assert.calledWith(element._page, |
| '/test?colspec=ID%2BSummary%2BComponent'); |
| }); |
| }); |