Skip to content

Commit 3373fa8

Browse files
committed
refactor(grid): add unit tests for the api service and fix test imports
1 parent 48081d6 commit 3373fa8

14 files changed

+244
-21
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import { EmptyMockGrid } from './empty-mockgrid';
2+
import { IGridAPIService } from './api.service';
3+
import { IgxColumnComponent } from './column.component';
4+
import { QueryList } from '@angular/core';
5+
import { IgxRowComponent } from './row.component';
6+
7+
fdescribe('API Service - unit tests', () => {
8+
let service: MockGridService;
9+
let grid: MockGrid;
10+
11+
beforeEach(() => {
12+
service = new MockGridService();
13+
grid = new MockGrid();
14+
service.register(grid);
15+
});
16+
17+
it('Should be able to get registered grid', () => {
18+
const registeredGrid = service.get(grid.id);
19+
expect(registeredGrid === grid);
20+
});
21+
22+
it('Should be able to delete registered grid', () => {
23+
service.unsubscribe(grid);
24+
const notRegisteredGrid = service.get(grid.id);
25+
expect(notRegisteredGrid).not.toBeDefined();
26+
});
27+
28+
it('Should be able to get a column by key', () => {
29+
const column = new IgxColumnComponent(service, null, null);
30+
column.field = 'test';
31+
grid.columns = [column];
32+
const foundColumn = service.get_column_by_name(grid.id, column.field);
33+
expect(foundColumn === column);
34+
});
35+
36+
// TODO Add summary test
37+
38+
it('Should be able to find a row by key with primary key', () => {
39+
const dataItem = {
40+
primaryKey: 'test',
41+
};
42+
const row = new IgxRowComponent<MockGrid>(service, null, null, null);
43+
row.rowData = dataItem;
44+
const list = new QueryList<IgxRowComponent<MockGrid>>();
45+
list.reset([row]);
46+
47+
grid.dataRowList = list;
48+
grid.primaryKey = 'primaryKey';
49+
50+
const foundRow = service.get_row_by_key(grid.id, dataItem.primaryKey);
51+
expect(foundRow === row);
52+
});
53+
54+
it('Should be able to find a row by key with no primary key', () => {
55+
const dataItem = {
56+
primaryKey: 'test',
57+
};
58+
const row = new IgxRowComponent<MockGrid>(service, null, null, null);
59+
row.rowData = dataItem;
60+
const list = new QueryList<IgxRowComponent<MockGrid>>();
61+
list.reset([row]);
62+
63+
grid.dataRowList = list;
64+
65+
const foundRow = service.get_row_by_key(grid.id, dataItem);
66+
expect(foundRow === row);
67+
});
68+
69+
it('Should be able to find a row by index', () => {
70+
const row = new IgxRowComponent<MockGrid>(service, null, null, null);
71+
row.index = 6;
72+
const list = new QueryList<IgxRowComponent<MockGrid>>();
73+
list.reset([row]);
74+
const foundRow = service.get_row_by_index(grid.id, row.index);
75+
expect(foundRow === row);
76+
});
77+
});
78+
79+
class MockGrid extends EmptyMockGrid {}
80+
81+
class MockGridService extends IGridAPIService<MockGrid> {}
82+
83+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
import {
2+
QueryList,
3+
ChangeDetectorRef,
4+
EventEmitter
5+
} from '@angular/core';
6+
7+
import { IgxOverlayOutletDirective } from '../directives/toggle/toggle.directive';
8+
9+
import { ISortingExpression } from '../data-operations/sorting-expression.interface';
10+
import { IFilteringExpressionsTree } from '../data-operations/filtering-expressions-tree';
11+
import { IFilteringOperation } from '../data-operations/filtering-condition';
12+
13+
import { IgxColumnComponent } from './column.component';
14+
import { IgxGridHeaderComponent } from './grid-header.component';
15+
import { IgxRowComponent } from './row.component';
16+
17+
import { IgxForOfDirective } from '../directives/for-of/for_of.directive';
18+
19+
import { IgxSelectionAPIService } from '../core/selection';
20+
21+
import { IColumnVisibilityChangedEventArgs } from './column-hiding/column-hiding-item.directive';
22+
import {
23+
IGridComponent,
24+
ISearchInfo,
25+
IGridEditEventArgs,
26+
IRowDataEventArgs,
27+
IColumnMovingStartEventArgs,
28+
IColumnMovingEventArgs,
29+
IColumnMovingEndEventArgs,
30+
IGridToolbarExportEventArgs
31+
} from './grid-interfaces';
32+
33+
export class EmptyMockGrid implements IGridComponent {
34+
columns: IgxColumnComponent[];
35+
data: any[];
36+
filteredSortedData: any[];
37+
primaryKey: string;
38+
rowList: QueryList<any>;
39+
dataRowList: QueryList<IgxRowComponent<IGridComponent>>;
40+
sortingExpressions: ISortingExpression[];
41+
paging: boolean;
42+
page: number;
43+
perPage: number;
44+
isLastPage: boolean;
45+
filteringExpressionsTree: IFilteringExpressionsTree;
46+
lastSearchInfo: ISearchInfo;
47+
summariesHeight: number;
48+
columnsWithNoSetWidths: IgxColumnComponent[];
49+
hasMovableColumns: boolean;
50+
pinnedColumns: IgxColumnComponent[];
51+
unpinnedColumns: IgxColumnComponent[];
52+
pinnedColumnsText: string;
53+
visibleColumns: IgxColumnComponent[];
54+
headerList: QueryList<IgxGridHeaderComponent>;
55+
draggedColumn: IgxColumnComponent;
56+
isColumnResizing: boolean;
57+
isColumnMoving: boolean;
58+
evenRowCSS: string;
59+
oddRowCSS: string;
60+
displayDensity: string;
61+
outletDirective: IgxOverlayOutletDirective;
62+
hiddenColumnsCount: number;
63+
hiddenColumnsText: string;
64+
columnHiding: boolean;
65+
columnPinning: boolean;
66+
rowSelectable: boolean;
67+
allRowsSelected: boolean;
68+
selectionAPI: IgxSelectionAPIService;
69+
unpinnedWidth: number;
70+
calcHeight: number;
71+
calcPinnedContainerMaxWidth: number;
72+
rowHeight: number;
73+
defaultRowHeight: number;
74+
onEditDone: EventEmitter<IGridEditEventArgs>;
75+
onRowDeleted: EventEmitter<IRowDataEventArgs>;
76+
onColumnMovingStart: EventEmitter<IColumnMovingStartEventArgs>;
77+
onColumnMoving: EventEmitter<IColumnMovingEventArgs>;
78+
onColumnMovingEnd: EventEmitter<IColumnMovingEndEventArgs>;
79+
id = 'mock-grid';
80+
nativeElement: any;
81+
cdr: ChangeDetectorRef;
82+
exportExcel: boolean;
83+
exportCsv: boolean;
84+
toolbarTitle: string;
85+
exportText: string;
86+
exportExcelText: string;
87+
exportCsvText: string;
88+
columnHidingTitle: string;
89+
columnPinningTitle: string;
90+
onToolbarExporting: EventEmitter<IGridToolbarExportEventArgs>;
91+
verticalScrollContainer: IgxForOfDirective<any>;
92+
parentVirtDir: IgxForOfDirective<any>;
93+
headerContainer: IgxForOfDirective<any>;
94+
filteredData: any[];
95+
onFilteringDone: EventEmitter<IFilteringExpressionsTree>;
96+
reflow() {
97+
throw new Error('Method not implemented.');
98+
}
99+
markForCheck() {
100+
throw new Error('Method not implemented.');
101+
}
102+
deselectRows(rowIDs: any[]) {
103+
throw new Error('Method not implemented.');
104+
}
105+
selectRows(rowIDs: any[], clearCurrentSelection?: boolean) {
106+
throw new Error('Method not implemented.');
107+
}
108+
triggerRowSelectionChange(newSelectionAsSet: Set<any>, row?: IgxRowComponent<IGridComponent>, event?: Event, headerStatus?: boolean) {
109+
throw new Error('Method not implemented.');
110+
}
111+
getPinnedWidth(takeHidden?: boolean) {
112+
throw new Error('Method not implemented.');
113+
}
114+
moveColumn(column: IgxColumnComponent, dropTarget: IgxColumnComponent) {
115+
throw new Error('Method not implemented.');
116+
}
117+
getCellByKey(rowSelector: any, columnField: string) {
118+
throw new Error('Method not implemented.');
119+
}
120+
trackColumnChanges(index: any, col: any) {
121+
throw new Error('Method not implemented.');
122+
}
123+
checkHeaderCheckboxStatus(headerStatus?: boolean) {
124+
throw new Error('Method not implemented.');
125+
}
126+
toggleColumnVisibility(args: IColumnVisibilityChangedEventArgs) {
127+
throw new Error('Method not implemented.');
128+
}
129+
clearFilter(name?: string) {
130+
throw new Error('Method not implemented.');
131+
}
132+
filter(name: string, value: any, conditionOrExpressionTree?: IFilteringExpressionsTree | IFilteringOperation, ignoreCase?: boolean) {
133+
throw new Error('Method not implemented.');
134+
}
135+
136+
137+
}

