| // 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 sinon from 'sinon'; |
| import {MrShowColumnsDropdown} from './mr-show-columns-dropdown.js'; |
| |
| /** @type {MrShowColumnsDropdown} */ |
| let element; |
| |
| describe('mr-show-columns-dropdown', () => { |
| beforeEach(() => { |
| element = document.createElement('mr-show-columns-dropdown'); |
| document.body.appendChild(element); |
| |
| sinon.stub(element, '_baseUrl').returns('/p/chromium/issues/list'); |
| sinon.stub(element, '_page'); |
| }); |
| |
| afterEach(() => { |
| document.body.removeChild(element); |
| }); |
| |
| it('initializes', () => { |
| assert.instanceOf(element, MrShowColumnsDropdown); |
| }); |
| |
| it('displaying columns (spa)', async () => { |
| element.defaultFields = ['ID', 'Summary', 'AllLabels']; |
| element.columns = ['ID']; |
| element.issues = [ |
| {approvalValues: [{fieldRef: {fieldName: 'Approval-Name'}}]}, |
| {fieldValues: [ |
| {phaseRef: {phaseName: 'Phase'}, fieldRef: {fieldName: 'Field-Name'}}, |
| {fieldRef: {fieldName: 'Field-Name'}}, |
| ]}, |
| {labelRefs: [{label: 'Label-Name'}]}, |
| ]; |
| |
| await element.updateComplete; |
| |
| const actual = |
| element.items.map((item) => ({icon: item.icon, text: item.text})); |
| const expected = [ |
| {icon: 'check', text: 'ID'}, |
| {icon: '', text: 'AllLabels'}, |
| {icon: '', text: 'Approval-Name'}, |
| {icon: '', text: 'Approval-Name-Approver'}, |
| {icon: '', text: 'Field-Name'}, |
| {icon: '', text: 'Label'}, |
| {icon: '', text: 'Phase.Field-Name'}, |
| {icon: '', text: 'Summary'}, |
| ]; |
| assert.deepEqual(actual, expected); |
| }); |
| |
| describe('displaying columns (ezt)', () => { |
| it('sorts default column options', async () => { |
| element.defaultFields = ['ID', 'Summary', 'AllLabels']; |
| element.columns = []; |
| element._labelPrefixFields = []; |
| |
| // Re-compute menu items on update. |
| await element.updateComplete; |
| const options = element.items; |
| |
| assert.equal(options.length, 3); |
| |
| assert.equal(options[0].text.trim(), 'AllLabels'); |
| assert.equal(options[0].icon, ''); |
| |
| assert.equal(options[1].text.trim(), 'ID'); |
| assert.equal(options[1].icon, ''); |
| |
| assert.equal(options[2].text.trim(), 'Summary'); |
| assert.equal(options[2].icon, ''); |
| }); |
| |
| it('sorts selected columns above unselected columns', async () => { |
| element.defaultFields = ['ID', 'Summary', 'AllLabels']; |
| element.columns = ['ID']; |
| element._labelPrefixFields = []; |
| |
| // Re-compute menu items on update. |
| await element.updateComplete; |
| const options = element.items; |
| |
| assert.equal(options.length, 3); |
| |
| assert.equal(options[0].text.trim(), 'ID'); |
| assert.equal(options[0].icon, 'check'); |
| |
| assert.equal(options[1].text.trim(), 'AllLabels'); |
| assert.equal(options[1].icon, ''); |
| |
| assert.equal(options[2].text.trim(), 'Summary'); |
| assert.equal(options[2].icon, ''); |
| }); |
| |
| it('sorts field defs and label prefix column options', async () => { |
| element.defaultFields = ['ID', 'Summary']; |
| element.columns = []; |
| element._fieldDefs = [ |
| {fieldRef: {fieldName: 'HelloWorld'}}, |
| {fieldRef: {fieldName: 'TestField'}}, |
| ]; |
| |
| element._labelPrefixFields = ['Milestone', 'Priority']; |
| |
| // Re-compute menu items on update. |
| await element.updateComplete; |
| const options = element.items; |
| |
| assert.equal(options.length, 6); |
| assert.equal(options[0].text.trim(), 'HelloWorld'); |
| assert.equal(options[0].icon, ''); |
| |
| assert.equal(options[1].text.trim(), 'ID'); |
| assert.equal(options[1].icon, ''); |
| |
| assert.equal(options[2].text.trim(), 'Milestone'); |
| assert.equal(options[2].icon, ''); |
| |
| assert.equal(options[3].text.trim(), 'Priority'); |
| assert.equal(options[3].icon, ''); |
| |
| assert.equal(options[4].text.trim(), 'Summary'); |
| assert.equal(options[4].icon, ''); |
| |
| assert.equal(options[5].text.trim(), 'TestField'); |
| assert.equal(options[5].icon, ''); |
| }); |
| |
| it('add approver fields for approval type fields', async () => { |
| element.defaultFields = []; |
| element.columns = []; |
| element._fieldDefs = [ |
| {fieldRef: {fieldName: 'HelloWorld', type: 'APPROVAL_TYPE'}}, |
| ]; |
| element._labelPrefixFields = []; |
| |
| // Re-compute menu items on update. |
| await element.updateComplete; |
| const options = element.items; |
| |
| assert.equal(options.length, 2); |
| assert.equal(options[0].text.trim(), 'HelloWorld'); |
| assert.equal(options[0].icon, ''); |
| |
| assert.equal(options[1].text.trim(), 'HelloWorld-Approver'); |
| assert.equal(options[1].icon, ''); |
| }); |
| |
| it('phase field columns are correctly named', async () => { |
| element.defaultFields = []; |
| element.columns = []; |
| element._fieldDefs = [ |
| {fieldRef: {fieldName: 'Number', type: 'INT_TYPE'}, isPhaseField: true}, |
| {fieldRef: {fieldName: 'Speak', type: 'STR_TYPE'}, isPhaseField: true}, |
| ]; |
| element._labelPrefixFields = []; |
| element.phaseNames = ['cow', 'chicken']; |
| |
| // Re-compute menu items on update. |
| await element.updateComplete; |
| const options = element.items; |
| |
| assert.equal(options.length, 4); |
| assert.equal(options[0].text.trim(), 'chicken.Number'); |
| assert.equal(options[0].icon, ''); |
| |
| assert.equal(options[1].text.trim(), 'chicken.Speak'); |
| assert.equal(options[1].icon, ''); |
| |
| assert.equal(options[2].text.trim(), 'cow.Number'); |
| assert.equal(options[2].icon, ''); |
| |
| assert.equal(options[3].text.trim(), 'cow.Speak'); |
| assert.equal(options[3].icon, ''); |
| }); |
| }); |
| |
| describe('modifying columns', () => { |
| it('clicking unset column adds a column', async () => { |
| element.columns = ['ID', 'Summary']; |
| element.defaultFields = ['ID', 'Summary', 'AllLabels']; |
| element.queryParams = {}; |
| |
| await element.updateComplete; |
| element.clickItem(2); |
| |
| sinon.assert.calledWith(element._page, |
| '/p/chromium/issues/list?colspec=ID%20Summary%20AllLabels'); |
| }); |
| |
| it('clicking set column removes a column', async () => { |
| element.columns = ['ID', 'Summary']; |
| element.defaultFields = ['ID', 'Summary', 'AllLabels']; |
| element.queryParams = {}; |
| |
| await element.updateComplete; |
| element.clickItem(0); |
| |
| sinon.assert.calledWith(element._page, |
| '/p/chromium/issues/list?colspec=Summary'); |
| }); |
| }); |
| }); |