Skip to content

Commit 0b48b0c

Browse files
committed
[DataTables] Add controller.test.ts
1 parent 1fbc1eb commit 0b48b0c

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
/*
2+
* This file is part of the Symfony package.
3+
*
4+
* (c) Fabien Potencier <fabien@symfony.com>
5+
*
6+
* For the full copyright and license information, please view the LICENSE
7+
* file that was distributed with this source code.
8+
*/
9+
10+
import { Application } from '@hotwired/stimulus';
11+
import { waitFor } from '@testing-library/dom';
12+
import DataTableController from '../src/controller';
13+
14+
const startDataTableTest = async (tableHtml: string): Promise<{ table: HTMLTableElement; dataTable: DataTable<any> }> => {
15+
let dataTable: DataTable<any> | null = null;
16+
17+
document.body.addEventListener('datatables:pre-connect', () => {
18+
document.body.classList.add('pre-connected');
19+
});
20+
21+
document.body.addEventListener('datatables:connect', (event: any) => {
22+
dataTable = event.detail.table;
23+
document.body.classList.add('connected');
24+
});
25+
26+
document.body.innerHTML = tableHtml;
27+
28+
const tableElement = document.querySelector('table');
29+
if (!tableElement) {
30+
throw 'Missing table element';
31+
}
32+
33+
await waitFor(() => {
34+
expect(document.body).toHaveClass('pre-connected');
35+
expect(document.body).toHaveClass('connected');
36+
});
37+
38+
if (!dataTable) {
39+
throw 'Missing DataTable instance';
40+
}
41+
42+
return { table: tableElement, dataTable };
43+
};
44+
45+
describe('DataTableController', () => {
46+
beforeAll(() => {
47+
const application = Application.start();
48+
application.register('datatables', DataTableController);
49+
});
50+
51+
afterEach(() => {
52+
document.body.innerHTML = '';
53+
});
54+
55+
it('connect without data', async () => {
56+
const { dataTable } = await startDataTableTest(`
57+
<table
58+
data-testid="datatable"
59+
data-controller="datatables"
60+
data-datatables-view-value="&#x7B;&quot;columns&quot;&#x3A;&#x20;&#x5B;&#x7B;&quot;title&quot;&#x3A;&#x20;&quot;First&#x20;name&quot;&#x7D;&#x2C;&#x7B;&quot;title&quot;&#x3A;&#x20;&quot;Last&#x20;name&quot;&#x7D;&#x5D;&#x7D;"
61+
></table>
62+
`);
63+
64+
expect(dataTable.data().toArray()).toEqual([]);
65+
});
66+
67+
it('connect with data', async () => {
68+
const { dataTable } = await startDataTableTest(`
69+
<table
70+
data-testid="datatable"
71+
data-controller="datatables"
72+
data-datatables-view-value="&#x7B;&quot;columns&quot;&#x3A;&#x20;&#x5B;&#x7B;&quot;title&quot;&#x3A;&#x20;&quot;First&#x20;name&quot;&#x7D;&#x2C;&#x7B;&quot;title&quot;&#x3A;&#x20;&quot;Last&#x20;name&quot;&#x7D;&#x5D;&#x2C;&#x20;&quot;data&quot;&#x3A;&#x20;&#x5B;&#x5B;&quot;John&quot;&#x2C;&#x20;&quot;Doe&quot;&#x5D;&#x2C;&#x20;&#x5B;&quot;Jane&quot;&#x2C;&#x20;&quot;Smith&quot;&#x5D;&#x5D;&#x7D;"
73+
></table>
74+
`);
75+
76+
expect(dataTable.data().toArray()).toEqual([
77+
['John', 'Doe'],
78+
['Jane', 'Smith'],
79+
]);
80+
});
81+
});

0 commit comments

Comments
 (0)