projects/igniteui-angular/src/lib/grid-common/grid-interfaces.ts

+10-4
Original file line numberDiff line numberDiff line change
@@ -107,32 +107,38 @@ export interface IToolbarComponent {
107107
onToolbarExporting: EventEmitter<IGridToolbarExportEventArgs>;
108108
}
109109

110+
export interface IComponent {
111+
id: string;
112+
nativeElement: any;
113+
cdr: ChangeDetectorRef;
114+
}
115+
110116
export interface IVirtualizedComponent {
111117
verticalScrollContainer: IgxForOfDirective<any>;
112118
parentVirtDir: IgxForOfDirective<any>;
113119
headerContainer: IgxForOfDirective<any>;
114120
}
115121

116122
export interface IFilterableComponent {
123+
filteredData: any[];
124+
117125
onFilteringDone: EventEmitter<IFilteringExpressionsTree>;
118126

119127
clearFilter(name?: string);
120128
filter(name: string, value: any, conditionOrExpressionTree?: IFilteringOperation | IFilteringExpressionsTree, ignoreCase?: boolean);
121129
}
122130

123-
export interface IGridComponent extends IToolbarComponent,
131+
export interface IGridComponent extends IComponent,
132+
IToolbarComponent,
124133
IVirtualizedComponent,
125134
IFilterableComponent {
126135
columns: IgxColumnComponent[];
127136
data: any[];
128-
filteredData: any[];
129137
filteredSortedData: any[];
130138
primaryKey: string;
131139
rowList: QueryList<any>;
132140
dataRowList: QueryList<IgxRowComponent<IGridComponent>>;
133-
cdr: ChangeDetectorRef;
134141
sortingExpressions: ISortingExpression[];
135-
nativeElement: any;
136142
paging: boolean;
137143
page: number;
138144
perPage: number;

projects/igniteui-angular/src/lib/grid/column-hiding.spec.ts

-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { DebugElement } from '@angular/core';
33
import { async, TestBed } from '@angular/core/testing';
44
import { By } from '@angular/platform-browser';
55
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
6-
import { IgxCheckboxComponent } from '../checkbox/checkbox.component';
76
import { IColumnVisibilityChangedEventArgs, IgxColumnHidingItemDirective } from '../grid-common/column-hiding/column-hiding-item.directive';
87
import { IgxColumnHidingComponent, IgxColumnHidingModule } from '../grid-common/column-hiding/column-hiding.component';
98
import { IgxGridModule, IgxGridComponent } from './index';

projects/igniteui-angular/src/lib/grid/grid-filtering-ui.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { Component, DebugElement, ViewChild } from '@angular/core';
1+
import { Component, ViewChild } from '@angular/core';
22
import { async, discardPeriodicTasks, fakeAsync, TestBed, tick } from '@angular/core/testing';
33
import { By } from '@angular/platform-browser';
44
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
5-
import { Calendar, ICalendarDate } from '../calendar/calendar';
5+
import { Calendar } from '../calendar/calendar';
66
import { IgxInputDirective } from '../directives/input/input.directive';
77
import { IgxGridComponent } from './grid.component';
88
import { IgxGridModule } from './index';

projects/igniteui-angular/src/lib/grid/grid-filtering.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { Component, DebugElement, ViewChild } from '@angular/core';
1+
import { Component, ViewChild } from '@angular/core';
22
import { async, TestBed, fakeAsync, tick } from '@angular/core/testing';
33
import { By } from '@angular/platform-browser';
44
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
5-
import { Calendar, ICalendarDate } from '../calendar/calendar';
5+
import { Calendar } from '../calendar/calendar';
66
import { FilteringLogic, IFilteringExpression } from '../data-operations/filtering-expression.interface';
77
import { IgxGridComponent } from './grid.component';
88
import { IgxGridModule } from './index';

projects/igniteui-angular/src/lib/grid/grid-selection.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Component, OnInit, ViewChild } from '@angular/core';
2-
import { async, TestBed, fakeAsync, tick } from '@angular/core/testing';
2+
import { async, TestBed } from '@angular/core/testing';
33
import { By } from '@angular/platform-browser';
44
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
55
import { Calendar } from '../calendar';

