Skip to content

Commit 48702b2

Browse files
committed
chore(*): Add according tests
1 parent 92ecff3 commit 48702b2

File tree

4 files changed

+193
-6
lines changed

4 files changed

+193
-6
lines changed

projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-grid.spec.ts

Lines changed: 119 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import { fakeAsync, TestBed } from '@angular/core/testing';
22
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
33
import { IgxPivotGridModule } from 'igniteui-angular';
44
import { configureTestSuite } from '../../test-utils/configure-suite';
5-
import { IgxPivotGridTestBaseComponent } from '../../test-utils/pivot-grid-samples.spec';
5+
import { GridFunctions, GridSelectionFunctions } from '../../test-utils/grid-functions.spec';
6+
import { IgxPivotGridTestBaseComponent, IgxPivotGridTestComplexHierarchyComponent } from '../../test-utils/pivot-grid-samples.spec';
67

78
describe('Basic IgxPivotGrid #pivotGrid', () => {
89
let fixture;
@@ -38,3 +39,120 @@ describe('Basic IgxPivotGrid #pivotGrid', () => {
3839
expect(cells.last.nativeElement.classList).not.toContain('test');
3940
});
4041
});
42+
43+
describe('IgxPivotGrid complex hierarchy #pivotGrid', () => {
44+
let fixture;
45+
configureTestSuite((() => {
46+
TestBed.configureTestingModule({
47+
declarations: [
48+
IgxPivotGridTestComplexHierarchyComponent
49+
],
50+
imports: [
51+
NoopAnimationsModule, IgxPivotGridModule]
52+
});
53+
}));
54+
55+
beforeEach(fakeAsync(() => {
56+
fixture = TestBed.createComponent(IgxPivotGridTestComplexHierarchyComponent);
57+
fixture.detectChanges();
58+
}));
59+
60+
it('should select/deselect the correct row', () => {
61+
fixture.detectChanges();
62+
const pivotGrid = fixture.componentInstance.pivotGrid;
63+
const pivotRows = GridFunctions.getPivotRows(fixture);
64+
const row = pivotRows[2].componentInstance;
65+
row.selectPivotRow(row.rowDimensionData[1].column);
66+
fixture.detectChanges();
67+
expect(row.selected).toBeTrue();
68+
expect(pivotGrid.selectedRows).not.toBeNull();
69+
expect(pivotGrid.selectedRows.length).toBe(1);
70+
const expected =
71+
{
72+
'All cities': 'All Cities', 'All cities_level': 0,
73+
ProductCategory: 'Bikes', ProductCategory_level: 1,
74+
'Uruguay-AmountOfSale': 242.08, 'Uruguay-UnitsSold': 68
75+
};
76+
expect(pivotGrid.selectedRows[0]).toEqual(expected);
77+
78+
//deselect
79+
row.selectPivotRow(row.rowDimensionData[1].column);
80+
fixture.detectChanges();
81+
expect(row.selected).toBeFalse();
82+
expect(pivotGrid.selectedRows.length).toBe(0);
83+
});
84+
85+
it('should select/deselect the correct group of rows', () => {
86+
fixture.detectChanges();
87+
const pivotGrid = fixture.componentInstance.pivotGrid;
88+
const pivotRows = GridFunctions.getPivotRows(fixture);
89+
const row = pivotRows[2].componentInstance;
90+
row.selectPivotRow(row.rowDimensionData[0].column);
91+
fixture.detectChanges();
92+
for (let i = 0; i < 5; ++i) {
93+
expect(pivotRows[i].componentInstance.selected).toBeTrue();
94+
}
95+
expect(pivotGrid.selectedRows).not.toBeNull();
96+
expect(pivotGrid.selectedRows.length).toBe(5);
97+
const expected =
98+
[
99+
{
100+
AllProducts: 'AllProducts', 'All cities': 'All Cities',
101+
'All cities_level': 0, AllProducts_level: 0, 'Bulgaria-UnitsSold': 774,
102+
'Bulgaria-AmountOfSale': 11509.02, 'USA-UnitsSold': 829, 'USA-AmountOfSale': 44098.85999999999,
103+
'Uruguay-UnitsSold': 524, 'Uruguay-AmountOfSale': 31400.56
104+
}, {
105+
ProductCategory: 'Clothing', 'All cities': 'All Cities',
106+
ProductCategory_level: 1, 'All cities_level': 0, 'Bulgaria-UnitsSold': 774,
107+
'Bulgaria-AmountOfSale': 11509.02, 'USA-UnitsSold': 296, 'USA-AmountOfSale': 14672.72,
108+
'Uruguay-UnitsSold': 456, 'Uruguay-AmountOfSale': 31158.48
109+
}, {
110+
ProductCategory: 'Bikes', 'All cities': 'All Cities',
111+
ProductCategory_level: 1, 'All cities_level': 0,
112+
'Uruguay-UnitsSold': 68, 'Uruguay-AmountOfSale': 242.08
113+
}, {
114+
ProductCategory: 'Accessories', 'All cities': 'All Cities',
115+
ProductCategory_level: 1, 'All cities_level': 0,
116+
'USA-UnitsSold': 293, 'USA-AmountOfSale': 25074.94
117+
}, {
118+
ProductCategory: 'Components', 'All cities': 'All Cities',
119+
ProductCategory_level: 1, 'All cities_level': 0,
120+
'USA-UnitsSold': 240, 'USA-AmountOfSale': 4351.2
121+
}
122+
];
123+
expect(pivotGrid.selectedRows).toEqual(expected);
124+
});
125+
126+
it('should select/deselect the correct column', () => {
127+
fixture.detectChanges();
128+
const pivotGrid = fixture.componentInstance.pivotGrid;
129+
const unitsSold = pivotGrid.getColumnByName('Bulgaria-UnitsSold');
130+
GridFunctions.clickColumnHeaderUI('Bulgaria-UnitsSold', fixture);
131+
GridSelectionFunctions.verifyColumnAndCellsSelected(unitsSold);
132+
});
133+
134+
it('should select/deselect the correct column group', () => {
135+
fixture.detectChanges();
136+
const pivotGrid = fixture.componentInstance.pivotGrid;
137+
const group = GridFunctions.getColGroup(pivotGrid, 'Bulgaria');
138+
const unitsSold = pivotGrid.getColumnByName('Bulgaria-UnitsSold');
139+
const amountOfSale = pivotGrid.getColumnByName('Bulgaria-AmountOfSale');
140+
const unitsSoldUSA = pivotGrid.getColumnByName('USA-UnitsSold');
141+
const amountOfSaleUSA = pivotGrid.getColumnByName('USA-AmountOfSale');
142+
143+
GridFunctions.clickColumnGroupHeaderUI('Bulgaria', fixture);
144+
fixture.detectChanges();
145+
146+
GridSelectionFunctions.verifyColumnSelected(unitsSold);
147+
GridSelectionFunctions.verifyColumnSelected(amountOfSale);
148+
GridSelectionFunctions.verifyColumnGroupSelected(fixture, group);
149+
150+
GridSelectionFunctions.verifyColumnsSelected([unitsSoldUSA, amountOfSaleUSA], false);
151+
152+
GridFunctions.clickColumnGroupHeaderUI('Bulgaria', fixture);
153+
154+
GridSelectionFunctions.verifyColumnSelected(unitsSold, false);
155+
GridSelectionFunctions.verifyColumnSelected(amountOfSale, false);
156+
GridSelectionFunctions.verifyColumnGroupSelected(fixture, group, false);
157+
});
158+
});

