Skip to content

Commit d0a32c8

Browse files
committed
Add tests
1 parent c633968 commit d0a32c8

File tree

2 files changed

+106
-0
lines changed

2 files changed

+106
-0
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import { describe, expect, it } from "vitest";
2+
import { fireEvent, render, screen } from "@testing-library/react";
3+
import { Table } from "./Table";
4+
import { createChangeHandler } from "@/plugins/mui/common.test";
5+
6+
describe("Table", () => {
7+
const mockColumns = [
8+
{ field: "id", headerName: "ID" },
9+
{ field: "name", headerName: "Name" },
10+
];
11+
const mockRows = [{ id: 1, name: "MockRow" }];
12+
const paginationModel = { page: 1, pageSize: 10 };
13+
14+
it("should render the Table component", () => {
15+
render(
16+
<Table
17+
columns={mockColumns}
18+
rows={mockRows}
19+
type="Table"
20+
id="tableId"
21+
onChange={() => {}}
22+
paginationModel={paginationModel}
23+
pageSizeOptions={[10, 25, 50]}
24+
/>,
25+
);
26+
expect(screen.getByRole("grid")).toBeInTheDocument();
27+
expect(screen.getByText("MockRow")).toBeInTheDocument();
28+
});
29+
30+
it("should handle row click", () => {
31+
const { recordedEvents, onChange } = createChangeHandler();
32+
render(
33+
<Table
34+
columns={mockColumns}
35+
rows={mockRows}
36+
type="Table"
37+
id="tableId"
38+
onChange={onChange}
39+
/>,
40+
);
41+
42+
const row = screen.getByRole("row", { name: /1/ });
43+
fireEvent.click(row);
44+
45+
expect(recordedEvents.length).toBe(1);
46+
expect(recordedEvents[0].componentType).toBe("Table");
47+
expect(recordedEvents[0].id).toBe("tableId");
48+
expect(recordedEvents[0].property).toBe("value");
49+
expect(recordedEvents[0].value).toEqual(mockRows[0]);
50+
});
51+
52+
it("should render with other props correctly", () => {
53+
render(
54+
<Table
55+
columns={mockColumns}
56+
rows={mockRows}
57+
type="Table"
58+
id="tableId"
59+
onChange={() => {}}
60+
ariaLabel="Test Table"
61+
autoPageSize={true}
62+
checkboxSelection={true}
63+
density="compact"
64+
disableColumnFilter={true}
65+
loading={true}
66+
/>,
67+
);
68+
expect(screen.getByTestId("data-grid-test-id")).toHaveAttribute(
69+
"aria-label",
70+
"Test Table",
71+
);
72+
});
73+
74+
it("should not render if no columns are provided", () => {
75+
render(
76+
<Table rows={mockRows} type="Table" id="tableId" onChange={() => {}} />,
77+
);
78+
expect(screen.queryByRole("grid")).not.toBeInTheDocument();
79+
});
80+
});
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from chartlets.components.charts.table import Table
2+
from tests.component_test import make_base
3+
4+
5+
class TableTest(make_base(Table)):
6+
def test_is_json_serializable(self):
7+
columns = [
8+
{"field": "id", "headerName": "ID"},
9+
{"field": "firstName", "headerName": "First Name"},
10+
{"field": "lastName", "headerName": "Last Name"},
11+
{"field": "age", "headerName": "Age"},
12+
]
13+
rows = [
14+
{"id": 1, "firstName": "John", "lastName": "Doe", "age": 30},
15+
{"id": 2, "firstName": "Jane", "lastName": "Smith", "age": 25},
16+
]
17+
self.assert_is_json_serializable(
18+
self.cls(rows=rows, columns=columns, id="my-table", checkboxSelection=True),
19+
{
20+
"type": "Table",
21+
"id": "my-table",
22+
"rows": rows,
23+
"columns": columns,
24+
"checkboxSelection": True,
25+
},
26+
)

0 commit comments

Comments
 (0)