Skip to content

Commit 34c65fa

Browse files
authored
test: replace Polymer based fixture elements in grid tests (#9112)
1 parent 57d1022 commit 34c65fa

File tree

5 files changed

+111
-231
lines changed

5 files changed

+111
-231
lines changed

packages/grid/test/column.test.js

Lines changed: 18 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { expect } from '@vaadin/chai-plugins';
22
import { fixtureSync, nextFrame, nextRender } from '@vaadin/testing-helpers';
33
import sinon from 'sinon';
44
import '../all-imports.js';
5-
import { html, PolymerElement } from '@polymer/polymer/polymer-element.js';
65
import {
76
flushGrid,
87
getBodyCellContent,
@@ -13,52 +12,30 @@ import {
1312
infiniteDataProvider,
1413
} from './helpers.js';
1514

16-
class GridContainer extends PolymerElement {
17-
static get template() {
18-
return html`
15+
describe('column', () => {
16+
let grid, columns, column, emptyColumn;
17+
18+
beforeEach(() => {
19+
grid = fixtureSync(`
1920
<vaadin-grid id="grid" size="10">
2021
<vaadin-grid-column-group header="group header1">
21-
<vaadin-grid-column
22-
header="header1"
23-
footerRenderer="[[footerRenderer1]]"
24-
renderer="[[cellRenderer]]"
25-
></vaadin-grid-column>
26-
27-
<vaadin-grid-column
28-
header="header2"
29-
footerRenderer="[[footerRenderer2]]"
30-
renderer="[[cellRenderer]]"
31-
></vaadin-grid-column>
22+
<vaadin-grid-column header="header1"></vaadin-grid-column>
23+
<vaadin-grid-column header="header2"></vaadin-grid-column>
3224
</vaadin-grid-column-group>
33-
3425
<vaadin-grid-column id="emptycolumn"></vaadin-grid-column>
3526
</vaadin-grid>
36-
`;
37-
}
38-
39-
footerRenderer1(root) {
40-
root.textContent = 'footer1';
41-
}
42-
43-
footerRenderer2(root) {
44-
root.textContent = 'footer2';
45-
}
46-
47-
cellRenderer(root) {
48-
root.textContent = 'cell';
49-
}
50-
}
51-
52-
customElements.define('grid-container', GridContainer);
53-
54-
describe('column', () => {
55-
let container, column, grid, emptyColumn;
56-
57-
beforeEach(() => {
58-
container = fixtureSync('<grid-container></grid-container>');
59-
grid = container.$.grid;
27+
`);
6028
grid.dataProvider = infiniteDataProvider;
61-
column = grid.querySelector('vaadin-grid-column');
29+
columns = [...grid.querySelectorAll('vaadin-grid-column[header]')];
30+
columns.forEach((col, i) => {
31+
col.renderer = (root) => {
32+
root.textContent = 'cell';
33+
};
34+
col.footerRenderer = (root) => {
35+
root.textContent = `footer${i + 1}`;
36+
};
37+
});
38+
column = columns[0];
6239
emptyColumn = grid.querySelector('#emptycolumn');
6340
flushGrid(grid);
6441
});

packages/grid/test/data-provider.test.js

Lines changed: 55 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { aTimeout, fixtureSync, nextFrame } from '@vaadin/testing-helpers';
33
import sinon from 'sinon';
44
import './data-provider.styles.js';
55
import '../all-imports.js';
6-
import { html, PolymerElement } from '@polymer/polymer/polymer-element.js';
76
import {
87
flushGrid,
98
getBodyCellContent,
@@ -21,59 +20,6 @@ import {
2120
scrollToEnd,
2221
} from './helpers.js';
2322

24-
class WrappedGrid extends PolymerElement {
25-
static get template() {
26-
return html`
27-
<style>
28-
.item {
29-
height: 30px;
30-
}
31-
</style>
32-
<vaadin-grid size="100" id="grid" style="height: 300px;" data-provider="[[dataProvider]]">
33-
<vaadin-grid-column id="col"></vaadin-grid-column>
34-
</vaadin-grid>
35-
`;
36-
}
37-
38-
ready() {
39-
super.ready();
40-
this.$.col.headerRenderer = (root) => {
41-
root.textContent = 'Header';
42-
};
43-
this.$.col.renderer = (root, _col, model) => {
44-
root.textContent = model.item.value;
45-
};
46-
}
47-
}
48-
49-
customElements.define('wrapped-grid', WrappedGrid);
50-
51-
class PageSizeGrid extends PolymerElement {
52-
static get template() {
53-
return html`
54-
<vaadin-grid data-provider="[[dataProvider]]" size="[[size]]" id="grid">
55-
<vaadin-grid-column header="#" path="value"></vaadin-grid-column>
56-
</vaadin-grid>
57-
`;
58-
}
59-
60-
static get properties() {
61-
return {
62-
dataProvider: Object,
63-
size: Number,
64-
};
65-
}
66-
67-
ready() {
68-
super.ready();
69-
this.$.grid.pageSize = 10;
70-
this.size = 200;
71-
this.dataProvider = infiniteDataProvider;
72-
}
73-
}
74-
75-
customElements.define('page-size-grid', PageSizeGrid);
76-
7723
function simulateScrollToStart(grid) {
7824
// Make sure not over scroll more than the delta threshold limit of 10k.
7925
const table = grid.$.table;
@@ -752,24 +698,31 @@ describe('unattached', () => {
752698

753699
describe('page size grid', () => {
754700
it('should render grid rows when setting page-size before size', () => {
755-
const container = fixtureSync('<page-size-grid></page-size-grid>');
756-
const grid = container.$.grid;
701+
const grid = fixtureSync(`
702+
<vaadin-grid>
703+
<vaadin-grid-column header="#" path="value"></vaadin-grid-column>
704+
</vaadin-grid>
705+
`);
706+
grid.pageSize = 10;
707+
grid.size = 200;
708+
grid.dataProvider = infiniteDataProvider;
757709
flushGrid(grid);
758710
expect(getCellContent(getFirstCell(grid)).textContent.trim()).to.equal('foo0');
759711
});
760712
});
761713

762714
describe('wrapped grid', () => {
763-
let container, grid;
715+
let grid;
764716

765717
describe('initial render', () => {
766718
it('should not render rows before columns are defined', () => {
767-
container = fixtureSync('<wrapped-grid></wrapped-grid>');
768-
grid = container.$.grid;
769-
container.dataProvider = sinon.spy(infiniteDataProvider);
770-
if (grid.$) {
771-
expect(grid.$.items.childElementCount).to.equal(0);
772-
}
719+
grid = fixtureSync(`
720+
<vaadin-grid size="100">
721+
<vaadin-grid-column></vaadin-grid-column>
722+
</vaadin-grid>
723+
`);
724+
grid.dataProvider = sinon.spy(infiniteDataProvider);
725+
expect(grid.$.items.childElementCount).to.equal(0);
773726
});
774727
});
775728

@@ -782,41 +735,51 @@ describe('wrapped grid', () => {
782735
}
783736

784737
beforeEach(() => {
785-
container = fixtureSync('<wrapped-grid></wrapped-grid>');
786-
grid = container.$.grid;
787-
container.dataProvider = sinon.spy(infiniteDataProvider);
738+
grid = fixtureSync(`
739+
<vaadin-grid size="100" style="height: 300px">
740+
<vaadin-grid-column></vaadin-grid-column>
741+
</vaadin-grid>
742+
`);
743+
const column = grid.querySelector('vaadin-grid-column');
744+
column.headerRenderer = (root) => {
745+
root.textContent = 'Header';
746+
};
747+
column.renderer = (root, _col, model) => {
748+
root.textContent = model.item.value;
749+
};
750+
grid.dataProvider = sinon.spy(infiniteDataProvider);
788751
flushGrid(grid);
789752
});
790753

791754
it('should call dataProvider for first page', async () => {
792-
container.dataProvider.resetHistory();
755+
grid.dataProvider.resetHistory();
793756
grid.pageSize = 100;
794757
await aTimeout(loadDebounceTime);
795-
expect(container.dataProvider.callCount).to.eql(1);
796-
expect(container.dataProvider.firstCall.args[0].page).to.eql(0);
758+
expect(grid.dataProvider.callCount).to.eql(1);
759+
expect(grid.dataProvider.firstCall.args[0].page).to.eql(0);
797760
});
798761

799762
it('should call dataProvider multiple times to load all items', async () => {
800-
container.dataProvider.resetHistory();
763+
grid.dataProvider.resetHistory();
801764
grid.style.fontSize = '12px';
802765
grid.pageSize = 5;
803766
flushGrid(grid);
804767
await aTimeout(loadDebounceTime);
805768
// Assuming grid has about 18 items
806-
expect(container.dataProvider.callCount).to.be.above(2);
807-
for (let i = 0; i < container.dataProvider.callCount; i++) {
808-
expect(container.dataProvider.getCall(i).args[0].page).to.eql(i);
769+
expect(grid.dataProvider.callCount).to.be.above(2);
770+
for (let i = 0; i < grid.dataProvider.callCount; i++) {
771+
expect(grid.dataProvider.getCall(i).args[0].page).to.eql(i);
809772
}
810773
});
811774

812775
it('should always load visible items', async () => {
813776
grid.pageSize = 10;
814777
await aTimeout(loadDebounceTime);
815-
container.dataProvider.resetHistory();
778+
grid.dataProvider.resetHistory();
816779
await simulateScrollToEnd(grid);
817780
await aTimeout(loadDebounceTime);
818781
// 9 is last page out of 100 items / 10 per page.
819-
const pages = container.dataProvider.getCalls().map((call) => call.args[0].page);
782+
const pages = grid.dataProvider.getCalls().map((call) => call.args[0].page);
820783
expect(pages).to.contain.members([7, 8, 9]);
821784
});
822785

@@ -825,36 +788,36 @@ describe('wrapped grid', () => {
825788
// Wait first to initially load first pages.
826789
await aTimeout(loadDebounceTime);
827790
await simulateScrollToEnd(grid);
828-
container.dataProvider.resetHistory();
791+
grid.dataProvider.resetHistory();
829792
await simulateScrollToStart(grid);
830793
await aTimeout(loadDebounceTime);
831-
const pages = container.dataProvider.getCalls().map((call) => call.args[0].page);
794+
const pages = grid.dataProvider.getCalls().map((call) => call.args[0].page);
832795
expect(pages).not.to.contain(0);
833796
});
834797

835-
it('should bind item to templates', () => {
836-
container.dataProvider = infiniteDataProvider;
798+
it('should render cell content elements', () => {
799+
grid.dataProvider = infiniteDataProvider;
837800
expect(getCellContent(getFirstCell(grid)).textContent.trim()).to.equal('foo0');
838801
});
839802

840803
it('should clear item cache', async () => {
841-
container.dataProvider = sinon.spy(infiniteDataProvider);
804+
grid.dataProvider = sinon.spy(infiniteDataProvider);
842805
await aTimeout(loadDebounceTime * 2);
843-
expect(container.dataProvider.called).to.be.true;
806+
expect(grid.dataProvider.called).to.be.true;
844807
const oldFirstItem = getItemForIndex(0);
845808
expect(oldFirstItem).to.be.ok;
846-
container.dataProvider.resetHistory();
809+
grid.dataProvider.resetHistory();
847810
grid.clearCache();
848811
await aTimeout(loadDebounceTime * 2);
849-
expect(container.dataProvider.called).to.be.true;
812+
expect(grid.dataProvider.called).to.be.true;
850813
expect(getItemForIndex(0)).to.be.ok;
851814
expect(getItemForIndex(0)).not.to.equal(oldFirstItem);
852815
});
853816

854817
it('should update sub properties on clearCache', () => {
855818
const data = [{ value: 'foo' }];
856819
grid.size = 1;
857-
container.dataProvider = (_, cb) => cb(data);
820+
grid.dataProvider = (_, cb) => cb(data);
858821
expect(getCellContent(getFirstCell(grid)).textContent.trim()).to.equal('foo');
859822
data[0].value = 'bar';
860823
grid.clearCache();
@@ -873,14 +836,14 @@ describe('wrapped grid', () => {
873836
});
874837

875838
it('should be in loading state when dataProvider changes', () => {
876-
container.dataProvider = () => {};
839+
grid.dataProvider = () => {};
877840
expect(grid.loading).to.be.true;
878841
});
879842

880843
it('should be in loading state when fetching new data', (done) => {
881844
let raf;
882845

883-
container.dataProvider = (params, callback) => {
846+
grid.dataProvider = (params, callback) => {
884847
expect(grid.loading).to.be.true;
885848
callback(Array(params.pageSize));
886849
expect(grid.loading).not.to.be.true;
@@ -900,7 +863,7 @@ describe('wrapped grid', () => {
900863

901864
it('should be in loading state when cache is cleared', () => {
902865
let cb;
903-
container.dataProvider = (_, callback) => {
866+
grid.dataProvider = (_, callback) => {
904867
cb = callback;
905868
};
906869
cb(Array(25));
@@ -910,27 +873,27 @@ describe('wrapped grid', () => {
910873
});
911874

912875
it('should set loading attribute to rows', () => {
913-
container.dataProvider = () => {};
876+
grid.dataProvider = () => {};
914877
expect(getRows(grid.$.items)[0].hasAttribute('loading')).to.be.true;
915878
});
916879

917880
it('should add loading to cells part attribute', () => {
918-
container.dataProvider = () => {};
881+
grid.dataProvider = () => {};
919882
const row = getRows(grid.$.items)[0];
920883
getRowCells(row).forEach((cell) => {
921884
expect(cell.getAttribute('part')).to.contain('loading-row-cell');
922885
});
923886
});
924887

925888
it('should clear loading attribute from rows when data received', () => {
926-
container.dataProvider = (_, callback) => {
889+
grid.dataProvider = (_, callback) => {
927890
callback([{}]);
928891
};
929892
expect(getRows(grid.$.items)[0].hasAttribute('loading')).to.be.false;
930893
});
931894

932895
it('should remove loading from cells part attribute when data received', () => {
933-
container.dataProvider = (_, callback) => {
896+
grid.dataProvider = (_, callback) => {
934897
callback([{}]);
935898
};
936899
const row = getRows(grid.$.items)[0];
@@ -941,7 +904,7 @@ describe('wrapped grid', () => {
941904

942905
it('should clear loading attribute from rows when scrolled to previously loaded rows', () => {
943906
grid.pageSize = 1;
944-
container.dataProvider = (params, callback) => {
907+
grid.dataProvider = (params, callback) => {
945908
if (params.page === 0) {
946909
callback([{ value: 'loaded' }]);
947910
}

0 commit comments

Comments
 (0)