projects/igniteui-angular/src/lib/grids/pivot-grid/pivot-row.component.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,7 @@ export class IgxPivotRowComponent extends IgxRowDirective<IgxPivotGridComponent>
6868
if (!this.grid.selectedPivotKeys.get(key)) {
6969
this.grid.selectedPivotKeys.set(key, this.rowData);
7070
}
71-
}
72-
else {
71+
} else {
7372
this.grid.selectedPivotKeys.delete(key);
7473
}
7574
});
@@ -136,7 +135,10 @@ export class IgxPivotRowComponent extends IgxRowDirective<IgxPivotGridComponent>
136135
* @hidden @internal
137136
*/
138137
public selectPivotRow(col: any, event?: any) {
139-
event.stopPropagation();
138+
if (this.grid.rowSelection === 'none') {
139+
return;
140+
}
141+
event?.stopPropagation();
140142
const key = this.getRowDimensionKey(col);
141143
if (this.grid.selectionService.isRowSelected(key)) {
142144
this.grid.selectionService.deselectRow(key, event);

projects/igniteui-angular/src/lib/test-utils/grid-functions.spec.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import { parseDate } from '../core/utils';
2323
import { IgxGridHeaderRowComponent } from '../grids/headers/grid-header-row.component';
2424
import { IgxGridRowComponent } from '../grids/grid/grid-row.component';
2525
import { IgxGridCellComponent } from '../grids/cell.component';
26+
import { IgxPivotRowComponent } from '../grids/pivot-grid/pivot-row.component';
2627

2728
const SUMMARY_LABEL_CLASS = '.igx-grid-summary__label';
2829
const SUMMARY_ROW = 'igx-grid-summary-row';
@@ -155,6 +156,11 @@ export class GridFunctions {
155156
}
156157
}
157158

159+
public static getPivotRows(fix): DebugElement[] {
160+
const rows: DebugElement[] = fix.debugElement.queryAll(By.directive(IgxPivotRowComponent));
161+
return rows;
162+
}
163+
158164
/**
159165
* Focus the grid header
160166
*/

projects/igniteui-angular/src/lib/test-utils/pivot-grid-samples.spec.ts

Lines changed: 63 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
import { Component, ViewChild } from '@angular/core';
22
import { IgxPivotNumericAggregate } from '../grids/pivot-grid/pivot-grid-aggregate';
33
import { IgxPivotGridComponent } from '../grids/pivot-grid/pivot-grid.component';
4-
import { IPivotConfiguration } from '../grids/pivot-grid/pivot-grid.interface';
4+
import { IPivotConfiguration, PivotAggregation } from '../grids/pivot-grid/pivot-grid.interface';
5+
6+
7+
export class IgxTotalSaleAggregate {
8+
public static totalSale: PivotAggregation = (members, data: any) =>
9+
data.reduce((accumulator, value) => accumulator + value.UnitPrice * value.UnitsSold, 0);
10+
}
511

612
@Component({
713
template: `
8-
<igx-pivot-grid #grid [data]="data" [pivotConfiguration]="pivotConfigHierarchy">
14+
<igx-pivot-grid #grid [data]="data" [pivotConfiguration]="pivotConfigHierarchy"
15+
[rowSelection]="'single'" [columnSelection]="'single'">
916
</igx-pivot-grid>`
1017
})
1118
export class IgxPivotGridTestBaseComponent {
@@ -90,3 +97,57 @@ export class IgxPivotGridTestBaseComponent {
9097
public callback = (rowData: any, columnKey: any) => rowData[columnKey] >= 5;
9198
public callback1 = (rowData: any, columnKey: any) => rowData[columnKey] < 5;
9299
}
100+
101+
@Component({
102+
template: `
103+
<igx-pivot-grid #grid [data]="data" [pivotConfiguration]="pivotConfigHierarchy"
104+
[rowSelection]="'single'" [columnSelection]="'single'">
105+
</igx-pivot-grid>`
106+
})
107+
export class IgxPivotGridTestComplexHierarchyComponent extends IgxPivotGridTestBaseComponent {
108+
constructor() {
109+
super();
110+
this.pivotConfigHierarchy = {
111+
columns: [
112+
113+
{
114+
memberName: 'Country',
115+
enabled: true
116+
}
117+
]
118+
,
119+
rows: [{
120+
memberName: 'All cities',
121+
memberFunction: () => 'All Cities',
122+
enabled: true,
123+
childLevel: {
124+
memberName: 'City',
125+
enabled: true
126+
}
127+
}, {
128+
memberFunction: () => 'AllProducts',
129+
memberName: 'AllProducts',
130+
enabled: true,
131+
childLevel:
132+
{
133+
memberFunction: (data) => data.ProductCategory,
134+
memberName: 'ProductCategory',
135+
enabled: true
136+
}
137+
}],
138+
values: [
139+
{
140+
member: 'UnitsSold',
141+
aggregate: IgxPivotNumericAggregate.sum,
142+
enabled: true
143+
},
144+
{
145+
member: 'AmountOfSale',
146+
displayName: 'Amount of Sale',
147+
aggregate: IgxTotalSaleAggregate.totalSale,
148+
enabled: true
149+
}
150+
]
151+
};
152+
}
153+
}

0 commit comments

Comments
 (0)