projects/igniteui-angular/src/lib/grid/grid-toolbar.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { IgxCsvExporterOptions, IgxCsvExporterService, IgxExcelExporterOptions,
77
import { IgxGridComponent } from './grid.component';
88
import { IgxGridModule } from './index';
99
import { DisplayDensity } from '../core/utils';
10-
import { UIInteractions, wait } from '../test-utils/ui-interactions.spec';
10+
import { UIInteractions } from '../test-utils/ui-interactions.spec';
1111

1212
describe('IgxGrid - Grid Toolbar', () => {
1313
let fixture;

projects/igniteui-angular/src/lib/grid/grid.component.spec.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@ import { async, TestBed, fakeAsync, tick } from '@angular/core/testing';
33
import { BehaviorSubject, Observable } from 'rxjs';
44
import { By } from '@angular/platform-browser';
55
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
6-
import { IgxGridAPIService } from '../grid-common/api.service';
76
import { IgxGridComponent } from './grid.component';
8-
import { IgxColumnComponent } from './column.component';
7+
import { IgxColumnComponent } from '../grid-common/column.component';
98
import { IForOfState} from '../directives/for-of/for_of.directive';
109
import { IgxGridModule } from './index';
1110
import { IgxNumberFilteringOperand } from '../../public_api';

projects/igniteui-angular/src/lib/grid/grid.crud.spec.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { Component, ViewChild } from '@angular/core';
2-
import { async, fakeAsync, TestBed, tick } from '@angular/core/testing';
2+
import { async, TestBed } from '@angular/core/testing';
33
import { By } from '@angular/platform-browser';
4-
import { IGridEditEventArgs, IgxGridComponent } from './grid.component';
4+
import { IgxGridComponent } from './grid.component';
5+
import { IGridEditEventArgs } from '../grid-common/grid-interfaces';
56
import { IgxGridModule } from './index';
67
import { wait } from '../test-utils/ui-interactions.spec';
78

projects/igniteui-angular/src/lib/grid/grid.initialization.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { AfterViewInit, ChangeDetectorRef, Component, Injectable, OnInit, ViewChild } from '@angular/core';
2-
import { async, fakeAsync, TestBed, tick } from '@angular/core/testing';
2+
import { async, TestBed } from '@angular/core/testing';
33
import { By } from '@angular/platform-browser';
44
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
55
import { BehaviorSubject, Observable } from 'rxjs';

projects/igniteui-angular/src/lib/grid/grid.pinning.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Component, ViewChild } from '@angular/core';
2-
import { async, fakeAsync, TestBed, tick } from '@angular/core/testing';
2+
import { async, TestBed } from '@angular/core/testing';
33
import { By } from '@angular/platform-browser';
44
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
55
import { Calendar } from '../calendar/index';

projects/igniteui-angular/src/lib/grid/grid.search.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { async, TestBed, fakeAsync, tick } from '@angular/core/testing';
1+
import { async, TestBed } from '@angular/core/testing';
22
import { By } from '@angular/platform-browser';
33

44
import { IgxGridComponent } from './grid.component';

projects/igniteui-angular/src/lib/grid/grid.sorting.spec.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
import { Component, ViewChild } from '@angular/core';
22
import { async, TestBed } from '@angular/core/testing';
33
import { By } from '@angular/platform-browser';
4-
import { ISortingExpression, SortingDirection } from '../data-operations/sorting-expression.interface';
5-
import { IgxColumnComponent } from '../grid-common/column.component';
6-
import { IgxGridFilterComponent } from '../grid-common/filtering/grid-filtering.component';
4+
import { SortingDirection } from '../data-operations/sorting-expression.interface';
75
import { IgxGridComponent } from './grid.component';
86
import { IgxGridModule } from './index';
97
import { GridTemplateStrings, ColumnDefinitions } from '../test-utils/template-strings.spec';

0 commit comments

Comments
 (0)