UNPKG

igniteui-angular-sovn

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

863 lines (659 loc) 41.9 kB
import { DebugElement } from '@angular/core'; import { TestBed, fakeAsync, tick, ComponentFixture } from '@angular/core/testing'; import { NoopAnimationsModule } from '@angular/platform-browser/animations'; import { IgxGridComponent } from './grid.component'; import { ColumnHidingTestComponent, ColumnGroupsHidingTestComponent } from '../../test-utils/grid-base-components.spec'; import { UIInteractions } from '../../test-utils/ui-interactions.spec'; import { GridFunctions } from '../../test-utils/grid-functions.spec'; import { configureTestSuite } from '../../test-utils/configure-suite'; import { GridSelectionMode, ColumnDisplayOrder } from '../common/enums'; import { ControlsFunction } from '../../test-utils/controls-functions.spec'; import { IgxColumnActionsComponent } from '../column-actions/column-actions.component'; import { SortingDirection } from '../../data-operations/sorting-strategy'; describe('Column Hiding UI #grid', () => { let fix: ComponentFixture<ColumnHidingTestComponent>; let grid: IgxGridComponent; let columnChooser: IgxColumnActionsComponent; let columnChooserElement: DebugElement; const verifyCheckbox = ControlsFunction.verifyCheckbox; const verifyColumnIsHidden = GridFunctions.verifyColumnIsHidden; const getColumnHidingButton = GridFunctions.getColumnHidingButton; configureTestSuite((() => { return TestBed.configureTestingModule({ imports: [ NoopAnimationsModule, ColumnHidingTestComponent, ColumnGroupsHidingTestComponent ] }); })); describe('Basic', () => { beforeEach(() => { fix = TestBed.createComponent(ColumnHidingTestComponent); fix.detectChanges(); grid = fix.componentInstance.grid; columnChooser = fix.componentInstance.chooser; columnChooserElement = GridFunctions.getColumnHidingElement(fix); }); it('title is initially empty.', () => { const title = GridFunctions.getColumnChooserTitle(columnChooserElement); expect(title).toBe(null); }); it('title can be successfully changed.', () => { columnChooser.title = 'Show/Hide Columns'; fix.detectChanges(); const titleElement = GridFunctions.getColumnChooserTitle(columnChooserElement).nativeElement as HTMLHeadingElement; expect(columnChooser.title).toBe('Show/Hide Columns'); expect(titleElement.textContent).toBe('Show/Hide Columns'); columnChooser.title = undefined; fix.detectChanges(); expect(GridFunctions.getColumnChooserTitle(columnChooserElement)).toBeNull(); columnChooser.title = null; fix.detectChanges(); expect(GridFunctions.getColumnChooserTitle(columnChooserElement)).toBeNull(); }); it(`filter input visibility is controlled via 'hideFilter' property.`, () => { let filterInputElement = GridFunctions.getColumnHidingHeaderInput(columnChooserElement); expect(filterInputElement).not.toBeNull(); fix.componentInstance.hideFilter = true; fix.detectChanges(); filterInputElement = GridFunctions.getColumnHidingHeaderInput(columnChooserElement); expect(filterInputElement).toBeNull(); fix.componentInstance.hideFilter = false; fix.detectChanges(); filterInputElement = GridFunctions.getColumnHidingHeaderInput(columnChooserElement); expect(filterInputElement).not.toBeNull(); }); it('lists all 4 hidable grid columns.', () => { const columnItems = columnChooser.columnItems; expect(columnItems.length).toBe(4); expect(GridFunctions.getColumnChooserItems(columnChooserElement).length).toBe(4); }); it('orders columns according to "columnDisplayOrder".', () => { expect(columnChooser.columnDisplayOrder).toBe(ColumnDisplayOrder.DisplayOrder); let columnNames = GridFunctions.getColumnActionsColumnList(columnChooserElement); expect(columnNames).toEqual(['ID', 'Downloads', 'Released', 'ReleaseDate']); columnChooser.columnDisplayOrder = ColumnDisplayOrder.Alphabetical; fix.detectChanges(); expect(columnChooser.columnDisplayOrder).toBe(ColumnDisplayOrder.Alphabetical); columnNames = GridFunctions.getColumnActionsColumnList(columnChooserElement); expect(columnNames).toEqual(['Downloads', 'ID', 'Released', 'ReleaseDate']); columnChooser.columnDisplayOrder = ColumnDisplayOrder.DisplayOrder; fix.detectChanges(); columnNames = GridFunctions.getColumnActionsColumnList(columnChooserElement); expect(columnNames).toEqual(['ID', 'Downloads', 'Released', 'ReleaseDate']); }); it('does not show "ProductName" column.', () => { const colProductName = GridFunctions.getColumnChooserItemElement(columnChooserElement, 'ProductName'); expect(colProductName).toBeUndefined(); }); it('"hiddenColumnsCount" reflects properly the number of hidden columns.', fakeAsync(() => { spyOn(grid.columnVisibilityChanged, 'emit'); spyOn(grid.columnVisibilityChanging, 'emit'); expect(fix.componentInstance.hiddenColumnsCount).toBe(3); grid.columnList.get(2).hidden = false; fix.detectChanges(); expect(fix.componentInstance.hiddenColumnsCount).toBe(4); grid.columnList.get(0).hidden = true; fix.detectChanges(); expect(fix.componentInstance.hiddenColumnsCount).toBe(3); expect(grid.columnVisibilityChanging.emit).toHaveBeenCalledTimes(0); expect(grid.columnVisibilityChanged.emit).toHaveBeenCalledTimes(0); GridFunctions.clickColumnChooserItem(columnChooserElement, 'Released'); fix.detectChanges(); expect(fix.componentInstance.hiddenColumnsCount).toBe(2); expect(grid.columnVisibilityChanging.emit).toHaveBeenCalledTimes(1); expect(grid.columnVisibilityChanged.emit).toHaveBeenCalledTimes(1); })); it('allows hiding a column whose disabled=undefined.', () => { grid.columnList.get(3).disableHiding = undefined; fix.detectChanges(); verifyCheckbox('Released', true, false, columnChooserElement); }); it('columnToggled, columnVisibilityChanged, onColumnVisibilityChanging event is fired on toggling checkboxes.', () => { spyOn(columnChooser.columnToggled, 'emit'); spyOn(grid.columnVisibilityChanged, 'emit'); spyOn(grid.columnVisibilityChanging, 'emit'); GridFunctions.clickColumnChooserItem(columnChooserElement, 'ReleaseDate'); expect(columnChooser.columnToggled.emit).toHaveBeenCalledTimes(1); expect(columnChooser.columnToggled.emit).toHaveBeenCalledWith( { column: grid.getColumnByName('ReleaseDate'), checked: false }); expect(grid.columnVisibilityChanging.emit).toHaveBeenCalledTimes(1); expect(grid.columnVisibilityChanged.emit).toHaveBeenCalledTimes(1); GridFunctions.clickColumnChooserItem(columnChooserElement, 'ReleaseDate'); expect(columnChooser.columnToggled.emit).toHaveBeenCalledTimes(2); expect(columnChooser.columnToggled.emit).toHaveBeenCalledWith( { column: grid.getColumnByName('ReleaseDate'), checked: true }); expect(grid.columnVisibilityChanging.emit).toHaveBeenCalledTimes(2); expect(grid.columnVisibilityChanged.emit).toHaveBeenCalledTimes(2); GridFunctions.clickColumnChooserItem(columnChooserElement, 'Downloads'); expect(columnChooser.columnToggled.emit).toHaveBeenCalledTimes(3); expect(columnChooser.columnToggled.emit).toHaveBeenCalledWith( { column: grid.getColumnByName('Downloads'), checked: true }); expect(grid.columnVisibilityChanging.emit).toHaveBeenCalledTimes(3); expect(grid.columnVisibilityChanged.emit).toHaveBeenCalledTimes(3); GridFunctions.clickColumnChooserItem(columnChooserElement, 'Downloads'); expect(columnChooser.columnToggled.emit).toHaveBeenCalledTimes(4); expect(columnChooser.columnToggled.emit).toHaveBeenCalledWith( { column: grid.getColumnByName('Downloads'), checked: false }); expect(grid.columnVisibilityChanging.emit).toHaveBeenCalledTimes(4); expect(grid.columnVisibilityChanged.emit).toHaveBeenCalledTimes(4); }); it('does not show any items when all columns disabled is true.', () => { grid.columnList.forEach((col) => col.disableHiding = true); fix.detectChanges(); const checkboxes = GridFunctions.getColumnChooserItems(columnChooserElement); expect(checkboxes.length).toBe(0); ControlsFunction.verifyButtonIsDisabled(GridFunctions.getColumnChooserButton(columnChooserElement, 'Show All').nativeElement); ControlsFunction.verifyButtonIsDisabled(GridFunctions.getColumnChooserButton(columnChooserElement, 'Hide All').nativeElement); }); it('- toggling column checkbox checked state successfully changes the grid column visibility.', () => { const checkbox = GridFunctions.getColumnChooserItemElement(columnChooserElement, 'ReleaseDate'); verifyCheckbox('ReleaseDate', true, false, columnChooserElement); const column = grid.getColumnByName('ReleaseDate'); verifyColumnIsHidden(column, false, 4); GridFunctions.clickColumnChooserItem(columnChooserElement, 'ReleaseDate'); fix.detectChanges(); expect(GridFunctions.getColumnChooserItemInput(checkbox).checked).toBe(false); verifyColumnIsHidden(column, true, 3); GridFunctions.clickColumnChooserItem(columnChooserElement, 'ReleaseDate'); fix.detectChanges(); expect(GridFunctions.getColumnChooserItemInput(checkbox).checked).toBe(true); verifyColumnIsHidden(column, false, 4); }); it('reflects properly grid column hidden value changes.', () => { spyOn(grid.columnVisibilityChanged, 'emit'); spyOn(grid.columnVisibilityChanging, 'emit'); const name = 'ReleaseDate'; verifyCheckbox(name, true, false, columnChooserElement); const column = grid.getColumnByName(name); column.hidden = true; fix.detectChanges(); verifyCheckbox(name, false, false, columnChooserElement); verifyColumnIsHidden(column, true, 3); column.hidden = false; fix.detectChanges(); verifyCheckbox(name, true, false, columnChooserElement); verifyColumnIsHidden(column, false, 4); column.hidden = undefined; fix.detectChanges(); verifyCheckbox(name, true, false, columnChooserElement); verifyColumnIsHidden(column, undefined, 4); column.hidden = true; fix.detectChanges(); verifyColumnIsHidden(column, true, 3); column.hidden = null; fix.detectChanges(); verifyCheckbox(name, true, false, columnChooserElement); verifyColumnIsHidden(column, null, 4); expect(grid.columnVisibilityChanging.emit).toHaveBeenCalledTimes(0); expect(grid.columnVisibilityChanged.emit).toHaveBeenCalledTimes(0); }); it('enables the column checkbox and "Show All" button after changing disabled of a hidden column.', () => { grid.columnList.forEach((col) => col.disableHiding = true); const name = 'Downloads'; grid.getColumnByName(name).disableHiding = false; fix.detectChanges(); const showAll = GridFunctions.getColumnChooserButton(columnChooserElement, 'Show All').nativeElement; const hideAll = GridFunctions.getColumnChooserButton(columnChooserElement, 'Hide All').nativeElement; const checkbox = GridFunctions.getColumnChooserItemElement(columnChooserElement, name); verifyCheckbox(name, false, false, columnChooserElement); ControlsFunction.verifyButtonIsDisabled(showAll, false); ControlsFunction.verifyButtonIsDisabled(hideAll); GridFunctions.clickColumnChooserItem(columnChooserElement, name); fix.detectChanges(); expect(GridFunctions.getColumnChooserItemInput(checkbox).checked).toBe(true, 'Checkbox is not checked!'); ControlsFunction.verifyButtonIsDisabled(showAll); ControlsFunction.verifyButtonIsDisabled(hideAll, false); GridFunctions.clickColumnChooserItem(columnChooserElement, name); fix.detectChanges(); expect(GridFunctions.getColumnChooserItemInput(checkbox).checked).toBe(false, 'Checkbox is not unchecked!'); ControlsFunction.verifyButtonIsDisabled(showAll, false); ControlsFunction.verifyButtonIsDisabled(hideAll); }); it('enables the column checkbox and "Hide All" button after changing disabled of a visible column.', () => { grid.columns.forEach((col) => col.disableHiding = true); const name = 'Released'; grid.getColumnByName(name).disableHiding = false; fix.detectChanges(); const showAll = GridFunctions.getColumnChooserButton(columnChooserElement, 'Show All').nativeElement; const hideAll = GridFunctions.getColumnChooserButton(columnChooserElement, 'Hide All').nativeElement; const checkbox = GridFunctions.getColumnChooserItemElement(columnChooserElement, name); verifyCheckbox(name, true, false, columnChooserElement); ControlsFunction.verifyButtonIsDisabled(showAll); ControlsFunction.verifyButtonIsDisabled(hideAll, false); GridFunctions.clickColumnChooserItem(columnChooserElement, name); fix.detectChanges(); expect(GridFunctions.getColumnChooserItemInput(checkbox).checked).toBe(false); ControlsFunction.verifyButtonIsDisabled(showAll, false); ControlsFunction.verifyButtonIsDisabled(hideAll); GridFunctions.clickColumnChooserItem(columnChooserElement, name); fix.detectChanges(); expect(GridFunctions.getColumnChooserItemInput(checkbox).checked).toBe(true); ControlsFunction.verifyButtonIsDisabled(showAll); ControlsFunction.verifyButtonIsDisabled(hideAll, false); }); it('- "Hide All" button gets enabled after checking a column when all used to be hidden.', () => { const hideAll = GridFunctions.getColumnChooserButton(columnChooserElement, 'Hide All'); hideAll.triggerEventHandler('click', new Event('click')); fix.detectChanges(); ControlsFunction.verifyButtonIsDisabled(hideAll.nativeElement); GridFunctions.clickColumnChooserItem(columnChooserElement, 'ID'); fix.detectChanges(); ControlsFunction.verifyButtonIsDisabled(hideAll.nativeElement, false); }); it('- "Show All" button gets enabled after unchecking a column when all used to be visible.', () => { const showAll = GridFunctions.getColumnChooserButton(columnChooserElement, 'Show All'); showAll.triggerEventHandler('click', new Event('click')); fix.detectChanges(); ControlsFunction.verifyButtonIsDisabled(showAll.nativeElement); GridFunctions.clickColumnChooserItem(columnChooserElement, 'Released'); fix.detectChanges(); ControlsFunction.verifyButtonIsDisabled(showAll.nativeElement, false); }); it('- "Hide All" button gets disabled after checking the last unchecked column.', () => { const hideAll = GridFunctions.getColumnChooserButton(columnChooserElement, 'Hide All').nativeElement; ControlsFunction.verifyButtonIsDisabled(hideAll, false); GridFunctions.clickColumnChooserItem(columnChooserElement, 'ReleaseDate'); GridFunctions.clickColumnChooserItem(columnChooserElement, 'Released'); GridFunctions.clickColumnChooserItem(columnChooserElement, 'ID'); fix.detectChanges(); ControlsFunction.verifyButtonIsDisabled(hideAll); }); it('- "Show All" button gets disabled after unchecking the last checked column.', () => { const showAll = GridFunctions.getColumnChooserButton(columnChooserElement, 'Show All').nativeElement; ControlsFunction.verifyButtonIsDisabled(showAll, false); GridFunctions.clickColumnChooserItem(columnChooserElement, 'Downloads'); fix.detectChanges(); ControlsFunction.verifyButtonIsDisabled(showAll); }); it('reflects changes in columns headers.', () => { const column = grid.getColumnByName('ReleaseDate'); column.header = 'Release Date'; fix.detectChanges(); expect(GridFunctions.getColumnChooserItemElement(columnChooserElement, 'ReleaseDate')).toBeUndefined(); expect(GridFunctions.getColumnChooserItemElement(columnChooserElement, 'Release Date')).toBeDefined(); }); it('shows a filter textbox with no prompt', () => { const filterInput = GridFunctions.getColumnChooserFilterInput(columnChooserElement).nativeElement; expect(filterInput).toBeDefined(); expect(filterInput.placeholder).toBe(''); expect(filterInput.textContent).toBe(''); }); it('filter prompt can be changed.', () => { columnChooser.filterColumnsPrompt = 'Type to filter columns'; fix.detectChanges(); const filterInput = GridFunctions.getColumnChooserFilterInput(columnChooserElement).nativeElement; expect(filterInput.placeholder).toBe('Type to filter columns'); expect(filterInput.textContent).toBe(''); columnChooser.filterColumnsPrompt = null; fix.detectChanges(); expect(filterInput.placeholder).toBe(''); expect(filterInput.textContent).toBe(''); columnChooser.filterColumnsPrompt = undefined; fix.detectChanges(); expect(filterInput.placeholder).toBe(''); columnChooser.filterColumnsPrompt = '@\#&*'; fix.detectChanges(); expect(filterInput.placeholder).toBe('@\#&*'); }); it('filters columns on every keystroke in filter input.', () => { const filterInput = GridFunctions.getColumnChooserFilterInput(columnChooserElement); UIInteractions.triggerInputEvent(filterInput, 'r'); fix.detectChanges(); expect(columnChooser.columnItems.length).toBe(2); UIInteractions.triggerInputEvent(filterInput, 'releasedate'); fix.detectChanges(); expect(columnChooser.columnItems.length).toBe(1); UIInteractions.triggerInputEvent(filterInput, 'r'); fix.detectChanges(); expect(columnChooser.columnItems.length).toBe(2); UIInteractions.triggerInputEvent(filterInput, ''); fix.detectChanges(); expect(columnChooser.columnItems.length).toBe(4); }); it('filters columns according to the specified filter criteria.', fakeAsync(() => { columnChooser.filterCriteria = 'd'; fix.detectChanges(); tick(); const filterInput = GridFunctions.getColumnChooserFilterInput(columnChooserElement).nativeElement; expect(filterInput.value).toBe('d'); expect(columnChooser.columnItems.length).toBe(4); columnChooser.filterCriteria += 'a'; fix.detectChanges(); tick(); expect(filterInput.value).toBe('da'); expect(columnChooser.columnItems.length).toBe(1); columnChooser.filterCriteria = ''; columnChooser.filterCriteria = 'el'; fix.detectChanges(); tick(); expect(filterInput.value).toBe('el'); expect(columnChooser.columnItems.length).toBe(2); columnChooser.filterCriteria = ''; fix.detectChanges(); tick(); expect(filterInput.value).toBe(''); expect(columnChooser.columnItems.length).toBe(4); })); it('- Hide All button operates over the filtered in columns only', fakeAsync(() => { spyOn(grid.columnVisibilityChanged, 'emit'); spyOn(grid.columnVisibilityChanging, 'emit'); grid.columnList.get(1).disableHiding = false; columnChooser.filterCriteria = 're'; fix.detectChanges(); const showAll = GridFunctions.getColumnChooserButton(columnChooserElement, 'Show All').nativeElement; const hideAll = GridFunctions.getColumnChooserButton(columnChooserElement, 'Hide All'); ControlsFunction.verifyButtonIsDisabled(showAll); ControlsFunction.verifyButtonIsDisabled(hideAll.nativeElement, false); expect(columnChooser.columnItems.length).toBe(2); hideAll.triggerEventHandler('click', new Event('click')); fix.detectChanges(); let checkbox = GridFunctions.getColumnChooserItemElement(columnChooserElement, 'Released'); expect(GridFunctions.getColumnChooserItemInput(checkbox).checked).toBe(false); checkbox = GridFunctions.getColumnChooserItemElement(columnChooserElement, 'ReleaseDate'); expect(GridFunctions.getColumnChooserItemInput(checkbox).checked).toBe(false); ControlsFunction.verifyButtonIsDisabled(showAll, false); ControlsFunction.verifyButtonIsDisabled(hideAll.nativeElement); expect(grid.columnVisibilityChanging.emit).toHaveBeenCalledTimes(columnChooser.columnItems.length); expect(grid.columnVisibilityChanged.emit).toHaveBeenCalledTimes(columnChooser.columnItems.length); columnChooser.filterCriteria = 'r'; tick(); fix.detectChanges(); ControlsFunction.verifyButtonIsDisabled(showAll, false); ControlsFunction.verifyButtonIsDisabled(hideAll.nativeElement, false); checkbox = GridFunctions.getColumnChooserItemElement(columnChooserElement, 'ProductName'); expect(GridFunctions.getColumnChooserItemInput(checkbox).checked).toBe(true); hideAll.triggerEventHandler('click', new Event('click')); fix.detectChanges(); columnChooser.filterCriteria = ''; tick(); fix.detectChanges(); expect(columnChooser.filterCriteria).toBe('', 'Filter criteria is not empty string!'); expect(GridFunctions.getColumnChooserItemInput(checkbox).checked).toBe(false); checkbox = GridFunctions.getColumnChooserItemElement(columnChooserElement, 'ID'); expect(GridFunctions.getColumnChooserItemInput(checkbox).checked).toBe(true); ControlsFunction.verifyButtonIsDisabled(showAll, false); ControlsFunction.verifyButtonIsDisabled(hideAll.nativeElement, false); expect(grid.columnVisibilityChanging.emit).toHaveBeenCalledTimes(columnChooser.columnItems.length); expect(grid.columnVisibilityChanged.emit).toHaveBeenCalledTimes(columnChooser.columnItems.length); })); it('- When Hide All columns no rows should be rendered', fakeAsync(() => { fix.componentInstance.paging = true; tick(50); fix.detectChanges(); grid.rowSelection = GridSelectionMode.multiple; grid.rowDraggable = true; tick(50); fix.detectChanges(); grid.groupBy({ fieldName: 'Released', dir: SortingDirection.Desc, ignoreCase: false }); fix.detectChanges(); let fixEl = fix.nativeElement; let gridEl = grid.nativeElement; let tHeadItems = fixEl.querySelector('igx-grid-header-group'); let gridRows = fixEl.querySelector('igx-grid-row'); const paging = fixEl.querySelector('.igx-paginator'); let rowSelectors = gridEl.querySelector('.igx-grid__cbx-padding > igx-checkbox'); let dragIndicators = gridEl.querySelector('.igx-grid__drag-indicator'); let verticalScrollBar = gridEl.querySelector('.igx-grid__tbody-scrollbar[hidden]'); expect(tHeadItems).not.toBeNull(); expect(gridRows).not.toBeNull(); expect(paging).not.toBeNull(); expect(rowSelectors).not.toBeNull(); expect(dragIndicators).not.toBeNull(); expect(verticalScrollBar).toBeNull(); grid.columnList.forEach((col) => col.hidden = true); tick(30); fix.detectChanges(); grid.columnList.forEach((col) => { expect(col.width).toBe('0px'); }); fixEl = fix.nativeElement; gridEl = grid.nativeElement; tHeadItems = fixEl.querySelector('igx-grid-header-group'); gridRows = fixEl.querySelector('igx-grid-row'); rowSelectors = gridEl.querySelector('.igx-grid__cbx-padding > igx-checkbox'); dragIndicators = gridEl.querySelector('.igx-grid__drag-indicator'); verticalScrollBar = gridEl.querySelector('.igx-grid__tbody-scrollbar[hidden]'); expect(tHeadItems).toBeNull(); expect(gridRows).toBeNull(); expect(rowSelectors).toBeNull(); expect(dragIndicators).toBeNull(); expect(verticalScrollBar).not.toBeNull(); })); it('- Show All button operates over the filtered in columns only', fakeAsync(() => { spyOn(grid.columnVisibilityChanged, 'emit'); spyOn(grid.columnVisibilityChanging, 'emit'); grid.columnList.get(1).disableHiding = false; fix.detectChanges(); const colLength = columnChooser.columnItems.length; columnChooser.checkAllColumns(); columnChooser.filterCriteria = 're'; fix.detectChanges(); tick(); expect(grid.columnVisibilityChanging.emit).toHaveBeenCalledTimes(colLength); expect(grid.columnVisibilityChanged.emit).toHaveBeenCalledTimes(colLength); const showAll = GridFunctions.getColumnChooserButton(columnChooserElement, 'Show All'); const hideAll = GridFunctions.getColumnChooserButton(columnChooserElement, 'Hide All').nativeElement; ControlsFunction.verifyButtonIsDisabled(showAll.nativeElement); ControlsFunction.verifyButtonIsDisabled(hideAll, false); showAll.triggerEventHandler('click', new Event('click')); fix.detectChanges(); expect(grid.columnVisibilityChanging.emit).toHaveBeenCalledTimes(colLength + columnChooser.columnItems.length); expect(grid.columnVisibilityChanged.emit).toHaveBeenCalledTimes(colLength + columnChooser.columnItems.length); let checkbox = GridFunctions.getColumnChooserItemElement(columnChooserElement, 'Released'); expect(GridFunctions.getColumnChooserItemInput(checkbox).checked).toBe(true); checkbox = GridFunctions.getColumnChooserItemElement(columnChooserElement, 'ReleaseDate'); expect(GridFunctions.getColumnChooserItemInput(checkbox).checked).toBe(true); ControlsFunction.verifyButtonIsDisabled(showAll.nativeElement); ControlsFunction.verifyButtonIsDisabled(hideAll, false); columnChooser.filterCriteria = 'r'; fix.detectChanges(); tick(); ControlsFunction.verifyButtonIsDisabled(showAll.nativeElement); ControlsFunction.verifyButtonIsDisabled(hideAll, false); checkbox = GridFunctions.getColumnChooserItemElement(columnChooserElement, 'ProductName'); expect(GridFunctions.getColumnChooserItemInput(checkbox).checked).toBe(true); showAll.triggerEventHandler('click', new Event('click')); fix.detectChanges(); columnChooser.filterCriteria = ''; fix.detectChanges(); tick(); expect(columnChooser.filterCriteria).toBe('', 'Filter criteria is not empty string!'); checkbox = GridFunctions.getColumnChooserItemElement(columnChooserElement, 'ID'); expect(GridFunctions.getColumnChooserItemInput(checkbox).checked).toBe(true); checkbox = GridFunctions.getColumnChooserItemElement(columnChooserElement, 'ProductName'); expect(GridFunctions.getColumnChooserItemInput(checkbox).checked).toBe(true); ControlsFunction.verifyButtonIsDisabled(showAll.nativeElement); ControlsFunction.verifyButtonIsDisabled(hideAll, false); })); it('hides the proper columns after filtering and clearing the filter', () => { const showAll = GridFunctions.getColumnChooserButton(columnChooserElement, 'Show All'); const filterInput = GridFunctions.getColumnChooserFilterInput(columnChooserElement); UIInteractions.triggerInputEvent(filterInput, 'a'); fix.detectChanges(); ControlsFunction.verifyButtonIsDisabled(showAll.nativeElement, false); showAll.triggerEventHandler('click', new Event('click')); fix.detectChanges(); ControlsFunction.verifyButtonIsDisabled(showAll.nativeElement); expect(grid.columnList.get(2).hidden).toBe(false, 'Downloads column is not hidden!'); UIInteractions.triggerInputEvent(filterInput, ''); fix.detectChanges(); ControlsFunction.verifyButtonIsDisabled(showAll.nativeElement); expect(grid.columnList.get(0).hidden).toBe(false, 'ID column is not shown!'); GridFunctions.clickColumnChooserItem(columnChooserElement, 'ID'); fix.detectChanges(); ControlsFunction.verifyButtonIsDisabled(showAll.nativeElement, false); expect(grid.columnList.get(0).hidden).toBe(true, 'ID column is not hidden!'); }); it('height can be controlled via columnsAreaMaxHeight input.', () => { expect(columnChooser.columnsAreaMaxHeight).toBe('100%'); expect(columnChooserElement.nativeElement.offsetHeight >= 230).toBe(true); columnChooser.columnsAreaMaxHeight = '150px'; fix.detectChanges(); const columnsAreaDiv = GridFunctions.getColumnHidingColumnsContainer(columnChooserElement); expect(getComputedStyle(columnsAreaDiv.nativeElement).maxHeight).toBe('150px'); expect(columnChooserElement.nativeElement.offsetHeight <= 255).toBe(true); }); it('should recalculate heights when enough columns are hidden so that there is no need for horizontal scrollbar.', () => { grid.height = '200px'; fix.detectChanges(); expect(grid.scr.nativeElement.hidden).toBe(false); const toolbar = GridFunctions.getToolbar(fix); const gridHeader = GridFunctions.getGridHeader(grid); const gridScroll = GridFunctions.getGridScroll(fix); const gridFooter = GridFunctions.getGridFooterWrapper(fix); let expectedHeight = parseInt(window.getComputedStyle(grid.nativeElement).height, 10) - parseInt(window.getComputedStyle(toolbar.nativeElement).height, 10) - parseInt(window.getComputedStyle(gridHeader.nativeElement).height, 10) - parseInt(window.getComputedStyle(gridFooter.nativeElement).height, 10) - parseInt(window.getComputedStyle(gridScroll.nativeElement).height, 10); expect(grid.calcHeight).toEqual(expectedHeight); grid.columnList.get(3).hidden = true; fix.detectChanges(); expect(grid.scr.nativeElement.hidden).toBe(true); expectedHeight = parseInt(window.getComputedStyle(grid.nativeElement).height, 10) - parseInt(window.getComputedStyle(toolbar.nativeElement).height, 10) - parseInt(window.getComputedStyle(gridHeader.nativeElement).height, 10) - parseInt(window.getComputedStyle(gridFooter.nativeElement).height, 10); expect(grid.calcHeight).toEqual(expectedHeight); }); }); describe('Column Groups', () => { beforeEach(() => { fix = TestBed.createComponent(ColumnGroupsHidingTestComponent); (fix.componentInstance as ColumnGroupsHidingTestComponent).hasGroupColumns = true; fix.detectChanges(); grid = fix.componentInstance.grid; columnChooser = fix.componentInstance.chooser; columnChooserElement = GridFunctions.getColumnHidingElement(fix); }); it('indents columns according to their level.', () => { const items = GridFunctions.getColumnChooserItems(columnChooserElement); const margin0 = '0px'; const margin30 = '30px'; const margin60 = '60px'; expect(getComputedStyle(items[0].nativeElement).marginLeft).toBe(margin0); expect(getComputedStyle(items[1].nativeElement).marginLeft).toBe(margin0); expect(getComputedStyle(items[2].nativeElement).marginLeft).toBe(margin30); expect(getComputedStyle(items[3].nativeElement).marginLeft).toBe(margin30); expect(getComputedStyle(items[4].nativeElement).marginLeft).toBe(margin60); expect(getComputedStyle(items[5].nativeElement).marginLeft).toBe(margin60); expect(getComputedStyle(items[6].nativeElement).marginLeft).toBe(margin0); }); it('checks & hides all children when hiding their parent.', () => { GridFunctions.clickColumnChooserItem(columnChooserElement, 'Person Details'); fix.detectChanges(); verifyCheckbox('Person Details', false, false, columnChooserElement); verifyCheckbox('ContactName', false, false, columnChooserElement); verifyCheckbox('ContactTitle', false, false, columnChooserElement); verifyColumnIsHidden(grid.columnList.get(3), true, 4); verifyColumnIsHidden(grid.columnList.get(4), true, 4); verifyColumnIsHidden(grid.columnList.get(5), true, 4); verifyCheckbox('CompanyName', true, false, columnChooserElement); verifyCheckbox('General Information', true, false, columnChooserElement); GridFunctions.clickColumnChooserItem(columnChooserElement, 'Person Details'); fix.detectChanges(); verifyColumnIsHidden(grid.columnList.get(3), false, 7); verifyColumnIsHidden(grid.columnList.get(4), false, 7); verifyColumnIsHidden(grid.columnList.get(5), false, 7); verifyCheckbox('Person Details', true, false, columnChooserElement); verifyCheckbox('ContactName', true, false, columnChooserElement); verifyCheckbox('ContactTitle', true, false, columnChooserElement); verifyCheckbox('CompanyName', true, false, columnChooserElement); verifyCheckbox('General Information', true, false, columnChooserElement); }); it('checks & hides all descendants when hiding top level parent.', () => { GridFunctions.clickColumnChooserItem(columnChooserElement, 'General Information'); fix.detectChanges(); verifyCheckbox('General Information', false, false, columnChooserElement); verifyCheckbox('CompanyName', false, false, columnChooserElement); verifyCheckbox('Person Details', false, false, columnChooserElement); verifyCheckbox('ContactName', false, false, columnChooserElement); verifyCheckbox('ContactTitle', false, false, columnChooserElement); verifyCheckbox('Missing', true, false, columnChooserElement); verifyCheckbox('ID', true, false, columnChooserElement); GridFunctions.clickColumnChooserItem(columnChooserElement, 'General Information'); fix.detectChanges(); verifyCheckbox('General Information', true, false, columnChooserElement); verifyCheckbox('CompanyName', true, false, columnChooserElement); verifyCheckbox('Person Details', true, false, columnChooserElement); verifyCheckbox('ContactName', true, false, columnChooserElement); verifyCheckbox('ContactTitle', true, false, columnChooserElement); }); it('checks/unchecks parent when all children are checked/unchecked.', () => { verifyCheckbox('Person Details', true, false, columnChooserElement); GridFunctions.clickColumnChooserItem(columnChooserElement, 'ContactName'); fix.detectChanges(); verifyCheckbox('Person Details', true, false, columnChooserElement); GridFunctions.clickColumnChooserItem(columnChooserElement, 'ContactTitle'); fix.detectChanges(); verifyCheckbox('Person Details', false, false, columnChooserElement); GridFunctions.clickColumnChooserItem(columnChooserElement, 'ContactName'); fix.detectChanges(); verifyCheckbox('Person Details', true, false, columnChooserElement); GridFunctions.clickColumnChooserItem(columnChooserElement, 'ContactTitle'); fix.detectChanges(); verifyCheckbox('Person Details', true, false, columnChooserElement); }); it('filters group columns properly.', () => { columnChooser.filterCriteria = 'cont'; fix.detectChanges(); expect(columnChooser.columnItems.length).toBe(4); expect(GridFunctions.getColumnChooserItems(columnChooserElement).length).toBe(4); expect(GridFunctions.getColumnChooserItemElement(columnChooserElement, 'General Information')).toBeDefined(); expect(GridFunctions.getColumnChooserItemElement(columnChooserElement, 'Person Details')).toBeDefined(); expect(GridFunctions.getColumnChooserItemElement(columnChooserElement, 'ContactName')).toBeDefined(); expect(GridFunctions.getColumnChooserItemElement(columnChooserElement, 'ContactTitle')).toBeDefined(); columnChooser.filterCriteria = 'pers'; fix.detectChanges(); expect(columnChooser.columnItems.length).toBe(2); expect(GridFunctions.getColumnChooserItems(columnChooserElement).length).toBe(2); expect(GridFunctions.getColumnChooserItemElement(columnChooserElement, 'General Information')).toBeDefined(); expect(GridFunctions.getColumnChooserItemElement(columnChooserElement, 'Person Details')).toBeDefined(); columnChooser.filterCriteria = 'mi'; fix.detectChanges(); expect(columnChooser.columnItems.length).toBe(1); expect(GridFunctions.getColumnChooserItems(columnChooserElement).length).toBe(1); expect(GridFunctions.getColumnChooserItemElement(columnChooserElement, 'General Information')).toBeUndefined(); expect(GridFunctions.getColumnChooserItemElement(columnChooserElement, 'Missing')).toBeDefined(); }); it('hides the proper columns when filtering and pressing hide all.', () => { columnChooser.filterCriteria = 'cont'; fix.detectChanges(); const hideAll = GridFunctions.getColumnChooserButton(columnChooserElement, 'Hide All'); hideAll.triggerEventHandler('click', new Event('click')); columnChooser.filterCriteria = ''; fix.detectChanges(); for (let i = 1; i < 6; i++) { verifyColumnIsHidden(grid.columnList.get(i), true, 2); } }); }); describe('toolbar button', () => { beforeEach(fakeAsync(() => { fix = TestBed.createComponent(ColumnHidingTestComponent); fix.detectChanges(); grid = fix.componentInstance.grid; grid.columnList.get(2).hidden = true; fix.componentInstance.showInline = false; fix.detectChanges(); columnChooserElement = GridFunctions.getColumnHidingElement(fix); })); it('shows the number of hidden columns.', () => { fix.detectChanges(); const btnText = getColumnHidingButton(fix).innerText.toLowerCase(); expect(btnText.includes('1') && btnText.includes('hidden')).toBe(true); expect(getColumnChooserButtonIcon(fix).innerText.toLowerCase()).toBe('visibility_off'); }); it('shows the proper icon when no columns are hidden.', () => { grid.columnList.get(2).hidden = false; fix.detectChanges(); const btnText = getColumnHidingButton(fix).innerText.toLowerCase(); expect(btnText.includes('0') && btnText.includes('hidden')).toBe(true); expect(getColumnChooserButtonIcon(fix).innerText.toLowerCase()).toBe('visibility'); }); }); const getColumnChooserButtonIcon = <T>(fixture: ComponentFixture<T>) => getColumnHidingButton(fixture).querySelector('igx-icon'); });