From 8ed6dc993cfd785841364004930acfb8e9f956e1 Mon Sep 17 00:00:00 2001 From: ghiscoding Date: Tue, 23 Feb 2021 09:00:49 -0500 Subject: [PATCH] fix(helpers): should be able to highlight first row (0) - calling `highlightRow(0)` was not highlighting the row when it should --- .../services/__tests__/grid.service.spec.ts | 40 ++++++++++++++----- .../services/grid.service.ts | 4 +- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/app/modules/angular-slickgrid/services/__tests__/grid.service.spec.ts b/src/app/modules/angular-slickgrid/services/__tests__/grid.service.spec.ts index 532728322..69de5ca1f 100644 --- a/src/app/modules/angular-slickgrid/services/__tests__/grid.service.spec.ts +++ b/src/app/modules/angular-slickgrid/services/__tests__/grid.service.spec.ts @@ -4,6 +4,7 @@ import { GridService, ExtensionService, FilterService, GridStateService, SortSer import { CellArgs, Column, OnEventArgs, GridOption } from './../../models'; declare const Slick: any; +jest.useFakeTimers(); const mockSelectionModel = { init: jest.fn(), @@ -39,6 +40,7 @@ const dataviewStub = { deleteItem: jest.fn(), deleteItems: jest.fn(), getIdxById: jest.fn(), + getItemMetadata: jest.fn(), getItem: jest.fn(), getRowById: jest.fn(), insertItem: jest.fn(), @@ -1079,7 +1081,7 @@ describe('Grid Service', () => { }); describe('highlightRowByMetadata method', () => { - it('should hightlight a row with a fading start & end delay', (done) => { + it('should hightlight a row with a fading start & end delay', () => { const mockColumn = { id: 'field2', field: 'field2', width: 150, rowClass: 'red' } as Column; const getItemSpy = jest.spyOn(dataviewStub, 'getItem').mockReturnValue(mockColumn); const getIndexSpy = jest.spyOn(dataviewStub, 'getIdxById').mockReturnValue(0); @@ -1087,15 +1089,13 @@ describe('Grid Service', () => { const renderSpy = jest.spyOn(service, 'renderGrid'); service.highlightRowByMetadata(2, 1, 1); + jest.runAllTimers(); // fast-forward timer - setTimeout(() => { - expect(getItemSpy).toHaveBeenCalledWith(2); - expect(updateSpy).toHaveBeenCalledTimes(3); - expect(updateSpy).toHaveBeenCalledWith(mockColumn.id, mockColumn); - expect(renderSpy).toHaveBeenCalled(); - expect(getIndexSpy).toHaveBeenCalled(); - done(); - }, 5); + expect(getItemSpy).toHaveBeenCalledWith(2); + expect(updateSpy).toHaveBeenCalledTimes(3); + expect(updateSpy).toHaveBeenCalledWith(mockColumn.id, mockColumn); + expect(renderSpy).toHaveBeenCalled(); + expect(getIndexSpy).toHaveBeenCalled(); }); }); @@ -1492,6 +1492,28 @@ describe('Grid Service', () => { }); }); + describe('highlightRow method', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should be able to highlight first row at zero index', () => { + const mockRowMetadata = (rowNumber) => ({ cssClasses: `row-${rowNumber}` }); + const mockItem = { id: 0, firstName: 'John', lastName: 'Doe' }; + jest.spyOn(service, 'getItemRowMetadataToHighlight').mockReturnValue(mockRowMetadata); + jest.spyOn(dataviewStub, 'getItem').mockReturnValue(mockItem); + jest.spyOn(dataviewStub, 'getIdxById').mockReturnValue(0); + const updateSpy = jest.spyOn(dataviewStub, 'updateItem'); + const renderSpy = jest.spyOn(service, 'renderGrid'); + + service.highlightRow(0, 10, 15); + jest.runAllTimers(); // fast-forward timer + + expect(updateSpy).toHaveBeenCalledWith(0, mockItem) + expect(renderSpy).toHaveBeenCalledTimes(3); + }); + }); + // -- // DEPRECATED methods, to be removed eventually // ---------------------- diff --git a/src/app/modules/angular-slickgrid/services/grid.service.ts b/src/app/modules/angular-slickgrid/services/grid.service.ts index f7fcd5903..f7ee4dc7f 100644 --- a/src/app/modules/angular-slickgrid/services/grid.service.ts +++ b/src/app/modules/angular-slickgrid/services/grid.service.ts @@ -266,7 +266,7 @@ export class GridService { const item = this._dataView.getItem(rowNumber); const idPropName = this._gridOptions.datasetIdPropertyName || 'id'; - if (item && item[idPropName]) { + if (item && item[idPropName] !== undefined) { item.rowClass = 'highlight'; this._dataView.updateItem(item[idPropName], item); this.renderGrid(); @@ -281,7 +281,7 @@ export class GridService { // delete the row's CSS highlight classes once the delay is passed setTimeout(() => { - if (item && item[idPropName]) { + if (item && item[idPropName] !== undefined) { delete item.rowClass; if (this._dataView.getIdxById(item[idPropName]) !== undefined) { this._dataView.updateItem(item[idPropName], item);